diff options
| author | 2016-07-01 21:59:51 +0000 | |
|---|---|---|
| committer | 2016-07-01 21:59:51 +0000 | |
| commit | 971991b5fe6b7005cbcd757a0d3e290bfb691d8d (patch) | |
| tree | d52e35e5ee5bbf0e2f2f4c9fbce5658c2c697942 | |
| parent | 10bbf49ea446f43e515d8e1fc2f74abd574ff4d0 (diff) | |
| parent | fc20505e37f9986b7ecc5eaa337d3a49a1db265e (diff) | |
Merge \"Don\'t update task to return to type for last task over home\" into nyc-mr1-dev
am: fc20505e37
Change-Id: I10017faa09457bc930734b415ff518d5be81ee71
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStack.java | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/am/ActivityStarter.java | 6 |
2 files changed, 12 insertions, 2 deletions
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index fc649a1ea140..994c3dec0aad 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -2587,11 +2587,14 @@ final class ActivityStack { } private void insertTaskAtTop(TaskRecord task, ActivityRecord newActivity) { + boolean isLastTaskOverHome = false; // If the moving task is over home stack, transfer its return type to next task if (task.isOverHomeStack()) { final TaskRecord nextTask = getNextTask(task); if (nextTask != null) { nextTask.setTaskToReturnTo(task.getTaskToReturnTo()); + } else { + isLastTaskOverHome = true; } } @@ -2601,7 +2604,10 @@ final class ActivityStack { ActivityStack lastStack = mStackSupervisor.getLastStack(); final boolean fromHome = lastStack.isHomeStack(); if (!isHomeStack() && (fromHome || topTask() != task)) { - int returnToType = APPLICATION_ACTIVITY_TYPE; + // If it's a last task over home - we default to keep its return to type not to + // make underlying task focused when this one will be finished. + int returnToType = isLastTaskOverHome + ? task.getTaskToReturnTo() : APPLICATION_ACTIVITY_TYPE; if (fromHome && StackId.allowTopTaskToReturnHome(mStackId)) { returnToType = lastStack.topTask() == null ? HOME_ACTIVITY_TYPE : lastStack.topTask().taskType; diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 77b450fe1fd4..53289be4294a 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1121,7 +1121,11 @@ class ActivityStarter { return START_RETURN_LOCK_TASK_MODE_VIOLATION; } if (!mMovedOtherTask) { - updateTaskReturnToType(mStartActivity.task, mLaunchFlags, topStack); + // If stack id is specified in activity options, usually it means that activity is + // launched not from currently focused stack (e.g. from SysUI or from shell) - in + // that case we check the target stack. + updateTaskReturnToType(mStartActivity.task, mLaunchFlags, + preferredLaunchStackId != INVALID_STACK_ID ? mTargetStack : topStack); } } else if (mSourceRecord != null) { if (mSupervisor.isLockTaskModeViolation(mSourceRecord.task)) { |