Merge "Update the bubble overflow to match new visuals" into tm-dev

This commit is contained in:
TreeHugger Robot
2022-03-03 01:16:37 +00:00
committed by Android (Google) Code Review
5 changed files with 54 additions and 27 deletions

View File

@@ -19,9 +19,8 @@
android:id="@+id/bubble_overflow_container" android:id="@+id/bubble_overflow_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:paddingTop="@dimen/bubble_overflow_padding" android:paddingLeft="@dimen/bubble_overflow_container_padding_horizontal"
android:paddingLeft="@dimen/bubble_overflow_padding" android:paddingRight="@dimen/bubble_overflow_container_padding_horizontal"
android:paddingRight="@dimen/bubble_overflow_padding"
android:orientation="vertical" android:orientation="vertical"
android:layout_gravity="center_horizontal"> android:layout_gravity="center_horizontal">

View File

@@ -22,7 +22,6 @@
android:orientation="vertical"> android:orientation="vertical">
<com.android.wm.shell.bubbles.BadgedImageView <com.android.wm.shell.bubbles.BadgedImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bubble_view" android:id="@+id/bubble_view"
android:layout_gravity="center" android:layout_gravity="center"
android:layout_width="@dimen/bubble_size" android:layout_width="@dimen/bubble_size"
@@ -30,16 +29,14 @@
<TextView <TextView
android:id="@+id/bubble_view_name" android:id="@+id/bubble_view_name"
android:textAppearance="@*android:style/TextAppearance.DeviceDefault.ListItem" android:textSize="14sp"
android:textSize="13sp"
android:layout_width="@dimen/bubble_name_width" android:layout_width="@dimen/bubble_name_width"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:maxLines="1" android:lines="1"
android:lines="2"
android:ellipsize="end" android:ellipsize="end"
android:layout_gravity="center" android:layout_gravity="center"
android:paddingTop="@dimen/bubble_overflow_text_padding" android:paddingTop="@dimen/bubble_overflow_text_padding"
android:paddingEnd="@dimen/bubble_overflow_text_padding" android:paddingEnd="@dimen/bubble_overflow_text_padding"
android:paddingStart="@dimen/bubble_overflow_text_padding" android:paddingStart="@dimen/bubble_overflow_text_padding"
android:gravity="center"/> android:gravity="center_horizontal|top"/>
</LinearLayout> </LinearLayout>

View File

@@ -139,16 +139,21 @@
If this value changes then R.dimen.bubble_expanded_view_min_height in CtsVerifier If this value changes then R.dimen.bubble_expanded_view_min_height in CtsVerifier
should also be updated. --> should also be updated. -->
<dimen name="bubble_expanded_default_height">180dp</dimen> <dimen name="bubble_expanded_default_height">180dp</dimen>
<!-- On large screens the width of the expanded view is restricted to this size. --> <!-- The width of the overflow view on large screens or in landscape on phone. -->
<dimen name="bubble_expanded_view_phone_landscape_overflow_width">412dp</dimen> <dimen name="bubble_expanded_view_overflow_width">380dp</dimen>
<!-- Inset to apply to the icon in the overflow button. --> <!-- Inset to apply to the icon in the overflow button. -->
<dimen name="bubble_overflow_icon_inset">30dp</dimen> <dimen name="bubble_overflow_icon_inset">30dp</dimen>
<!-- Default (and minimum) height of bubble overflow --> <!-- Default (and minimum) height of bubble overflow -->
<dimen name="bubble_overflow_height">480dp</dimen> <dimen name="bubble_overflow_height">480dp</dimen>
<!-- Bubble overflow padding when there are no bubbles --> <!-- Bubble overflow padding when there are no bubbles -->
<dimen name="bubble_overflow_empty_state_padding">16dp</dimen> <dimen name="bubble_overflow_empty_state_padding">16dp</dimen>
<!-- Padding of container for overflow bubbles --> <!-- Horizontal padding of the overflow container. Total desired padding is 16dp but the items
<dimen name="bubble_overflow_padding">15dp</dimen> already have 5dp added to each side. -->
<dimen name="bubble_overflow_container_padding_horizontal">11dp</dimen>
<!-- Horizontal padding between items in the overflow view, half of the desired amount. -->
<dimen name="bubble_overflow_item_padding_horizontal">5dp</dimen>
<!-- Vertical padding between items in the overflow view, half the desired amount. -->
<dimen name="bubble_overflow_item_padding_vertical">16dp</dimen>
<!-- Padding of label for bubble overflow view --> <!-- Padding of label for bubble overflow view -->
<dimen name="bubble_overflow_text_padding">7dp</dimen> <dimen name="bubble_overflow_text_padding">7dp</dimen>
<!-- Height of bubble overflow empty state illustration --> <!-- Height of bubble overflow empty state illustration -->

View File

@@ -20,11 +20,13 @@ import static com.android.wm.shell.bubbles.BubbleDebugConfig.DEBUG_OVERFLOW;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_BUBBLES;
import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.wm.shell.bubbles.BubbleDebugConfig.TAG_WITH_CLASS_NAME;
import android.annotation.NonNull;
import android.content.Context; import android.content.Context;
import android.content.res.Configuration; import android.content.res.Configuration;
import android.content.res.Resources; import android.content.res.Resources;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Rect;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
@@ -58,6 +60,8 @@ public class BubbleOverflowContainerView extends LinearLayout {
private TextView mEmptyStateTitle; private TextView mEmptyStateTitle;
private TextView mEmptyStateSubtitle; private TextView mEmptyStateSubtitle;
private ImageView mEmptyStateImage; private ImageView mEmptyStateImage;
private int mHorizontalMargin;
private int mVerticalMargin;
private BubbleController mController; private BubbleController mController;
private BubbleOverflowAdapter mAdapter; private BubbleOverflowAdapter mAdapter;
private RecyclerView mRecyclerView; private RecyclerView mRecyclerView;
@@ -77,12 +81,6 @@ public class BubbleOverflowContainerView extends LinearLayout {
super(context, columns); super(context, columns);
} }
// @Override
// public boolean canScrollVertically() {
// // TODO (b/162006693): this should be based on items in the list & available height
// return true;
// }
@Override @Override
public int getColumnCountForAccessibility(RecyclerView.Recycler recycler, public int getColumnCountForAccessibility(RecyclerView.Recycler recycler,
RecyclerView.State state) { RecyclerView.State state) {
@@ -98,6 +96,17 @@ public class BubbleOverflowContainerView extends LinearLayout {
} }
} }
private class OverflowItemDecoration extends RecyclerView.ItemDecoration {
@Override
public void getItemOffsets(@NonNull Rect outRect, @NonNull View view,
@NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
outRect.left = mHorizontalMargin;
outRect.top = mVerticalMargin;
outRect.right = mHorizontalMargin;
outRect.bottom = mVerticalMargin;
}
}
public BubbleOverflowContainerView(Context context) { public BubbleOverflowContainerView(Context context) {
this(context, null); this(context, null);
} }
@@ -161,6 +170,9 @@ public class BubbleOverflowContainerView extends LinearLayout {
final int columns = res.getInteger(R.integer.bubbles_overflow_columns); final int columns = res.getInteger(R.integer.bubbles_overflow_columns);
mRecyclerView.setLayoutManager( mRecyclerView.setLayoutManager(
new OverflowGridLayoutManager(getContext(), columns)); new OverflowGridLayoutManager(getContext(), columns));
if (mRecyclerView.getItemDecorationCount() == 0) {
mRecyclerView.addItemDecoration(new OverflowItemDecoration());
}
mAdapter = new BubbleOverflowAdapter(getContext(), mOverflowBubbles, mAdapter = new BubbleOverflowAdapter(getContext(), mOverflowBubbles,
mController::promoteBubbleFromOverflow, mController::promoteBubbleFromOverflow,
mController.getPositioner()); mController.getPositioner());
@@ -188,6 +200,13 @@ public class BubbleOverflowContainerView extends LinearLayout {
final int mode = res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; final int mode = res.getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
final boolean isNightMode = (mode == Configuration.UI_MODE_NIGHT_YES); final boolean isNightMode = (mode == Configuration.UI_MODE_NIGHT_YES);
mHorizontalMargin = res.getDimensionPixelSize(
R.dimen.bubble_overflow_item_padding_horizontal);
mVerticalMargin = res.getDimensionPixelSize(R.dimen.bubble_overflow_item_padding_vertical);
if (mRecyclerView != null) {
mRecyclerView.invalidateItemDecorations();
}
mEmptyStateImage.setImageDrawable(isNightMode mEmptyStateImage.setImageDrawable(isNightMode
? res.getDrawable(R.drawable.bubble_ic_empty_overflow_dark) ? res.getDrawable(R.drawable.bubble_ic_empty_overflow_dark)
: res.getDrawable(R.drawable.bubble_ic_empty_overflow_light)); : res.getDrawable(R.drawable.bubble_ic_empty_overflow_light));
@@ -277,8 +296,7 @@ class BubbleOverflowAdapter extends RecyclerView.Adapter<BubbleOverflowAdapter.V
} }
@Override @Override
public BubbleOverflowAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, public BubbleOverflowAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int viewType) {
// Set layout for overflow bubble view. // Set layout for overflow bubble view.
LinearLayout overflowView = (LinearLayout) LayoutInflater.from(parent.getContext()) LinearLayout overflowView = (LinearLayout) LayoutInflater.from(parent.getContext())

View File

@@ -212,10 +212,7 @@ public class BubblePositioner {
mExpandedViewLargeScreenInsetFurthestEdge = mExpandedViewPadding; mExpandedViewLargeScreenInsetFurthestEdge = mExpandedViewPadding;
} }
mOverflowWidth = mIsLargeScreen mOverflowWidth = res.getDimensionPixelSize(R.dimen.bubble_expanded_view_overflow_width);
? mExpandedViewLargeScreenWidth
: res.getDimensionPixelSize(
R.dimen.bubble_expanded_view_phone_landscape_overflow_width);
mPointerWidth = res.getDimensionPixelSize(R.dimen.bubble_pointer_width); mPointerWidth = res.getDimensionPixelSize(R.dimen.bubble_pointer_width);
mPointerHeight = res.getDimensionPixelSize(R.dimen.bubble_pointer_height); mPointerHeight = res.getDimensionPixelSize(R.dimen.bubble_pointer_height);
mPointerMargin = res.getDimensionPixelSize(R.dimen.bubble_pointer_margin); mPointerMargin = res.getDimensionPixelSize(R.dimen.bubble_pointer_margin);
@@ -348,6 +345,15 @@ public class BubblePositioner {
mImeHeight = height; mImeHeight = height;
} }
private int getExpandedViewLargeScreenInsetFurthestEdge(boolean isOverflow) {
if (isOverflow && mIsLargeScreen) {
return mScreenRect.width()
- mExpandedViewLargeScreenInsetClosestEdge
- mOverflowWidth;
}
return mExpandedViewLargeScreenInsetFurthestEdge;
}
/** /**
* Calculates the padding for the bubble expanded view. * Calculates the padding for the bubble expanded view.
* *
@@ -362,6 +368,8 @@ public class BubblePositioner {
*/ */
public int[] getExpandedViewContainerPadding(boolean onLeft, boolean isOverflow) { public int[] getExpandedViewContainerPadding(boolean onLeft, boolean isOverflow) {
final int pointerTotalHeight = mPointerHeight - mPointerOverlap; final int pointerTotalHeight = mPointerHeight - mPointerOverlap;
final int expandedViewLargeScreenInsetFurthestEdge =
getExpandedViewLargeScreenInsetFurthestEdge(isOverflow);
if (mIsLargeScreen) { if (mIsLargeScreen) {
// Note: // Note:
// If we're in portrait OR if we're a small tablet, then the two insets values will // If we're in portrait OR if we're a small tablet, then the two insets values will
@@ -369,10 +377,10 @@ public class BubblePositioner {
// [left, top, right, bottom] // [left, top, right, bottom]
mPaddings[0] = onLeft mPaddings[0] = onLeft
? mExpandedViewLargeScreenInsetClosestEdge - pointerTotalHeight ? mExpandedViewLargeScreenInsetClosestEdge - pointerTotalHeight
: mExpandedViewLargeScreenInsetFurthestEdge; : expandedViewLargeScreenInsetFurthestEdge;
mPaddings[1] = 0; mPaddings[1] = 0;
mPaddings[2] = onLeft mPaddings[2] = onLeft
? mExpandedViewLargeScreenInsetFurthestEdge ? expandedViewLargeScreenInsetFurthestEdge
: mExpandedViewLargeScreenInsetClosestEdge - pointerTotalHeight; : mExpandedViewLargeScreenInsetClosestEdge - pointerTotalHeight;
// Overflow doesn't show manage button / get padding from it so add padding here // Overflow doesn't show manage button / get padding from it so add padding here
mPaddings[3] = isOverflow ? mExpandedViewPadding : 0; mPaddings[3] = isOverflow ? mExpandedViewPadding : 0;