Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 749b26ab authored by Todd Kennedy's avatar Todd Kennedy
Browse files

Allow the Instant App installer to be dynamic

Change-Id: I58e81f5f473ac1cffb8947cd713bb1249ce00305
Fixes: 33072933
Test: add/remove/update the instant app installer and see that it changes dynamically
parent fbd54b42
Loading
Loading
Loading
Loading
+25 −9
Original line number Diff line number Diff line
@@ -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;
@@ -16928,6 +16936,7 @@ public class PackageManagerService extends IPackageManager.Stub {
            if (res.returnCode == PackageManager.INSTALL_SUCCEEDED) {
                updateSequenceNumberLP(pkgName, res.newUsers);
                updateInstantAppInstallerLocked();
            }
        }
    }
@@ -17503,6 +17512,7 @@ public class PackageManagerService extends IPackageManager.Stub {
                        mInstantAppRegistry.onPackageUninstalledLPw(pkg, info.removedUsers);
                    }
                    updateSequenceNumberLP(packageName, info.removedUsers);
                    updateInstantAppInstallerLocked();
                }
            }
        }
@@ -19848,6 +19858,12 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
            }
            scheduleWritePackageRestrictionsLocked(userId);
            updateSequenceNumberLP(packageName, new int[] { userId });
            final long callingId = Binder.clearCallingIdentity();
            try {
                updateInstantAppInstallerLocked();
            } finally {
                Binder.restoreCallingIdentity(callingId);
            }
            components = mPendingBroadcasts.get(userId, packageName);
            final boolean newPackage = components == null;
            if (newPackage) {