Update bubble bar to match visual spec

Made bubble bar icon size adjustable and listen to the task bar
icon size changes. Additionally fixes an issue where the pointer arrow
could be misplaced.

Test: BubbleBarViewAnimatorTest.kt
Flag: ACONFIG com.android.wm.shell.enable_bubble_bar DEVELOPMENT
Bug: 295027436
Fixes: 334781761
Change-Id: Ie4ceee84cc00baa0186a3d5b431080c8495c7285
This commit is contained in:
mpodolian
2024-04-15 16:57:01 +01:00
parent 83fef2d60d
commit d25c65f9f2
4 changed files with 103 additions and 30 deletions
@@ -18,9 +18,12 @@ package com.android.launcher3.taskbar.bubbles;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import android.content.res.Resources;
import android.graphics.Point;
import android.graphics.Rect;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
@@ -52,12 +55,13 @@ import java.util.function.Consumer;
public class BubbleBarViewController {
private static final String TAG = BubbleBarViewController.class.getSimpleName();
private static final float APP_ICON_SMALL_DP = 44f;
private static final float APP_ICON_MEDIUM_DP = 48f;
private static final float APP_ICON_LARGE_DP = 52f;
private final SystemUiProxy mSystemUiProxy;
private final TaskbarActivityContext mActivity;
private final BubbleBarView mBarView;
private final int mIconSize;
private final int mPointerSize;
private int mIconSize;
// Initialized in init.
private BubbleStashController mBubbleStashController;
@@ -96,9 +100,8 @@ public class BubbleBarViewController {
mSystemUiProxy = SystemUiProxy.INSTANCE.get(mActivity);
mBubbleBarAlpha = new MultiValueAlpha(mBarView, 1 /* num alpha channels */);
mBubbleBarAlpha.setUpdateVisibility(true);
mIconSize = activity.getResources().getDimensionPixelSize(R.dimen.bubblebar_icon_size);
mPointerSize = activity.getResources().getDimensionPixelSize(
R.dimen.bubblebar_pointer_size);
mIconSize = activity.getResources().getDimensionPixelSize(
R.dimen.bubblebar_icon_size);
}
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers) {
@@ -108,12 +111,8 @@ public class BubbleBarViewController {
mTaskbarStashController = controllers.taskbarStashController;
mTaskbarInsetsController = controllers.taskbarInsetsController;
mActivity.addOnDeviceProfileChangeListener(dp ->
mBarView.getLayoutParams().height =
mActivity.getDeviceProfile().taskbarHeight + mPointerSize
);
mBarView.getLayoutParams().height =
mActivity.getDeviceProfile().taskbarHeight + mPointerSize;
mActivity.addOnDeviceProfileChangeListener(dp -> setBubbleBarIconSize(dp.taskbarIconSize));
setBubbleBarIconSize(mActivity.getDeviceProfile().taskbarIconSize);
mBubbleBarScale.updateValue(1f);
mBubbleClickListener = v -> onBubbleClicked(v);
mBubbleBarClickListener = v -> onBubbleBarClicked();
@@ -260,6 +259,33 @@ public class BubbleBarViewController {
}
}
private void setBubbleBarIconSize(int newIconSize) {
if (newIconSize == mIconSize) {
return;
}
Resources res = mActivity.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
float smallIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
APP_ICON_SMALL_DP, dm);
float mediumIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
APP_ICON_MEDIUM_DP, dm);
float largeIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
APP_ICON_LARGE_DP, dm);
float smallMediumThreshold = (smallIconSize + mediumIconSize) / 2f;
float mediumLargeThreshold = (mediumIconSize + largeIconSize) / 2f;
mIconSize = newIconSize <= smallMediumThreshold
? res.getDimensionPixelSize(R.dimen.bubblebar_icon_size_small) :
res.getDimensionPixelSize(R.dimen.bubblebar_icon_size);
float bubbleBarPadding = newIconSize >= mediumLargeThreshold
? res.getDimensionPixelSize(R.dimen.bubblebar_icon_spacing_large) :
res.getDimensionPixelSize(R.dimen.bubblebar_icon_spacing);
mBarView.setIconSizeAndPadding(mIconSize, bubbleBarPadding);
mBarView.setPadding((int) bubbleBarPadding, mBarView.getPaddingTop(),
(int) bubbleBarPadding,
mBarView.getPaddingBottom());
}
/** Sets a callback that updates the selected bubble after the bubble bar collapses. */
public void setUpdateSelectedBubbleAfterCollapse(
Consumer<String> updateSelectedBubbleAfterCollapse) {