diff options
12 files changed, 126 insertions, 72 deletions
diff --git a/libs/WindowManager/Shell/res/drawable/size_compat_hint_bubble.xml b/libs/WindowManager/Shell/res/drawable/size_compat_hint_bubble.xml new file mode 100644 index 000000000000..94165a11eccb --- /dev/null +++ b/libs/WindowManager/Shell/res/drawable/size_compat_hint_bubble.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2021 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. + --> +<shape xmlns:android="http://schemas.android.com/apk/res/android" + android:shape="rectangle"> + <solid android:color="@color/size_compat_hint_bubble"/> + <corners android:radius="@dimen/size_compat_hint_corner_radius"/> +</shape>
\ No newline at end of file diff --git a/libs/WindowManager/Shell/res/drawable/size_compat_hint_point.xml b/libs/WindowManager/Shell/res/drawable/size_compat_hint_point.xml new file mode 100644 index 000000000000..a8f0f76ef27f --- /dev/null +++ b/libs/WindowManager/Shell/res/drawable/size_compat_hint_point.xml @@ -0,0 +1,25 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + ~ Copyright (C) 2021 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. + --> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="@dimen/size_compat_hint_point_width" + android:height="8dp" + android:viewportWidth="10" + android:viewportHeight="8"> + <path + android:fillColor="@color/size_compat_hint_bubble" + android:pathData="M10,0 l-4.1875,6.6875 a1,1 0 0,1 -1.625,0 l-4.1875,-6.6875z"/> +</vector> diff --git a/libs/WindowManager/Shell/res/drawable/size_compat_restart_button.xml b/libs/WindowManager/Shell/res/drawable/size_compat_restart_button.xml index 73a48d31a814..3e486df71f91 100644 --- a/libs/WindowManager/Shell/res/drawable/size_compat_restart_button.xml +++ b/libs/WindowManager/Shell/res/drawable/size_compat_restart_button.xml @@ -15,14 +15,21 @@ limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24dp" - android:height="24dp" - android:viewportWidth="24" - android:viewportHeight="24"> + android:width="48dp" + android:height="48dp" + android:viewportWidth="48" + android:viewportHeight="48"> <path - android:fillColor="#aa000000" - android:pathData="M0,12 a12,12 0 1,0 24,0 a12,12 0 1,0 -24,0" /> - <path - android:fillColor="@android:color/white" - android:pathData="M17.65,6.35c-1.63,-1.63 -3.94,-2.57 -6.48,-2.31c-3.67,0.37 -6.69,3.35 -7.1,7.02C3.52,15.91 7.27,20 12,20c3.19,0 5.93,-1.87 7.21,-4.57c0.31,-0.66 -0.16,-1.43 -0.89,-1.43h-0.01c-0.37,0 -0.72,0.2 -0.88,0.53c-1.13,2.43 -3.84,3.97 -6.81,3.32c-2.22,-0.49 -4.01,-2.3 -4.49,-4.52C5.31,9.44 8.26,6 12,6c1.66,0 3.14,0.69 4.22,1.78l-2.37,2.37C13.54,10.46 13.76,11 14.21,11H19c0.55,0 1,-0.45 1,-1V5.21c0,-0.45 -0.54,-0.67 -0.85,-0.35L17.65,6.35z"/> + android:fillColor="#53534D" + android:pathData="M0,24 a24,24 0 1,0 48,0 a24,24 0 1,0 -48,0" /> + <group + android:translateX="12" + android:translateY="12"> + <path + android:fillColor="#E4E3DA" + android:pathData="M6,13c0,-1.65 0.67,-3.15 1.76,-4.24L6.34,7.34C4.9,8.79 4,10.79 4,13c0,4.08 3.05,7.44 7,7.93v-2.02C8.17,18.43 6,15.97 6,13z"/> + <path + android:fillColor="#E4E3DA" + android:pathData="M20,13c0,-4.42 -3.58,-8 -8,-8c-0.06,0 -0.12,0.01 -0.18,0.01v0l1.09,-1.09L11.5,2.5L8,6l3.5,3.5l1.41,-1.41l-1.08,-1.08C11.89,7.01 11.95,7 12,7c3.31,0 6,2.69 6,6c0,2.97 -2.17,5.43 -5,5.91v2.02C16.95,20.44 20,17.08 20,13z"/> + </group> </vector> diff --git a/libs/WindowManager/Shell/res/layout/size_compat_mode_hint.xml b/libs/WindowManager/Shell/res/layout/size_compat_mode_hint.xml index 0dea87c6b7fc..17347f627049 100644 --- a/libs/WindowManager/Shell/res/layout/size_compat_mode_hint.xml +++ b/libs/WindowManager/Shell/res/layout/size_compat_mode_hint.xml @@ -22,41 +22,34 @@ <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" - android:gravity="center" android:clipToPadding="false" - android:padding="@dimen/bubble_elevation"> + android:paddingBottom="5dp"> <LinearLayout + android:id="@+id/size_compat_hint_popup" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@android:color/background_light" - android:elevation="@dimen/bubble_elevation" - android:orientation="vertical"> + android:orientation="vertical" + android:clickable="true"> <TextView - android:layout_width="180dp" + android:layout_width="188dp" android:layout_height="wrap_content" - android:paddingLeft="10dp" - android:paddingRight="10dp" - android:paddingTop="10dp" + android:lineSpacingExtra="4sp" + android:background="@drawable/size_compat_hint_bubble" + android:padding="16dp" android:text="@string/restart_button_description" android:textAlignment="viewStart" - android:textColor="@android:color/primary_text_light" - android:textSize="16sp"/> + android:textColor="#E4E3DA" + android:textSize="14sp"/> - <Button - android:id="@+id/got_it" + <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" - android:includeFontPadding="false" android:layout_gravity="end" - android:minHeight="36dp" - android:background="?android:attr/selectableItemBackground" - android:text="@string/got_it" - android:textAllCaps="true" - android:textColor="#3c78d8" - android:textSize="16sp" - android:textStyle="bold"/> + android:src="@drawable/size_compat_hint_point" + android:paddingHorizontal="@dimen/size_compat_hint_corner_radius" + android:contentDescription="@null"/> </LinearLayout> diff --git a/libs/WindowManager/Shell/res/layout/size_compat_ui.xml b/libs/WindowManager/Shell/res/layout/size_compat_ui.xml index cd3153145be3..47e76f061877 100644 --- a/libs/WindowManager/Shell/res/layout/size_compat_ui.xml +++ b/libs/WindowManager/Shell/res/layout/size_compat_ui.xml @@ -19,12 +19,21 @@ android:layout_width="wrap_content" android:layout_height="wrap_content"> - <ImageButton - android:id="@+id/size_compat_restart_button" - android:layout_width="@dimen/size_compat_button_size" - android:layout_height="@dimen/size_compat_button_size" - android:layout_gravity="center" - android:src="@drawable/size_compat_restart_button" - android:contentDescription="@string/restart_button_description"/> + <FrameLayout + android:layout_width="@dimen/size_compat_button_width" + android:layout_height="@dimen/size_compat_button_height" + android:clipToPadding="false" + android:paddingBottom="16dp"> + + <ImageButton + android:id="@+id/size_compat_restart_button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:src="@drawable/size_compat_restart_button" + android:background="@android:color/transparent" + android:contentDescription="@string/restart_button_description"/> + + </FrameLayout> </com.android.wm.shell.sizecompatui.SizeCompatRestartButton> diff --git a/libs/WindowManager/Shell/res/values/colors.xml b/libs/WindowManager/Shell/res/values/colors.xml index 93c0352a2ad3..b25a2189cd4d 100644 --- a/libs/WindowManager/Shell/res/values/colors.xml +++ b/libs/WindowManager/Shell/res/values/colors.xml @@ -29,6 +29,7 @@ <color name="bubbles_light">#FFFFFF</color> <color name="bubbles_dark">@color/GM2_grey_800</color> <color name="bubbles_icon_tint">@color/GM2_grey_700</color> + <color name="size_compat_hint_bubble">#30312B</color> <!-- GM2 colors --> <color name="GM2_grey_200">#E8EAED</color> diff --git a/libs/WindowManager/Shell/res/values/dimen.xml b/libs/WindowManager/Shell/res/values/dimen.xml index f85766437b44..11bb4e92bfdb 100644 --- a/libs/WindowManager/Shell/res/values/dimen.xml +++ b/libs/WindowManager/Shell/res/values/dimen.xml @@ -194,8 +194,17 @@ <!-- Size of user education views on large screens (phone is just match parent). --> <dimen name="bubbles_user_education_width_large_screen">400dp</dimen> - <!-- The width/height of the size compat restart button. --> - <dimen name="size_compat_button_size">48dp</dimen> + <!-- The width of the size compat restart button including padding. --> + <dimen name="size_compat_button_width">80dp</dimen> + + <!-- The height of the size compat restart button including padding. --> + <dimen name="size_compat_button_height">64dp</dimen> + + <!-- The radius of the corners of the size compat hint bubble. --> + <dimen name="size_compat_hint_corner_radius">28dp</dimen> + + <!-- The width of the size compat hint point. --> + <dimen name="size_compat_hint_point_width">10dp</dimen> <!-- The width of the brand image on staring surface. --> <dimen name="starting_surface_brand_image_width">200dp</dimen> diff --git a/libs/WindowManager/Shell/res/values/strings.xml b/libs/WindowManager/Shell/res/values/strings.xml index e512698ab66c..764854af3b3f 100644 --- a/libs/WindowManager/Shell/res/values/strings.xml +++ b/libs/WindowManager/Shell/res/values/strings.xml @@ -155,7 +155,4 @@ <!-- Description of the restart button in the hint of size compatibility mode. [CHAR LIMIT=NONE] --> <string name="restart_button_description">Tap to restart this app and go full screen.</string> - - <!-- Generic "got it" acceptance of dialog or cling [CHAR LIMIT=NONE] --> - <string name="got_it">Got it</string> </resources> diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatHintPopup.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatHintPopup.java index 78af9df30e6a..ff6f913207f6 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatHintPopup.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatHintPopup.java @@ -17,13 +17,10 @@ package com.android.wm.shell.sizecompatui; import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Color; -import android.graphics.drawable.RippleDrawable; import android.util.AttributeSet; import android.view.View; -import android.widget.Button; import android.widget.FrameLayout; +import android.widget.LinearLayout; import androidx.annotation.Nullable; @@ -58,10 +55,8 @@ public class SizeCompatHintPopup extends FrameLayout implements View.OnClickList @Override protected void onFinishInflate() { super.onFinishInflate(); - final Button gotItButton = findViewById(R.id.got_it); - gotItButton.setBackground(new RippleDrawable(ColorStateList.valueOf(Color.LTGRAY), - null /* content */, null /* mask */)); - gotItButton.setOnClickListener(this); + final LinearLayout hintPopup = findViewById(R.id.size_compat_hint_popup); + hintPopup.setOnClickListener(this); } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatRestartButton.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatRestartButton.java index 08a840297df1..d75fe5173c5f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatRestartButton.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatRestartButton.java @@ -17,10 +17,6 @@ package com.android.wm.shell.sizecompatui; import android.content.Context; -import android.content.res.ColorStateList; -import android.graphics.Color; -import android.graphics.drawable.GradientDrawable; -import android.graphics.drawable.RippleDrawable; import android.util.AttributeSet; import android.view.View; import android.widget.FrameLayout; @@ -63,11 +59,6 @@ public class SizeCompatRestartButton extends FrameLayout implements View.OnClick protected void onFinishInflate() { super.onFinishInflate(); final ImageButton restartButton = findViewById(R.id.size_compat_restart_button); - final ColorStateList color = ColorStateList.valueOf(Color.LTGRAY); - final GradientDrawable mask = new GradientDrawable(); - mask.setShape(GradientDrawable.OVAL); - mask.setColor(color); - restartButton.setBackground(new RippleDrawable(color, null /* content */, mask)); restartButton.setOnClickListener(this); restartButton.setOnLongClickListener(this); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUILayout.java b/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUILayout.java index 7cf95593dbaa..bebb6d30c47f 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUILayout.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/sizecompatui/SizeCompatUILayout.java @@ -25,6 +25,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; +import android.content.res.Resources; import android.graphics.PixelFormat; import android.graphics.Rect; import android.os.Binder; @@ -54,6 +55,10 @@ class SizeCompatUILayout { private final int mTaskId; private ShellTaskOrganizer.TaskListener mTaskListener; private DisplayLayout mDisplayLayout; + private final int mButtonWidth; + private final int mButtonHeight; + private final int mPopupOffsetX; + private final int mPopupOffsetY; @VisibleForTesting final SizeCompatUIWindowManager mButtonWindowManager; @@ -66,9 +71,7 @@ class SizeCompatUILayout { @VisibleForTesting @Nullable SizeCompatHintPopup mHint; - final int mButtonSize; - final int mPopupOffsetX; - final int mPopupOffsetY; + @VisibleForTesting boolean mShouldShowHint; SizeCompatUILayout(SyncTransactionQueue syncQueue, @@ -86,10 +89,13 @@ class SizeCompatUILayout { mShouldShowHint = !hasShownHint; mButtonWindowManager = new SizeCompatUIWindowManager(mContext, taskConfig, this); - mButtonSize = - mContext.getResources().getDimensionPixelSize(R.dimen.size_compat_button_size); - mPopupOffsetX = mButtonSize / 4; - mPopupOffsetY = mButtonSize; + final Resources resources = mContext.getResources(); + mButtonWidth = resources.getDimensionPixelSize(R.dimen.size_compat_button_width); + mButtonHeight = resources.getDimensionPixelSize(R.dimen.size_compat_button_height); + mPopupOffsetX = (mButtonWidth / 2) - resources.getDimensionPixelSize( + R.dimen.size_compat_hint_corner_radius) - (resources.getDimensionPixelSize( + R.dimen.size_compat_hint_point_width) / 2); + mPopupOffsetY = mButtonHeight; } /** Creates the activity restart button window. */ @@ -222,7 +228,7 @@ class SizeCompatUILayout { WindowManager.LayoutParams getButtonWindowLayoutParams() { final WindowManager.LayoutParams winParams = new WindowManager.LayoutParams( // Cannot be wrap_content as this determines the actual window size - mButtonSize, mButtonSize, + mButtonWidth, mButtonHeight, TYPE_APPLICATION_OVERLAY, FLAG_NOT_FOCUSABLE | FLAG_NOT_TOUCH_MODAL, PixelFormat.TRANSLUCENT); @@ -278,8 +284,8 @@ class SizeCompatUILayout { // Position of the button in the container coordinate. final int positionX = getLayoutDirection() == View.LAYOUT_DIRECTION_RTL ? stableBounds.left - taskBounds.left - : stableBounds.right - taskBounds.left - mButtonSize; - final int positionY = stableBounds.bottom - taskBounds.top - mButtonSize; + : stableBounds.right - taskBounds.left - mButtonWidth; + final int positionY = stableBounds.bottom - taskBounds.top - mButtonHeight; updateSurfacePosition(leash, positionX, positionY); } diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/sizecompatui/SizeCompatHintPopupTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/sizecompatui/SizeCompatHintPopupTest.java index 10fd7d705967..3a14a336190d 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/sizecompatui/SizeCompatHintPopupTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/sizecompatui/SizeCompatHintPopupTest.java @@ -24,7 +24,7 @@ import static org.mockito.Mockito.verify; import android.content.res.Configuration; import android.testing.AndroidTestingRunner; import android.view.LayoutInflater; -import android.widget.Button; +import android.widget.LinearLayout; import androidx.test.filters.SmallTest; @@ -77,8 +77,8 @@ public class SizeCompatHintPopupTest extends ShellTestCase { public void testOnClick() { doNothing().when(mLayout).dismissHint(); - final Button button = mHint.findViewById(R.id.got_it); - button.performClick(); + final LinearLayout hintPopup = mHint.findViewById(R.id.size_compat_hint_popup); + hintPopup.performClick(); verify(mLayout).dismissHint(); } |