Loading telephony/common/com/android/internal/telephony/CarrierAppUtils.java +68 −16 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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( Loading @@ -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) { Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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<>(); Loading @@ -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, Loading @@ -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) { Loading Loading
telephony/common/com/android/internal/telephony/CarrierAppUtils.java +68 −16 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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( Loading @@ -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) { Loading @@ -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 Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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<>(); Loading @@ -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, Loading @@ -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) { Loading