diff options
| author | 2017-10-12 13:46:18 -0700 | |
|---|---|---|
| committer | 2017-10-13 08:54:10 -0700 | |
| commit | 7daee3914d1c04fe0d66b7b9b55fd45d71b5e419 (patch) | |
| tree | ca4c241b8ed1f8ae83cfe5df6266e4368a5007d2 | |
| parent | b762f56e6b0ca4b162a964e618ea8e10645b9fb0 (diff) | |
ActivityStarter cleanup
This changelist removes individual flags for launch modes and
VR display state.
Test: go/wm-smoke
Bug: 64750076
Change-Id: I301e44b21eca6fd6d12e64e907a13f3cfe2e2c6d
3 files changed, 33 insertions, 42 deletions
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 3955339a91a1..feec44878993 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2533,7 +2533,6 @@ public class ActivityManagerService extends IActivityManager.Stub synchronized (this) { mWindowManager = wm; mStackSupervisor.setWindowManager(wm); - mActivityStarter.setWindowManager(wm); mLockTaskController.setWindowManager(wm); } } @@ -2775,7 +2774,7 @@ public class ActivityManagerService extends IActivityManager.Stub mIntentFirewall = new IntentFirewall(new IntentFirewallInterface(), mHandler); mTaskChangeNotificationController = new TaskChangeNotificationController(this, mStackSupervisor, mHandler); - mActivityStarter = new ActivityStarter(this, mStackSupervisor); + mActivityStarter = new ActivityStarter(this); mRecentTasks = new RecentTasks(this, mStackSupervisor); mStackSupervisor.setRecentTasks(mRecentTasks); mLockTaskController = new LockTaskController(mContext, mStackSupervisor, mHandler); diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index cceb57674daa..2a389a5c9479 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -116,7 +116,6 @@ import com.android.internal.app.HeavyWeightSwitcherActivity; import com.android.internal.app.IVoiceInteractor; import com.android.server.am.ActivityStackSupervisor.PendingActivityLaunch; import com.android.server.pm.InstantAppResolver; -import com.android.server.wm.WindowManagerService; import java.io.PrintWriter; import java.text.DateFormat; @@ -135,11 +134,11 @@ class ActivityStarter { private static final String TAG_FOCUS = TAG + POSTFIX_FOCUS; private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION; private static final String TAG_USER_LEAVING = TAG + POSTFIX_USER_LEAVING; + private static final int INVALID_LAUNCH_MODE = -1; private final ActivityManagerService mService; private final ActivityStackSupervisor mSupervisor; private final ActivityStartInterceptor mInterceptor; - private WindowManagerService mWindowManager; final ArrayList<PendingActivityLaunch> mPendingActivityLaunches = new ArrayList<>(); @@ -149,9 +148,7 @@ class ActivityStarter { private int mCallingUid; private ActivityOptions mOptions; - private boolean mLaunchSingleTop; - private boolean mLaunchSingleInstance; - private boolean mLaunchSingleTask; + private int mLaunchMode; private boolean mLaunchTaskBehind; private int mLaunchFlags; @@ -161,6 +158,7 @@ class ActivityStarter { private boolean mDoResume; private int mStartFlags; private ActivityRecord mSourceRecord; + // The display to launch the activity onto, barring any strong reason to do otherwise. private int mPreferredDisplayId; @@ -190,8 +188,6 @@ class ActivityStarter { private IVoiceInteractionSession mVoiceSession; private IVoiceInteractor mVoiceInteractor; - private boolean mUsingVr2dDisplay; - // Last home activity record we attempted to start private final ActivityRecord[] mLastHomeActivityStartRecord = new ActivityRecord[1]; // The result of the last home activity we attempted to start. @@ -211,11 +207,9 @@ class ActivityStarter { mCallingUid = -1; mOptions = null; - mLaunchSingleTop = false; - mLaunchSingleInstance = false; - mLaunchSingleTask = false; mLaunchTaskBehind = false; mLaunchFlags = 0; + mLaunchMode = INVALID_LAUNCH_MODE; mLaunchBounds = null; @@ -243,16 +237,13 @@ class ActivityStarter { mVoiceSession = null; mVoiceInteractor = null; - mUsingVr2dDisplay = false; - mIntentDelivered = false; } - ActivityStarter(ActivityManagerService service, ActivityStackSupervisor supervisor) { + ActivityStarter(ActivityManagerService service) { mService = service; - mSupervisor = supervisor; + mSupervisor = mService.mStackSupervisor; mInterceptor = new ActivityStartInterceptor(mService, mSupervisor); - mUsingVr2dDisplay = false; } int startActivityLocked(IApplicationThread caller, Intent intent, Intent ephemeralIntent, @@ -626,7 +617,7 @@ class ActivityStarter { // recents into docked stack. We don't want the launched activity to be alone in a // docked stack, so we want to immediately launch recents too. if (DEBUG_RECENTS) Slog.d(TAG, "Scheduling recents launch."); - mWindowManager.showRecentApps(true /* fromHome */); + mService.mWindowManager.showRecentApps(true /* fromHome */); } return; } @@ -1061,7 +1052,7 @@ class ActivityStarter { // operations. if ((mLaunchFlags & FLAG_ACTIVITY_CLEAR_TOP) != 0 || isDocumentLaunchesIntoExisting(mLaunchFlags) - || mLaunchSingleInstance || mLaunchSingleTask) { + || isLaunchModeOneOf(LAUNCH_SINGLE_INSTANCE, LAUNCH_SINGLE_TASK)) { final TaskRecord task = reusedActivity.getTask(); // In this situation we want to remove all activities from the task up to the one @@ -1144,7 +1135,7 @@ class ActivityStarter { && top.userId == mStartActivity.userId && top.app != null && top.app.thread != null && ((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0 - || mLaunchSingleTop || mLaunchSingleTask); + || isLaunchModeOneOf(LAUNCH_SINGLE_TOP, LAUNCH_SINGLE_TASK)); if (dontStart) { // For paranoia, make sure we have correctly resumed the top activity. topStack.mLastPausedActivity = null; @@ -1226,7 +1217,7 @@ class ActivityStarter { mTargetStack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); // Go ahead and tell window manager to execute app transition for this activity // since the app transition will not be triggered through the resume channel. - mWindowManager.executeAppTransition(); + mService.mWindowManager.executeAppTransition(); } else { // If the target stack was not previously focusable (previous top running activity // on that stack was not visible) then any prior calls to move the stack to the @@ -1267,13 +1258,13 @@ class ActivityStarter { mLaunchBounds = getOverrideBounds(r, options, inTask); - mLaunchSingleTop = r.launchMode == LAUNCH_SINGLE_TOP; - mLaunchSingleInstance = r.launchMode == LAUNCH_SINGLE_INSTANCE; - mLaunchSingleTask = r.launchMode == LAUNCH_SINGLE_TASK; + mLaunchMode = r.launchMode; + mLaunchFlags = adjustLaunchFlagsToDocumentMode( - r, mLaunchSingleInstance, mLaunchSingleTask, mIntent.getFlags()); + r, LAUNCH_SINGLE_INSTANCE == mLaunchMode, + LAUNCH_SINGLE_TASK == mLaunchMode, mIntent.getFlags()); mLaunchTaskBehind = r.mLaunchTaskBehind - && !mLaunchSingleTask && !mLaunchSingleInstance + && !isLaunchModeOneOf(LAUNCH_SINGLE_TASK, LAUNCH_SINGLE_INSTANCE) && (mLaunchFlags & FLAG_ACTIVITY_NEW_DOCUMENT) != 0; sendNewTaskResultRequestIfNeeded(); @@ -1383,7 +1374,7 @@ class ActivityStarter { // If this task is empty, then we are adding the first activity -- it // determines the root, and must be launching as a NEW_TASK. - if (mLaunchSingleInstance || mLaunchSingleTask) { + if (isLaunchModeOneOf(LAUNCH_SINGLE_INSTANCE, LAUNCH_SINGLE_TASK)) { if (!baseIntent.getComponent().equals(mStartActivity.intent.getComponent())) { ActivityOptions.abort(mOptions); throw new IllegalArgumentException("Trying to launch singleInstance/Task " @@ -1445,7 +1436,7 @@ class ActivityStarter { // instance... this new activity it is starting must go on its // own task. mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK; - } else if (mLaunchSingleInstance || mLaunchSingleTask) { + } else if (isLaunchModeOneOf(LAUNCH_SINGLE_INSTANCE, LAUNCH_SINGLE_TASK)) { // The activity being started is a single instance... it always // gets launched into its own task. mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK; @@ -1496,7 +1487,7 @@ class ActivityStarter { // launch this as a new task behind the current one. boolean putIntoExistingTask = ((mLaunchFlags & FLAG_ACTIVITY_NEW_TASK) != 0 && (mLaunchFlags & FLAG_ACTIVITY_MULTIPLE_TASK) == 0) - || mLaunchSingleInstance || mLaunchSingleTask; + || isLaunchModeOneOf(LAUNCH_SINGLE_INSTANCE, LAUNCH_SINGLE_TASK); // If bring to front is requested, and no result is requested and we have not been given // an explicit task to launch in to, and we can find a task that was started with this // same component, then instead of launching bring that one to the front. @@ -1506,7 +1497,7 @@ class ActivityStarter { final TaskRecord task = mSupervisor.anyTaskForIdLocked(mOptions.getLaunchTaskId()); intentActivity = task != null ? task.getTopActivity() : null; } else if (putIntoExistingTask) { - if (mLaunchSingleInstance) { + if (LAUNCH_SINGLE_INSTANCE == mLaunchMode) { // There can be one and only one instance of single instance activity in the // history, and it is always in its own unique task, so we do a special search. intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info, @@ -1515,7 +1506,7 @@ class ActivityStarter { // For the launch adjacent case we only want to put the activity in an existing // task if the activity already exists in the history. intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info, - !mLaunchSingleTask); + !(LAUNCH_SINGLE_TASK == mLaunchMode)); } else { // Otherwise find the best task to put the activity in. intentActivity = mSupervisor.findTaskLocked(mStartActivity, mPreferredDisplayId); @@ -1544,7 +1535,6 @@ class ActivityStarter { if (DEBUG_STACK) { Slog.d(TAG, "getSourceDisplayId :" + displayId); } - mUsingVr2dDisplay = true; return displayId; } @@ -1718,7 +1708,7 @@ class ActivityStarter { // mTaskToReturnTo values and we don't want to overwrite them accidentally. mMovedOtherTask = true; } else if ((mLaunchFlags & FLAG_ACTIVITY_CLEAR_TOP) != 0 - || mLaunchSingleInstance || mLaunchSingleTask) { + || isLaunchModeOneOf(LAUNCH_SINGLE_INSTANCE, LAUNCH_SINGLE_TASK)) { ActivityRecord top = intentActivity.getTask().performClearTaskLocked(mStartActivity, mLaunchFlags); if (top == null) { @@ -1747,7 +1737,8 @@ class ActivityStarter { // so we take that as a request to bring the task to the foreground. If the top // activity in the task is the root activity, deliver this new intent to it if it // desires. - if (((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0 || mLaunchSingleTop) + if (((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0 + || LAUNCH_SINGLE_TOP == mLaunchMode) && intentActivity.realActivity.equals(mStartActivity.realActivity)) { if (intentActivity.frontOfTask) { intentActivity.getTask().setIntent(mStartActivity); @@ -1951,7 +1942,7 @@ class ActivityStarter { if (top != null && top.realActivity.equals(mStartActivity.realActivity) && top.userId == mStartActivity.userId) { if ((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0 - || mLaunchSingleTop || mLaunchSingleTask) { + || isLaunchModeOneOf(LAUNCH_SINGLE_TOP, LAUNCH_SINGLE_TASK)) { mTargetStack.moveTaskToFrontLocked(mInTask, mNoAnimation, mOptions, mStartActivity.appTimeTracker, "inTaskToFront"); if ((mStartFlags & START_FLAG_ONLY_IF_NEEDED) != 0) { @@ -2175,7 +2166,8 @@ class ActivityStarter { return mReuseTask.getStack(); } - final int vrDisplayId = mUsingVr2dDisplay ? mPreferredDisplayId : INVALID_DISPLAY; + final int vrDisplayId = mPreferredDisplayId == mService.mVr2dDisplayId + ? mPreferredDisplayId : INVALID_DISPLAY; final ActivityStack launchStack = mSupervisor.getLaunchStack(r, aOptions, task, ON_TOP, vrDisplayId); @@ -2234,8 +2226,8 @@ class ActivityStarter { return newBounds; } - void setWindowManager(WindowManagerService wm) { - mWindowManager = wm; + private boolean isLaunchModeOneOf(int mode1, int mode2) { + return mode1 == mLaunchMode || mode2 == mLaunchMode; } static boolean isDocumentLaunchesIntoExisting(int flags) { @@ -2316,11 +2308,11 @@ class ActivityStarter { } pw.print(prefix); pw.print("mLaunchSingleTop="); - pw.print(mLaunchSingleTop); + pw.print(LAUNCH_SINGLE_TOP == mLaunchMode); pw.print(" mLaunchSingleInstance="); - pw.print(mLaunchSingleInstance); + pw.print(LAUNCH_SINGLE_INSTANCE == mLaunchMode); pw.print(" mLaunchSingleTask="); - pw.println(mLaunchSingleTask); + pw.println(LAUNCH_SINGLE_TASK == mLaunchMode); pw.print(prefix); pw.print("mLaunchFlags=0x"); pw.print(Integer.toHexString(mLaunchFlags)); diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java index e1623b075ef1..026abce42b7d 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityStarterTests.java @@ -60,7 +60,7 @@ public class ActivityStarterTests extends ActivityTestsBase { public void setUp() throws Exception { super.setUp(); mService = createActivityManagerService(); - mStarter = new ActivityStarter(mService, mService.mStackSupervisor); + mStarter = new ActivityStarter(mService); } @Test |