Loading services/core/java/com/android/server/pm/InstallPackageHelper.java +6 −0 Original line number Diff line number Diff line Loading @@ -576,6 +576,12 @@ final class InstallPackageHelper { mApexManager.registerApkInApex(pkg); } if ((mPm.isDeviceUpgrading() && pkgSetting.isSystem()) || isReplace) { for (int userId : mPm.mUserManager.getUserIds()) { pkgSetting.restoreComponentSettings(userId); } } // Don't add keysets for APEX as their package settings are not persisted and will // result in orphaned keysets. if ((scanFlags & SCAN_AS_APEX) == 0) { Loading services/core/java/com/android/server/pm/PackageSetting.java +23 −0 Original line number Diff line number Diff line Loading @@ -1112,6 +1112,29 @@ public class PackageSetting extends SettingBase implements PackageStateInternal return changed; } void restoreComponentSettings(int userId) { PackageUserStateImpl state = modifyUserStateComponents(userId, true, true); WatchedArraySet<String> enabledComponents = state.getEnabledComponentsNoCopy(); WatchedArraySet<String> disabledComponents = state.getDisabledComponentsNoCopy(); boolean changed = false; for (int i = enabledComponents.size() - 1; i >= 0; i--) { if (!AndroidPackageUtils.hasComponentClassName(pkg, enabledComponents.valueAt(i))) { enabledComponents.removeAt(i); changed = true; } } for (int i = disabledComponents.size() - 1; i >= 0; i--) { if (!AndroidPackageUtils.hasComponentClassName(pkg, disabledComponents.valueAt(i))) { disabledComponents.removeAt(i); changed = true; } } if (changed) { onChanged(); } } int getCurrentEnabledStateLPr(String componentName, int userId) { PackageUserStateInternal state = readUserState(userId); if (state.getEnabledComponentsNoCopy() != null Loading Loading
services/core/java/com/android/server/pm/InstallPackageHelper.java +6 −0 Original line number Diff line number Diff line Loading @@ -576,6 +576,12 @@ final class InstallPackageHelper { mApexManager.registerApkInApex(pkg); } if ((mPm.isDeviceUpgrading() && pkgSetting.isSystem()) || isReplace) { for (int userId : mPm.mUserManager.getUserIds()) { pkgSetting.restoreComponentSettings(userId); } } // Don't add keysets for APEX as their package settings are not persisted and will // result in orphaned keysets. if ((scanFlags & SCAN_AS_APEX) == 0) { Loading
services/core/java/com/android/server/pm/PackageSetting.java +23 −0 Original line number Diff line number Diff line Loading @@ -1112,6 +1112,29 @@ public class PackageSetting extends SettingBase implements PackageStateInternal return changed; } void restoreComponentSettings(int userId) { PackageUserStateImpl state = modifyUserStateComponents(userId, true, true); WatchedArraySet<String> enabledComponents = state.getEnabledComponentsNoCopy(); WatchedArraySet<String> disabledComponents = state.getDisabledComponentsNoCopy(); boolean changed = false; for (int i = enabledComponents.size() - 1; i >= 0; i--) { if (!AndroidPackageUtils.hasComponentClassName(pkg, enabledComponents.valueAt(i))) { enabledComponents.removeAt(i); changed = true; } } for (int i = disabledComponents.size() - 1; i >= 0; i--) { if (!AndroidPackageUtils.hasComponentClassName(pkg, disabledComponents.valueAt(i))) { disabledComponents.removeAt(i); changed = true; } } if (changed) { onChanged(); } } int getCurrentEnabledStateLPr(String componentName, int userId) { PackageUserStateInternal state = readUserState(userId); if (state.getEnabledComponentsNoCopy() != null Loading