diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml
index ba20a10dae..e57e650729 100644
--- a/quickstep/res/values/dimens.xml
+++ b/quickstep/res/values/dimens.xml
@@ -471,6 +471,7 @@
@dimen/bubblebar_icon_spacing
12dp
1dp
+ 12dp
@dimen/floating_dismiss_background_size
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index 4966bf7964..2745129dc9 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -271,8 +271,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
mWindowManager = c.getSystemService(WindowManager.class);
// Inflate views.
- final boolean isTransientTaskbar = DisplayController.isTransientTaskbar(this)
- && !isPhoneMode();
+ boolean isTransientTaskbar = isTransientTaskbar();
int taskbarLayout = isTransientTaskbar ? R.layout.transient_taskbar : R.layout.taskbar;
mDragLayer = (TaskbarDragLayer) mLayoutInflater.inflate(taskbarLayout, null, false);
TaskbarView taskbarView = mDragLayer.findViewById(R.id.taskbar_view);
@@ -385,6 +384,11 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
dispatchDeviceProfileChanged();
}
+ /** Returns whether current taskbar is transient. */
+ public boolean isTransientTaskbar() {
+ return DisplayController.isTransientTaskbar(this) && !isPhoneMode();
+ }
+
/**
* Copy the original DeviceProfile, match the number of hotseat icons and qsb width and update
* the icon size
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt b/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt
index ea6d82b7e2..e44bce1a07 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarBackgroundRenderer.kt
@@ -57,6 +57,7 @@ class TaskbarBackgroundRenderer(private val context: TaskbarActivityContext) {
var backgroundHeight = context.deviceProfile.taskbarHeight.toFloat()
var translationYForSwipe = 0f
var translationYForStash = 0f
+ var translationXForBubbleBar = 0f
private val transientBackgroundBounds = context.transientTaskbarBounds
@@ -244,12 +245,12 @@ class TaskbarBackgroundRenderer(private val context: TaskbarActivityContext) {
setColorAlphaBound(Color.BLACK, Math.round(newShadowAlpha)),
)
strokePaint.alpha = (paint.alpha * strokeAlpha) / 255
-
+ val currentTranslationX = translationXForBubbleBar * progress
lastDrawnTransientRect.set(
- transientBackgroundBounds.left + halfWidthDelta,
+ transientBackgroundBounds.left + halfWidthDelta + currentTranslationX,
bottom - newBackgroundHeight,
- transientBackgroundBounds.right - halfWidthDelta,
- bottom
+ transientBackgroundBounds.right - halfWidthDelta + currentTranslationX,
+ bottom,
)
val horizontalInset = fullWidth * widthInsetPercentage
lastDrawnTransientRect.inset(horizontalInset, 0f)
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
index 8b521128a7..59ef57773c 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayer.java
@@ -254,6 +254,11 @@ public class TaskbarDragLayer extends BaseDragLayer {
invalidate();
}
+ protected void setBackgroundTranslationXForBubbleBar(float translationX) {
+ mBackgroundRenderer.setTranslationXForBubbleBar(translationX);
+ invalidate();
+ }
+
/** Returns the bounds in DragLayer coordinates of where the transient background was drawn. */
protected RectF getLastDrawnTransientRect() {
return mBackgroundRenderer.getLastDrawnTransientRect();
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
index 925e10bdce..68c252a592 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarDragLayerController.java
@@ -197,6 +197,13 @@ public class TaskbarDragLayerController implements TaskbarControllers.LoggableTa
mTaskbarDragLayer.setBackgroundTranslationYForSwipe(transY);
}
+ /**
+ * Sets the translation of the background for the bubble bar.
+ */
+ public void setTranslationXForBubbleBar(float transX) {
+ mTaskbarDragLayer.setBackgroundTranslationXForBubbleBar(transX);
+ }
+
/**
* Sets the translation of the background during the spring on stash animation.
*/
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
index 60de066aa9..e0be39dc0a 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
@@ -40,6 +40,7 @@ import static com.android.launcher3.taskbar.TaskbarPinningController.PINNING_TRA
import static com.android.launcher3.taskbar.bubbles.BubbleBarView.FADE_IN_ANIM_ALPHA_DURATION_MS;
import static com.android.launcher3.taskbar.bubbles.BubbleBarView.FADE_OUT_ANIM_POSITION_DURATION_MS;
import static com.android.launcher3.util.MultiPropertyFactory.MULTI_PROPERTY_VALUE;
+import static com.android.launcher3.util.MultiTranslateDelegate.INDEX_BUBBLE_BAR_ANIM;
import static com.android.launcher3.util.MultiTranslateDelegate.INDEX_NAV_BAR_ANIM;
import static com.android.launcher3.util.MultiTranslateDelegate.INDEX_TASKBAR_ALIGNMENT_ANIM;
import static com.android.launcher3.util.MultiTranslateDelegate.INDEX_TASKBAR_PINNING_ANIM;
@@ -81,6 +82,7 @@ import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.model.data.ItemInfo;
import com.android.launcher3.model.data.TaskItemInfo;
import com.android.launcher3.taskbar.bubbles.BubbleBarController;
+import com.android.launcher3.taskbar.bubbles.BubbleControllers;
import com.android.launcher3.util.DisplayController;
import com.android.launcher3.util.ItemInfoMatcher;
import com.android.launcher3.util.LauncherBindableItemsContainer;
@@ -109,6 +111,8 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
private static final Runnable NO_OP = () -> { };
+ public static long TRANSLATION_X_FOR_BUBBLEBAR_ANIM_DURATION_MS = 250;
+
public static final int ALPHA_INDEX_HOME = 0;
public static final int ALPHA_INDEX_KEYGUARD = 1;
public static final int ALPHA_INDEX_STASH = 2;
@@ -132,6 +136,7 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
private static final int TRANSITION_FADE_OUT_DURATION = 83;
private final TaskbarActivityContext mActivity;
+ private @Nullable TaskbarDragLayerController mDragLayerController;
private final TaskbarView mTaskbarView;
private final MultiValueAlpha mTaskbarIconAlpha;
private final AnimatedFloat mTaskbarIconScaleForStash = new AnimatedFloat(this::updateScale);
@@ -144,15 +149,22 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
this::updateTaskbarIconsScale);
private final AnimatedFloat mTaskbarIconTranslationXForPinning = new AnimatedFloat(
- this::updateTaskbarIconTranslationXForPinning);
+ () -> updateTaskbarIconTranslationXForPinning());
private final AnimatedFloat mIconsTranslationXForNavbar = new AnimatedFloat(
this::updateTranslationXForNavBar);
+ private final AnimatedFloat mTranslationXForBubbleBar = new AnimatedFloat(
+ this::updateTranslationXForBubbleBar);
+
@Nullable
private Animator mTaskbarShiftXAnim;
@Nullable
private BubbleBarLocation mCurrentBubbleBarLocation;
+ @Nullable
+ private BubbleControllers mBubbleControllers = null;
+ @Nullable
+ private ObjectAnimator mTranslationXAnimation;
private final AnimatedFloat mTaskbarIconTranslationYForPinning = new AnimatedFloat(
this::updateTranslationY);
@@ -174,11 +186,12 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
private final View.OnLayoutChangeListener mTaskbarViewLayoutChangeListener =
(v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom) -> {
if (!taskbarRecentsLayoutTransition()) {
- updateTaskbarIconTranslationXForPinning();
- }
- if (BubbleBarController.isBubbleBarEnabled()) {
- mControllers.navbarButtonsViewController.onLayoutsUpdated();
+ // update shiftX is handled with the animation at the end of the method
+ updateTaskbarIconTranslationXForPinning(/* updateShiftXForBubbleBar = */ false);
}
+ if (mBubbleControllers == null) return;
+ mControllers.navbarButtonsViewController.onLayoutsUpdated();
+ adjustTaskbarXForBubbleBar();
};
// Animation to align icons with Launcher, created lazily. This allows the controller to be
@@ -222,11 +235,11 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
mIsRtl = Utilities.isRtl(mTaskbarView.getResources());
mTaskbarLeftRightMargin = mActivity.getResources().getDimensionPixelSize(
R.dimen.transient_taskbar_padding);
-
}
public void init(TaskbarControllers controllers) {
mControllers = controllers;
+ controllers.bubbleControllers.ifPresent(bc -> mBubbleControllers = bc);
mTaskbarView.init(TaskbarViewCallbacksFactory.newInstance(mActivity).create(
mActivity, mControllers, mTaskbarView));
mTaskbarView.getLayoutParams().height = mActivity.isPhoneMode()
@@ -252,7 +265,7 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
controllers.navbarButtonsViewController.getTaskbarNavButtonTranslationY();
mTaskbarNavButtonTranslationYForInAppDisplay = controllers.navbarButtonsViewController
.getTaskbarNavButtonTranslationYForInAppDisplay();
-
+ mDragLayerController = controllers.taskbarDragLayerController;
mActivity.addOnDeviceProfileChangeListener(mDeviceProfileChangeListener);
if (ENABLE_TASKBAR_NAVBAR_UNIFICATION) {
@@ -270,24 +283,59 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
@Override
public void onBubbleBarLocationUpdated(BubbleBarLocation location) {
updateCurrentBubbleBarLocation(location);
- if (!shouldMoveTaskbarOnBubbleBarLocationUpdate()) return;
- cancelTaskbarShiftAnimation();
- // reset translation x, taskbar will position icons with the updated location
- mIconsTranslationXForNavbar.updateValue(0);
- mTaskbarView.onBubbleBarLocationUpdated(location);
+ if (mActivity.isTransientTaskbar()) {
+ translateTaskbarXForBubbleBar(/* animate= */ false);
+ } else if (mActivity.shouldStartAlignTaskbar()) {
+ cancelTaskbarShiftAnimation();
+ // reset translation x, taskbar will position icons with the updated location
+ mIconsTranslationXForNavbar.updateValue(0);
+ mTaskbarView.onBubbleBarLocationUpdated(location);
+ }
}
/** Animates start aligned taskbar accordingly to the bubble bar position. */
@Override
public void onBubbleBarLocationAnimated(BubbleBarLocation location) {
- if (!updateCurrentBubbleBarLocation(location)
- || !shouldMoveTaskbarOnBubbleBarLocationUpdate()) {
- return;
+ boolean locationUpdated = updateCurrentBubbleBarLocation(location);
+ if (mActivity.isTransientTaskbar()) {
+ translateTaskbarXForBubbleBar(/* animate= */ true);
+ } else if (locationUpdated && mActivity.shouldStartAlignTaskbar()) {
+ cancelTaskbarShiftAnimation();
+ float translationX = mTaskbarView.getTranslationXForBubbleBarPosition(location);
+ mTaskbarShiftXAnim = createTaskbarIconsShiftAnimator(translationX);
+ mTaskbarShiftXAnim.start();
}
- cancelTaskbarShiftAnimation();
- float translationX = mTaskbarView.getTranslationXForBubbleBarPosition(location);
- mTaskbarShiftXAnim = createTaskbarIconsShiftAnimator(translationX);
- mTaskbarShiftXAnim.start();
+ }
+
+ private void translateTaskbarXForBubbleBar(boolean animate) {
+ cancelCurrentTranslationXAnimation();
+ if (!mActivity.isTransientTaskbar()) return;
+ int shiftX = getTransientTaskbarShiftXForBubbleBar();
+ if (animate) {
+ mTranslationXAnimation = mTranslationXForBubbleBar.animateToValue(shiftX);
+ mTranslationXAnimation.setInterpolator(EMPHASIZED);
+ mTranslationXAnimation.setDuration(TRANSLATION_X_FOR_BUBBLEBAR_ANIM_DURATION_MS);
+ mTranslationXAnimation.start();
+ } else {
+ mTranslationXForBubbleBar.updateValue(shiftX);
+ }
+ }
+
+ private void cancelCurrentTranslationXAnimation() {
+ if (mTranslationXAnimation != null) {
+ if (mTranslationXAnimation.isRunning()) {
+ mTranslationXAnimation.cancel();
+ }
+ mTranslationXAnimation = null;
+ }
+ }
+
+ private int getTransientTaskbarShiftXForBubbleBar() {
+ if (mBubbleControllers == null || !mActivity.isTransientTaskbar()) {
+ return 0;
+ }
+ return mBubbleControllers.bubbleBarViewController
+ .getTransientTaskbarTranslationXForBubbleBar(mCurrentBubbleBarLocation);
}
/** Updates the mCurrentBubbleBarLocation, returns {@code} true if location is updated. */
@@ -300,13 +348,6 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
}
}
- /** Returns whether taskbar should be moved on the bubble bar location update. */
- private boolean shouldMoveTaskbarOnBubbleBarLocationUpdate() {
- return mControllers.bubbleControllers.isPresent()
- && mActivity.shouldStartAlignTaskbar()
- && mActivity.isThreeButtonNav();
- }
-
private void cancelTaskbarShiftAnimation() {
if (mTaskbarShiftXAnim != null) {
mTaskbarShiftXAnim.cancel();
@@ -450,16 +491,26 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
}
void updateTaskbarIconTranslationXForPinning() {
+ updateTaskbarIconTranslationXForPinning(/* updateShiftXForBubbleBar = */ true);
+ }
+
+ void updateTaskbarIconTranslationXForPinning(boolean updateShiftXForBubbleBar) {
View[] iconViews = mTaskbarView.getIconViews();
float scale = mTaskbarIconTranslationXForPinning.value;
float transientTaskbarAllAppsOffset = mActivity.getResources().getDimension(
mTaskbarView.getAllAppsButtonContainer().getAllAppsButtonTranslationXOffset(true));
float persistentTaskbarAllAppsOffset = mActivity.getResources().getDimension(
mTaskbarView.getAllAppsButtonContainer().getAllAppsButtonTranslationXOffset(false));
-
+ if (mBubbleControllers != null && updateShiftXForBubbleBar) {
+ cancelCurrentTranslationXAnimation();
+ int translationXForTransientTaskbar = mBubbleControllers.bubbleBarViewController
+ .getTransientTaskbarTranslationXForBubbleBar(mCurrentBubbleBarLocation);
+ float currentTranslationXForTransientTaskbar = mapRange(scale,
+ translationXForTransientTaskbar, 0);
+ mTranslationXForBubbleBar.updateValue(currentTranslationXForTransientTaskbar);
+ }
float allAppIconTranslateRange = mapRange(scale, transientTaskbarAllAppsOffset,
persistentTaskbarAllAppsOffset);
-
// Task icons are laid out so the taskbar content is centered. The taskbar width (used for
// centering taskbar icons) depends on the all apps button X translation, and is different
// for persistent and transient taskbar. If the offset used for current taskbar layout is
@@ -551,13 +602,23 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
}
private void updateTranslationXForNavBar() {
+ updateIconViewsTranslationX(INDEX_NAV_BAR_ANIM, mIconsTranslationXForNavbar.value);
+ }
+
+ private void updateTranslationXForBubbleBar() {
+ float translationX = mTranslationXForBubbleBar.value;
+ updateIconViewsTranslationX(INDEX_BUBBLE_BAR_ANIM, translationX);
+ if (mDragLayerController != null) {
+ mDragLayerController.setTranslationXForBubbleBar(translationX);
+ }
+ }
+
+ private void updateIconViewsTranslationX(int translationXChannel, float translationX) {
View[] iconViews = mTaskbarView.getIconViews();
- float translationX = mIconsTranslationXForNavbar.value;
- for (int iconIndex = 0; iconIndex < iconViews.length; iconIndex++) {
- View iconView = iconViews[iconIndex];
+ for (View iconView : iconViews) {
MultiTranslateDelegate translateDelegate =
((Reorderable) iconView).getTranslateDelegate();
- translateDelegate.getTranslationX(INDEX_NAV_BAR_ANIM).setValue(translationX);
+ translateDelegate.getTranslationX(translationXChannel).setValue(translationX);
}
}
@@ -811,6 +872,13 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
if (mTaskbarView.updateMaxNumIcons()) {
commitRunningAppsToUI();
}
+ adjustTaskbarXForBubbleBar();
+ }
+
+ private void adjustTaskbarXForBubbleBar() {
+ if (mBubbleControllers != null && mActivity.isTransientTaskbar()) {
+ translateTaskbarXForBubbleBar(/* animate= */ true);
+ }
}
/**
@@ -841,7 +909,17 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
setter.setFloat(mTaskbarIconTranslationYForHome, VALUE, -offsetY, interpolator);
setter.setFloat(mTaskbarNavButtonTranslationY, VALUE, -offsetY, interpolator);
setter.setFloat(mTaskbarNavButtonTranslationYForInAppDisplay, VALUE, offsetY, interpolator);
-
+ if (mBubbleControllers != null
+ && mCurrentBubbleBarLocation != null
+ && mActivity.isTransientTaskbar()) {
+ int offsetX = mBubbleControllers.bubbleBarViewController
+ .getTransientTaskbarTranslationXForBubbleBar(mCurrentBubbleBarLocation);
+ if (offsetX != 0) {
+ // if taskbar should be adjusted for the bubble bar adjust the taskbar translation
+ mTranslationXForBubbleBar.updateValue(offsetX);
+ setter.setFloat(mTranslationXForBubbleBar, VALUE, 0, interpolator);
+ }
+ }
int collapsedHeight = mActivity.getDefaultTaskbarWindowSize();
int expandedHeight = Math.max(collapsedHeight, taskbarDp.taskbarHeight + offsetY);
setter.addOnFrameListener(anim -> mActivity.setTaskbarWindowSize(
@@ -1042,8 +1120,8 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
}
private boolean bubbleBarHasBubbles() {
- return mControllers.bubbleControllers.isPresent()
- && mControllers.bubbleControllers.get().bubbleBarViewController.hasBubbles();
+ return mBubbleControllers != null
+ && mBubbleControllers.bubbleBarViewController.hasBubbles();
}
public void onRotationChanged(DeviceProfile deviceProfile) {
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
index 2d4d279564..c00112383b 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
@@ -1339,6 +1339,14 @@ public class BubbleBarView extends FrameLayout {
return getScaledIconSize() + mIconOverlapAmount + 2 * mBubbleBarPadding;
}
+ float getCollapsedWidthForIconSizeAndPadding(int iconSize, int bubbleBarPadding) {
+ final int bubbleChildCount = Math.min(getBubbleChildCount(), MAX_VISIBLE_BUBBLES_COLLAPSED);
+ if (bubbleChildCount == 0) return 0;
+ final int spacesCount = bubbleChildCount - 1;
+ final float horizontalPadding = 2 * bubbleBarPadding;
+ return iconSize * bubbleChildCount + mIconOverlapAmount * spacesCount + horizontalPadding;
+ }
+
/** Returns the child count excluding the overflow if it's present. */
int getBubbleChildCount() {
return hasOverflow() ? getChildCount() - 1 : getChildCount();
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
index 0b627d2901..afbc932af2 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
@@ -122,7 +122,8 @@ public class BubbleBarViewController {
private float mBubbleBarSwipeUpTranslationY;
// Modified when bubble bar is springing back into the stash handle.
private float mBubbleBarStashTranslationY;
-
+ // Minimum distance between the BubbleBar and the taskbar
+ private final int mBubbleBarTaskbarMinDistance;
// Whether the bar is hidden for a sysui state.
private boolean mHiddenForSysui;
// Whether the bar is hidden because there are no bubbles.
@@ -150,10 +151,11 @@ public class BubbleBarViewController {
mBubbleBarContainer = bubbleBarContainer;
mSystemUiProxy = SystemUiProxy.INSTANCE.get(mActivity);
mBubbleBarAlpha = new MultiValueAlpha(mBarView, 1 /* num alpha channels */);
- mIconSize = activity.getResources().getDimensionPixelSize(
- R.dimen.bubblebar_icon_size);
- mDragElevation = activity.getResources().getDimensionPixelSize(
- R.dimen.bubblebar_drag_elevation);
+ Resources res = activity.getResources();
+ mIconSize = res.getDimensionPixelSize(R.dimen.bubblebar_icon_size);
+ mBubbleBarTaskbarMinDistance = res.getDimensionPixelSize(
+ R.dimen.bubblebar_transient_taskbar_min_distance);
+ mDragElevation = res.getDimensionPixelSize(R.dimen.bubblebar_drag_elevation);
mTaskbarTranslationDelta = getBubbleBarTranslationDeltaForTaskbar(activity);
}
@@ -664,6 +666,45 @@ public class BubbleBarViewController {
}
}
+ /**
+ * Returns the translation X of the transient taskbar according to the bubble bar location
+ * regardless of the current taskbar mode.
+ */
+ public int getTransientTaskbarTranslationXForBubbleBar(BubbleBarLocation location) {
+ int taskbarShift = 0;
+ if (!isBubbleBarVisible() || mTaskbarViewPropertiesProvider == null) return taskbarShift;
+ Rect taskbarViewBounds = mTaskbarViewPropertiesProvider.getTaskbarViewBounds();
+ if (taskbarViewBounds.isEmpty()) return taskbarShift;
+ int actualDistance =
+ getDistanceBetweenTransientTaskbarAndBubbleBar(location, taskbarViewBounds);
+ if (actualDistance < mBubbleBarTaskbarMinDistance) {
+ taskbarShift = mBubbleBarTaskbarMinDistance - actualDistance;
+ if (!location.isOnLeft(mBarView.isLayoutRtl())) {
+ taskbarShift = -taskbarShift;
+ }
+ }
+ return taskbarShift;
+ }
+
+ private int getDistanceBetweenTransientTaskbarAndBubbleBar(BubbleBarLocation location,
+ Rect taskbarViewBounds) {
+ Resources res = mActivity.getResources();
+ DeviceProfile transientDp = mActivity.getTransientTaskbarDeviceProfile();
+ int transientIconSize = getBubbleBarIconSizeFromDeviceProfile(res, transientDp);
+ int transientPadding = getBubbleBarPaddingFromDeviceProfile(res, transientDp);
+ int transientWidthWithMargin = (int) (mBarView.getCollapsedWidthForIconSizeAndPadding(
+ transientIconSize, transientPadding) + mBarView.getHorizontalMargin());
+ int distance;
+ if (location.isOnLeft(mBarView.isLayoutRtl())) {
+ distance = taskbarViewBounds.left - transientWidthWithMargin;
+ } else {
+ int displayWidth = res.getDisplayMetrics().widthPixels;
+ int bubbleBarLeft = displayWidth - transientWidthWithMargin;
+ distance = bubbleBarLeft - taskbarViewBounds.right;
+ }
+ return distance;
+ }
+
//
// Modifying view related properties.
//
diff --git a/src/com/android/launcher3/util/MultiTranslateDelegate.java b/src/com/android/launcher3/util/MultiTranslateDelegate.java
index 38c87c8d5a..ce006c4184 100644
--- a/src/com/android/launcher3/util/MultiTranslateDelegate.java
+++ b/src/com/android/launcher3/util/MultiTranslateDelegate.java
@@ -38,6 +38,7 @@ public class MultiTranslateDelegate {
public static final int INDEX_TASKBAR_REVEAL_ANIM = 4;
public static final int INDEX_TASKBAR_PINNING_ANIM = 5;
public static final int INDEX_NAV_BAR_ANIM = 6;
+ public static final int INDEX_BUBBLE_BAR_ANIM = 7;
// Affect all items inside of a MultipageCellLayout
public static final int INDEX_CELLAYOUT_MULTIPAGE_SPACING = 3;
@@ -48,7 +49,7 @@ public class MultiTranslateDelegate {
// Specific for hotseat items when adjusting for bubbles
public static final int INDEX_BUBBLE_ADJUSTMENT_ANIM = 3;
- public static final int COUNT = 7;
+ public static final int COUNT = 8;
private final MultiPropertyFactory mTranslationX;
private final MultiPropertyFactory mTranslationY;