diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 5bd3ae50bcfb1..9d4e679cbd6db 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -3485,6 +3485,10 @@ false + + + + true diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index f3d443106d4ff..5f767537f40b2 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3403,4 +3403,7 @@ + + + diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index c2d679858925c..f30372b1b237a 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -21161,6 +21161,8 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); CarrierAppUtils.disableCarrierAppsUntilPrivileged(mContext.getOpPackageName(), this, mContext.getContentResolver(), UserHandle.USER_SYSTEM); + disableSkuSpecificApps(); + // Read the compatibilty setting when the system is ready. boolean compatibilityModeEnabled = android.provider.Settings.Global.getInt( mContext.getContentResolver(), @@ -21948,6 +21950,28 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } } + //TODO: b/111402650 + private void disableSkuSpecificApps() { + if (!mIsUpgrade && !mFirstBoot) { + return; + } + String apkList[] = mContext.getResources().getStringArray( + R.array.config_disableApksUnlessMatchedSku_apk_list); + String skuArray[] = mContext.getResources().getStringArray( + R.array.config_disableApkUnlessMatchedSku_skus_list); + if (ArrayUtils.isEmpty(apkList)) { + return; + } + String sku = SystemProperties.get("ro.boot.hardware.sku"); + if (!TextUtils.isEmpty(sku) && ArrayUtils.contains(skuArray, sku)) { + return; + } + for (String packageName : apkList) { + setSystemAppHiddenUntilInstalled(packageName, true); + setSystemAppInstallState(packageName, false, ActivityManager.getCurrentUser()); + } + } + private void dumpProto(FileDescriptor fd) { final ProtoOutputStream proto = new ProtoOutputStream(fd);