Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47163ab0 authored by Jeff Davidson's avatar Jeff Davidson Committed by android-build-merger
Browse files

Merge changes I00a67352,Ifd2df776 am: 935c4c5f am: 5c5ad543

am: b4a04474

Change-Id: I02ed07fad3c119e2cf8ccc531993ec3b820833e9
parents 70987f24 b4a04474
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -38,7 +38,7 @@ public class ShowInstallAppNotificationReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
    public void onReceive(Context context, Intent intent) {
        String pkgName = intent.getStringExtra(EXTRA_PACKAGE_NAME);
        String pkgName = intent.getStringExtra(EXTRA_PACKAGE_NAME);


        if (!UiccProfile.isPackageInstalled(context, pkgName)) {
        if (!UiccProfile.isPackageBundled(context, pkgName)) {
            InstallCarrierAppUtils.showNotification(context, pkgName);
            InstallCarrierAppUtils.showNotification(context, pkgName);
            InstallCarrierAppUtils.registerPackageInstallReceiver(context);
            InstallCarrierAppUtils.registerPackageInstallReceiver(context);
        }
        }
+75 −21
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@ import android.os.Message;
import android.os.PersistableBundle;
import android.os.PersistableBundle;
import android.os.Registrant;
import android.os.Registrant;
import android.os.RegistrantList;
import android.os.RegistrantList;
import android.os.UserManager;
import android.preference.PreferenceManager;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.provider.Settings;
import android.telephony.CarrierConfigManager;
import android.telephony.CarrierConfigManager;
@@ -145,15 +146,28 @@ public class UiccProfile extends IccCard {
            new ContentObserver(new Handler()) {
            new ContentObserver(new Handler()) {
                @Override
                @Override
                public void onChange(boolean selfChange) {
                public void onChange(boolean selfChange) {
                    synchronized (mLock) {
                        mContext.getContentResolver().unregisterContentObserver(this);
                        mContext.getContentResolver().unregisterContentObserver(this);
                    for (String pkgName : getUninstalledCarrierPackages()) {
                        mProvisionCompleteContentObserverRegistered = false;
                        InstallCarrierAppUtils.showNotification(mContext, pkgName);
                        showCarrierAppNotificationsIfPossible();
                        InstallCarrierAppUtils.registerPackageInstallReceiver(mContext);
                    }
                }
            };
    private boolean mProvisionCompleteContentObserverRegistered;

    private final BroadcastReceiver mUserUnlockReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            synchronized (mLock) {
                mContext.unregisterReceiver(this);
                mUserUnlockReceiverRegistered = false;
                showCarrierAppNotificationsIfPossible();
            }
            }
        }
        }
    };
    };
    private boolean mUserUnlockReceiverRegistered;


    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    private final BroadcastReceiver mCarrierConfigChangedReceiver = new BroadcastReceiver() {
        @Override
        @Override
        public void onReceive(Context context, Intent intent) {
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
            if (intent.getAction().equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
@@ -258,7 +272,7 @@ public class UiccProfile extends IccCard {


        IntentFilter intentfilter = new IntentFilter();
        IntentFilter intentfilter = new IntentFilter();
        intentfilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
        intentfilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
        c.registerReceiver(mReceiver, intentfilter);
        c.registerReceiver(mCarrierConfigChangedReceiver, intentfilter);
    }
    }


    /**
    /**
@@ -276,11 +290,22 @@ public class UiccProfile extends IccCard {
            unregisterAllAppEvents();
            unregisterAllAppEvents();
            unregisterCurrAppEvents();
            unregisterCurrAppEvents();


            if (mProvisionCompleteContentObserverRegistered) {
                mContext.getContentResolver()
                        .unregisterContentObserver(mProvisionCompleteContentObserver);
                mProvisionCompleteContentObserverRegistered = false;
            }

            if (mUserUnlockReceiverRegistered) {
                mContext.unregisterReceiver(mUserUnlockReceiver);
                mUserUnlockReceiverRegistered = false;
            }

            InstallCarrierAppUtils.hideAllNotifications(mContext);
            InstallCarrierAppUtils.hideAllNotifications(mContext);
            InstallCarrierAppUtils.unregisterPackageInstallReceiver(mContext);
            InstallCarrierAppUtils.unregisterPackageInstallReceiver(mContext);


            mCi.unregisterForOffOrNotAvailable(mHandler);
            mCi.unregisterForOffOrNotAvailable(mHandler);
            mContext.unregisterReceiver(mReceiver);
            mContext.unregisterReceiver(mCarrierConfigChangedReceiver);


            if (mCatService != null) mCatService.dispose();
            if (mCatService != null) mCatService.dispose();
            for (UiccCardApplication app : mUiccApplications) {
            for (UiccCardApplication app : mUiccApplications) {
@@ -1166,10 +1191,13 @@ public class UiccProfile extends IccCard {
        }
        }
    }
    }


    static boolean isPackageInstalled(Context context, String pkgName) {
    static boolean isPackageBundled(Context context, String pkgName) {
        PackageManager pm = context.getPackageManager();
        PackageManager pm = context.getPackageManager();
        try {
        try {
            pm.getPackageInfo(pkgName, PackageManager.GET_ACTIVITIES);
            // We also match hidden-until-installed apps. The assumption here is that some other
            // mechanism (like CarrierAppUtils) would automatically enable such an app, so we
            // shouldn't prompt the user about it.
            pm.getApplicationInfo(pkgName, PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS);
            if (DBG) log(pkgName + " is installed.");
            if (DBG) log(pkgName + " is installed.");
            return true;
            return true;
        } catch (PackageManager.NameNotFoundException e) {
        } catch (PackageManager.NameNotFoundException e) {
@@ -1196,21 +1224,47 @@ public class UiccProfile extends IccCard {


        synchronized (mLock) {
        synchronized (mLock) {
            mCarrierPrivilegeRegistrants.notifyRegistrants();
            mCarrierPrivilegeRegistrants.notifyRegistrants();
            boolean isProvisioned = Settings.Global.getInt(
            boolean isProvisioned = isProvisioned();
                    mContext.getContentResolver(),
            boolean isUnlocked = isUserUnlocked();
                    Settings.Global.DEVICE_PROVISIONED, 1) == 1;
            // Only show dialog if the phone is through with Setup Wizard and is unlocked.
            // Only show dialog if the phone is through with Setup Wizard.  Otherwise, wait for
            // Otherwise, wait for completion and unlock and show a notification instead.
            // completion and show a notification instead
            if (isProvisioned && isUnlocked) {
            if (isProvisioned) {
                for (String pkgName : getUninstalledCarrierPackages()) {
                for (String pkgName : getUninstalledCarrierPackages()) {
                    promptInstallCarrierApp(pkgName);
                    promptInstallCarrierApp(pkgName);
                }
                }
            } else {
            } else {
                if (!isProvisioned) {
                    final Uri uri = Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED);
                    final Uri uri = Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED);
                    mContext.getContentResolver().registerContentObserver(
                    mContext.getContentResolver().registerContentObserver(
                            uri,
                            uri,
                            false,
                            false,
                            mProvisionCompleteContentObserver);
                            mProvisionCompleteContentObserver);
                    mProvisionCompleteContentObserverRegistered = true;
                }
                if (!isUnlocked) {
                    mContext.registerReceiver(
                            mUserUnlockReceiver, new IntentFilter(Intent.ACTION_USER_UNLOCKED));
                    mUserUnlockReceiverRegistered = true;
                }
            }
        }
    }

    private boolean isProvisioned() {
        return Settings.Global.getInt(
                mContext.getContentResolver(),
                Settings.Global.DEVICE_PROVISIONED, 1) == 1;
    }

    private boolean isUserUnlocked() {
        return mContext.getSystemService(UserManager.class).isUserUnlocked();
    }

    private void showCarrierAppNotificationsIfPossible() {
        if (isProvisioned() && isUserUnlocked()) {
            for (String pkgName : getUninstalledCarrierPackages()) {
                InstallCarrierAppUtils.showNotification(mContext, pkgName);
                InstallCarrierAppUtils.registerPackageInstallReceiver(mContext);
            }
            }
        }
        }
    }
    }
@@ -1234,7 +1288,7 @@ public class UiccProfile extends IccCard {
        for (UiccAccessRule accessRule : accessRules) {
        for (UiccAccessRule accessRule : accessRules) {
            String certHexString = accessRule.getCertificateHexString().toUpperCase();
            String certHexString = accessRule.getCertificateHexString().toUpperCase();
            String pkgName = certPackageMap.get(certHexString);
            String pkgName = certPackageMap.get(certHexString);
            if (!TextUtils.isEmpty(pkgName) && !isPackageInstalled(mContext, pkgName)) {
            if (!TextUtils.isEmpty(pkgName) && !isPackageBundled(mContext, pkgName)) {
                uninstalledCarrierPackages.add(pkgName);
                uninstalledCarrierPackages.add(pkgName);
            }
            }
        }
        }
+2 −0
Original line number Original line Diff line number Diff line
@@ -265,6 +265,8 @@ public class ContextFixture implements TestFixture<Context> {
                return Context.APP_OPS_SERVICE;
                return Context.APP_OPS_SERVICE;
            } else if (serviceClass == TelecomManager.class) {
            } else if (serviceClass == TelecomManager.class) {
                return Context.TELECOM_SERVICE;
                return Context.TELECOM_SERVICE;
            } else if (serviceClass == UserManager.class) {
                return Context.USER_SERVICE;
            }
            }
            return super.getSystemServiceName(serviceClass);
            return super.getSystemServiceName(serviceClass);
        }
        }