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

Commit 2dd3ad06 authored by Todd Kennedy's avatar Todd Kennedy
Browse files

dynamically install all missing splits

In O, we allowed Instant Apps to dynamically install missing
splits.  We removed that limit and allow any application [ie.
full applications] to dynamically install missing splits.

This functionality only works on activities. Missing splits
will not be dynamically installed when referencing other
components such as receivers, providers or services.

Change-Id: Iab1db1ebc80f517d711ae113e68d7adcc2a39d9f
Fixes: 63112542
Test: Manual.
Test: Install a app that references a split that isn't installed
Test: Invoke the missing split and see that the installer is launched
parent b3d487da
Loading
Loading
Loading
Loading
+22 −24
Original line number Diff line number Diff line
@@ -7209,18 +7209,16 @@ public class PackageManagerService extends IPackageManager.Stub
            String ephemeralPkgName) {
        for (int i = resolveInfos.size() - 1; i >= 0; i--) {
            final ResolveInfo info = resolveInfos.get(i);
            final boolean isEphemeralApp = info.activityInfo.applicationInfo.isInstantApp();
            // TODO: When adding on-demand split support for non-instant apps, remove this check
            // and always apply post filtering
            // allow activities that are defined in the provided package
            if (isEphemeralApp) {
            if (info.activityInfo.splitName != null
                    && !ArrayUtils.contains(info.activityInfo.applicationInfo.splitNames,
                            info.activityInfo.splitName)) {
                // requested activity is defined in a split that hasn't been installed yet.
                // add the installer to the resolve list
                    if (DEBUG_EPHEMERAL) {
                        Slog.v(TAG, "Adding ephemeral installer to the ResolveInfo list");
                if (DEBUG_INSTALL) {
                    Slog.v(TAG, "Adding installer to the ResolveInfo list");
                }
                final ResolveInfo installerInfo = new ResolveInfo(mInstantAppInstallerInfo);
                installerInfo.auxiliaryInfo = new AuxiliaryResolveInfo(
@@ -7237,7 +7235,6 @@ public class PackageManagerService extends IPackageManager.Stub
                resolveInfos.set(i, installerInfo);
                continue;
            }
            }
            // caller is a full app, don't need to apply any other filtering
            if (ephemeralPkgName == null) {
                continue;
@@ -7246,6 +7243,7 @@ public class PackageManagerService extends IPackageManager.Stub
                continue;
            }
            // allow activities that have been explicitly exposed to ephemeral apps
            final boolean isEphemeralApp = info.activityInfo.applicationInfo.isInstantApp();
            if (!isEphemeralApp
                    && ((info.activityInfo.flags & ActivityInfo.FLAG_VISIBLE_TO_INSTANT_APP) != 0)) {
                continue;