Merge "[pm] fix NPE in deletePackageX"
This commit is contained in:
@@ -251,20 +251,29 @@ final class DeletePackageHelper {
|
||||
|
||||
if (priorUserStates != null) {
|
||||
synchronized (mPm.mLock) {
|
||||
for (int i = 0; i < allUsers.length; i++) {
|
||||
TempUserState priorUserState = priorUserStates.get(allUsers[i]);
|
||||
int enabledState = priorUserState.enabledState;
|
||||
PackageSetting pkgSetting = mPm.getPackageSettingForMutation(packageName);
|
||||
pkgSetting.setEnabled(enabledState, allUsers[i],
|
||||
priorUserState.lastDisableAppCaller);
|
||||
|
||||
PackageSetting pkgSetting = mPm.getPackageSettingForMutation(packageName);
|
||||
if (pkgSetting != null) {
|
||||
AndroidPackage aPkg = pkgSetting.getPkg();
|
||||
boolean pkgEnabled = aPkg != null && aPkg.isEnabled();
|
||||
if (!reEnableStub && priorUserState.installed
|
||||
&& ((enabledState == COMPONENT_ENABLED_STATE_DEFAULT && pkgEnabled)
|
||||
|| enabledState == COMPONENT_ENABLED_STATE_ENABLED)) {
|
||||
reEnableStub = true;
|
||||
for (int i = 0; i < allUsers.length; i++) {
|
||||
TempUserState priorUserState = priorUserStates.get(allUsers[i]);
|
||||
int enabledState = priorUserState.enabledState;
|
||||
pkgSetting.setEnabled(enabledState, allUsers[i],
|
||||
priorUserState.lastDisableAppCaller);
|
||||
if (!reEnableStub && priorUserState.installed
|
||||
&& (
|
||||
(enabledState == COMPONENT_ENABLED_STATE_DEFAULT && pkgEnabled)
|
||||
|| enabledState == COMPONENT_ENABLED_STATE_ENABLED)) {
|
||||
reEnableStub = true;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// This should not happen. If priorUserStates != null, we are uninstalling
|
||||
// an update of a system app. In that case, mPm.mSettings.getPackageLpr()
|
||||
// should return a non-null value for the target packageName because
|
||||
// restoreDisabledSystemPackageLIF() is called during deletePackageLIF().
|
||||
Slog.w(TAG, "Missing PackageSetting after uninstalling the update for"
|
||||
+ " system app: " + packageName + ". This should not happen.");
|
||||
}
|
||||
mPm.mSettings.writeAllUsersPackageRestrictionsLPr();
|
||||
}
|
||||
|
||||
@@ -126,13 +126,13 @@ final class InitAndSystemPackageHelper {
|
||||
return null;
|
||||
}
|
||||
|
||||
public OverlayConfig setUpSystemPackages(
|
||||
public OverlayConfig initPackages(
|
||||
WatchedArrayMap<String, PackageSetting> packageSettings, int[] userIds,
|
||||
long startTime) {
|
||||
PackageParser2 packageParser = mPm.mInjector.getScanningCachingPackageParser();
|
||||
|
||||
ExecutorService executorService = ParallelPackageParser.makeExecutorService();
|
||||
// Prepare apex package info before scanning APKs, these information are needed when
|
||||
// Prepare apex package info before scanning APKs, this information is needed when
|
||||
// scanning apk in apex.
|
||||
mPm.mApexManager.scanApexPackagesTraced(packageParser, executorService);
|
||||
|
||||
@@ -289,7 +289,7 @@ final class InitAndSystemPackageHelper {
|
||||
long currentTime, PackageParser2 packageParser, ExecutorService executorService) {
|
||||
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "scanDir [" + scanDir.getAbsolutePath() + "]");
|
||||
try {
|
||||
mInstallPackageHelper.installSystemPackagesFromDir(scanDir, parseFlags, scanFlags,
|
||||
mInstallPackageHelper.installPackagesFromDir(scanDir, parseFlags, scanFlags,
|
||||
currentTime, packageParser, executorService);
|
||||
} finally {
|
||||
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
|
||||
|
||||
@@ -3720,7 +3720,7 @@ final class InstallPackageHelper {
|
||||
}
|
||||
|
||||
@GuardedBy({"mPm.mInstallLock", "mPm.mLock"})
|
||||
public void installSystemPackagesFromDir(File scanDir, int parseFlags, int scanFlags,
|
||||
public void installPackagesFromDir(File scanDir, int parseFlags, int scanFlags,
|
||||
long currentTime, PackageParser2 packageParser, ExecutorService executorService) {
|
||||
final File[] files = scanDir.listFiles();
|
||||
if (ArrayUtils.isEmpty(files)) {
|
||||
|
||||
@@ -1975,7 +1975,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
mIsEngBuild, mIsUserDebugBuild, mIncrementalVersion);
|
||||
|
||||
final int[] userIds = mUserManager.getUserIds();
|
||||
mOverlayConfig = mInitAndSystemPackageHelper.setUpSystemPackages(packageSettings,
|
||||
mOverlayConfig = mInitAndSystemPackageHelper.initPackages(packageSettings,
|
||||
userIds, startTime);
|
||||
|
||||
// Resolve the storage manager.
|
||||
|
||||
Reference in New Issue
Block a user