summaryrefslogtreecommitdiffstats
path: root/services/java
diff options
context:
space:
mode:
authorCraig Mautner <cmautner@google.com>2013-06-24 18:38:10 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2013-06-24 18:38:11 +0000
commit7a78b39428f86015a1cb1f59d65de455cd52350b (patch)
treec1b070fe5a67c0880741216e2db8b9c7a7c494f6 /services/java
parentcf165a0ae00b6d4098de912545c1367aecf94c10 (diff)
parentf0ac5c87f2a4a7ee8148a7b8d02b55e439ab130c (diff)
downloadframeworks_base-7a78b39428f86015a1cb1f59d65de455cd52350b.zip
frameworks_base-7a78b39428f86015a1cb1f59d65de455cd52350b.tar.gz
frameworks_base-7a78b39428f86015a1cb1f59d65de455cd52350b.tar.bz2
Merge "Fix unnecessary and harmful task movement."
Diffstat (limited to 'services/java')
-rw-r--r--services/java/com/android/server/am/ActivityStackSupervisor.java22
-rw-r--r--services/java/com/android/server/wm/TaskStack.java10
-rw-r--r--services/java/com/android/server/wm/WindowManagerService.java1
3 files changed, 22 insertions, 11 deletions
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index a4fd7ad..4f30558 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -2170,29 +2170,31 @@ public final class ActivityStackSupervisor {
for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
final ActivityStack stack = mStacks.get(stackNdx);
final ActivityRecord r = stack.topRunningActivityLocked(null);
+ final ActivityState state = r == null ? ActivityState.DESTROYED : r.state;
if (isFrontStack(stack)) {
if (r == null) {
Slog.e(TAG, "validateTop...: null top activity, stack=" + stack);
} else {
- if (stack.mPausingActivity != null) {
+ final ActivityRecord pausing = stack.mPausingActivity;
+ if (pausing != null && pausing == r) {
Slog.e(TAG, "validateTop...: top stack has pausing activity r=" + r +
- " state=" + r.state);
+ " state=" + state);
}
- if (r.state != ActivityState.INITIALIZING &&
- r.state != ActivityState.RESUMED) {
+ if (state != ActivityState.INITIALIZING && state != ActivityState.RESUMED) {
Slog.e(TAG, "validateTop...: activity in front not resumed r=" + r +
- " state=" + r.state);
+ " state=" + state);
}
}
} else {
- if (stack.mResumedActivity != null) {
+ final ActivityRecord resumed = stack.mResumedActivity;
+ if (resumed != null && resumed == r) {
Slog.e(TAG, "validateTop...: back stack has resumed activity r=" + r +
- " state=" + r.state);
+ " state=" + state);
}
- if (r != null && (r.state == ActivityState.INITIALIZING
- || r.state == ActivityState.RESUMED)) {
+ if (r != null && (state == ActivityState.INITIALIZING
+ || state == ActivityState.RESUMED)) {
Slog.e(TAG, "validateTop...: activity in back resumed r=" + r +
- " state=" + r.state);
+ " state=" + state);
}
}
}
diff --git a/services/java/com/android/server/wm/TaskStack.java b/services/java/com/android/server/wm/TaskStack.java
index 827958d..b43a7a1 100644
--- a/services/java/com/android/server/wm/TaskStack.java
+++ b/services/java/com/android/server/wm/TaskStack.java
@@ -16,7 +16,12 @@
package com.android.server.wm;
+import static com.android.server.wm.WindowManagerService.DEBUG_TASK_MOVEMENT;
+import static com.android.server.wm.WindowManagerService.TAG;
+
import android.graphics.Rect;
+import android.os.Debug;
+import android.util.Slog;
import android.util.TypedValue;
import static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID;
@@ -88,6 +93,7 @@ public class TaskStack {
* @param toTop Whether to add it to the top or bottom.
*/
boolean addTask(Task task, boolean toTop) {
+ if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "addTask: task=" + task + " toTop=" + toTop);
mStackBox.makeDirty();
mTasks.add(toTop ? mTasks.size() : 0, task);
task.mStack = this;
@@ -95,11 +101,14 @@ public class TaskStack {
}
boolean moveTaskToTop(Task task) {
+ if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "moveTaskToTop: task=" + task + " Callers="
+ + Debug.getCallers(6));
mTasks.remove(task);
return addTask(task, true);
}
boolean moveTaskToBottom(Task task) {
+ if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "moveTaskToBottom: task=" + task);
mTasks.remove(task);
return addTask(task, false);
}
@@ -110,6 +119,7 @@ public class TaskStack {
* @param task The Task to delete.
*/
void removeTask(Task task) {
+ if (DEBUG_TASK_MOVEMENT) Slog.d(TAG, "removeTask: task=" + task);
mStackBox.makeDirty();
mTasks.remove(task);
}
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index ab0590e..65ca00d 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -3777,7 +3777,6 @@ public class WindowManagerService extends IWindowManager.Stub
}
changed = mFocusedApp != newFocus;
mFocusedApp = newFocus;
- moveTaskToTop(newFocus.groupId);
if (DEBUG_FOCUS) Slog.v(TAG, "Set focused app to: " + mFocusedApp
+ " moveFocusNow=" + moveFocusNow);
if (changed) {