diff options
author | Craig Mautner <cmautner@google.com> | 2013-10-04 20:11:26 -0700 |
---|---|---|
committer | Craig Mautner <cmautner@google.com> | 2013-10-04 20:11:26 -0700 |
commit | 9c85c201a2a2d9743f50ca70c5f55a8471616d3f (patch) | |
tree | 5e4ee340a916f01b1e336586078c4cc5c8cae650 | |
parent | 3d61bf45e559e084fa173bd50e2e7d7286dc9a35 (diff) | |
download | frameworks_base-9c85c201a2a2d9743f50ca70c5f55a8471616d3f.zip frameworks_base-9c85c201a2a2d9743f50ca70c5f55a8471616d3f.tar.gz frameworks_base-9c85c201a2a2d9743f50ca70c5f55a8471616d3f.tar.bz2 |
Evaluate task on top of home when task is brought to front.
Localize the point where it is determined whether a task should sit on
top of home or return to the task below it.
Fixes bug 11080913.
Change-Id: I79d1ea9722c867d6b550ddfcd1db35517a79cd90
3 files changed, 8 insertions, 26 deletions
diff --git a/services/java/com/android/server/am/ActivityRecord.java b/services/java/com/android/server/am/ActivityRecord.java index 2c0b83b..cf68667 100644 --- a/services/java/com/android/server/am/ActivityRecord.java +++ b/services/java/com/android/server/am/ActivityRecord.java @@ -572,8 +572,8 @@ final class ActivityRecord { } boolean isRootActivity() { - ArrayList<ActivityRecord> activities = task.mActivities; - return activities.size() == 0 || this == task.mActivities.get(0); + final ArrayList<ActivityRecord> activities = task.mActivities; + return activities.size() == 0 || this == activities.get(0); } UriPermissionOwner getUriPermissionsLocked() { diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java index 45b30f1..197aac5 100644 --- a/services/java/com/android/server/am/ActivityStack.java +++ b/services/java/com/android/server/am/ActivityStack.java @@ -1623,6 +1623,12 @@ final class ActivityStack { } private void insertTaskAtTop(TaskRecord task) { + // If this is being moved to the top by another activity or being launched from the home + // activity, set mOnTopOfHome accordingly. + final boolean fromHome = mStackSupervisor.getLastStack().isHomeStack(); + if (!isHomeStack() && (fromHome || topTask() != task)) { + task.mOnTopOfHome = fromHome; + } mTaskHistory.remove(task); // Now put task at top. int stackNdx = mTaskHistory.size(); diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java index 2b69a4e..b8b41cc 100644 --- a/services/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/java/com/android/server/am/ActivityStackSupervisor.java @@ -288,22 +288,6 @@ public final class ActivityStackSupervisor { return mService.startHomeActivityLocked(mCurrentUser); } - final void setLaunchHomeTaskNextFlag(ActivityRecord sourceRecord, ActivityRecord r, - ActivityStack stack) { - if (stack == mHomeStack) { - return; - } - if ((sourceRecord == null && getLastStack() == mHomeStack) || - (sourceRecord != null && sourceRecord.isHomeActivity())) { - if (r == null) { - r = stack.topRunningActivityLocked(null); - } - if (r != null && !r.isHomeActivity() && r.isRootActivity()) { - r.task.mOnTopOfHome = true; - } - } - } - void setDismissKeyguard(boolean dismiss) { if (ActivityManagerService.DEBUG_LOCKSCREEN) mService.logLockScreen(" dismiss=" + dismiss); mDismissKeyguardOnNextActivity = dismiss; @@ -1479,7 +1463,6 @@ public final class ActivityStackSupervisor { // is the case, so this is it! And for paranoia, make // sure we have correctly resumed the top activity. if (doResume) { - setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack); resumeTopActivitiesLocked(targetStack, null, options); } else { ActivityOptions.abort(options); @@ -1575,9 +1558,6 @@ public final class ActivityStackSupervisor { // don't use that intent!) And for paranoia, make // sure we have correctly resumed the top activity. if (doResume) { - // Reset flag so it gets correctly reevaluated. - intentActivity.task.mOnTopOfHome = false; - setLaunchHomeTaskNextFlag(sourceRecord, intentActivity, targetStack); targetStack.resumeTopActivityLocked(null, options); } else { ActivityOptions.abort(options); @@ -1615,7 +1595,6 @@ public final class ActivityStackSupervisor { // resumed the top activity. topStack.mLastPausedActivity = null; if (doResume) { - setLaunchHomeTaskNextFlag(sourceRecord, null, topStack); resumeTopActivitiesLocked(); } ActivityOptions.abort(options); @@ -1694,7 +1673,6 @@ public final class ActivityStackSupervisor { // resumed the top activity. targetStack.mLastPausedActivity = null; if (doResume) { - setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack); targetStack.resumeTopActivityLocked(null); } ActivityOptions.abort(options); @@ -1717,7 +1695,6 @@ public final class ActivityStackSupervisor { top.deliverNewIntentLocked(callingUid, r.intent); targetStack.mLastPausedActivity = null; if (doResume) { - setLaunchHomeTaskNextFlag(sourceRecord, null, targetStack); targetStack.resumeTopActivityLocked(null); } return ActivityManager.START_DELIVERED_TO_TOP; @@ -1751,7 +1728,6 @@ public final class ActivityStackSupervisor { EventLog.writeEvent(EventLogTags.AM_CREATE_TASK, r.userId, r.task.taskId); } ActivityStack.logStartActivity(EventLogTags.AM_CREATE_ACTIVITY, r, r.task); - setLaunchHomeTaskNextFlag(sourceRecord, r, targetStack); targetStack.mLastPausedActivity = null; targetStack.startActivityLocked(r, newTask, doResume, keepCurTransition, options); mService.setFocusedActivityLocked(r); |