diff options
7 files changed, 43 insertions, 19 deletions
diff --git a/libs/WindowManager/Shell/res/drawable/desktop_mode_decor_menu_background.xml b/libs/WindowManager/Shell/res/drawable/desktop_mode_decor_menu_background.xml index 9167382d0898..c6e634c6622c 100644 --- a/libs/WindowManager/Shell/res/drawable/desktop_mode_decor_menu_background.xml +++ b/libs/WindowManager/Shell/res/drawable/desktop_mode_decor_menu_background.xml @@ -17,6 +17,6 @@ <shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@android:color/white" /> - <corners android:radius="20dp" /> + <corners android:radius="@dimen/caption_menu_corner_radius" /> <stroke android:width="1dp" android:color="#b3b3b3"/> </shape> diff --git a/libs/WindowManager/Shell/res/layout/desktop_mode_decor_handle_menu.xml b/libs/WindowManager/Shell/res/layout/desktop_mode_decor_handle_menu.xml index c53ddd78cea6..f9aeb6a8448a 100644 --- a/libs/WindowManager/Shell/res/layout/desktop_mode_decor_handle_menu.xml +++ b/libs/WindowManager/Shell/res/layout/desktop_mode_decor_handle_menu.xml @@ -21,7 +21,6 @@ android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/desktop_mode_decor_menu_background" - android:elevation="@dimen/caption_menu_elevation" android:divider="?android:attr/dividerHorizontal" android:showDividers="middle" android:dividerPadding="18dip"> diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml index 336c156e831a..680ad5101366 100644 --- a/libs/WindowManager/Shell/res/values/dimen.xml +++ b/libs/WindowManager/Shell/res/values/dimen.xml @@ -370,6 +370,10 @@ <dimen name="freeform_resize_corner">44dp</dimen> - <dimen name="caption_menu_elevation">4dp</dimen> + <!-- The radius of the caption menu shadow. --> + <dimen name="caption_menu_shadow_radius">4dp</dimen> + + <!-- The radius of the caption menu corners. --> + <dimen name="caption_menu_corner_radius">20dp</dimen> </resources> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java index 0779f1d72551..72da1089c91c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java @@ -74,6 +74,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private boolean mDesktopActive; private AdditionalWindow mHandleMenu; private final int mHandleMenuWidthId = R.dimen.freeform_decor_caption_menu_width; + private final int mHandleMenuShadowRadiusId = R.dimen.caption_menu_shadow_radius; + private final int mHandleMenuCornerRadiusId = R.dimen.caption_menu_corner_radius; private PointF mHandleMenuPosition = new PointF(); DesktopModeWindowDecoration( @@ -353,19 +355,16 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin .windowConfiguration.getBounds().width(); final int menuWidth = loadDimensionPixelSize(resources, mHandleMenuWidthId); final int menuHeight = loadDimensionPixelSize(resources, mCaptionMenuHeightId); - - // Elevation gives the appearance of a changed x/y coordinate; this is to fix that - int elevationOffset = 2 * loadDimensionPixelSize(resources, - R.dimen.caption_menu_elevation); + final int shadowRadius = loadDimensionPixelSize(resources, mHandleMenuShadowRadiusId); + final int cornerRadius = loadDimensionPixelSize(resources, mHandleMenuCornerRadiusId); final int x = mRelayoutParams.mCaptionX + (captionWidth / 2) - (menuWidth / 2) - - mResult.mDecorContainerOffsetX - elevationOffset; - final int y = - mRelayoutParams.mCaptionY - mResult.mDecorContainerOffsetY - elevationOffset; + - mResult.mDecorContainerOffsetX; + final int y = mRelayoutParams.mCaptionY - mResult.mDecorContainerOffsetY; mHandleMenuPosition.set(x, y); String namePrefix = "Caption Menu"; mHandleMenu = addWindow(R.layout.desktop_mode_decor_handle_menu, namePrefix, t, x, y, - menuWidth, menuHeight, 2 * elevationOffset); + menuWidth, menuHeight, shadowRadius, cornerRadius); mSyncQueue.runInSync(transaction -> { transaction.merge(t); t.close(); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java index ae685ad4b8d9..133826f3e69b 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java @@ -391,11 +391,12 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> * @param yPos y position of new window * @param width width of new window * @param height height of new window - * @param cropPadding padding to add to window crop to ensure shadows display properly - * @return + * @param shadowRadius radius of the shadow of the new window + * @param cornerRadius radius of the corners of the new window + * @return the {@link AdditionalWindow} that was added. */ AdditionalWindow addWindow(int layoutId, String namePrefix, SurfaceControl.Transaction t, - int xPos, int yPos, int width, int height, int cropPadding) { + int xPos, int yPos, int width, int height, int shadowRadius, int cornerRadius) { final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get(); SurfaceControl windowSurfaceControl = builder .setName(namePrefix + " of Task=" + mTaskInfo.taskId) @@ -404,9 +405,10 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> .build(); View v = LayoutInflater.from(mDecorWindowContext).inflate(layoutId, null); - t.setPosition( - windowSurfaceControl, xPos, yPos) - .setWindowCrop(windowSurfaceControl, width + cropPadding, height + cropPadding) + t.setPosition(windowSurfaceControl, xPos, yPos) + .setWindowCrop(windowSurfaceControl, width, height) + .setShadowRadius(windowSurfaceControl, shadowRadius) + .setCornerRadius(windowSurfaceControl, cornerRadius) .show(windowSurfaceControl); final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(width, height, diff --git a/libs/WindowManager/Shell/tests/unittest/res/values/dimen.xml b/libs/WindowManager/Shell/tests/unittest/res/values/dimen.xml index 27d40b2b25b2..aa1b24189274 100644 --- a/libs/WindowManager/Shell/tests/unittest/res/values/dimen.xml +++ b/libs/WindowManager/Shell/tests/unittest/res/values/dimen.xml @@ -24,4 +24,6 @@ <dimen name="test_window_decor_bottom_outset">40dp</dimen> <dimen name="test_window_decor_shadow_radius">5dp</dimen> <dimen name="test_window_decor_resize_handle">10dp</dimen> + <dimen name="test_caption_menu_shadow_radius">4dp</dimen> + <dimen name="test_caption_menu_corner_radius">20dp</dimen> </resources>
\ No newline at end of file diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java index b80edcece512..7e39b5b8f2ce 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java @@ -108,6 +108,8 @@ public class WindowDecorationTests extends ShellTestCase { private SurfaceControl.Transaction mMockSurfaceControlAddWindowT; private WindowDecoration.RelayoutParams mRelayoutParams = new WindowDecoration.RelayoutParams(); private int mCaptionMenuWidthId; + private int mCaptionMenuShadowRadiusId; + private int mCaptionMenuCornerRadiusId; @Before public void setUp() { @@ -118,6 +120,8 @@ public class WindowDecorationTests extends ShellTestCase { mRelayoutParams.mLayoutResId = 0; mRelayoutParams.mCaptionHeightId = R.dimen.test_freeform_decor_caption_height; mCaptionMenuWidthId = R.dimen.test_freeform_decor_caption_menu_width; + mCaptionMenuShadowRadiusId = R.dimen.test_caption_menu_shadow_radius; + mCaptionMenuCornerRadiusId = R.dimen.test_caption_menu_corner_radius; mRelayoutParams.mShadowRadiusId = R.dimen.test_window_decor_shadow_radius; doReturn(mMockSurfaceControlViewHost).when(mMockSurfaceControlViewHostFactory) @@ -431,7 +435,19 @@ public class WindowDecorationTests extends ShellTestCase { verify(additionalWindowSurfaceBuilder).setParent(decorContainerSurface); verify(additionalWindowSurfaceBuilder).build(); verify(mMockSurfaceControlAddWindowT).setPosition(additionalWindowSurface, 20, 40); - verify(mMockSurfaceControlAddWindowT).setWindowCrop(additionalWindowSurface, 442, 74); + final int width = WindowDecoration.loadDimensionPixelSize( + mContext.getResources(), mCaptionMenuWidthId); + final int height = WindowDecoration.loadDimensionPixelSize( + mContext.getResources(), mRelayoutParams.mCaptionHeightId); + verify(mMockSurfaceControlAddWindowT).setWindowCrop(additionalWindowSurface, width, height); + final int shadowRadius = WindowDecoration.loadDimensionPixelSize(mContext.getResources(), + mCaptionMenuShadowRadiusId); + verify(mMockSurfaceControlAddWindowT) + .setShadowRadius(additionalWindowSurface, shadowRadius); + final int cornerRadius = WindowDecoration.loadDimensionPixelSize(mContext.getResources(), + mCaptionMenuCornerRadiusId); + verify(mMockSurfaceControlAddWindowT) + .setCornerRadius(additionalWindowSurface, cornerRadius); verify(mMockSurfaceControlAddWindowT).show(additionalWindowSurface); verify(mMockSurfaceControlViewHostFactory, Mockito.times(2)) .create(any(), eq(defaultDisplay), any()); @@ -559,13 +575,15 @@ public class WindowDecorationTests extends ShellTestCase { int y = mRelayoutParams.mCaptionY; int width = loadDimensionPixelSize(resources, mCaptionMenuWidthId); int height = loadDimensionPixelSize(resources, mRelayoutParams.mCaptionHeightId); + int shadowRadius = loadDimensionPixelSize(resources, mCaptionMenuShadowRadiusId); + int cornerRadius = loadDimensionPixelSize(resources, mCaptionMenuCornerRadiusId); String name = "Test Window"; WindowDecoration.AdditionalWindow additionalWindow = addWindow(R.layout.desktop_mode_decor_handle_menu, name, mMockSurfaceControlAddWindowT, x - mRelayoutResult.mDecorContainerOffsetX, y - mRelayoutResult.mDecorContainerOffsetY, - width, height, 10); + width, height, shadowRadius, cornerRadius); return additionalWindow; } } |