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

Commit b0b561e7 authored by Song Chun Fan's avatar Song Chun Fan Committed by Android (Google) Code Review
Browse files

Merge "Clean component settings while updating an app" into main

parents b487e625 d2a63e18
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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) {
+23 −0
Original line number Diff line number Diff line
@@ -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