Merge "Crop taskbar icons during stash/unstash animation." into tm-qpr-dev am: ea134a109d

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/21271715

Change-Id: Idf7676f66821f0f7326c6ee07367caea09c6d919
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jon Miranda
2023-02-04 04:39:06 +00:00
committed by Automerger Merge Worker
2 changed files with 45 additions and 0 deletions

View File

@@ -596,6 +596,10 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
}
}
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

View File

@@ -27,6 +27,8 @@ import static com.android.launcher3.taskbar.TaskbarManager.isPhoneMode;
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.AnimatedFloat;
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 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
private float mTaskbarIconTranslationYForSwipe;
private final int mTaskbarBottomMargin;
private final int mStashedHandleHeight;
private final AnimatedFloat mThemeIconsBackground = new AnimatedFloat(
this::updateIconsBackground);
@@ -127,6 +132,8 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
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 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar
));
}
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]