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

Commit 46730fc7 authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Fix handling of application disabled state.

Change-Id: I617b76e89eeb75437b384b92f1205bb00b15bb70
parent 3bee5af8
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -2786,6 +2786,9 @@ public class PackageParser {
        // For use by package manager to keep track of where it has done dexopt.
        public boolean mDidDexOpt;
        
        // User set enabled state.
        public int mSetEnabled = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;

        // Additional data supplied by callers.
        public Object mExtras;
        
@@ -3012,6 +3015,12 @@ public class PackageParser {
    }

    private static boolean copyNeeded(int flags, Package p, Bundle metaData) {
        if (p.mSetEnabled != PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
            boolean enabled = p.mSetEnabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
            if (p.applicationInfo.enabled != enabled) {
                return true;
            }
        }
        if ((flags & PackageManager.GET_META_DATA) != 0
                && (metaData != null || p.mAppMetaData != null)) {
            return true;
@@ -3045,6 +3054,7 @@ public class PackageParser {
        if (!sCompatibilityModeEnabled) {
            ai.disableCompatibilityMode();
        }
        ai.enabled = p.mSetEnabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
        return ai;
    }

+19 −7
Original line number Diff line number Diff line
@@ -1495,6 +1495,7 @@ class PackageManagerService extends IPackageManager.Stub {
                ps.pkg.applicationInfo.publicSourceDir = ps.resourcePathString;
                ps.pkg.applicationInfo.sourceDir = ps.codePathString;
                ps.pkg.applicationInfo.dataDir = getDataPathForPackage(ps.pkg).getPath();
                ps.pkg.mSetEnabled = ps.enabled;
            }
            return generatePackageInfo(ps.pkg, flags);
        }
@@ -6875,6 +6876,7 @@ class PackageManagerService extends IPackageManager.Stub {
                    return;
                }
                pkgSetting.enabled = newState;
                pkgSetting.pkg.mSetEnabled = newState;
            } else {
                // We're dealing with a component level state change
                switch (newState) {
@@ -8261,6 +8263,7 @@ class PackageManagerService extends IPackageManager.Stub {

        private void insertPackageSettingLP(PackageSetting p, PackageParser.Package pkg) {
            p.pkg = pkg;
            pkg.mSetEnabled = p.enabled;
            String codePath = pkg.applicationInfo.sourceDir;
            String resourcePath = pkg.applicationInfo.publicSourceDir;
            // Update code path if needed
@@ -9486,6 +9489,9 @@ class PackageManagerService extends IPackageManager.Stub {
        }

        boolean isEnabledLP(ComponentInfo componentInfo, int flags) {
            if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) {
                return true;
            }
            final PackageSetting packageSettings = mPackages.get(componentInfo.packageName);
            if (Config.LOGV) {
                Log.v(TAG, "isEnabledLock - packageName = " + componentInfo.packageName
@@ -9501,14 +9507,20 @@ class PackageManagerService extends IPackageManager.Stub {
                    Debug.waitForDebugger();
                    Log.i(TAG, "We will crash!");
                }
                return false;
            }
            if (packageSettings.enabled == COMPONENT_ENABLED_STATE_DISABLED
                    || (packageSettings.pkg != null && !packageSettings.pkg.applicationInfo.enabled
                            && packageSettings.enabled == COMPONENT_ENABLED_STATE_DEFAULT)) {
                return false;
            }
            if (packageSettings.enabledComponents.contains(componentInfo.name)) {
                return true;
            }
            if (packageSettings.disabledComponents.contains(componentInfo.name)) {
                return false;
            }
            return ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0)
                   || ((componentInfo.enabled
                        && ((packageSettings.enabled == COMPONENT_ENABLED_STATE_ENABLED)
                            || (componentInfo.applicationInfo.enabled
                                && packageSettings.enabled != COMPONENT_ENABLED_STATE_DISABLED))
                        && !packageSettings.disabledComponents.contains(componentInfo.name))
                       || packageSettings.enabledComponents.contains(componentInfo.name));
            return componentInfo.enabled;
        }
    }