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

Commit 3bbd8f5d authored by Sooraj Sasindran's avatar Sooraj Sasindran Committed by Android (Google) Code Review
Browse files

Merge "Do not use hidden enabledSetting"

parents f8e29c1d 07f4639c
Loading
Loading
Loading
Loading
+68 −16
Original line number Diff line number Diff line
@@ -27,10 +27,10 @@ import android.os.RemoteException;
import android.os.UserHandle;
import android.permission.IPermissionManager;
import android.provider.Settings;
import android.util.Log;
import android.telephony.TelephonyManager;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
@@ -141,8 +141,8 @@ public final class CarrierAppUtils {
            ContentResolver contentResolver, int userId,
            ArraySet<String> systemCarrierAppsDisabledUntilUsed,
            ArrayMap<String, List<String>> systemCarrierAssociatedAppsDisabledUntilUsed) {
        List<ApplicationInfo> candidates = getDefaultCarrierAppCandidatesHelper(packageManager,
                userId, systemCarrierAppsDisabledUntilUsed);
        List<ApplicationInfo> candidates = getDefaultNotUpdatedCarrierAppCandidatesHelper(
                packageManager, userId, systemCarrierAppsDisabledUntilUsed);
        if (candidates == null || candidates.isEmpty()) {
            return;
        }
@@ -178,15 +178,16 @@ public final class CarrierAppUtils {
                    }
                }

                int enabledSetting = packageManager.getApplicationEnabledSetting(packageName,
                        userId);
                if (hasPrivileges) {
                    // Only update enabled state for the app on /system. Once it has been
                    // updated we shouldn't touch it.
                    if (!ai.isUpdatedSystemApp()
                            && (ai.enabledSetting
                    if (enabledSetting
                            == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
                            || ai.enabledSetting
                            || enabledSetting
                            == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
                            || (ai.flags & ApplicationInfo.FLAG_INSTALLED) == 0)) {
                            || (ai.flags & ApplicationInfo.FLAG_INSTALLED) == 0) {
                        Log.i(TAG, "Update state(" + packageName + "): ENABLED for user "
                                + userId);
                        packageManager.setSystemAppInstallState(
@@ -204,9 +205,12 @@ public final class CarrierAppUtils {
                    // Also enable any associated apps for this carrier app.
                    if (associatedAppList != null) {
                        for (ApplicationInfo associatedApp : associatedAppList) {
                            if (associatedApp.enabledSetting
                            int associatedAppEnabledSetting =
                                    packageManager.getApplicationEnabledSetting(
                                    associatedApp.packageName, userId);
                            if (associatedAppEnabledSetting
                                    == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
                                    || associatedApp.enabledSetting
                                    || associatedAppEnabledSetting
                                    == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED
                                    || (associatedApp.flags
                                    & ApplicationInfo.FLAG_INSTALLED) == 0) {
@@ -231,8 +235,7 @@ public final class CarrierAppUtils {
                } else {  // No carrier privileges
                    // Only update enabled state for the app on /system. Once it has been
                    // updated we shouldn't touch it.
                    if (!ai.isUpdatedSystemApp()
                            && ai.enabledSetting
                    if (enabledSetting
                            == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
                            && (ai.flags & ApplicationInfo.FLAG_INSTALLED) != 0) {
                        Log.i(TAG, "Update state(" + packageName
@@ -249,7 +252,10 @@ public final class CarrierAppUtils {
                    if (!hasRunOnce) {
                        if (associatedAppList != null) {
                            for (ApplicationInfo associatedApp : associatedAppList) {
                                if (associatedApp.enabledSetting
                                int associatedAppEnabledSetting =
                                        packageManager.getApplicationEnabledSetting(
                                        associatedApp.packageName, userId);
                                if (associatedAppEnabledSetting
                                        == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT
                                        && (associatedApp.flags
                                        & ApplicationInfo.FLAG_INSTALLED) != 0) {
@@ -360,6 +366,31 @@ public final class CarrierAppUtils {
        return apps;
    }

    private static List<ApplicationInfo> getDefaultNotUpdatedCarrierAppCandidatesHelper(
            IPackageManager packageManager,
            int userId,
            ArraySet<String> systemCarrierAppsDisabledUntilUsed) {
        if (systemCarrierAppsDisabledUntilUsed == null) {
            return null;
        }

        int size = systemCarrierAppsDisabledUntilUsed.size();
        if (size == 0) {
            return null;
        }

        List<ApplicationInfo> apps = new ArrayList<>(size);
        for (int i = 0; i < size; i++) {
            String packageName = systemCarrierAppsDisabledUntilUsed.valueAt(i);
            ApplicationInfo ai =
                    getApplicationInfoIfNotUpdatedSystemApp(packageManager, userId, packageName);
            if (ai != null) {
                apps.add(ai);
            }
        }
        return apps;
    }

    private static Map<String, List<ApplicationInfo>> getDefaultCarrierAssociatedAppsHelper(
            IPackageManager packageManager,
            int userId,
@@ -372,11 +403,11 @@ public final class CarrierAppUtils {
                    systemCarrierAssociatedAppsDisabledUntilUsed.valueAt(i);
            for (int j = 0; j < associatedAppPackages.size(); j++) {
                ApplicationInfo ai =
                        getApplicationInfoIfSystemApp(
                        getApplicationInfoIfNotUpdatedSystemApp(
                                packageManager, userId, associatedAppPackages.get(j));
                // Only update enabled state for the app on /system. Once it has been updated we
                // shouldn't touch it.
                if (ai != null && !ai.isUpdatedSystemApp()) {
                if (ai != null) {
                    List<ApplicationInfo> appList = associatedApps.get(carrierAppPackage);
                    if (appList == null) {
                        appList = new ArrayList<>();
@@ -389,6 +420,26 @@ public final class CarrierAppUtils {
        return associatedApps;
    }

    @Nullable
    private static ApplicationInfo getApplicationInfoIfNotUpdatedSystemApp(
            IPackageManager packageManager,
            int userId,
            String packageName) {
        try {
            ApplicationInfo ai = packageManager.getApplicationInfo(packageName,
                    PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
                            | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
                            | PackageManager.MATCH_SYSTEM_ONLY
                            | PackageManager.MATCH_FACTORY_ONLY, userId);
            if (ai != null) {
                return ai;
            }
        } catch (RemoteException e) {
            Log.w(TAG, "Could not reach PackageManager", e);
        }
        return null;
    }

    @Nullable
    private static ApplicationInfo getApplicationInfoIfSystemApp(
            IPackageManager packageManager,
@@ -397,8 +448,9 @@ public final class CarrierAppUtils {
        try {
            ApplicationInfo ai = packageManager.getApplicationInfo(packageName,
                    PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
                    | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS, userId);
            if (ai != null && ai.isSystemApp()) {
                    | PackageManager.MATCH_HIDDEN_UNTIL_INSTALLED_COMPONENTS
                    | PackageManager.MATCH_SYSTEM_ONLY, userId);
            if (ai != null) {
                return ai;
            }
        } catch (RemoteException e) {