Animate the bubble bar Y for task bar pinned/unpinned switches.

Animate the horizontal position of the bubble bar on taskbar pinned /
unpinned switches.

Bug: 345698412
Test: TaskbarPinningControllerTest
Flag: com.android.wm.shell.enable_bubble_bar
Change-Id: If330dc9e5f7b16a588973ad6043a5dc6709e13ab
This commit is contained in:
mpodolian
2024-10-18 13:29:12 -07:00
parent bea43b0c03
commit eedc7ab8fd
2 changed files with 60 additions and 3 deletions
@@ -18,6 +18,10 @@ package com.android.launcher3.taskbar.bubbles;
import static android.view.View.INVISIBLE;
import static android.view.View.VISIBLE;
import static com.android.launcher3.Utilities.mapRange;
import static com.android.launcher3.taskbar.TaskbarPinningController.PINNING_PERSISTENT;
import static com.android.launcher3.taskbar.TaskbarPinningController.PINNING_TRANSIENT;
import android.animation.Animator;
import android.animation.AnimatorSet;
import android.content.res.Resources;
@@ -41,11 +45,13 @@ import com.android.launcher3.anim.RoundedRectRevealOutlineProvider;
import com.android.launcher3.taskbar.TaskbarActivityContext;
import com.android.launcher3.taskbar.TaskbarControllers;
import com.android.launcher3.taskbar.TaskbarInsetsController;
import com.android.launcher3.taskbar.TaskbarSharedState;
import com.android.launcher3.taskbar.TaskbarStashController;
import com.android.launcher3.taskbar.bubbles.animation.BubbleBarViewAnimator;
import com.android.launcher3.taskbar.bubbles.flyout.BubbleBarFlyoutController;
import com.android.launcher3.taskbar.bubbles.flyout.BubbleBarFlyoutPositioner;
import com.android.launcher3.taskbar.bubbles.stashing.BubbleStashController;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.MultiPropertyFactory;
import com.android.launcher3.util.MultiValueAlpha;
import com.android.quickstep.SystemUiProxy;
@@ -101,6 +107,9 @@ public class BubbleBarViewController {
this::updateTranslationY);
private final AnimatedFloat mBubbleOffsetY = new AnimatedFloat(
this::updateBubbleOffsetY);
private final AnimatedFloat mBubbleBarTranslationYForPinning = new AnimatedFloat(
this::updateTranslationY);
// Modified when swipe up is happening on the bubble bar or task bar.
private float mBubbleBarSwipeUpTranslationY;
@@ -120,8 +129,9 @@ public class BubbleBarViewController {
private BubbleBarViewAnimator mBubbleBarViewAnimator;
private final FrameLayout mBubbleBarContainer;
private BubbleBarFlyoutController mBubbleBarFlyoutController;
private TaskbarSharedState mTaskbarSharedState;
private final TimeSource mTimeSource = System::currentTimeMillis;
private final int mTaskbarTranslationDelta;
@Nullable
private BubbleBarBoundsChangeListener mBoundsChangeListener;
@@ -135,11 +145,13 @@ public class BubbleBarViewController {
mBubbleBarAlpha = new MultiValueAlpha(mBarView, 1 /* num alpha channels */);
mIconSize = activity.getResources().getDimensionPixelSize(
R.dimen.bubblebar_icon_size);
mTaskbarTranslationDelta = getBubbleBarTranslationDeltaForTaskbar(activity);
}
/** Initializes controller. */
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers,
TaskbarViewPropertiesProvider taskbarViewPropertiesProvider) {
mTaskbarSharedState = controllers.getSharedState();
mBubbleStashController = bubbleControllers.bubbleStashController;
mBubbleBarController = bubbleControllers.bubbleBarController;
mBubbleDragController = bubbleControllers.bubbleDragController;
@@ -167,6 +179,10 @@ public class BubbleBarViewController {
mBoundsChangeListener.onBoundsChanged();
}
});
float pinningValue = DisplayController.isTransientTaskbar(mActivity)
? PINNING_TRANSIENT
: PINNING_PERSISTENT;
mBubbleBarTranslationYForPinning.updateValue(pinningValue);
mBarView.setController(new BubbleBarView.Controller() {
@Override
public float getBubbleBarTranslationY() {
@@ -220,6 +236,11 @@ public class BubbleBarViewController {
};
}
/** Returns animated float property for controlling pining Y position. */
public AnimatedFloat getBubbleBarTranslationYForPinning() {
return mBubbleBarTranslationYForPinning;
}
private BubbleBarFlyoutPositioner createFlyoutPositioner() {
return new BubbleBarFlyoutPositioner() {
@@ -646,7 +667,35 @@ public class BubbleBarViewController {
private void updateTranslationY() {
mBarView.setTranslationY(mBubbleBarTranslationY.value + mBubbleBarSwipeUpTranslationY
+ mBubbleBarStashTranslationY);
+ mBubbleBarStashTranslationY + getBubbleBarTranslationYForTaskbarPinning());
}
/** Computes translation y for taskbar pinning. */
private float getBubbleBarTranslationYForTaskbarPinning() {
if (mTaskbarSharedState == null) return 0f;
float animationProgress = mBubbleBarTranslationYForPinning.value;
if (mTaskbarSharedState.startTaskbarVariantIsTransient) {
return mapRange(animationProgress, /* min = */ 0f, mTaskbarTranslationDelta);
} else {
return mapRange(animationProgress, -mTaskbarTranslationDelta, /* max = */ 0f);
}
}
/**
* Calculates the vertical difference in the bubble bar positions for pinned and transient
* taskbar modes.
*/
private int getBubbleBarTranslationDeltaForTaskbar(TaskbarActivityContext activity) {
Resources res = activity.getResources();
int persistentBubbleSize = res
.getDimensionPixelSize(R.dimen.bubblebar_icon_size_persistent_taskbar);
int persistentSpacingSize = res
.getDimensionPixelSize(R.dimen.bubblebar_icon_spacing_persistent_taskbar);
int persistentBubbleBarSize = persistentBubbleSize + persistentSpacingSize * 2;
int persistentTaskbarHeight = activity.getPersistentTaskbarDeviceProfile().taskbarHeight;
int persistentBubbleBarY = (persistentTaskbarHeight - persistentBubbleBarSize) / 2;
int transientBubbleBarY = activity.getTransientTaskbarDeviceProfile().taskbarBottomMargin;
return transientBubbleBarY - persistentBubbleBarY;
}
private void updateScaleX(float scale) {