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:
committed by
Android (Google) Code Review
commit
ddf212523f
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user