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

Commit e87aae05 authored by Cody Kesting's avatar Cody Kesting
Browse files

Update Carrier Privileged UIDs on Package Uninstall.

When packages are uninstalled from the device, they must be removed from
CarrierPrivilegeTracker's cache of installed packages. Additionally, the
privileged UIDs must be reevaluated as the removed package may have
previously been privileged.

Bug: 147391402
Test: Tested on crosshatch build
Change-Id: I7cb6d59a0eaebbbb9b0eda2130397f0b64dfd17d
parent f911bc10
Loading
Loading
Loading
Loading
+29 −2
Original line number Diff line number Diff line
@@ -106,6 +106,12 @@ public class CarrierPrivilegesTracker extends Handler {
     */
    private static final int ACTION_PACKAGE_ADDED_OR_REPLACED = 5;

    /**
     * Action for tracking when a package is uninstalled on the device.
     * obj: String package name that was installed on the device.
     */
    private static final int ACTION_PACKAGE_REMOVED = 6;

    private final Context mContext;
    private final Phone mPhone;
    private final CarrierConfigManager mCarrierConfigManager;
@@ -161,7 +167,12 @@ public class CarrierPrivilegesTracker extends Handler {
                            break;
                        }
                        case Intent.ACTION_PACKAGE_ADDED: // fall through
                        case Intent.ACTION_PACKAGE_REPLACED: {
                        case Intent.ACTION_PACKAGE_REPLACED: // fall through
                        case Intent.ACTION_PACKAGE_REMOVED: {
                            int what =
                                    (action.equals(Intent.ACTION_PACKAGE_REMOVED))
                                            ? ACTION_PACKAGE_REMOVED
                                            : ACTION_PACKAGE_ADDED_OR_REPLACED;
                            Uri uri = intent.getData();
                            String pkgName = (uri != null) ? uri.getSchemeSpecificPart() : null;
                            if (TextUtils.isEmpty(pkgName)) {
@@ -169,7 +180,7 @@ public class CarrierPrivilegesTracker extends Handler {
                                return;
                            }

                            sendMessage(obtainMessage(ACTION_PACKAGE_ADDED_OR_REPLACED, pkgName));
                            sendMessage(obtainMessage(what, pkgName));
                            break;
                        }
                    }
@@ -192,6 +203,7 @@ public class CarrierPrivilegesTracker extends Handler {
        filter.addAction(TelephonyManager.ACTION_SIM_APPLICATION_STATE_CHANGED);
        filter.addAction(Intent.ACTION_PACKAGE_ADDED);
        filter.addAction(Intent.ACTION_PACKAGE_REPLACED);
        filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
        mContext.registerReceiver(mIntentReceiver, filter);

        mRegistrantList = new RegistrantList();
@@ -226,6 +238,11 @@ public class CarrierPrivilegesTracker extends Handler {
                handlePackageAddedOrReplaced(pkgName);
                break;
            }
            case ACTION_PACKAGE_REMOVED: {
                String pkgName = (String) msg.obj;
                handlePackageRemoved(pkgName);
                break;
            }
            default: {
                Log.e(TAG, "Received unknown msg type: " + msg.what);
                break;
@@ -318,6 +335,16 @@ public class CarrierPrivilegesTracker extends Handler {
        maybeUpdatePrivilegedUidsAndNotifyRegistrants();
    }

    private void handlePackageRemoved(String pkgName) {
        if (mInstalledPackageCerts.remove(pkgName) == null) {
            Log.e(TAG, "Unknown package was uninstalled: " + pkgName);
            return;
        }
        mCachedUids.remove(pkgName);

        maybeUpdatePrivilegedUidsAndNotifyRegistrants();
    }

    private void maybeUpdateCertsAndNotifyRegistrants(
            Set<String> currentCerts, Set<String> updatedCerts) {
        if (!currentCerts.equals(updatedCerts)) {