diff options
author | 2020-01-08 09:37:36 +0000 | |
---|---|---|
committer | 2020-01-08 09:37:36 +0000 | |
commit | 005c68cf669b92c240d22d271191f6a1402053bb (patch) | |
tree | b2bf23a209ab245050dd64e1428756050752672c | |
parent | c18efd1f4ddd341fcb536debde9f9942c3b124b7 (diff) | |
parent | 5067ae3d595d3c634539f0d0e5409e0f0e392619 (diff) |
Merge "Add more packages to Settings#mInstallerPackages."
-rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 14 | ||||
-rw-r--r-- | services/core/java/com/android/server/pm/Settings.java | 36 |
2 files changed, 26 insertions, 24 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 70550ee27b8e..6bd9c4847a77 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -13452,9 +13452,7 @@ public class PackageManagerService extends IPackageManager.Stub // Okay! targetPackageSetting.setInstallerPackageName(installerPackageName); - if (installerPackageName != null) { - mSettings.mInstallerPackages.add(installerPackageName); - } + mSettings.addInstallerPackageNames(targetPackageSetting.installSource); scheduleWriteSettingsLocked(); } } @@ -15160,7 +15158,8 @@ public class PackageManagerService extends IPackageManager.Stub Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "updateSettings"); final String pkgName = pkg.getPackageName(); - final String installerPackageName = installArgs.installSource.installerPackageName; + final InstallSource installSource = installArgs.installSource; + final String installerPackageName = installSource.installerPackageName; final int[] installedForUsers = res.origUsers; final int installReason = installArgs.installReason; @@ -15171,7 +15170,7 @@ public class PackageManagerService extends IPackageManager.Stub // For system-bundled packages, we assume that installing an upgraded version // of the package implies that the user actually wants to run that new code, // so we enable the package. - PackageSetting ps = mSettings.mPackages.get(pkgName); + final PackageSetting ps = mSettings.mPackages.get(pkgName); final int userId = installArgs.user.getIdentifier(); if (ps != null) { if (isSystemApp(pkg)) { @@ -15208,8 +15207,8 @@ public class PackageManagerService extends IPackageManager.Stub ps.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, userId, installerPackageName); } - ps.setInstallSource(installArgs.installSource); - + ps.setInstallSource(installSource); + mSettings.addInstallerPackageNames(installSource); // When replacing an existing package, preserve the original install reason for all // users that had the package installed before. @@ -15239,7 +15238,6 @@ public class PackageManagerService extends IPackageManager.Stub res.name = pkgName; res.uid = pkg.getUid(); res.pkg = pkg; - mSettings.setInstallerPackageName(pkgName, installerPackageName); res.setReturnCode(PackageManager.INSTALL_SUCCEEDED); //to update install status Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "writeSettings"); diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 9642a1a21cf3..f9a336166825 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -280,8 +280,11 @@ public final class Settings { /** Map from package name to settings */ final ArrayMap<String, PackageSetting> mPackages = new ArrayMap<>(); - /** List of packages that installed other packages */ - final ArraySet<String> mInstallerPackages = new ArraySet<>(); + /** + * List of packages that were involved in installing other packages, i.e. are listed + * in at least one app's InstallSource. + */ + private final ArraySet<String> mInstallerPackages = new ArraySet<>(); /** Map from package name to appId and excluded userids */ private final ArrayMap<String, KernelPackageState> mKernelMapping = new ArrayMap<>(); @@ -441,16 +444,6 @@ public final class Settings { return mPermissions.canPropagatePermissionToInstantApp(permName); } - void setInstallerPackageName(String pkgName, String installerPkgName) { - PackageSetting p = mPackages.get(pkgName); - if (p != null) { - p.setInstallerPackageName(installerPkgName); - if (installerPkgName != null) { - mInstallerPackages.add(installerPkgName); - } - } - } - /** Gets and optionally creates a new shared user id. */ SharedUserSetting getSharedUserLPw(String name, int pkgFlags, int pkgPrivateFlags, boolean create) throws PackageManagerException { @@ -3777,9 +3770,10 @@ public final class Settings { } if (packageSetting != null) { packageSetting.uidError = "true".equals(uidError); - packageSetting.installSource = InstallSource.create( + InstallSource installSource = InstallSource.create( installInitiatingPackageName, installOriginatingPackageName, installerPackageName, "true".equals(isOrphaned)); + packageSetting.installSource = installSource; packageSetting.volumeUuid = volumeUuid; packageSetting.categoryHint = categoryHint; packageSetting.legacyNativeLibraryPathString = legacyNativeLibraryPathStr; @@ -3809,9 +3803,7 @@ public final class Settings { packageSetting.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, 0, null); } - if (installerPackageName != null) { - mInstallerPackages.add(installerPackageName); - } + addInstallerPackageNames(installSource); int outerDepth = parser.getDepth(); int type; @@ -3870,6 +3862,18 @@ public final class Settings { } } + void addInstallerPackageNames(InstallSource installSource) { + if (installSource.installerPackageName != null) { + mInstallerPackages.add(installSource.installerPackageName); + } + if (installSource.initiatingPackageName != null) { + mInstallerPackages.add(installSource.initiatingPackageName); + } + if (installSource.originatingPackageName != null) { + mInstallerPackages.add(installSource.originatingPackageName); + } + } + private void readDisabledComponentsLPw(PackageSettingBase packageSetting, XmlPullParser parser, int userId) throws IOException, XmlPullParserException { int outerDepth = parser.getDepth(); |