Merge "Only allow using PendingRemAnimRegistry on top launched activity" into pi-dev
This commit is contained in:
@@ -350,7 +350,8 @@ public class ActivityStartController {
|
||||
"FLAG_CANT_SAVE_STATE not supported here");
|
||||
}
|
||||
|
||||
final SafeActivityOptions checkedOptions = i == intents.length - 1
|
||||
final boolean top = i == intents.length - 1;
|
||||
final SafeActivityOptions checkedOptions = top
|
||||
? options
|
||||
: null;
|
||||
final int res = obtainStarter(intent, reason)
|
||||
@@ -367,6 +368,10 @@ public class ActivityStartController {
|
||||
.setActivityOptions(checkedOptions)
|
||||
.setComponentSpecified(componentSpecified)
|
||||
.setOutActivity(outActivity)
|
||||
|
||||
// Top activity decides on animation being run, so we allow only for the
|
||||
// top one as otherwise an activity below might consume it.
|
||||
.setAllowPendingRemoteAnimationRegistryLookup(top /* allowLookup*/)
|
||||
.execute();
|
||||
|
||||
if (res < 0) {
|
||||
|
||||
@@ -313,6 +313,12 @@ class ActivityStarter {
|
||||
int userId;
|
||||
WaitResult waitResult;
|
||||
|
||||
/**
|
||||
* If set to {@code true}, allows this activity start to look into
|
||||
* {@link PendingRemoteAnimationRegistry}
|
||||
*/
|
||||
boolean allowPendingRemoteAnimationRegistryLookup;
|
||||
|
||||
/**
|
||||
* Indicates that we should wait for the result of the start request. This flag is set when
|
||||
* {@link ActivityStarter#setMayWait(int)} is called.
|
||||
@@ -360,6 +366,7 @@ class ActivityStarter {
|
||||
waitResult = null;
|
||||
mayWait = false;
|
||||
avoidMoveToFront = false;
|
||||
allowPendingRemoteAnimationRegistryLookup = true;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -395,6 +402,8 @@ class ActivityStarter {
|
||||
waitResult = request.waitResult;
|
||||
mayWait = request.mayWait;
|
||||
avoidMoveToFront = request.avoidMoveToFront;
|
||||
allowPendingRemoteAnimationRegistryLookup
|
||||
= request.allowPendingRemoteAnimationRegistryLookup;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -477,7 +486,8 @@ class ActivityStarter {
|
||||
mRequest.resultWho, mRequest.requestCode, mRequest.startFlags,
|
||||
mRequest.profilerInfo, mRequest.waitResult, mRequest.globalConfig,
|
||||
mRequest.activityOptions, mRequest.ignoreTargetSecurity, mRequest.userId,
|
||||
mRequest.inTask, mRequest.reason);
|
||||
mRequest.inTask, mRequest.reason,
|
||||
mRequest.allowPendingRemoteAnimationRegistryLookup);
|
||||
} else {
|
||||
return startActivity(mRequest.caller, mRequest.intent, mRequest.ephemeralIntent,
|
||||
mRequest.resolvedType, mRequest.activityInfo, mRequest.resolveInfo,
|
||||
@@ -486,7 +496,8 @@ class ActivityStarter {
|
||||
mRequest.callingUid, mRequest.callingPackage, mRequest.realCallingPid,
|
||||
mRequest.realCallingUid, mRequest.startFlags, mRequest.activityOptions,
|
||||
mRequest.ignoreTargetSecurity, mRequest.componentSpecified,
|
||||
mRequest.outActivity, mRequest.inTask, mRequest.reason);
|
||||
mRequest.outActivity, mRequest.inTask, mRequest.reason,
|
||||
mRequest.allowPendingRemoteAnimationRegistryLookup);
|
||||
}
|
||||
} finally {
|
||||
onExecutionComplete();
|
||||
@@ -517,7 +528,8 @@ class ActivityStarter {
|
||||
IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid,
|
||||
String callingPackage, int realCallingPid, int realCallingUid, int startFlags,
|
||||
SafeActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified,
|
||||
ActivityRecord[] outActivity, TaskRecord inTask, String reason) {
|
||||
ActivityRecord[] outActivity, TaskRecord inTask, String reason,
|
||||
boolean allowPendingRemoteAnimationRegistryLookup) {
|
||||
|
||||
if (TextUtils.isEmpty(reason)) {
|
||||
throw new IllegalArgumentException("Need to specify a reason.");
|
||||
@@ -530,7 +542,7 @@ class ActivityStarter {
|
||||
aInfo, rInfo, voiceSession, voiceInteractor, resultTo, resultWho, requestCode,
|
||||
callingPid, callingUid, callingPackage, realCallingPid, realCallingUid, startFlags,
|
||||
options, ignoreTargetSecurity, componentSpecified, mLastStartActivityRecord,
|
||||
inTask);
|
||||
inTask, allowPendingRemoteAnimationRegistryLookup);
|
||||
|
||||
if (outActivity != null) {
|
||||
// mLastStartActivityRecord[0] is set in the call to startActivity above.
|
||||
@@ -560,7 +572,7 @@ class ActivityStarter {
|
||||
String callingPackage, int realCallingPid, int realCallingUid, int startFlags,
|
||||
SafeActivityOptions options,
|
||||
boolean ignoreTargetSecurity, boolean componentSpecified, ActivityRecord[] outActivity,
|
||||
TaskRecord inTask) {
|
||||
TaskRecord inTask, boolean allowPendingRemoteAnimationRegistryLookup) {
|
||||
int err = ActivityManager.START_SUCCESS;
|
||||
// Pull the optional Ephemeral Installer-only bundle out of the options early.
|
||||
final Bundle verificationBundle
|
||||
@@ -709,8 +721,11 @@ class ActivityStarter {
|
||||
ActivityOptions checkedOptions = options != null
|
||||
? options.getOptions(intent, aInfo, callerApp, mSupervisor)
|
||||
: null;
|
||||
checkedOptions = mService.getActivityStartController().getPendingRemoteAnimationRegistry()
|
||||
.overrideOptionsIfNeeded(callingPackage, checkedOptions);
|
||||
if (allowPendingRemoteAnimationRegistryLookup) {
|
||||
checkedOptions = mService.getActivityStartController()
|
||||
.getPendingRemoteAnimationRegistry()
|
||||
.overrideOptionsIfNeeded(callingPackage, checkedOptions);
|
||||
}
|
||||
if (mService.mController != null) {
|
||||
try {
|
||||
// The Intent we give to the watcher has the extra data
|
||||
@@ -928,7 +943,8 @@ class ActivityStarter {
|
||||
IBinder resultTo, String resultWho, int requestCode, int startFlags,
|
||||
ProfilerInfo profilerInfo, WaitResult outResult,
|
||||
Configuration globalConfig, SafeActivityOptions options, boolean ignoreTargetSecurity,
|
||||
int userId, TaskRecord inTask, String reason) {
|
||||
int userId, TaskRecord inTask, String reason,
|
||||
boolean allowPendingRemoteAnimationRegistryLookup) {
|
||||
// Refuse possible leaked file descriptors
|
||||
if (intent != null && intent.hasFileDescriptors()) {
|
||||
throw new IllegalArgumentException("File descriptors passed in Intent");
|
||||
@@ -1070,7 +1086,8 @@ class ActivityStarter {
|
||||
int res = startActivity(caller, intent, ephemeralIntent, resolvedType, aInfo, rInfo,
|
||||
voiceSession, voiceInteractor, resultTo, resultWho, requestCode, callingPid,
|
||||
callingUid, callingPackage, realCallingPid, realCallingUid, startFlags, options,
|
||||
ignoreTargetSecurity, componentSpecified, outRecord, inTask, reason);
|
||||
ignoreTargetSecurity, componentSpecified, outRecord, inTask, reason,
|
||||
allowPendingRemoteAnimationRegistryLookup);
|
||||
|
||||
Binder.restoreCallingIdentity(origId);
|
||||
|
||||
@@ -2567,6 +2584,11 @@ class ActivityStarter {
|
||||
return this;
|
||||
}
|
||||
|
||||
ActivityStarter setAllowPendingRemoteAnimationRegistryLookup(boolean allowLookup) {
|
||||
mRequest.allowPendingRemoteAnimationRegistryLookup = allowLookup;
|
||||
return this;
|
||||
}
|
||||
|
||||
void dump(PrintWriter pw, String prefix) {
|
||||
prefix = prefix + " ";
|
||||
pw.print(prefix);
|
||||
|
||||
Reference in New Issue
Block a user