Merge "[pm] fix NPE in deletePackageX"

This commit is contained in:
Songchun Fan
2021-12-03 18:16:06 +00:00
committed by Android (Google) Code Review
4 changed files with 25 additions and 16 deletions

View File

@@ -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();
}

View File

@@ -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);

View File

@@ -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)) {

View File

@@ -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.