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

Commit f0ccb480 authored by Rambo Wang's avatar Rambo Wang
Browse files

CPT: always use same PackageManager flags to query installed packages

CPT applies the flags MATCH_DISABLED_UNTIL_USED_COMPONENTS and MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS when query installed packages
during initialization. But it doesn't apply the same flags when handling packages change. Without those flags, when carrier app falls into bundled version, CPT may fail to find it and report no carrier apps nor carrier privileges.

To fix it, the same flags are always applied, both during initialization
and after any package change events.

Bug: 231643903
Test: atest CarrierPrivilegesTrackerTest
Test: Telephony sanity test (Activation, Calling, SMS, Data, Switching)
Merged-In: Id2e66c27ac2c8a4dbe9b23de303b9ea8f01a4606
Change-Id: Id2e66c27ac2c8a4dbe9b23de303b9ea8f01a4606
(cherry picked from commit 9a5ce8ad)
parent 34666400
Loading
Loading
Loading
Loading
+13 −9
Original line number Diff line number Diff line
@@ -112,6 +112,17 @@ public class CarrierPrivilegesTracker extends Handler {
     */
    private static final long CLEAR_UICC_RULES_DELAY_MILLIS = TimeUnit.SECONDS.toMillis(30);

    /**
     * PackageManager flags used to query installed packages.
     * Include DISABLED_UNTIL_USED components. This facilitates cases where a carrier app
     * is disabled by default, and some other component wants to enable it when it has
     * gained carrier privileges (as an indication that a matching SIM has been inserted).
     */
    private static final int INSTALLED_PACKAGES_QUERY_FLAGS =
            PackageManager.GET_SIGNING_CERTIFICATES
                    | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
                    | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS;

    /**
     * Action to register a Registrant with this Tracker.
     * obj: Registrant that will be notified of Carrier Privileged UID changes.
@@ -552,7 +563,7 @@ public class CarrierPrivilegesTracker extends Handler {

        PackageInfo pkg;
        try {
            pkg = mPackageManager.getPackageInfo(pkgName, PackageManager.GET_SIGNING_CERTIFICATES);
            pkg = mPackageManager.getPackageInfo(pkgName, INSTALLED_PACKAGES_QUERY_FLAGS);
        } catch (NameNotFoundException e) {
            Rlog.e(TAG, "Error getting installed package: " + pkgName, e);
            return;
@@ -624,16 +635,9 @@ public class CarrierPrivilegesTracker extends Handler {
    }

    private void refreshInstalledPackageCache() {
        // Include DISABLED_UNTIL_USED components. This facilitates cases where a carrier app
        // is disabled by default, and some other component wants to enable it when it has
        // gained carrier privileges (as an indication that a matching SIM has been inserted).
        int flags =
                PackageManager.GET_SIGNING_CERTIFICATES
                        | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
                        | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS;
        List<PackageInfo> installedPackages =
                mPackageManager.getInstalledPackagesAsUser(
                        flags, UserHandle.SYSTEM.getIdentifier());
                        INSTALLED_PACKAGES_QUERY_FLAGS, UserHandle.SYSTEM.getIdentifier());
        for (PackageInfo pkg : installedPackages) {
            updateCertsForPackage(pkg);
            // This may be unnecessary before initialization, but invalidate the cache all the time
+2 −3
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@

package com.android.internal.telephony;

import static android.content.pm.PackageManager.GET_SIGNING_CERTIFICATES;
import static android.os.UserHandle.SYSTEM;
import static android.telephony.CarrierConfigManager.EXTRA_SLOT_INDEX;
import static android.telephony.CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX;
@@ -200,7 +199,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
            pkg.signatures = new Signature[] {new Signature(pkgCertInfo.cert)};

            when(mPackageManager.getPackageInfo(
                    eq(pkgCertInfo.pkgName), eq(GET_SIGNING_CERTIFICATES)))
                    eq(pkgCertInfo.pkgName), eq(PM_FLAGS)))
                    .thenReturn(pkg);
            when(mPackageManager.getPackageUidAsUser(
                    eq(pkgCertInfo.pkgName), eq(pkgCertInfo.userInfo.id)))
@@ -814,7 +813,7 @@ public class CarrierPrivilegesTrackerTest extends TelephonyTest {
        // Update PACKAGE_1 to have no signatures
        PackageInfo pkg = new PackageInfo();
        pkg.packageName = PACKAGE_1;
        when(mPackageManager.getPackageInfo(eq(PACKAGE_1), eq(GET_SIGNING_CERTIFICATES)))
        when(mPackageManager.getPackageInfo(eq(PACKAGE_1), eq(PM_FLAGS)))
                .thenReturn(pkg);

        sendPackageChangedIntent(Intent.ACTION_PACKAGE_ADDED, PACKAGE_1);