diff --git a/services/core/java/com/android/server/am/ActivityDisplay.java b/services/core/java/com/android/server/am/ActivityDisplay.java index 46ab0e09436ad..db21ef1f9b5c3 100644 --- a/services/core/java/com/android/server/am/ActivityDisplay.java +++ b/services/core/java/com/android/server/am/ActivityDisplay.java @@ -50,9 +50,7 @@ import android.util.proto.ProtoOutputStream; import android.view.Display; import com.android.internal.annotations.VisibleForTesting; import com.android.server.wm.ConfigurationContainer; -import com.android.server.wm.DisplayWindowController; -import com.android.server.wm.WindowContainerListener; import java.io.PrintWriter; import java.util.ArrayList; @@ -60,8 +58,7 @@ import java.util.ArrayList; * Exactly one of these classes per Display in the system. Capable of holding zero or more * attached {@link ActivityStack}s. */ -class ActivityDisplay extends ConfigurationContainer - implements WindowContainerListener { +class ActivityDisplay extends ConfigurationContainer { private static final String TAG = TAG_WITH_CLASS_NAME ? "ActivityDisplay" : TAG_AM; private static final String TAG_STACK = TAG + POSTFIX_STACK; @@ -103,8 +100,6 @@ class ActivityDisplay extends ConfigurationContainer // Used in updating the display size private Point mTmpDisplaySize = new Point(); - private DisplayWindowController mWindowContainerController; - ActivityDisplay(ActivityStackSupervisor supervisor, int displayId) { mSupervisor = supervisor; mDisplayId = displayId; @@ -113,15 +108,10 @@ class ActivityDisplay extends ConfigurationContainer throw new IllegalStateException("Display does not exist displayId=" + displayId); } mDisplay = display; - mWindowContainerController = createWindowContainerController(); updateBounds(); } - protected DisplayWindowController createWindowContainerController() { - return new DisplayWindowController(mDisplayId, this); - } - void updateBounds() { mDisplay.getSize(mTmpDisplaySize); setBounds(0, 0, mTmpDisplaySize.x, mTmpDisplaySize.y); @@ -158,10 +148,7 @@ class ActivityDisplay extends ConfigurationContainer private void positionChildAt(ActivityStack stack, int position) { mStacks.remove(stack); - final int insertPosition = getTopInsertPosition(stack, position); - mStacks.add(insertPosition, stack); - mWindowContainerController.positionChildAt(stack.getWindowContainerController(), - insertPosition); + mStacks.add(getTopInsertPosition(stack, position), stack); } private int getTopInsertPosition(ActivityStack stack, int candidatePosition) { diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 172228b88eb2c..9d06b0dbab642 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -994,6 +994,12 @@ class ActivityStack extends ConfigurationContai insertTaskAtTop(task, null); return; } + + task = topTask(); + if (task != null) { + mWindowContainerController.positionChildAtTop(task.getWindowContainerController(), + true /* includingParents */); + } } /** @@ -1018,6 +1024,12 @@ class ActivityStack extends ConfigurationContai if (task != null) { insertTaskAtBottom(task); return; + } else { + task = bottomTask(); + if (task != null) { + mWindowContainerController.positionChildAtBottom( + task.getWindowContainerController(), true /* includingParents */); + } } } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index d7a58d99a4d69..6dc384a8831e1 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -1802,11 +1802,6 @@ class DisplayContent extends WindowContainer= 0; --stackNdx) { final TaskStack stack = mTaskStackContainers.getChildAt(stackNdx); diff --git a/services/core/java/com/android/server/wm/DisplayWindowController.java b/services/core/java/com/android/server/wm/DisplayWindowController.java deleted file mode 100644 index ad4957e4fc6fc..0000000000000 --- a/services/core/java/com/android/server/wm/DisplayWindowController.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.android.server.wm; - -import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_STACK; -import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM; - -import android.content.res.Configuration; -import android.util.Slog; - -/** - * Controller for the display container. This is created by activity manager to link activity - * displays to the display content they use in window manager. - */ -public class DisplayWindowController - extends WindowContainerController { - - private final int mDisplayId; - - public DisplayWindowController(int displayId, WindowContainerListener listener) { - super(listener, WindowManagerService.getInstance()); - mDisplayId = displayId; - - synchronized (mWindowMap) { - // TODO: Convert to setContainer() from DisplayContent once everything is hooked up. - // Currently we are not setup to register for config changes. - mContainer = mRoot.getDisplayContentOrCreate(displayId); - if (mContainer == null) { - throw new IllegalArgumentException("Trying to add displayId=" + displayId); - } - } - } - - @Override - public void removeContainer() { - // TODO: Pipe through from ActivityDisplay to remove the display - throw new UnsupportedOperationException("To be implemented"); - } - - @Override - public void onOverrideConfigurationChanged(Configuration overrideConfiguration) { - // TODO: Pipe through from ActivityDisplay to update the configuration for the display - throw new UnsupportedOperationException("To be implemented"); - } - - /** - * Positions the task stack at the given position in the task stack container. - */ - public void positionChildAt(StackWindowController child, int position) { - synchronized (mWindowMap) { - if (DEBUG_STACK) Slog.i(TAG_WM, "positionTaskStackAt: positioning stack=" + child - + " at " + position); - if (mContainer == null) { - if (DEBUG_STACK) Slog.i(TAG_WM, - "positionTaskStackAt: could not find display=" + mContainer); - return; - } - if (child.mContainer == null) { - if (DEBUG_STACK) Slog.i(TAG_WM, - "positionTaskStackAt: could not find stack=" + this); - return; - } - mContainer.positionStackAt(position, child.mContainer); - } - } - - @Override - public String toString() { - return "{DisplayWindowController displayId=" + mDisplayId + "}"; - } -} diff --git a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java index 10253c570f3ff..96bf49b288c96 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java @@ -30,7 +30,6 @@ import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.spy; -import com.android.server.wm.DisplayWindowController; import org.mockito.invocation.InvocationOnMock; import android.app.IApplicationThread; @@ -346,7 +345,7 @@ public class ActivityTestsBase { } } - protected static class TestActivityDisplay extends ActivityDisplay { + private static class TestActivityDisplay extends ActivityDisplay { private final ActivityStackSupervisor mSupervisor; TestActivityDisplay(ActivityStackSupervisor supervisor, int displayId) { @@ -375,11 +374,6 @@ public class ActivityTestsBase { this, stackId, mSupervisor, windowingMode, activityType, onTop); } } - - @Override - protected DisplayWindowController createWindowContainerController() { - return mock(DisplayWindowController.class); - } } private static WindowManagerService prepareMockWindowManager() { diff --git a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java index f0171727409cd..5a2110258828f 100644 --- a/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RecentTasksTest.java @@ -676,8 +676,8 @@ public class RecentTasksTest extends ActivityTestsBase { @Override public void initialize() { super.initialize(); - mDisplay = new TestActivityDisplay(this, DEFAULT_DISPLAY); - mOtherDisplay = new TestActivityDisplay(this, DEFAULT_DISPLAY); + mDisplay = new ActivityDisplay(this, DEFAULT_DISPLAY); + mOtherDisplay = new ActivityDisplay(this, DEFAULT_DISPLAY); attachDisplay(mOtherDisplay); attachDisplay(mDisplay); } diff --git a/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java b/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java index c6ce7e1188e82..fc75628694909 100644 --- a/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java +++ b/services/tests/servicestests/src/com/android/server/am/RunningTasksTest.java @@ -68,7 +68,7 @@ public class RunningTasksTest extends ActivityTestsBase { // Create a number of stacks with tasks (of incrementing active time) final ActivityStackSupervisor supervisor = mService.mStackSupervisor; final SparseArray displays = new SparseArray<>(); - final ActivityDisplay display = new TestActivityDisplay(supervisor, DEFAULT_DISPLAY); + final ActivityDisplay display = new ActivityDisplay(supervisor, DEFAULT_DISPLAY); displays.put(DEFAULT_DISPLAY, display); final int numStacks = 2;