summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2018-07-27 00:31:48 +0800
committer Riddle Hsu <riddlehsu@google.com> 2018-07-27 18:52:00 +0800
commit57831b51cd07bc21fc50be381695df5d90911c25 (patch)
tree5b65750f66b46abdba82a6aaf6dd04d5252d0bec
parent125633276910b2815804bdd4610d62017240eb4c (diff)
Move display order of focused stack to top when updating focus
Now focused stack depends on the order of display, so if a stack is expected to be focused, its display should also move to top. Bug: 111818977 Test: atest CtsActivityManagerDeviceTestCases:ActivityManagerMultiDisplayTests Test: atest FrameworksServicesTests:ActivityStackSupervisorTests Change-Id: I38e0aa4a78712561ab796b6522b733421286b7d9
-rw-r--r--services/core/java/com/android/server/am/ActivityDisplay.java12
-rw-r--r--services/core/java/com/android/server/am/ActivityStack.java6
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java4
-rw-r--r--services/core/java/com/android/server/wm/DisplayWindowController.java5
-rw-r--r--services/core/java/com/android/server/wm/TaskStack.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java9
7 files changed, 24 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/am/ActivityDisplay.java b/services/core/java/com/android/server/am/ActivityDisplay.java
index acdc73886357..f166e64fd881 100644
--- a/services/core/java/com/android/server/am/ActivityDisplay.java
+++ b/services/core/java/com/android/server/am/ActivityDisplay.java
@@ -153,15 +153,19 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
onStackOrderChanged();
}
- void positionChildAtTop(ActivityStack stack) {
- positionChildAt(stack, mStacks.size());
+ void positionChildAtTop(ActivityStack stack, boolean includingParents) {
+ positionChildAt(stack, mStacks.size(), includingParents);
}
void positionChildAtBottom(ActivityStack stack) {
- positionChildAt(stack, 0);
+ positionChildAt(stack, 0, false /* includingParents */);
}
private void positionChildAt(ActivityStack stack, int position) {
+ positionChildAt(stack, position, false /* includingParents */);
+ }
+
+ private void positionChildAt(ActivityStack stack, int position, boolean includingParents) {
// TODO: Keep in sync with WindowContainer.positionChildAt(), once we change that to adjust
// the position internally, also update the logic here
mStacks.remove(stack);
@@ -173,7 +177,7 @@ class ActivityDisplay extends ConfigurationContainer<ActivityStack>
// we don't have to call WindowContainerController#positionChildAt() here.
if (stack.getWindowContainerController() != null) {
mWindowContainerController.positionChildAt(stack.getWindowContainerController(),
- insertPosition);
+ insertPosition, includingParents);
}
onStackOrderChanged();
}
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index accb61f287ea..68a6b5afe71d 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -516,7 +516,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
// Since always on top is only on when the stack is freeform or pinned, the state
// can be toggled when the windowing mode changes. We must make sure the stack is
// placed properly when always on top state changes.
- display.positionChildAtTop(this);
+ display.positionChildAtTop(this, false /* includingParents */);
}
}
@@ -1056,7 +1056,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
mStackSupervisor.moveHomeStackToFront(reason + " returnToHome");
}
- display.positionChildAtTop(this);
+ display.positionChildAtTop(this, true /* includingParents */);
mStackSupervisor.setFocusStackUnchecked(reason, this);
if (task != null) {
// This also moves the entire hierarchy branch to top, including parents
@@ -5319,7 +5319,7 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai
// always on top windows. Since the position the stack should be inserted into is calculated
// properly in {@link ActivityDisplay#getTopInsertPosition()} in both cases, we can just
// request that the stack is put at top here.
- display.positionChildAtTop(this);
+ display.positionChildAtTop(this, false /* includingParents */);
}
void moveToFrontAndResumeStateIfNeeded(ActivityRecord r, boolean moveToFront, boolean setResume,
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index cea5f4c61ab7..218fcb7a998c 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -1931,8 +1931,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
getParent().positionChildAt(position, this, includingParents);
}
- void positionStackAt(int position, TaskStack child) {
- mTaskStackContainers.positionChildAt(position, child, false /* includingParents */);
+ void positionStackAt(int position, TaskStack child, boolean includingParents) {
+ mTaskStackContainers.positionChildAt(position, child, includingParents);
layoutAndAssignWindowLayersIfNeeded();
}
diff --git a/services/core/java/com/android/server/wm/DisplayWindowController.java b/services/core/java/com/android/server/wm/DisplayWindowController.java
index a1639c2dd892..74a8a353a5c9 100644
--- a/services/core/java/com/android/server/wm/DisplayWindowController.java
+++ b/services/core/java/com/android/server/wm/DisplayWindowController.java
@@ -76,7 +76,8 @@ public class DisplayWindowController
/**
* Positions the task stack at the given position in the task stack container.
*/
- public void positionChildAt(StackWindowController child, int position) {
+ public void positionChildAt(StackWindowController child, int position,
+ boolean includingParents) {
synchronized (mWindowMap) {
if (DEBUG_STACK) Slog.i(TAG_WM, "positionTaskStackAt: positioning stack=" + child
+ " at " + position);
@@ -90,7 +91,7 @@ public class DisplayWindowController
"positionTaskStackAt: could not find stack=" + this);
return;
}
- mContainer.positionStackAt(position, child.mContainer);
+ mContainer.positionStackAt(position, child.mContainer, includingParents);
}
}
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 9075b6c7fa49..2b8493749c79 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -751,7 +751,7 @@ public class TaskStack extends WindowContainer<Task> implements
// be inserted into is calculated properly in
// {@link DisplayContent#findPositionForStack()} in both cases, we can just request that
// the stack is put at top here.
- mDisplayContent.positionStackAt(POSITION_TOP, this);
+ mDisplayContent.positionStackAt(POSITION_TOP, this, false /* includingParents */);
}
}
diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
index d51c99b2697c..5669819091ff 100644
--- a/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
+++ b/services/tests/servicestests/src/com/android/server/am/ActivityStackTests.java
@@ -551,7 +551,7 @@ public class ActivityStackTests extends ActivityTestsBase {
// Home stack and activity are created in ActivityTestsBase#setupActivityManagerService
stack = mDefaultDisplay.getStack(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_HOME);
if (onTop) {
- mDefaultDisplay.positionChildAtTop(stack);
+ mDefaultDisplay.positionChildAtTop(stack, false /* includingParents */);
} else {
mDefaultDisplay.positionChildAtBottom(stack);
}
diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
index 4e9894b66d3a..ef0e27b9cc1e 100644
--- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
+++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java
@@ -394,7 +394,8 @@ public class DisplayContentTests extends WindowTestsBase {
WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, mDisplayContent).mContainer;
final Task task = createTaskInStack(alwaysOnTopStack, 0 /* userId */);
alwaysOnTopStack.setAlwaysOnTop(true);
- mDisplayContent.positionStackAt(POSITION_TOP, alwaysOnTopStack);
+ mDisplayContent.positionStackAt(POSITION_TOP, alwaysOnTopStack,
+ false /* includingParents */);
assertTrue(alwaysOnTopStack.isAlwaysOnTop());
// Ensure always on top state is synced to the children of the stack.
assertTrue(alwaysOnTopStack.getTopChild().isAlwaysOnTop());
@@ -408,7 +409,8 @@ public class DisplayContentTests extends WindowTestsBase {
final TaskStack anotherAlwaysOnTopStack = createStackControllerOnStackOnDisplay(
WINDOWING_MODE_FREEFORM, ACTIVITY_TYPE_STANDARD, mDisplayContent).mContainer;
anotherAlwaysOnTopStack.setAlwaysOnTop(true);
- mDisplayContent.positionStackAt(POSITION_TOP, anotherAlwaysOnTopStack);
+ mDisplayContent.positionStackAt(POSITION_TOP, anotherAlwaysOnTopStack,
+ false /* includingParents */);
assertTrue(anotherAlwaysOnTopStack.isAlwaysOnTop());
int topPosition = mDisplayContent.getStacks().size() - 1;
// Ensure the new alwaysOnTop stack is put below the pinned stack, but on top of the
@@ -424,7 +426,8 @@ public class DisplayContentTests extends WindowTestsBase {
assertEquals(nonAlwaysOnTopStack, mDisplayContent.getStacks().get(topPosition - 3));
anotherAlwaysOnTopStack.setAlwaysOnTop(false);
- mDisplayContent.positionStackAt(POSITION_TOP, anotherAlwaysOnTopStack);
+ mDisplayContent.positionStackAt(POSITION_TOP, anotherAlwaysOnTopStack,
+ false /* includingParents */);
assertFalse(anotherAlwaysOnTopStack.isAlwaysOnTop());
// Ensure, when always on top is turned off for a stack, the stack is put just below all
// other always on top stacks.