Merge "Crop taskbar icons during stash/unstash animation." into tm-qpr-dev am: ea134a109d am: 7ab2657623
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/21271715
Change-Id: I9aa09d86a57af869dc8517dbe32974442c55ac52
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
index ba7a910..c95535b 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarStashController.java
@@ -596,6 +596,10 @@
}
}
+ if (DisplayController.isTransientTaskbar(mActivity)) {
+ fullLengthAnimatorSet.play(mControllers.taskbarViewController
+ .createRevealAnimToIsStashed(isStashed));
+ }
fullLengthAnimatorSet.play(mControllers.stashedHandleViewController
.createRevealAnimToIsStashed(isStashed));
// Return the stashed handle to its default scale in case it was changed as part of the
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
index 69f79ba..9824fe0 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java
@@ -27,6 +27,8 @@
import static com.android.launcher3.touch.SingleAxisSwipeDetector.DIRECTION_NEGATIVE;
import static com.android.launcher3.touch.SingleAxisSwipeDetector.VERTICAL;
+import android.animation.AnimatorSet;
+import android.animation.ValueAnimator;
import android.annotation.NonNull;
import android.graphics.Rect;
import android.util.FloatProperty;
@@ -49,6 +51,8 @@
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.anim.PendingAnimation;
+import com.android.launcher3.anim.RevealOutlineAnimation;
+import com.android.launcher3.anim.RoundedRectRevealOutlineProvider;
import com.android.launcher3.config.FeatureFlags;
import com.android.launcher3.folder.FolderIcon;
import com.android.launcher3.icons.ThemedIconDrawable;
@@ -95,6 +99,7 @@
private float mTaskbarIconTranslationYForSwipe;
private final int mTaskbarBottomMargin;
+ private final int mStashedHandleHeight;
private final AnimatedFloat mThemeIconsBackground = new AnimatedFloat(
this::updateIconsBackground);
@@ -127,6 +132,8 @@
mTaskbarBottomMargin = DisplayController.isTransientTaskbar(activity)
? activity.getResources().getDimensionPixelSize(R.dimen.transient_taskbar_margin)
: 0;
+ mStashedHandleHeight = activity.getResources()
+ .getDimensionPixelSize(R.dimen.taskbar_stashed_handle_height);
if (DisplayController.isTransientTaskbar(mActivity)) {
mSwipeDownDetector = new SingleAxisSwipeDetector(activity,
@@ -280,6 +287,40 @@
));
}
+ private ValueAnimator createRevealAnimForView(View view, boolean isStashed) {
+ Rect viewBounds = new Rect(0, 0, view.getWidth(), view.getHeight());
+ int centerY = viewBounds.centerY();
+ int halfHandleHeight = mStashedHandleHeight / 2;
+
+ Rect stashedRect = new Rect(viewBounds.left,
+ centerY - halfHandleHeight,
+ viewBounds.right,
+ centerY + halfHandleHeight);
+
+ float radius = 0;
+ float stashedRadius = viewBounds.width() / 2f;
+
+ return new RoundedRectRevealOutlineProvider(radius, stashedRadius, viewBounds, stashedRect)
+ .createRevealAnimator(view, !isStashed, 0);
+ }
+
+ /**
+ * Creates and returns a {@link RevealOutlineAnimation} Animator that updates the icon shape
+ * and size.
+ * @param isStashed When true, the icon crops vertically to the size of the stashed handle.
+ * When false, the reverse happens.
+ */
+ public AnimatorSet createRevealAnimToIsStashed(boolean isStashed) {
+ AnimatorSet as = new AnimatorSet();
+ for (int i = mTaskbarView.getChildCount() - 1; i >= 0; i--) {
+ View child = mTaskbarView.getChildAt(i);
+ if (child instanceof BubbleTextView) {
+ as.play(createRevealAnimForView(child, isStashed));
+ }
+ }
+ return as;
+ }
+
/**
* Sets the taskbar icon alignment relative to Launcher hotseat icons
* @param alignmentRatio [0, 1]