Merge "Create auxiliary info for local instant apps" into oc-dev
am: 4804e41574
Change-Id: I181cb62756b16971b126c2174eea58788dd5bfea
This commit is contained in:
@@ -47,7 +47,7 @@ public final class InstantAppResolveInfo implements Parcelable {
|
||||
private final int mVersionCode;
|
||||
|
||||
public InstantAppResolveInfo(@NonNull InstantAppDigest digest, @Nullable String packageName,
|
||||
@Nullable List<InstantAppIntentFilter> filters, int versionConde) {
|
||||
@Nullable List<InstantAppIntentFilter> filters, int versionCode) {
|
||||
// validate arguments
|
||||
if ((packageName == null && (filters != null && filters.size() != 0))
|
||||
|| (packageName != null && (filters == null || filters.size() == 0))) {
|
||||
@@ -61,7 +61,7 @@ public final class InstantAppResolveInfo implements Parcelable {
|
||||
mFilters = null;
|
||||
}
|
||||
mPackageName = packageName;
|
||||
mVersionCode = versionConde;
|
||||
mVersionCode = versionCode;
|
||||
}
|
||||
|
||||
public InstantAppResolveInfo(@NonNull String hostName, @Nullable String packageName,
|
||||
|
||||
@@ -6499,11 +6499,12 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
String resolvedType, int flags, int userId) {
|
||||
// first, check to see if we've got an instant app already installed
|
||||
final boolean alreadyResolvedLocally = (flags & PackageManager.MATCH_INSTANT) != 0;
|
||||
boolean localInstantAppAvailable = false;
|
||||
ResolveInfo localInstantApp = null;
|
||||
boolean blockResolution = false;
|
||||
if (!alreadyResolvedLocally) {
|
||||
final List<ResolveInfo> instantApps = mActivities.queryIntent(intent, resolvedType,
|
||||
flags
|
||||
| PackageManager.GET_RESOLVED_FILTER
|
||||
| PackageManager.MATCH_INSTANT
|
||||
| PackageManager.MATCH_VISIBLE_TO_INSTANT_APP_ONLY,
|
||||
userId);
|
||||
@@ -6530,7 +6531,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
if (DEBUG_EPHEMERAL) {
|
||||
Slog.v(TAG, "Found installed instant app; pkg: " + packageName);
|
||||
}
|
||||
localInstantAppAvailable = true;
|
||||
localInstantApp = info;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -6538,17 +6539,29 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
}
|
||||
// no app installed, let's see if one's available
|
||||
AuxiliaryResolveInfo auxiliaryResponse = null;
|
||||
if (!localInstantAppAvailable && !blockResolution) {
|
||||
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "resolveEphemeral");
|
||||
final InstantAppRequest requestObject = new InstantAppRequest(
|
||||
null /*responseObj*/, intent /*origIntent*/, resolvedType,
|
||||
null /*callingPackage*/, userId, null /*verificationBundle*/);
|
||||
auxiliaryResponse =
|
||||
InstantAppResolver.doInstantAppResolutionPhaseOne(
|
||||
mContext, mInstantAppResolverConnection, requestObject);
|
||||
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
|
||||
if (!blockResolution) {
|
||||
if (localInstantApp == null) {
|
||||
// we don't have an instant app locally, resolve externally
|
||||
Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "resolveEphemeral");
|
||||
final InstantAppRequest requestObject = new InstantAppRequest(
|
||||
null /*responseObj*/, intent /*origIntent*/, resolvedType,
|
||||
null /*callingPackage*/, userId, null /*verificationBundle*/);
|
||||
auxiliaryResponse =
|
||||
InstantAppResolver.doInstantAppResolutionPhaseOne(
|
||||
mContext, mInstantAppResolverConnection, requestObject);
|
||||
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
|
||||
} else {
|
||||
// we have an instant application locally, but, we can't admit that since
|
||||
// callers shouldn't be able to determine prior browsing. create a dummy
|
||||
// auxiliary response so the downstream code behaves as if there's an
|
||||
// instant application available externally. when it comes time to start
|
||||
// the instant application, we'll do the right thing.
|
||||
final ApplicationInfo ai = localInstantApp.activityInfo.applicationInfo;
|
||||
auxiliaryResponse = new AuxiliaryResolveInfo(
|
||||
ai.packageName, null /*splitName*/, ai.versionCode, null /*failureIntent*/);
|
||||
}
|
||||
}
|
||||
if (localInstantAppAvailable || auxiliaryResponse != null) {
|
||||
if (auxiliaryResponse != null) {
|
||||
if (DEBUG_EPHEMERAL) {
|
||||
Slog.v(TAG, "Adding ephemeral installer to the ResolveInfo list");
|
||||
}
|
||||
@@ -6568,7 +6581,7 @@ public class PackageManagerService extends IPackageManager.Stub
|
||||
ephemeralInstaller.filter = new IntentFilter(intent.getAction());
|
||||
ephemeralInstaller.filter.addDataPath(
|
||||
intent.getData().getPath(), PatternMatcher.PATTERN_LITERAL);
|
||||
ephemeralInstaller.instantAppAvailable = true;
|
||||
ephemeralInstaller.isInstantAppAvailable = true;
|
||||
result.add(ephemeralInstaller);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user