Fix handling of application disabled state.
Change-Id: I617b76e89eeb75437b384b92f1205bb00b15bb70
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.
|
// For use by package manager to keep track of where it has done dexopt.
|
||||||
public boolean mDidDexOpt;
|
public boolean mDidDexOpt;
|
||||||
|
|
||||||
|
// User set enabled state.
|
||||||
|
public int mSetEnabled = PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
|
||||||
|
|
||||||
// Additional data supplied by callers.
|
// Additional data supplied by callers.
|
||||||
public Object mExtras;
|
public Object mExtras;
|
||||||
|
|
||||||
@@ -3012,6 +3015,12 @@ public class PackageParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean copyNeeded(int flags, Package p, Bundle metaData) {
|
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
|
if ((flags & PackageManager.GET_META_DATA) != 0
|
||||||
&& (metaData != null || p.mAppMetaData != null)) {
|
&& (metaData != null || p.mAppMetaData != null)) {
|
||||||
return true;
|
return true;
|
||||||
@@ -3045,6 +3054,7 @@ public class PackageParser {
|
|||||||
if (!sCompatibilityModeEnabled) {
|
if (!sCompatibilityModeEnabled) {
|
||||||
ai.disableCompatibilityMode();
|
ai.disableCompatibilityMode();
|
||||||
}
|
}
|
||||||
|
ai.enabled = p.mSetEnabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
|
||||||
return ai;
|
return ai;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1495,6 +1495,7 @@ class PackageManagerService extends IPackageManager.Stub {
|
|||||||
ps.pkg.applicationInfo.publicSourceDir = ps.resourcePathString;
|
ps.pkg.applicationInfo.publicSourceDir = ps.resourcePathString;
|
||||||
ps.pkg.applicationInfo.sourceDir = ps.codePathString;
|
ps.pkg.applicationInfo.sourceDir = ps.codePathString;
|
||||||
ps.pkg.applicationInfo.dataDir = getDataPathForPackage(ps.pkg).getPath();
|
ps.pkg.applicationInfo.dataDir = getDataPathForPackage(ps.pkg).getPath();
|
||||||
|
ps.pkg.mSetEnabled = ps.enabled;
|
||||||
}
|
}
|
||||||
return generatePackageInfo(ps.pkg, flags);
|
return generatePackageInfo(ps.pkg, flags);
|
||||||
}
|
}
|
||||||
@@ -6875,6 +6876,7 @@ class PackageManagerService extends IPackageManager.Stub {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pkgSetting.enabled = newState;
|
pkgSetting.enabled = newState;
|
||||||
|
pkgSetting.pkg.mSetEnabled = newState;
|
||||||
} else {
|
} else {
|
||||||
// We're dealing with a component level state change
|
// We're dealing with a component level state change
|
||||||
switch (newState) {
|
switch (newState) {
|
||||||
@@ -8261,6 +8263,7 @@ class PackageManagerService extends IPackageManager.Stub {
|
|||||||
|
|
||||||
private void insertPackageSettingLP(PackageSetting p, PackageParser.Package pkg) {
|
private void insertPackageSettingLP(PackageSetting p, PackageParser.Package pkg) {
|
||||||
p.pkg = pkg;
|
p.pkg = pkg;
|
||||||
|
pkg.mSetEnabled = p.enabled;
|
||||||
String codePath = pkg.applicationInfo.sourceDir;
|
String codePath = pkg.applicationInfo.sourceDir;
|
||||||
String resourcePath = pkg.applicationInfo.publicSourceDir;
|
String resourcePath = pkg.applicationInfo.publicSourceDir;
|
||||||
// Update code path if needed
|
// Update code path if needed
|
||||||
@@ -9486,6 +9489,9 @@ class PackageManagerService extends IPackageManager.Stub {
|
|||||||
}
|
}
|
||||||
|
|
||||||
boolean isEnabledLP(ComponentInfo componentInfo, int flags) {
|
boolean isEnabledLP(ComponentInfo componentInfo, int flags) {
|
||||||
|
if ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
final PackageSetting packageSettings = mPackages.get(componentInfo.packageName);
|
final PackageSetting packageSettings = mPackages.get(componentInfo.packageName);
|
||||||
if (Config.LOGV) {
|
if (Config.LOGV) {
|
||||||
Log.v(TAG, "isEnabledLock - packageName = " + componentInfo.packageName
|
Log.v(TAG, "isEnabledLock - packageName = " + componentInfo.packageName
|
||||||
@@ -9501,14 +9507,20 @@ class PackageManagerService extends IPackageManager.Stub {
|
|||||||
Debug.waitForDebugger();
|
Debug.waitForDebugger();
|
||||||
Log.i(TAG, "We will crash!");
|
Log.i(TAG, "We will crash!");
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
return ((flags&PackageManager.GET_DISABLED_COMPONENTS) != 0)
|
if (packageSettings.enabled == COMPONENT_ENABLED_STATE_DISABLED
|
||||||
|| ((componentInfo.enabled
|
|| (packageSettings.pkg != null && !packageSettings.pkg.applicationInfo.enabled
|
||||||
&& ((packageSettings.enabled == COMPONENT_ENABLED_STATE_ENABLED)
|
&& packageSettings.enabled == COMPONENT_ENABLED_STATE_DEFAULT)) {
|
||||||
|| (componentInfo.applicationInfo.enabled
|
return false;
|
||||||
&& packageSettings.enabled != COMPONENT_ENABLED_STATE_DISABLED))
|
}
|
||||||
&& !packageSettings.disabledComponents.contains(componentInfo.name))
|
if (packageSettings.enabledComponents.contains(componentInfo.name)) {
|
||||||
|| 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