From b23a9210417d090fdbd39a07a2b9ec285a6333f2 Mon Sep 17 00:00:00 2001 From: Sooraj Sasindran Date: Wed, 5 Feb 2020 17:17:26 -0800 Subject: Use FLAG_UPDATED_SYSTEM_APP Use FLAG_UPDATED_SYSTEM_APP find if an app is updated system app instead of MATCH_FACTORY_ONLY Bug: 148308979 Test: Unit test for CarrierAppUtils and system test to verify fi is not getting uninstalled Merged-In: I1991e98bb1edb7d0628a7011df7488fbf5de3579 Change-Id: I1991e98bb1edb7d0628a7011df7488fbf5de3579 --- .../internal/telephony/CarrierAppUtils.java | 63 +++++----------------- 1 file changed, 13 insertions(+), 50 deletions(-) (limited to 'telephony/common') diff --git a/telephony/common/com/android/internal/telephony/CarrierAppUtils.java b/telephony/common/com/android/internal/telephony/CarrierAppUtils.java index 3c1e707ab1dd..4af19b5489ca 100644 --- a/telephony/common/com/android/internal/telephony/CarrierAppUtils.java +++ b/telephony/common/com/android/internal/telephony/CarrierAppUtils.java @@ -127,6 +127,14 @@ public final class CarrierAppUtils { return userContext.getContentResolver(); } + private static boolean isUpdatedSystemApp(ApplicationInfo ai) { + if ((ai.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) { + return true; + } + + return false; + } + /** * Disable carrier apps until they are privileged * Must be public b/c framework unit tests can't access package-private methods. @@ -138,7 +146,7 @@ public final class CarrierAppUtils { ContentResolver contentResolver, int userId, ArraySet systemCarrierAppsDisabledUntilUsed, ArrayMap> systemCarrierAssociatedAppsDisabledUntilUsed) { - List candidates = getDefaultNotUpdatedCarrierAppCandidatesHelper( + List candidates = getDefaultCarrierAppCandidatesHelper( packageManager, userId, systemCarrierAppsDisabledUntilUsed); if (candidates == null || candidates.isEmpty()) { return; @@ -180,7 +188,7 @@ public final class CarrierAppUtils { if (hasPrivileges) { // Only update enabled state for the app on /system. Once it has been // updated we shouldn't touch it. - if (enabledSetting + if (!isUpdatedSystemApp(ai) && enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT || enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED @@ -232,7 +240,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 (enabledSetting + if (!isUpdatedSystemApp(ai) && enabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT && (ai.flags & ApplicationInfo.FLAG_INSTALLED) != 0) { Log.i(TAG, "Update state(" + packageName @@ -363,31 +371,6 @@ public final class CarrierAppUtils { return apps; } - private static List getDefaultNotUpdatedCarrierAppCandidatesHelper( - IPackageManager packageManager, - int userId, - ArraySet systemCarrierAppsDisabledUntilUsed) { - if (systemCarrierAppsDisabledUntilUsed == null) { - return null; - } - - int size = systemCarrierAppsDisabledUntilUsed.size(); - if (size == 0) { - return null; - } - - List 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> getDefaultCarrierAssociatedAppsHelper( IPackageManager packageManager, int userId, @@ -400,11 +383,11 @@ public final class CarrierAppUtils { systemCarrierAssociatedAppsDisabledUntilUsed.valueAt(i); for (int j = 0; j < associatedAppPackages.size(); j++) { ApplicationInfo ai = - getApplicationInfoIfNotUpdatedSystemApp( + getApplicationInfoIfSystemApp( 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) { + if (ai != null && !isUpdatedSystemApp(ai)) { List appList = associatedApps.get(carrierAppPackage); if (appList == null) { appList = new ArrayList<>(); @@ -417,26 +400,6 @@ 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, -- cgit v1.2.3