Loading services/core/java/com/android/server/am/ActivityStartController.java +6 −1 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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) { Loading services/core/java/com/android/server/am/ActivityStarter.java +31 −9 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -360,6 +366,7 @@ class ActivityStarter { waitResult = null; mayWait = false; avoidMoveToFront = false; allowPendingRemoteAnimationRegistryLookup = true; } /** Loading Loading @@ -395,6 +402,8 @@ class ActivityStarter { waitResult = request.waitResult; mayWait = request.mayWait; avoidMoveToFront = request.avoidMoveToFront; allowPendingRemoteAnimationRegistryLookup = request.allowPendingRemoteAnimationRegistryLookup; } } Loading Loading @@ -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, Loading @@ -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(); Loading Loading @@ -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."); Loading @@ -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. Loading Loading @@ -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 Loading Loading @@ -709,8 +721,11 @@ class ActivityStarter { ActivityOptions checkedOptions = options != null ? options.getOptions(intent, aInfo, callerApp, mSupervisor) : null; checkedOptions = mService.getActivityStartController().getPendingRemoteAnimationRegistry() 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 Loading Loading @@ -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"); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading
services/core/java/com/android/server/am/ActivityStartController.java +6 −1 Original line number Diff line number Diff line Loading @@ -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) Loading @@ -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) { Loading
services/core/java/com/android/server/am/ActivityStarter.java +31 −9 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -360,6 +366,7 @@ class ActivityStarter { waitResult = null; mayWait = false; avoidMoveToFront = false; allowPendingRemoteAnimationRegistryLookup = true; } /** Loading Loading @@ -395,6 +402,8 @@ class ActivityStarter { waitResult = request.waitResult; mayWait = request.mayWait; avoidMoveToFront = request.avoidMoveToFront; allowPendingRemoteAnimationRegistryLookup = request.allowPendingRemoteAnimationRegistryLookup; } } Loading Loading @@ -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, Loading @@ -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(); Loading Loading @@ -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."); Loading @@ -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. Loading Loading @@ -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 Loading Loading @@ -709,8 +721,11 @@ class ActivityStarter { ActivityOptions checkedOptions = options != null ? options.getOptions(intent, aInfo, callerApp, mSupervisor) : null; checkedOptions = mService.getActivityStartController().getPendingRemoteAnimationRegistry() 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 Loading Loading @@ -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"); Loading Loading @@ -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); Loading Loading @@ -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); Loading