aboutsummaryrefslogtreecommitdiff
path: root/src/java/com/android/internal/telephony/uicc/InstallCarrierAppTrampolineActivity.java
blob: 2c2926622c694cf85d908184d3ffc78735355644 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
 * Copyright (C) 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.internal.telephony.uicc;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.util.Log;

import java.util.concurrent.TimeUnit;

/**
 * Trampoline activity used to start the full screen dialog that is shown when a SIM is inserted
 * and requires a carrier app download
 */
public class InstallCarrierAppTrampolineActivity extends Activity {
    private static final String LOG_TAG = "CarrierAppInstall";
    private static final int INSTALL_CARRIER_APP_DIALOG_REQUEST = 1;

    // TODO(b/73648962): Move DOWNLOAD_RESULT and CARRIER_NAME to a shared location
    /**
     * This must remain in sync with
     * {@link com.android.simappdialog.InstallCarrierAppActivity#DOWNLOAD_RESULT}
     */
    private static final int DOWNLOAD_RESULT = 2;

    /**
     * This must remain in sync with
     * {@link com.android.simappdialog.InstallCarrierAppActivity#BUNDLE_KEY_CARRIER_NAME}
     */
    private static final String CARRIER_NAME = "carrier_name";

    /** Bundle key for the name of the package to be downloaded */
    private static final String BUNDLE_KEY_PACKAGE_NAME = "package_name";

    /** Returns intent used to start this activity */
    public static Intent get(Context context, String packageName) {
        Intent intent = new Intent(context, InstallCarrierAppTrampolineActivity.class);
        intent.putExtra(BUNDLE_KEY_PACKAGE_NAME, packageName);
        return intent;
    }

    private String mPackageName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        if (intent != null) {
            mPackageName = intent.getStringExtra(BUNDLE_KEY_PACKAGE_NAME);
        }

        // If this is the first activity creation, show notification after delay regardless of
        // result code, but only if the app is not installed.
        if (savedInstanceState == null) {
            long sleepTimeMillis = Settings.Global.getLong(getContentResolver(),
                    Settings.Global.INSTALL_CARRIER_APP_NOTIFICATION_SLEEP_MILLIS,
                    TimeUnit.HOURS.toMillis(24));
            Log.d(LOG_TAG, "Sleeping carrier app install notification for : " + sleepTimeMillis
                    + " millis");
            InstallCarrierAppUtils.showNotificationIfNotInstalledDelayed(
                    this,
                    mPackageName,
                    sleepTimeMillis);
        }

        // Display dialog activity if available
        Intent showDialogIntent = new Intent();
        ComponentName dialogComponentName = ComponentName.unflattenFromString(
                Resources.getSystem().getString(
                        com.android.internal.R.string.config_carrierAppInstallDialogComponent));
        showDialogIntent.setComponent(dialogComponentName);
        String appName = InstallCarrierAppUtils.getAppNameFromPackageName(this, mPackageName);
        if (!TextUtils.isEmpty(appName)) {
            showDialogIntent.putExtra(CARRIER_NAME, appName);
        }

        if (showDialogIntent.resolveActivity(getPackageManager()) == null) {
            Log.d(LOG_TAG, "Could not resolve activity for installing the carrier app");
            finishNoAnimation();
        } else {
            startActivityForResult(showDialogIntent, INSTALL_CARRIER_APP_DIALOG_REQUEST);
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == INSTALL_CARRIER_APP_DIALOG_REQUEST) {
            if (resultCode == DOWNLOAD_RESULT) {
                startActivity(InstallCarrierAppUtils.getPlayStoreIntent(mPackageName));
            }
            finishNoAnimation();
        }
    }

    private void finishNoAnimation() {
        finish();
        overridePendingTransition(0, 0);
    }
}