Merge "Redesign the size compat restart button according to mocks." into sc-v2-dev am: 2d213c397a
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/16131381 Change-Id: I3f81e7b43900decd687e554590effef4e3c09849
This commit is contained in:
@@ -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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user