summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2013-10-04 20:11:26 -0700
committerCraig Mautner <cmautner@google.com>2013-10-04 20:11:26 -0700
commit9c85c201a2a2d9743f50ca70c5f55a8471616d3f (patch)
tree5e4ee340a916f01b1e336586078c4cc5c8cae650
parent3d61bf45e559e084fa173bd50e2e7d7286dc9a35 (diff)
downloadframeworks_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
-rw-r--r--services/java/com/android/server/am/ActivityRecord.java4
-rw-r--r--services/java/com/android/server/am/ActivityStack.java6
-rw-r--r--services/java/com/android/server/am/ActivityStackSupervisor.java24
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);