am 46730fc7: Fix handling of application disabled state.
Merge commit '46730fc78388607fd562044cbaaa26ffc9f65337' into gingerbread-plus-aosp * commit '46730fc78388607fd562044cbaaa26ffc9f65337': Fix handling of application disabled state.
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
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));
|
||||
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 componentInfo.enabled;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user