Merge changes Ibdecabd1,If330dc9e into main

* changes:
  Added scale animation for taskbar pinning transition.
  Animate the bubble bar Y for task bar pinned/unpinned switches.
This commit is contained in:
Mykola Podolian
2024-10-25 19:48:55 +00:00
committed by Android (Google) Code Review
3 changed files with 95 additions and 6 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;
@@ -42,12 +46,14 @@ 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.flyout.FlyoutCallbacks;
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;
@@ -106,6 +112,10 @@ public class BubbleBarViewController {
this::updateTranslationY);
private final AnimatedFloat mBubbleOffsetY = new AnimatedFloat(
this::updateBubbleOffsetY);
private final AnimatedFloat mBubbleBarPinning = new AnimatedFloat(pinningProgress -> {
updateTranslationY();
setBubbleBarScaleAndPadding(pinningProgress);
});
// Modified when swipe up is happening on the bubble bar or task bar.
private float mBubbleBarSwipeUpTranslationY;
@@ -125,8 +135,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;
@@ -140,11 +151,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;
@@ -172,6 +185,10 @@ public class BubbleBarViewController {
mBoundsChangeListener.onBoundsChanged();
}
});
float pinningValue = DisplayController.isTransientTaskbar(mActivity)
? PINNING_TRANSIENT
: PINNING_PERSISTENT;
mBubbleBarPinning.updateValue(pinningValue);
mBarView.setController(new BubbleBarView.Controller() {
@Override
public float getBubbleBarTranslationY() {
@@ -227,6 +244,11 @@ public class BubbleBarViewController {
};
}
/** Returns animated float property responsible for pinning transition animation. */
public AnimatedFloat getBubbleBarPinning() {
return mBubbleBarPinning;
}
private BubbleBarFlyoutPositioner createFlyoutPositioner() {
return new BubbleBarFlyoutPositioner() {
@@ -605,9 +627,11 @@ public class BubbleBarViewController {
updateBubbleBarIconSizeAndPadding(newIconSize, newPadding, animate);
}
private int getBubbleBarIconSizeFromDeviceProfile(Resources res) {
DeviceProfile deviceProfile = mActivity.getDeviceProfile();
return getBubbleBarIconSizeFromDeviceProfile(res, mActivity.getDeviceProfile());
}
private int getBubbleBarIconSizeFromDeviceProfile(Resources res, DeviceProfile deviceProfile) {
DisplayMetrics dm = res.getDisplayMetrics();
float smallIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
APP_ICON_SMALL_DP, dm);
@@ -622,7 +646,10 @@ public class BubbleBarViewController {
}
private int getBubbleBarPaddingFromDeviceProfile(Resources res) {
DeviceProfile deviceProfile = mActivity.getDeviceProfile();
return getBubbleBarPaddingFromDeviceProfile(res, mActivity.getDeviceProfile());
}
private int getBubbleBarPaddingFromDeviceProfile(Resources res, DeviceProfile deviceProfile) {
DisplayMetrics dm = res.getDisplayMetrics();
float mediumIconSize = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
APP_ICON_MEDIUM_DP, dm);
@@ -663,7 +690,53 @@ 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 pinningProgress = mBubbleBarPinning.value;
if (mTaskbarSharedState.startTaskbarVariantIsTransient) {
return mapRange(pinningProgress, /* min = */ 0f, mTaskbarTranslationDelta);
} else {
return mapRange(pinningProgress, -mTaskbarTranslationDelta, /* max = */ 0f);
}
}
private void setBubbleBarScaleAndPadding(float pinningProgress) {
Resources res = mActivity.getResources();
// determine icon scale for pinning
int persistentIconSize = res.getDimensionPixelSize(
R.dimen.bubblebar_icon_size_persistent_taskbar);
int transientIconSize = getBubbleBarIconSizeFromDeviceProfile(res,
mActivity.getTransientTaskbarDeviceProfile());
float pinningIconSize = mapRange(pinningProgress, transientIconSize, persistentIconSize);
// determine bubble bar padding for pinning
int persistentPadding = res.getDimensionPixelSize(
R.dimen.bubblebar_icon_spacing_persistent_taskbar);
int transientPadding = getBubbleBarPaddingFromDeviceProfile(res,
mActivity.getTransientTaskbarDeviceProfile());
float pinningPadding = mapRange(pinningProgress, transientPadding, persistentPadding);
mBarView.setIconSizeAndPaddingForPinning(pinningIconSize, pinningPadding);
}
/**
* 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) {