diff options
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 837aa32eb55c..a02978cd70a2 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -2879,24 +2879,17 @@ public class PackageManagerService extends IPackageManager.Stub { } mInstallerService = new PackageInstallerService(context, this); - final ComponentName ephemeralResolverComponent = getEphemeralResolverLPr(); if (ephemeralResolverComponent != null) { if (DEBUG_EPHEMERAL) { - Slog.i(TAG, "Ephemeral resolver: " + ephemeralResolverComponent); + Slog.d(TAG, "Set ephemeral resolver: " + ephemeralResolverComponent); } mInstantAppResolverConnection = new EphemeralResolverConnection(mContext, ephemeralResolverComponent); } else { mInstantAppResolverConnection = null; } - mInstantAppInstallerComponent = getEphemeralInstallerLPr(); - if (mInstantAppInstallerComponent != null) { - if (DEBUG_EPHEMERAL) { - Slog.i(TAG, "Ephemeral installer: " + mInstantAppInstallerComponent); - } - setUpInstantAppInstallerActivityLP(mInstantAppInstallerComponent); - } + updateInstantAppInstallerLocked(); // Read and update the usage of dex files. // Do this at the end of PM init so that all the packages have their @@ -2936,6 +2929,21 @@ public class PackageManagerService extends IPackageManager.Stub { Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER); } + private void updateInstantAppInstallerLocked() { + final ComponentName oldInstantAppInstallerComponent = mInstantAppInstallerComponent; + final ComponentName newInstantAppInstallerComponent = getEphemeralInstallerLPr(); + if (newInstantAppInstallerComponent != null + && !newInstantAppInstallerComponent.equals(oldInstantAppInstallerComponent)) { + if (DEBUG_EPHEMERAL) { + Slog.d(TAG, "Set ephemeral installer: " + newInstantAppInstallerComponent); + } + setUpInstantAppInstallerActivityLP(newInstantAppInstallerComponent); + } else if (DEBUG_EPHEMERAL && newInstantAppInstallerComponent == null) { + Slog.d(TAG, "Unset ephemeral installer; none available"); + } + mInstantAppInstallerComponent = newInstantAppInstallerComponent; + } + private static File preparePackageParserCache(boolean isUpgrade) { if (!DEFAULT_PACKAGE_PARSER_CACHE_ENABLED) { return null; @@ -16918,6 +16926,7 @@ public class PackageManagerService extends IPackageManager.Stub { if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) { updateSequenceNumberLP(pkgName, res.newUsers); + updateInstantAppInstallerLocked(); } } } @@ -17493,6 +17502,7 @@ public class PackageManagerService extends IPackageManager.Stub { mInstantAppRegistry.onPackageUninstalledLPw(pkg, info.removedUsers); } updateSequenceNumberLP(packageName, info.removedUsers); + updateInstantAppInstallerLocked(); } } } @@ -19838,6 +19848,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); } scheduleWritePackageRestrictionsLocked(userId); updateSequenceNumberLP(packageName, new int[] { userId }); + updateInstantAppInstallerLocked(); components = mPendingBroadcasts.get(userId, packageName); final boolean newPackage = components == null; if (newPackage) { |