diff options
6 files changed, 83 insertions, 89 deletions
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index da743f820f4b..7c3fcc30f6cf 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -1763,7 +1763,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM } else { bundle = data.readBundle(); } - final ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle); + final ActivityOptions options = ActivityOptions.fromBundle(bundle); boolean converted = convertToTranslucent(token, options); reply.writeNoException(); reply.writeInt(converted ? 1 : 0); @@ -2504,7 +2504,7 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM } else { bundle = data.readBundle(); } - final ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle); + final ActivityOptions options = ActivityOptions.fromBundle(bundle); startInPlaceAnimationOnFrontMostApplication(options); reply.writeNoException(); return true; @@ -4922,8 +4922,7 @@ class ActivityManagerProxy implements IActivityManager data.writeStrongBinder(token); mRemote.transact(GET_ACTIVITY_OPTIONS_TRANSACTION, data, reply, 0); reply.readException(); - Bundle bundle = reply.readBundle(); - ActivityOptions options = bundle == null ? null : new ActivityOptions(bundle); + ActivityOptions options = ActivityOptions.fromBundle(reply.readBundle()); data.recycle(); reply.recycle(); return options; diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java index 6107dfd11247..57900aa4eb89 100644 --- a/core/java/android/app/ActivityOptions.java +++ b/core/java/android/app/ActivityOptions.java @@ -884,9 +884,14 @@ public class ActivityOptions { public AppTransitionAnimationSpec[] getAnimSpecs() { return mAnimSpecs; } /** @hide */ - public static void abort(Bundle options) { + public static ActivityOptions fromBundle(Bundle bOptions) { + return bOptions != null ? new ActivityOptions(bOptions) : null; + } + + /** @hide */ + public static void abort(ActivityOptions options) { if (options != null) { - (new ActivityOptions(options)).abort(); + options.abort(); } } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 546db3e2d68a..e27dba6fa2f7 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3846,29 +3846,29 @@ public final class ActivityManagerService extends ActivityManagerNative @Override public final int startActivity(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int startFlags, ProfilerInfo profilerInfo, Bundle options) { + int startFlags, ProfilerInfo profilerInfo, Bundle bOptions) { return startActivityAsUser(caller, callingPackage, intent, resolvedType, resultTo, - resultWho, requestCode, startFlags, profilerInfo, options, + resultWho, requestCode, startFlags, profilerInfo, bOptions, UserHandle.getCallingUserId()); } @Override public final int startActivityAsUser(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int startFlags, ProfilerInfo profilerInfo, Bundle options, int userId) { + int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId) { enforceNotIsolatedCaller("startActivity"); userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, ALLOW_FULL_ONLY, "startActivity", null); // TODO: Switch to user app stacks here. return mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, null, null, resultTo, resultWho, requestCode, startFlags, - profilerInfo, null, null, options, false, userId, null, null); + profilerInfo, null, null, bOptions, false, userId, null, null); } @Override public final int startActivityAsCaller(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int startFlags, ProfilerInfo profilerInfo, Bundle options, boolean ignoreTargetSecurity, + int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, boolean ignoreTargetSecurity, int userId) { // This is very dangerous -- it allows you to perform a start activity (including @@ -3925,7 +3925,7 @@ public final class ActivityManagerService extends ActivityManagerNative try { int ret = mStackSupervisor.startActivityMayWait(null, targetUid, targetPackage, intent, resolvedType, null, null, resultTo, resultWho, requestCode, startFlags, null, - null, null, options, ignoreTargetSecurity, userId, null, null); + null, null, bOptions, ignoreTargetSecurity, userId, null, null); return ret; } catch (SecurityException e) { // XXX need to figure out how to propagate to original app. @@ -3946,7 +3946,7 @@ public final class ActivityManagerService extends ActivityManagerNative @Override public final WaitResult startActivityAndWait(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int startFlags, ProfilerInfo profilerInfo, Bundle options, int userId) { + int startFlags, ProfilerInfo profilerInfo, Bundle bOptions, int userId) { enforceNotIsolatedCaller("startActivityAndWait"); userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, ALLOW_FULL_ONLY, "startActivityAndWait", null); @@ -3954,28 +3954,28 @@ public final class ActivityManagerService extends ActivityManagerNative // TODO: Switch to user app stacks here. mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, null, null, resultTo, resultWho, requestCode, startFlags, profilerInfo, res, null, - options, false, userId, null, null); + bOptions, false, userId, null, null); return res; } @Override public final int startActivityWithConfig(IApplicationThread caller, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, String resultWho, int requestCode, - int startFlags, Configuration config, Bundle options, int userId) { + int startFlags, Configuration config, Bundle bOptions, int userId) { enforceNotIsolatedCaller("startActivityWithConfig"); userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, ALLOW_FULL_ONLY, "startActivityWithConfig", null); // TODO: Switch to user app stacks here. int ret = mStackSupervisor.startActivityMayWait(caller, -1, callingPackage, intent, resolvedType, null, null, resultTo, resultWho, requestCode, startFlags, - null, null, config, options, false, userId, null, null); + null, null, config, bOptions, false, userId, null, null); return ret; } @Override public int startActivityIntentSender(IApplicationThread caller, IntentSender intent, Intent fillInIntent, String resolvedType, IBinder resultTo, String resultWho, - int requestCode, int flagsMask, int flagsValues, Bundle options) + int requestCode, int flagsMask, int flagsValues, Bundle bOptions) throws TransactionTooLargeException { enforceNotIsolatedCaller("startActivityIntentSender"); // Refuse possible leaked file descriptors @@ -4000,7 +4000,7 @@ public final class ActivityManagerService extends ActivityManagerNative } } int ret = pir.sendInner(0, fillInIntent, resolvedType, null, null, - resultTo, resultWho, requestCode, flagsMask, flagsValues, options, null); + resultTo, resultWho, requestCode, flagsMask, flagsValues, bOptions, null); return ret; } @@ -4008,7 +4008,7 @@ public final class ActivityManagerService extends ActivityManagerNative public int startVoiceActivity(String callingPackage, int callingPid, int callingUid, Intent intent, String resolvedType, IVoiceInteractionSession session, IVoiceInteractor interactor, int startFlags, ProfilerInfo profilerInfo, - Bundle options, int userId) { + Bundle bOptions, int userId) { if (checkCallingPermission(Manifest.permission.BIND_VOICE_INTERACTION) != PackageManager.PERMISSION_GRANTED) { String msg = "Permission Denial: startVoiceActivity() from pid=" @@ -4026,7 +4026,7 @@ public final class ActivityManagerService extends ActivityManagerNative // TODO: Switch to user app stacks here. return mStackSupervisor.startActivityMayWait(null, callingUid, callingPackage, intent, resolvedType, session, interactor, null, null, 0, startFlags, profilerInfo, null, - null, options, false, userId, null, null); + null, bOptions, false, userId, null, null); } @Override @@ -4044,11 +4044,12 @@ public final class ActivityManagerService extends ActivityManagerNative @Override public boolean startNextMatchingActivity(IBinder callingActivity, - Intent intent, Bundle options) { + Intent intent, Bundle bOptions) { // Refuse possible leaked file descriptors if (intent != null && intent.hasFileDescriptors() == true) { throw new IllegalArgumentException("File descriptors passed in Intent"); } + ActivityOptions options = ActivityOptions.fromBundle(bOptions); synchronized (this) { final ActivityRecord r = ActivityRecord.isInStackLocked(callingActivity); @@ -4149,7 +4150,7 @@ public final class ActivityManagerService extends ActivityManagerNative } @Override - public final int startActivityFromRecents(int taskId, int launchStackId, Bundle options) { + public final int startActivityFromRecents(int taskId, int launchStackId, Bundle bOptions) { if (checkCallingPermission(START_TASKS_FROM_RECENTS) != PackageManager.PERMISSION_GRANTED) { String msg = "Permission Denial: startActivityFromRecents called without " + START_TASKS_FROM_RECENTS; @@ -4158,13 +4159,13 @@ public final class ActivityManagerService extends ActivityManagerNative } final long origId = Binder.clearCallingIdentity(); try { - return startActivityFromRecentsInner(taskId, launchStackId, options); + return startActivityFromRecentsInner(taskId, launchStackId, bOptions); } finally { Binder.restoreCallingIdentity(origId); } } - final int startActivityFromRecentsInner(int taskId, int launchStackId, Bundle options) { + final int startActivityFromRecentsInner(int taskId, int launchStackId, Bundle bOptions) { final TaskRecord task; final int callingUid; final String callingPackage; @@ -4183,8 +4184,8 @@ public final class ActivityManagerService extends ActivityManagerNative } if (launchStackId != INVALID_STACK_ID && task.stack.mStackId != launchStackId) { - if (launchStackId == DOCKED_STACK_ID && options != null) { - ActivityOptions activityOptions = new ActivityOptions(options); + if (launchStackId == DOCKED_STACK_ID && bOptions != null) { + ActivityOptions activityOptions = new ActivityOptions(bOptions); mWindowManager.setDockedStackCreateMode(activityOptions.getDockCreateMode()); } mStackSupervisor.moveTaskToStackLocked( @@ -4192,7 +4193,7 @@ public final class ActivityManagerService extends ActivityManagerNative } if (task.getRootActivity() != null) { - moveTaskToFrontLocked(task.taskId, 0, options); + moveTaskToFrontLocked(task.taskId, 0, bOptions); return ActivityManager.START_TASK_TO_FRONT; } callingUid = task.mCallingUid; @@ -4202,12 +4203,12 @@ public final class ActivityManagerService extends ActivityManagerNative userId = task.userId; } return startActivityInPackage(callingUid, callingPackage, intent, null, null, null, 0, 0, - options, userId, null, task); + bOptions, userId, null, task); } final int startActivityInPackage(int uid, String callingPackage, Intent intent, String resolvedType, IBinder resultTo, - String resultWho, int requestCode, int startFlags, Bundle options, int userId, + String resultWho, int requestCode, int startFlags, Bundle bOptions, int userId, IActivityContainer container, TaskRecord inTask) { userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), @@ -4216,32 +4217,32 @@ public final class ActivityManagerService extends ActivityManagerNative // TODO: Switch to user app stacks here. int ret = mStackSupervisor.startActivityMayWait(null, uid, callingPackage, intent, resolvedType, null, null, resultTo, resultWho, requestCode, startFlags, - null, null, null, options, false, userId, container, inTask); + null, null, null, bOptions, false, userId, container, inTask); return ret; } @Override public final int startActivities(IApplicationThread caller, String callingPackage, - Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle options, + Intent[] intents, String[] resolvedTypes, IBinder resultTo, Bundle bOptions, int userId) { enforceNotIsolatedCaller("startActivities"); userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, ALLOW_FULL_ONLY, "startActivity", null); // TODO: Switch to user app stacks here. int ret = mStackSupervisor.startActivities(caller, -1, callingPackage, intents, - resolvedTypes, resultTo, options, userId); + resolvedTypes, resultTo, bOptions, userId); return ret; } final int startActivitiesInPackage(int uid, String callingPackage, Intent[] intents, String[] resolvedTypes, IBinder resultTo, - Bundle options, int userId) { + Bundle bOptions, int userId) { userId = mUserController.handleIncomingUser(Binder.getCallingPid(), Binder.getCallingUid(), userId, false, ALLOW_FULL_ONLY, "startActivityInPackage", null); // TODO: Switch to user app stacks here. int ret = mStackSupervisor.startActivities(null, uid, callingPackage, intents, resolvedTypes, - resultTo, options, userId); + resultTo, bOptions, userId); return ret; } @@ -6630,7 +6631,7 @@ public final class ActivityManagerService extends ActivityManagerNative public IIntentSender getIntentSender(int type, String packageName, IBinder token, String resultWho, int requestCode, Intent[] intents, String[] resolvedTypes, - int flags, Bundle options, int userId) { + int flags, Bundle bOptions, int userId) { enforceNotIsolatedCaller("getIntentSender"); // Refuse possible leaked file descriptors if (intents != null) { @@ -6656,8 +6657,8 @@ public final class ActivityManagerService extends ActivityManagerNative "Intent array length does not match resolvedTypes length"); } } - if (options != null) { - if (options.hasFileDescriptors()) { + if (bOptions != null) { + if (bOptions.hasFileDescriptors()) { throw new IllegalArgumentException("File descriptors passed in options"); } } @@ -6690,7 +6691,7 @@ public final class ActivityManagerService extends ActivityManagerNative } return getIntentSenderLocked(type, packageName, callingUid, userId, - token, resultWho, requestCode, intents, resolvedTypes, flags, options); + token, resultWho, requestCode, intents, resolvedTypes, flags, bOptions); } catch (RemoteException e) { throw new SecurityException(e); @@ -6701,7 +6702,7 @@ public final class ActivityManagerService extends ActivityManagerNative IIntentSender getIntentSenderLocked(int type, String packageName, int callingUid, int userId, IBinder token, String resultWho, int requestCode, Intent[] intents, String[] resolvedTypes, int flags, - Bundle options) { + Bundle bOptions) { if (DEBUG_MU) Slog.v(TAG_MU, "getIntentSenderLocked(): uid=" + callingUid); ActivityRecord activity = null; if (type == ActivityManager.INTENT_SENDER_ACTIVITY_RESULT) { @@ -6722,7 +6723,7 @@ public final class ActivityManagerService extends ActivityManagerNative PendingIntentRecord.Key key = new PendingIntentRecord.Key( type, packageName, activity, resultWho, - requestCode, intents, resolvedTypes, flags, options, userId); + requestCode, intents, resolvedTypes, flags, bOptions, userId); WeakReference<PendingIntentRecord> ref; ref = mIntentSenderRecords.get(key); PendingIntentRecord rec = ref != null ? ref.get() : null; @@ -8872,16 +8873,18 @@ public final class ActivityManagerService extends ActivityManagerNative * TODO: Add mController hook */ @Override - public void moveTaskToFront(int taskId, int flags, Bundle options) { + public void moveTaskToFront(int taskId, int flags, Bundle bOptions) { enforceCallingPermission(android.Manifest.permission.REORDER_TASKS, "moveTaskToFront()"); if (DEBUG_STACK) Slog.d(TAG_STACK, "moveTaskToFront: moving taskId=" + taskId); synchronized(this) { - moveTaskToFrontLocked(taskId, flags, options); + moveTaskToFrontLocked(taskId, flags, bOptions); } } - void moveTaskToFrontLocked(int taskId, int flags, Bundle options) { + void moveTaskToFrontLocked(int taskId, int flags, Bundle bOptions) { + ActivityOptions options = ActivityOptions.fromBundle(bOptions); + if (!checkAppSwitchAllowedLocked(Binder.getCallingPid(), Binder.getCallingUid(), -1, -1, "Task to front")) { ActivityOptions.abort(options); @@ -16611,7 +16614,7 @@ public final class ActivityManagerService extends ActivityManagerNative final int broadcastIntentLocked(ProcessRecord callerApp, String callerPackage, Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, String resultData, - Bundle resultExtras, String[] requiredPermissions, int appOp, Bundle options, + Bundle resultExtras, String[] requiredPermissions, int appOp, Bundle bOptions, boolean ordered, boolean sticky, int callingPid, int callingUid, int userId) { intent = new Intent(intent); @@ -16648,8 +16651,8 @@ public final class ActivityManagerService extends ActivityManagerNative } BroadcastOptions brOptions = null; - if (options != null) { - brOptions = new BroadcastOptions(options); + if (bOptions != null) { + brOptions = new BroadcastOptions(bOptions); if (brOptions.getTemporaryAppWhitelistDuration() > 0) { // See if the caller is allowed to do this. Note we are checking against // the actual real caller (not whoever provided the operation as say a @@ -17114,7 +17117,7 @@ public final class ActivityManagerService extends ActivityManagerNative public final int broadcastIntent(IApplicationThread caller, Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras, - String[] requiredPermissions, int appOp, Bundle options, + String[] requiredPermissions, int appOp, Bundle bOptions, boolean serialized, boolean sticky, int userId) { enforceNotIsolatedCaller("broadcastIntent"); synchronized(this) { @@ -17138,7 +17141,7 @@ public final class ActivityManagerService extends ActivityManagerNative int broadcastIntentInPackage(String packageName, int uid, Intent intent, String resolvedType, IIntentReceiver resultTo, int resultCode, String resultData, Bundle resultExtras, - String requiredPermission, Bundle options, boolean serialized, boolean sticky, + String requiredPermission, Bundle bOptions, boolean serialized, boolean sticky, int userId) { synchronized(this) { intent = verifyBroadcastLocked(intent); @@ -17148,7 +17151,7 @@ public final class ActivityManagerService extends ActivityManagerNative : new String[] {requiredPermission}; int res = broadcastIntentLocked(null, packageName, intent, resolvedType, resultTo, resultCode, resultData, resultExtras, - requiredPermissions, AppOpsManager.OP_NONE, options, serialized, + requiredPermissions, AppOpsManager.OP_NONE, bOptions, serialized, sticky, -1, uid, userId); Binder.restoreCallingIdentity(origId); return res; @@ -20287,7 +20290,7 @@ public final class ActivityManagerService extends ActivityManagerNative @Override public int startActivity(IBinder whoThread, String callingPackage, - Intent intent, String resolvedType, Bundle options) { + Intent intent, String resolvedType, Bundle bOptions) { checkCaller(); int callingUser = UserHandle.getCallingUserId(); @@ -20305,7 +20308,7 @@ public final class ActivityManagerService extends ActivityManagerNative } return mStackSupervisor.startActivityMayWait(appThread, -1, callingPackage, intent, resolvedType, null, null, null, null, 0, 0, null, null, - null, options, false, callingUser, null, tr); + null, bOptions, false, callingUser, null, tr); } @Override diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 76c4f1e28651..9278a9074c6b 100755 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -494,7 +494,7 @@ final class ActivityRecord { ActivityRecord _resultTo, String _resultWho, int _reqCode, boolean _componentSpecified, boolean _rootVoiceInteraction, ActivityStackSupervisor supervisor, - ActivityContainer container, Bundle options) { + ActivityContainer container, ActivityOptions options) { service = _service; appToken = new Token(this, service); info = aInfo; @@ -527,7 +527,7 @@ final class ActivityRecord { mStackSupervisor = supervisor; mInitialActivityContainer = container; if (options != null) { - pendingOptions = new ActivityOptions(options); + pendingOptions = options; mLaunchTaskBehind = pendingOptions.getLaunchTaskBehind(); PendingIntent usageReport = pendingOptions.getUsageTimeReport(); if (usageReport != null) { @@ -799,15 +799,6 @@ final class ActivityRecord { } } - void updateOptionsLocked(Bundle options) { - if (options != null) { - if (pendingOptions != null) { - pendingOptions.abort(); - } - pendingOptions = new ActivityOptions(options); - } - } - void updateOptionsLocked(ActivityOptions options) { if (options != null) { if (pendingOptions != null) { diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index ee9aa11b5d26..6b8bdf86303e 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -1702,7 +1702,7 @@ final class ActivityStack { return resumeTopActivityLocked(prev, null); } - final boolean resumeTopActivityLocked(ActivityRecord prev, Bundle options) { + final boolean resumeTopActivityLocked(ActivityRecord prev, ActivityOptions options) { if (mStackSupervisor.inResumeTopActivity) { // Don't even start recursing. return false; @@ -1723,7 +1723,7 @@ final class ActivityStack { return result; } - private boolean resumeTopActivityInnerLocked(ActivityRecord prev, Bundle options) { + private boolean resumeTopActivityInnerLocked(ActivityRecord prev, ActivityOptions options) { if (DEBUG_LOCKSCREEN) mService.logLockScreen(""); if (!mService.mBooting && !mService.mBooted) { @@ -2257,7 +2257,7 @@ final class ActivityStack { } final void startActivityLocked(ActivityRecord r, boolean newTask, - boolean doResume, boolean keepCurTransition, Bundle options) { + boolean doResume, boolean keepCurTransition, ActivityOptions options) { TaskRecord rTask = r.task; final int taskId = rTask.taskId; // mLaunchTaskBehind tasks get placed at the back of the task stack. @@ -2359,7 +2359,7 @@ final class ActivityStack { resetTaskIfNeededLocked(r, r); doShow = topRunningNonDelayedActivityLocked(null) == r; } - } else if (options != null && new ActivityOptions(options).getAnimationType() + } else if (options != null && options.getAnimationType() == ActivityOptions.ANIM_SCENE_TRANSITION) { doShow = false; } @@ -3795,7 +3795,7 @@ final class ActivityStack { return hasVisibleActivities; } - final void updateTransitLocked(int transit, Bundle options) { + final void updateTransitLocked(int transit, ActivityOptions options) { if (options != null) { ActivityRecord r = topRunningActivityLocked(); if (r != null && r.state != ActivityState.RESUMED) { @@ -3835,7 +3835,7 @@ final class ActivityStack { } } - final void moveTaskToFrontLocked(TaskRecord tr, boolean noAnimation, Bundle options, + final void moveTaskToFrontLocked(TaskRecord tr, boolean noAnimation, ActivityOptions options, AppTimeTracker timeTracker, String reason) { if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "moveTaskToFront: " + tr); diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 9389056e6a94..fb2c7b12375e 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -980,7 +980,7 @@ public final class ActivityStackSupervisor implements DisplayListener { IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, IBinder resultTo, String resultWho, int requestCode, int startFlags, ProfilerInfo profilerInfo, WaitResult outResult, Configuration config, - Bundle options, boolean ignoreTargetSecurity, int userId, + Bundle bOptions, boolean ignoreTargetSecurity, int userId, IActivityContainer iContainer, TaskRecord inTask) { // Refuse possible leaked file descriptors if (intent != null && intent.hasFileDescriptors()) { @@ -995,6 +995,7 @@ public final class ActivityStackSupervisor implements DisplayListener { ActivityInfo aInfo = resolveActivity(intent, resolvedType, startFlags, profilerInfo, userId); + ActivityOptions options = ActivityOptions.fromBundle(bOptions); ActivityContainer container = (ActivityContainer)iContainer; synchronized (mService) { if (container != null && container.mParentActivity != null && @@ -1152,7 +1153,7 @@ public final class ActivityStackSupervisor implements DisplayListener { final int startActivities(IApplicationThread caller, int callingUid, String callingPackage, Intent[] intents, String[] resolvedTypes, IBinder resultTo, - Bundle options, int userId) { + Bundle bOptions, int userId) { if (intents == null) { throw new NullPointerException("intents is null"); } @@ -1205,16 +1206,12 @@ public final class ActivityStackSupervisor implements DisplayListener { "FLAG_CANT_SAVE_STATE not supported here"); } - Bundle theseOptions; - if (options != null && i == intents.length-1) { - theseOptions = options; - } else { - theseOptions = null; - } + ActivityOptions options = ActivityOptions.fromBundle( + i == intents.length - 1 ? bOptions : null); int res = startActivityLocked(caller, intent, resolvedTypes[i], aInfo, null, null, resultTo, null, -1, callingPid, callingUid, callingPackage, callingPid, callingUid, - 0, theseOptions, false, componentSpecified, outActivity, null, null); + 0, options, false, componentSpecified, outActivity, null, null); if (res < 0) { return res; } @@ -1453,7 +1450,7 @@ public final class ActivityStackSupervisor implements DisplayListener { IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, IBinder resultTo, String resultWho, int requestCode, int callingPid, int callingUid, String callingPackage, - int realCallingPid, int realCallingUid, int startFlags, Bundle options, + int realCallingPid, int realCallingUid, int startFlags, ActivityOptions options, boolean ignoreTargetSecurity, boolean componentSpecified, ActivityRecord[] outActivity, ActivityContainer container, TaskRecord inTask) { int err = ActivityManager.START_SUCCESS; @@ -1728,7 +1725,7 @@ public final class ActivityStackSupervisor implements DisplayListener { || stack.mResumedActivity.info.applicationInfo.uid != callingUid)) { if (!mService.checkAppSwitchAllowedLocked(callingPid, callingUid, realCallingPid, realCallingUid, "Activity start")) { - PendingActivityLaunch pal = new PendingActivityLaunch(r, + PendingActivityLaunch pal = new PendingActivityLaunch(r, sourceRecord, startFlags, stack, callerApp); mPendingActivityLaunches.add(pal); ActivityOptions.abort(options); @@ -1922,17 +1919,16 @@ public final class ActivityStackSupervisor implements DisplayListener { final int startActivityUncheckedLocked(final ActivityRecord r, ActivityRecord sourceRecord, IVoiceInteractionSession voiceSession, IVoiceInteractor voiceInteractor, int startFlags, - boolean doResume, Bundle options, TaskRecord inTask) { + boolean doResume, ActivityOptions options, TaskRecord inTask) { final Intent intent = r.intent; final int callingUid = r.launchedFromUid; boolean overrideBounds = false; Rect newBounds = null; if (options != null && (r.info.resizeable || (inTask != null && inTask.mResizeable))) { - ActivityOptions opts = new ActivityOptions(options); - if (opts.hasBounds()) { + if (options.hasBounds()) { overrideBounds = true; - newBounds = opts.getBounds(); + newBounds = options.getBounds(); } } @@ -2868,8 +2864,8 @@ public final class ActivityStackSupervisor implements DisplayListener { return resumeTopActivitiesLocked(null, null, null); } - boolean resumeTopActivitiesLocked(ActivityStack targetStack, ActivityRecord target, - Bundle targetOptions) { + boolean resumeTopActivitiesLocked( + ActivityStack targetStack, ActivityRecord target, ActivityOptions targetOptions) { if (targetStack == null) { targetStack = mFocusedStack; } @@ -2917,7 +2913,8 @@ public final class ActivityStackSupervisor implements DisplayListener { } } - void findTaskToMoveToFrontLocked(TaskRecord task, int flags, Bundle options, String reason) { + void findTaskToMoveToFrontLocked( + TaskRecord task, int flags, ActivityOptions options, String reason) { if ((flags & ActivityManager.MOVE_TASK_NO_USER_ACTION) == 0) { mUserLeaving = true; } @@ -2933,9 +2930,8 @@ public final class ActivityStackSupervisor implements DisplayListener { } if (task.mResizeable && options != null) { - ActivityOptions opts = new ActivityOptions(options); - if (opts.hasBounds()) { - Rect bounds = opts.getBounds(); + if (options.hasBounds()) { + Rect bounds = options.getBounds(); task.updateOverrideConfiguration(bounds); final int stackId = task.getLaunchStackId(); if (stackId != task.stack.mStackId) { |