Merge "Intercept direct launch of instant app installer" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
61ae34afe3
@@ -242,6 +242,7 @@ public abstract class PackageManagerInternal {
|
||||
public abstract void grantEphemeralAccess(int userId, Intent intent,
|
||||
int targetAppId, int ephemeralAppId);
|
||||
|
||||
public abstract boolean isInstantAppInstallerComponent(ComponentName component);
|
||||
/**
|
||||
* Prunes instant apps and state associated with uninstalled
|
||||
* instant apps according to the current platform policy.
|
||||
|
||||
@@ -640,6 +640,18 @@ class ActivityStarter {
|
||||
final Intent ephemeralIntent = new Intent(intent);
|
||||
// Don't modify the client's object!
|
||||
intent = new Intent(intent);
|
||||
if (componentSpecified
|
||||
&& intent.getData() != null
|
||||
&& Intent.ACTION_VIEW.equals(intent.getAction())
|
||||
&& intent.hasCategory(Intent.CATEGORY_BROWSABLE)
|
||||
&& mService.getPackageManagerInternalLocked()
|
||||
.isInstantAppInstallerComponent(intent.getComponent())) {
|
||||
// intercept intents targeted directly to the ephemeral installer the
|
||||
// ephemeral installer should never be started with a raw URL; instead
|
||||
// adjust the intent so it looks like a "normal" instant app launch
|
||||
intent.setComponent(null /*component*/);
|
||||
componentSpecified = false;
|
||||
}
|
||||
|
||||
ResolveInfo rInfo = mSupervisor.resolveIntent(intent, resolvedType, userId);
|
||||
if (rInfo == null) {
|
||||
|
||||
@@ -5822,6 +5822,10 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
return false;
|
||||
}
|
||||
if (ps.getInstantApp(userId)) {
|
||||
if (DEBUG_EPHEMERAL) {
|
||||
Slog.v(TAG, "DENY instant app installed;"
|
||||
+ " pkg: " + packageName);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -6301,7 +6305,6 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
intent, resolvedType, flags, userId), userId);
|
||||
addEphemeral = !ephemeralDisabled
|
||||
&& isEphemeralAllowed(intent, result, userId, false /*skipPackageCheck*/);
|
||||
|
||||
// Check for cross profile results.
|
||||
boolean hasNonNegativePriorityResult = hasNonNegativePriority(result);
|
||||
xpResolveInfo = queryCrossProfileIntents(
|
||||
@@ -6357,7 +6360,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
} else {
|
||||
// the caller wants to resolve for a particular package; however, there
|
||||
// were no installed results, so, try to find an ephemeral result
|
||||
addEphemeral = !ephemeralDisabled
|
||||
addEphemeral = !ephemeralDisabled
|
||||
&& isEphemeralAllowed(
|
||||
intent, null /*result*/, userId, true /*skipPackageCheck*/);
|
||||
result = new ArrayList<ResolveInfo>();
|
||||
@@ -23106,6 +23109,13 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInstantAppInstallerComponent(ComponentName component) {
|
||||
synchronized (mPackages) {
|
||||
return component != null && component.equals(mInstantAppInstallerComponent);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void pruneInstantApps() {
|
||||
synchronized (mPackages) {
|
||||
|
||||
Reference in New Issue
Block a user