Loading core/java/android/app/InstantAppResolverService.java +15 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.pm.InstantAppResolveInfo; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; Loading @@ -28,9 +29,12 @@ import android.os.IRemoteCallback; import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.util.Log; import android.util.Slog; import com.android.internal.os.SomeArgs; import java.util.Arrays; import java.util.List; /** Loading @@ -39,6 +43,9 @@ import java.util.List; */ @SystemApi public abstract class InstantAppResolverService extends Service { private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE; private static final String TAG = "PackageManager"; /** @hide */ public static final String EXTRA_RESOLVE_INFO = "android.app.extra.RESOLVE_INFO"; /** @hide */ Loading Loading @@ -132,11 +139,19 @@ public abstract class InstantAppResolverService extends Service { @Deprecated void _onGetInstantAppResolveInfo(int[] digestPrefix, String token, InstantAppResolutionCallback callback) { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Instant resolver; getInstantAppResolveInfo;" + " prefix: " + Arrays.toString(digestPrefix)); } onGetInstantAppResolveInfo(digestPrefix, token, callback); } @Deprecated void _onGetInstantAppIntentFilter(int digestPrefix[], String token, String hostName, InstantAppResolutionCallback callback) { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Instant resolver; getInstantAppIntentFilter;" + " prefix: " + Arrays.toString(digestPrefix)); } onGetInstantAppIntentFilter(digestPrefix, token, callback); } Loading services/core/java/com/android/server/pm/EphemeralResolverConnection.java +3 −2 Original line number Diff line number Diff line Loading @@ -64,9 +64,10 @@ final class EphemeralResolverConnection implements DeathRecipient { private volatile boolean mBindRequested; private IInstantAppResolver mRemoteInstance; public EphemeralResolverConnection(Context context, ComponentName componentName) { public EphemeralResolverConnection( Context context, ComponentName componentName, String action) { mContext = context; mIntent = new Intent(Intent.ACTION_RESOLVE_INSTANT_APP_PACKAGE).setComponent(componentName); mIntent = new Intent(action).setComponent(componentName); } public final List<InstantAppResolveInfo> getInstantAppResolveInfoList(int hashPrefix[], Loading services/core/java/com/android/server/pm/PackageManagerService.java +17 −13 Original line number Diff line number Diff line Loading @@ -2813,15 +2813,17 @@ public class PackageManagerService extends IPackageManager.Stub { } mInstallerService = new PackageInstallerService(context, this); final ComponentName ephemeralResolverComponent = getEphemeralResolverLPr(); if (ephemeralResolverComponent != null) { final Pair<ComponentName, String> instantAppResolverComponent = getInstantAppResolverLPr(); if (instantAppResolverComponent != null) { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Set ephemeral resolver: " + ephemeralResolverComponent); Slog.d(TAG, "Set ephemeral resolver: " + instantAppResolverComponent); } mInstantAppResolverConnection = new EphemeralResolverConnection(mContext, ephemeralResolverComponent); mInstantAppResolverConnection = new EphemeralResolverConnection( mContext, instantAppResolverComponent.first, instantAppResolverComponent.second); mInstantAppResolverSettingsComponent = getEphemeralResolverSettingsLPr(ephemeralResolverComponent); getInstantAppResolverSettingsLPr(instantAppResolverComponent.first); } else { mInstantAppResolverConnection = null; mInstantAppResolverSettingsComponent = null; Loading Loading @@ -2868,7 +2870,7 @@ public class PackageManagerService extends IPackageManager.Stub { private void updateInstantAppInstallerLocked() { final ComponentName oldInstantAppInstallerComponent = mInstantAppInstallerComponent; final ActivityInfo newInstantAppInstaller = getEphemeralInstallerLPr(); final ActivityInfo newInstantAppInstaller = getInstantAppInstallerLPr(); ComponentName newInstantAppInstallerComponent = newInstantAppInstaller == null ? null : newInstantAppInstaller.getComponentName(); Loading Loading @@ -3045,7 +3047,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } private @Nullable ComponentName getEphemeralResolverLPr() { private @Nullable Pair<ComponentName, String> getInstantAppResolverLPr() { final String[] packageArray = mContext.getResources().getStringArray(R.array.config_ephemeralResolverPackage); if (packageArray.length == 0 && !Build.IS_DEBUGGABLE) { Loading @@ -3060,7 +3062,8 @@ public class PackageManagerService extends IPackageManager.Stub { MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE | (!Build.IS_DEBUGGABLE ? MATCH_SYSTEM_ONLY : 0); final Intent resolverIntent = new Intent(Intent.ACTION_RESOLVE_INSTANT_APP_PACKAGE); String actionName = Intent.ACTION_RESOLVE_INSTANT_APP_PACKAGE; final Intent resolverIntent = new Intent(actionName); List<ResolveInfo> resolvers = queryIntentServicesInternal(resolverIntent, null, resolveFlags, UserHandle.USER_SYSTEM, callingUid, false /*includeInstantApps*/); // temporarily look for the old action Loading @@ -3068,7 +3071,8 @@ public class PackageManagerService extends IPackageManager.Stub { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Ephemeral resolver not found with new action; try old one"); } resolverIntent.setAction(Intent.ACTION_RESOLVE_EPHEMERAL_PACKAGE); actionName = Intent.ACTION_RESOLVE_EPHEMERAL_PACKAGE; resolverIntent.setAction(actionName); resolvers = queryIntentServicesInternal(resolverIntent, null, resolveFlags, UserHandle.USER_SYSTEM, callingUid, false /*includeInstantApps*/); } Loading Loading @@ -3101,7 +3105,7 @@ public class PackageManagerService extends IPackageManager.Stub { Slog.v(TAG, "Ephemeral resolver found;" + " pkg: " + packageName + ", info:" + info); } return new ComponentName(packageName, info.serviceInfo.name); return new Pair<>(new ComponentName(packageName, info.serviceInfo.name), actionName); } if (DEBUG_EPHEMERAL) { Slog.v(TAG, "Ephemeral resolver NOT found"); Loading @@ -3109,7 +3113,7 @@ public class PackageManagerService extends IPackageManager.Stub { return null; } private @Nullable ActivityInfo getEphemeralInstallerLPr() { private @Nullable ActivityInfo getInstantAppInstallerLPr() { final Intent intent = new Intent(Intent.ACTION_INSTALL_INSTANT_APP_PACKAGE); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setDataAndType(Uri.fromFile(new File("foo.apk")), PACKAGE_MIME_TYPE); Loading Loading @@ -3151,7 +3155,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } private @Nullable ComponentName getEphemeralResolverSettingsLPr( private @Nullable ComponentName getInstantAppResolverSettingsLPr( @NonNull ComponentName resolver) { final Intent intent = new Intent(Intent.ACTION_INSTANT_APP_RESOLVER_SETTINGS) .addCategory(Intent.CATEGORY_DEFAULT) Loading
core/java/android/app/InstantAppResolverService.java +15 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.app.Service; import android.content.Context; import android.content.Intent; import android.content.pm.InstantAppResolveInfo; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; Loading @@ -28,9 +29,12 @@ import android.os.IRemoteCallback; import android.os.Looper; import android.os.Message; import android.os.RemoteException; import android.util.Log; import android.util.Slog; import com.android.internal.os.SomeArgs; import java.util.Arrays; import java.util.List; /** Loading @@ -39,6 +43,9 @@ import java.util.List; */ @SystemApi public abstract class InstantAppResolverService extends Service { private static final boolean DEBUG_EPHEMERAL = Build.IS_DEBUGGABLE; private static final String TAG = "PackageManager"; /** @hide */ public static final String EXTRA_RESOLVE_INFO = "android.app.extra.RESOLVE_INFO"; /** @hide */ Loading Loading @@ -132,11 +139,19 @@ public abstract class InstantAppResolverService extends Service { @Deprecated void _onGetInstantAppResolveInfo(int[] digestPrefix, String token, InstantAppResolutionCallback callback) { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Instant resolver; getInstantAppResolveInfo;" + " prefix: " + Arrays.toString(digestPrefix)); } onGetInstantAppResolveInfo(digestPrefix, token, callback); } @Deprecated void _onGetInstantAppIntentFilter(int digestPrefix[], String token, String hostName, InstantAppResolutionCallback callback) { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Instant resolver; getInstantAppIntentFilter;" + " prefix: " + Arrays.toString(digestPrefix)); } onGetInstantAppIntentFilter(digestPrefix, token, callback); } Loading
services/core/java/com/android/server/pm/EphemeralResolverConnection.java +3 −2 Original line number Diff line number Diff line Loading @@ -64,9 +64,10 @@ final class EphemeralResolverConnection implements DeathRecipient { private volatile boolean mBindRequested; private IInstantAppResolver mRemoteInstance; public EphemeralResolverConnection(Context context, ComponentName componentName) { public EphemeralResolverConnection( Context context, ComponentName componentName, String action) { mContext = context; mIntent = new Intent(Intent.ACTION_RESOLVE_INSTANT_APP_PACKAGE).setComponent(componentName); mIntent = new Intent(action).setComponent(componentName); } public final List<InstantAppResolveInfo> getInstantAppResolveInfoList(int hashPrefix[], Loading
services/core/java/com/android/server/pm/PackageManagerService.java +17 −13 Original line number Diff line number Diff line Loading @@ -2813,15 +2813,17 @@ public class PackageManagerService extends IPackageManager.Stub { } mInstallerService = new PackageInstallerService(context, this); final ComponentName ephemeralResolverComponent = getEphemeralResolverLPr(); if (ephemeralResolverComponent != null) { final Pair<ComponentName, String> instantAppResolverComponent = getInstantAppResolverLPr(); if (instantAppResolverComponent != null) { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Set ephemeral resolver: " + ephemeralResolverComponent); Slog.d(TAG, "Set ephemeral resolver: " + instantAppResolverComponent); } mInstantAppResolverConnection = new EphemeralResolverConnection(mContext, ephemeralResolverComponent); mInstantAppResolverConnection = new EphemeralResolverConnection( mContext, instantAppResolverComponent.first, instantAppResolverComponent.second); mInstantAppResolverSettingsComponent = getEphemeralResolverSettingsLPr(ephemeralResolverComponent); getInstantAppResolverSettingsLPr(instantAppResolverComponent.first); } else { mInstantAppResolverConnection = null; mInstantAppResolverSettingsComponent = null; Loading Loading @@ -2868,7 +2870,7 @@ public class PackageManagerService extends IPackageManager.Stub { private void updateInstantAppInstallerLocked() { final ComponentName oldInstantAppInstallerComponent = mInstantAppInstallerComponent; final ActivityInfo newInstantAppInstaller = getEphemeralInstallerLPr(); final ActivityInfo newInstantAppInstaller = getInstantAppInstallerLPr(); ComponentName newInstantAppInstallerComponent = newInstantAppInstaller == null ? null : newInstantAppInstaller.getComponentName(); Loading Loading @@ -3045,7 +3047,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } private @Nullable ComponentName getEphemeralResolverLPr() { private @Nullable Pair<ComponentName, String> getInstantAppResolverLPr() { final String[] packageArray = mContext.getResources().getStringArray(R.array.config_ephemeralResolverPackage); if (packageArray.length == 0 && !Build.IS_DEBUGGABLE) { Loading @@ -3060,7 +3062,8 @@ public class PackageManagerService extends IPackageManager.Stub { MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE | (!Build.IS_DEBUGGABLE ? MATCH_SYSTEM_ONLY : 0); final Intent resolverIntent = new Intent(Intent.ACTION_RESOLVE_INSTANT_APP_PACKAGE); String actionName = Intent.ACTION_RESOLVE_INSTANT_APP_PACKAGE; final Intent resolverIntent = new Intent(actionName); List<ResolveInfo> resolvers = queryIntentServicesInternal(resolverIntent, null, resolveFlags, UserHandle.USER_SYSTEM, callingUid, false /*includeInstantApps*/); // temporarily look for the old action Loading @@ -3068,7 +3071,8 @@ public class PackageManagerService extends IPackageManager.Stub { if (DEBUG_EPHEMERAL) { Slog.d(TAG, "Ephemeral resolver not found with new action; try old one"); } resolverIntent.setAction(Intent.ACTION_RESOLVE_EPHEMERAL_PACKAGE); actionName = Intent.ACTION_RESOLVE_EPHEMERAL_PACKAGE; resolverIntent.setAction(actionName); resolvers = queryIntentServicesInternal(resolverIntent, null, resolveFlags, UserHandle.USER_SYSTEM, callingUid, false /*includeInstantApps*/); } Loading Loading @@ -3101,7 +3105,7 @@ public class PackageManagerService extends IPackageManager.Stub { Slog.v(TAG, "Ephemeral resolver found;" + " pkg: " + packageName + ", info:" + info); } return new ComponentName(packageName, info.serviceInfo.name); return new Pair<>(new ComponentName(packageName, info.serviceInfo.name), actionName); } if (DEBUG_EPHEMERAL) { Slog.v(TAG, "Ephemeral resolver NOT found"); Loading @@ -3109,7 +3113,7 @@ public class PackageManagerService extends IPackageManager.Stub { return null; } private @Nullable ActivityInfo getEphemeralInstallerLPr() { private @Nullable ActivityInfo getInstantAppInstallerLPr() { final Intent intent = new Intent(Intent.ACTION_INSTALL_INSTANT_APP_PACKAGE); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setDataAndType(Uri.fromFile(new File("foo.apk")), PACKAGE_MIME_TYPE); Loading Loading @@ -3151,7 +3155,7 @@ public class PackageManagerService extends IPackageManager.Stub { } } private @Nullable ComponentName getEphemeralResolverSettingsLPr( private @Nullable ComponentName getInstantAppResolverSettingsLPr( @NonNull ComponentName resolver) { final Intent intent = new Intent(Intent.ACTION_INSTANT_APP_RESOLVER_SETTINGS) .addCategory(Intent.CATEGORY_DEFAULT)