diff options
13 files changed, 74 insertions, 57 deletions
diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 1c1df432f5fc..b2f3add3b4bd 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -16,6 +16,12 @@ package android.app; +import static android.app.WindowConfiguration.WINDOWING_MODE_DOCKED; +import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; +import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; +import static android.app.WindowConfiguration.WINDOWING_MODE_PINNED; +import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; + import android.Manifest; import android.annotation.IntDef; import android.annotation.NonNull; @@ -852,6 +858,32 @@ public class ActivityManager { || stackId == ASSISTANT_STACK_ID || isDynamicStack(stackId); } + + /** Returns the windowing mode that should be used for this input stack id. */ + // TODO: To be removed once we are not using stack id for stuff... + public static int getWindowingModeForStackId(int stackId) { + final int windowingMode; + switch (stackId) { + case FULLSCREEN_WORKSPACE_STACK_ID: + case HOME_STACK_ID: + case RECENTS_STACK_ID: + case ASSISTANT_STACK_ID: + windowingMode = WINDOWING_MODE_FULLSCREEN; + break; + case PINNED_STACK_ID: + windowingMode = WINDOWING_MODE_PINNED; + break; + case DOCKED_STACK_ID: + windowingMode = WINDOWING_MODE_DOCKED; + break; + case FREEFORM_WORKSPACE_STACK_ID: + windowingMode = WINDOWING_MODE_FREEFORM; + break; + default : + windowingMode = WINDOWING_MODE_UNDEFINED; + } + return windowingMode; + } } /** diff --git a/core/java/android/app/WindowConfiguration.java b/core/java/android/app/WindowConfiguration.java index d5d7107a6cc9..11922ec804aa 100644 --- a/core/java/android/app/WindowConfiguration.java +++ b/core/java/android/app/WindowConfiguration.java @@ -24,9 +24,6 @@ import android.os.Parcel; import android.os.Parcelable; import android.view.DisplayInfo; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; - /** * Class that contains windowing configuration/state for other objects that contain windows directly * or indirectly. E.g. Activities, Task, Displays, ... @@ -65,7 +62,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu WINDOWING_MODE_DOCKED, WINDOWING_MODE_FREEFORM, }) - @Retention(RetentionPolicy.SOURCE) public @interface WindowingMode {} /** Bit that indicates that the {@link #mAppBounds} changed. */ @@ -78,7 +74,6 @@ public class WindowConfiguration implements Parcelable, Comparable<WindowConfigu WINDOW_CONFIG_APP_BOUNDS, WINDOW_CONFIG_WINDOWING_MODE, }) - @Retention(RetentionPolicy.SOURCE) public @interface WindowConfig {} public WindowConfiguration() { diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 78a16794b8d4..3e141b6ce775 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -24,6 +24,8 @@ import static android.app.ActivityManager.StackId.HOME_STACK_ID; import static android.app.ActivityManager.StackId.INVALID_STACK_ID; import static android.app.ActivityManager.StackId.PINNED_STACK_ID; import static android.app.ActivityManager.StackId.RECENTS_STACK_ID; +import static android.app.ActivityManager.StackId.getWindowingModeForStackId; +import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT; import static android.content.pm.ActivityInfo.FLAG_RESUME_WHILE_PAUSING; import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS; @@ -460,24 +462,32 @@ class ActivityStack<T extends StackWindowController> extends ConfigurationContai mTaskPositioner = mStackId == FREEFORM_WORKSPACE_STACK_ID ? new LaunchingTaskPositioner() : null; mTmpRect2.setEmpty(); - final Configuration overrideConfig = getOverrideConfiguration(); + updateOverrideConfiguration(); mWindowContainerController = createStackWindowController(display.mDisplayId, onTop, - mTmpRect2, overrideConfig); - onOverrideConfigurationChanged(overrideConfig); + mTmpRect2, getOverrideConfiguration()); mStackSupervisor.mStacks.put(mStackId, this); postAddToDisplay(display, mTmpRect2.isEmpty() ? null : mTmpRect2, onTop); } T createStackWindowController(int displayId, boolean onTop, Rect outBounds, - Configuration outOverrideConfig) { + Configuration overrideConfig) { return (T) new StackWindowController(mStackId, this, displayId, onTop, outBounds, - outOverrideConfig); + overrideConfig); } T getWindowContainerController() { return mWindowContainerController; } + // TODO: Not needed once we are no longer using stack ids as the override config. can be passed + // in. + private void updateOverrideConfiguration() { + final int windowingMode = getWindowingModeForStackId(mStackId); + if (windowingMode != WINDOWING_MODE_UNDEFINED) { + setWindowingMode(windowingMode); + } + } + /** Adds the stack to specified display and calls WindowManager to do the same. */ void reparent(ActivityStackSupervisor.ActivityDisplay activityDisplay, boolean onTop) { removeFromDisplay(); diff --git a/services/core/java/com/android/server/am/PinnedActivityStack.java b/services/core/java/com/android/server/am/PinnedActivityStack.java index c825b314e69e..a1b95f9de05a 100644 --- a/services/core/java/com/android/server/am/PinnedActivityStack.java +++ b/services/core/java/com/android/server/am/PinnedActivityStack.java @@ -39,9 +39,9 @@ class PinnedActivityStack extends ActivityStack<PinnedStackWindowController> @Override PinnedStackWindowController createStackWindowController(int displayId, boolean onTop, - Rect outBounds, Configuration outOverrideConfig) { + Rect outBounds, Configuration overrideConfig) { return new PinnedStackWindowController(mStackId, this, displayId, onTop, outBounds, - outOverrideConfig); + overrideConfig); } Rect getDefaultPictureInPictureBounds(float aspectRatio) { diff --git a/services/core/java/com/android/server/wm/ConfigurationContainer.java b/services/core/java/com/android/server/wm/ConfigurationContainer.java index 1d3f19857ac0..a682a1e64d67 100644 --- a/services/core/java/com/android/server/wm/ConfigurationContainer.java +++ b/services/core/java/com/android/server/wm/ConfigurationContainer.java @@ -120,8 +120,7 @@ public abstract class ConfigurationContainer<E extends ConfigurationContainer> { } /** Sets the windowing mode for the configuration container. */ - void setWindowingMode(/*@WindowConfiguration.WindowingMode TODO: causes build error...why?*/ - int windowingMode) { + public void setWindowingMode(@WindowConfiguration.WindowingMode int windowingMode) { mOverrideConfiguration.windowConfiguration.setWindowingMode(windowingMode); onOverrideConfigurationChanged(mOverrideConfiguration); } diff --git a/services/core/java/com/android/server/wm/PinnedStackWindowController.java b/services/core/java/com/android/server/wm/PinnedStackWindowController.java index 3f81b389b31c..135f4000dd81 100644 --- a/services/core/java/com/android/server/wm/PinnedStackWindowController.java +++ b/services/core/java/com/android/server/wm/PinnedStackWindowController.java @@ -40,8 +40,8 @@ public class PinnedStackWindowController extends StackWindowController { private Rect mTmpToBounds = new Rect(); public PinnedStackWindowController(int stackId, PinnedStackWindowListener listener, - int displayId, boolean onTop, Rect outBounds, Configuration outOverrideConfig) { - super(stackId, listener, displayId, onTop, outBounds, outOverrideConfig, + int displayId, boolean onTop, Rect outBounds, Configuration overrideConfig) { + super(stackId, listener, displayId, onTop, outBounds, overrideConfig, WindowManagerService.getInstance()); } diff --git a/services/core/java/com/android/server/wm/StackWindowController.java b/services/core/java/com/android/server/wm/StackWindowController.java index 3f6378a2ad24..aaacef5c5e57 100644 --- a/services/core/java/com/android/server/wm/StackWindowController.java +++ b/services/core/java/com/android/server/wm/StackWindowController.java @@ -58,14 +58,14 @@ public class StackWindowController private final Rect mTmpDisplayBounds = new Rect(); public StackWindowController(int stackId, StackWindowListener listener, - int displayId, boolean onTop, Rect outBounds, Configuration outOverriderConfig) { - this(stackId, listener, displayId, onTop, outBounds, outOverriderConfig, + int displayId, boolean onTop, Rect outBounds, Configuration overriderConfig) { + this(stackId, listener, displayId, onTop, outBounds, overriderConfig, WindowManagerService.getInstance()); } @VisibleForTesting public StackWindowController(int stackId, StackWindowListener listener, - int displayId, boolean onTop, Rect outBounds, Configuration outOverrideConfig, + int displayId, boolean onTop, Rect outBounds, Configuration overrideConfig, WindowManagerService service) { super(listener, service); mStackId = stackId; @@ -79,9 +79,11 @@ public class StackWindowController } final TaskStack stack = dc.addStackToDisplay(stackId, onTop); + if (overrideConfig != null) { + stack.onOverrideConfigurationChanged(overrideConfig); + } stack.setController(this); getRawBounds(outBounds); - outOverrideConfig.setTo(mContainer.getOverrideConfiguration()); } } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 8a4a49af1223..1a6e2c87e695 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -163,32 +163,6 @@ public class TaskStack extends WindowContainer<Task> implements DimLayer.DimLaye mDockedStackMinimizeThickness = service.mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.docked_stack_minimize_thickness); EventLog.writeEvent(EventLogTags.WM_STACK_CREATED, stackId); - - // TODO: Remove once we are no longer using Stacks for windowing mode or grouping tasks. - final int windowingMode; - switch (stackId) { - case FULLSCREEN_WORKSPACE_STACK_ID: - case HOME_STACK_ID: - case RECENTS_STACK_ID: - case ASSISTANT_STACK_ID: - windowingMode = WINDOWING_MODE_FULLSCREEN; - break; - case PINNED_STACK_ID: - windowingMode = WINDOWING_MODE_PINNED; - break; - case DOCKED_STACK_ID: - windowingMode = WINDOWING_MODE_DOCKED; - break; - case FREEFORM_WORKSPACE_STACK_ID: - windowingMode = WINDOWING_MODE_FREEFORM; - break; - default : - windowingMode = WINDOWING_MODE_UNDEFINED; - } - - if (windowingMode != WINDOWING_MODE_UNDEFINED) { - setWindowingMode(windowingMode); - } } DisplayContent getDisplayContent() { diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index d0b6be6fa133..5f1e42ccb2e4 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1164,11 +1164,10 @@ class WindowStateAnimator { transform.postScale(spec.scale, spec.scale); transform.postTranslate(-spec.offsetX, -spec.offsetY); transform.mapRect(finalCrop); - finalClipRect.top = (int)finalCrop.top; - finalClipRect.left = (int)finalCrop.left; - // TODO: Are the assignments below a mistake? - finalClipRect.right = (int)finalClipRect.right; - finalClipRect.bottom = (int)finalClipRect.bottom; + finalClipRect.top = (int) finalCrop.top; + finalClipRect.left = (int) finalCrop.left; + finalClipRect.right = (int) finalCrop.right; + finalClipRect.bottom = (int) finalCrop.bottom; } return true; 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 f64de001371d..55a1c2a0e837 100644 --- a/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/am/ActivityTestsBase.java @@ -272,7 +272,7 @@ public class ActivityTestsBase { @Override protected T createStackWindowController(int displayId, boolean onTop, Rect outBounds, - Configuration outOverrideConfig) { + Configuration overrideConfig) { mContainerController = (T) WindowTestUtils.createMockStackWindowContainerController(); return mContainerController; } diff --git a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java index efe766771673..52f66ae40cf3 100644 --- a/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/TaskStackContainersTests.java @@ -29,6 +29,7 @@ import android.platform.test.annotations.Presubmit; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; +import static android.app.ActivityManager.StackId.getWindowingModeForStackId; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -51,9 +52,12 @@ public class TaskStackContainersTests extends WindowTestsBase { @Before public void setUp() throws Exception { super.setUp(); + final Configuration overrideConfig = new Configuration(); + overrideConfig.windowConfiguration.setWindowingMode( + getWindowingModeForStackId(PINNED_STACK_ID)); mPinnedStack = new StackWindowController(PINNED_STACK_ID, null, - mDisplayContent.getDisplayId(), true /* onTop */, new Rect(), new Configuration(), - sWm).mContainer; + mDisplayContent.getDisplayId(), true /* onTop */, new Rect(), + overrideConfig, sWm).mContainer; // Stack should contain visible app window to be considered visible. final Task pinnedTask = createTaskInStack(mPinnedStack, 0 /* userId */); diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java index bd0e0dfb4900..a1ff2d7f9267 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowConfigurationTests.java @@ -197,8 +197,7 @@ public class WindowConfigurationTests extends WindowTestsBase { false /*overrideHeight*/, mDisplayInfo.logicalDensityDpi, config, parentConfig); // Assert that both expected and actual are null or are equal to each other - assertTrue((expectedConfigBounds == null && winConfig.getAppBounds() == null) - || expectedConfigBounds.equals(winConfig.getAppBounds())); + assertEquals(expectedConfigBounds, winConfig.getAppBounds()); } } diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java index eb8cf9160d5b..bce740bce669 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowTestsBase.java @@ -16,6 +16,7 @@ package com.android.server.wm; +import static android.app.ActivityManager.StackId.getWindowingModeForStackId; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.View.VISIBLE; @@ -238,8 +239,10 @@ class WindowTestsBase { StackWindowController createStackControllerOnStackOnDisplay(int stackId, DisplayContent dc) { + final Configuration overrideConfig = new Configuration(); + overrideConfig.windowConfiguration.setWindowingMode(getWindowingModeForStackId(stackId)); return new StackWindowController(stackId, null, dc.getDisplayId(), - true /* onTop */, new Rect(), new Configuration(), sWm); + true /* onTop */, new Rect(), overrideConfig, sWm); } /** Creates a {@link Task} and adds it to the specified {@link TaskStack}. */ |