From b133a52e86907e901104ab8af0c0bca44b2011fb Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Thu, 30 Apr 2020 22:50:59 -0700 Subject: [PATCH] Fix app open/close animation in landscape. When we refactored ClipIconView, we never init mIsVerticalBarLayout. Instead we pass it in along with the rest of the info from FloatingIconView. Bug: 155039118 Change-Id: Iff93105c512a8e6478dc49d8ab9100fd129af48c --- .../android/launcher3/views/ClipIconView.java | 25 ++++++++++--------- .../launcher3/views/FloatingIconView.java | 4 +-- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/com/android/launcher3/views/ClipIconView.java b/src/com/android/launcher3/views/ClipIconView.java index 478141ae3c..1a8e11b400 100644 --- a/src/com/android/launcher3/views/ClipIconView.java +++ b/src/com/android/launcher3/views/ClipIconView.java @@ -101,7 +101,6 @@ public class ClipIconView extends View implements ClipPathView { private @Nullable Drawable mForeground; private @Nullable Drawable mBackground; - private boolean mIsVerticalBarLayout = false; private boolean mIsAdaptiveIcon = false; private ValueAnimator mRevealAnimator; @@ -145,7 +144,8 @@ public class ClipIconView extends View implements ClipPathView { } void update(RectF rect, float progress, float shapeProgressStart, float cornerRadius, - boolean isOpening, float scale, float minSize, LayoutParams parentLp) { + boolean isOpening, float scale, float minSize, LayoutParams parentLp, + boolean isVerticalBarLayout) { DeviceProfile dp = mLauncher.getDeviceProfile(); float dX = mIsRtl ? rect.left - (dp.widthPx - parentLp.getMarginStart() - parentLp.width) @@ -158,7 +158,7 @@ public class ClipIconView extends View implements ClipPathView { Math.max(shapeProgressStart, progress), shapeProgressStart, 1f, 0, toMax, LINEAR), 0, 1); - if (mIsVerticalBarLayout) { + if (isVerticalBarLayout) { mOutline.right = (int) (rect.width() / scale); } else { mOutline.bottom = (int) (rect.height() / scale); @@ -183,16 +183,16 @@ public class ClipIconView extends View implements ClipPathView { mRevealAnimator.setCurrentFraction(shapeRevealProgress); } - float drawableScale = (mIsVerticalBarLayout ? mOutline.width() : mOutline.height()) + float drawableScale = (isVerticalBarLayout ? mOutline.width() : mOutline.height()) / minSize; - setBackgroundDrawableBounds(drawableScale); + setBackgroundDrawableBounds(drawableScale, isVerticalBarLayout); if (isOpening) { // Center align foreground int height = mFinalDrawableBounds.height(); int width = mFinalDrawableBounds.width(); - int diffY = mIsVerticalBarLayout ? 0 + int diffY = isVerticalBarLayout ? 0 : (int) (((height * drawableScale) - height) / 2); - int diffX = mIsVerticalBarLayout ? (int) (((width * drawableScale) - width) / 2) + int diffX = isVerticalBarLayout ? (int) (((width * drawableScale) - width) / 2) : 0; sTmpRect.set(mFinalDrawableBounds); sTmpRect.offset(diffX, diffY); @@ -210,11 +210,11 @@ public class ClipIconView extends View implements ClipPathView { invalidateOutline(); } - private void setBackgroundDrawableBounds(float scale) { + private void setBackgroundDrawableBounds(float scale, boolean isVerticalBarLayout) { sTmpRect.set(mFinalDrawableBounds); Utilities.scaleRectAboutCenter(sTmpRect, scale); // Since the drawable is at the top of the view, we need to offset to keep it centered. - if (mIsVerticalBarLayout) { + if (isVerticalBarLayout) { sTmpRect.offsetTo((int) (mFinalDrawableBounds.left * scale), sTmpRect.top); } else { sTmpRect.offsetTo(sTmpRect.left, (int) (mFinalDrawableBounds.top * scale)); @@ -228,7 +228,8 @@ public class ClipIconView extends View implements ClipPathView { } } - void setIcon(@Nullable Drawable drawable, int iconOffset, LayoutParams lp, boolean isOpening) { + void setIcon(@Nullable Drawable drawable, int iconOffset, LayoutParams lp, boolean isOpening, + boolean isVerticalBarLayout) { mIsAdaptiveIcon = drawable instanceof AdaptiveIconDrawable; if (mIsAdaptiveIcon) { boolean isFolderIcon = drawable instanceof FolderAdaptiveIcon; @@ -264,7 +265,7 @@ public class ClipIconView extends View implements ClipPathView { } float aspectRatio = mLauncher.getDeviceProfile().aspectRatio; - if (mIsVerticalBarLayout) { + if (isVerticalBarLayout) { lp.width = (int) Math.max(lp.width, lp.height * aspectRatio); } else { lp.height = (int) Math.max(lp.height, lp.width * aspectRatio); @@ -285,7 +286,7 @@ public class ClipIconView extends View implements ClipPathView { bgDrawableStartScale = scale; mOutline.set(0, 0, lp.width, lp.height); } - setBackgroundDrawableBounds(bgDrawableStartScale); + setBackgroundDrawableBounds(bgDrawableStartScale, isVerticalBarLayout); mEndRevealRect.set(0, 0, lp.width, lp.height); setOutlineProvider(new ViewOutlineProvider() { @Override diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java index 6e2151251c..bd12e06b60 100644 --- a/src/com/android/launcher3/views/FloatingIconView.java +++ b/src/com/android/launcher3/views/FloatingIconView.java @@ -161,7 +161,7 @@ public class FloatingIconView extends FrameLayout implements float scale = Math.max(1f, Math.min(scaleX, scaleY)); mClipIconView.update(rect, progress, shapeProgressStart, cornerRadius, isOpening, scale, - minSize, lp); + minSize, lp, mIsVerticalBarLayout); setPivotX(0); setPivotY(0); @@ -335,7 +335,7 @@ public class FloatingIconView extends FrameLayout implements final InsettableFrameLayout.LayoutParams lp = (InsettableFrameLayout.LayoutParams) getLayoutParams(); mBadge = badge; - mClipIconView.setIcon(drawable, iconOffset, lp, mIsOpening); + mClipIconView.setIcon(drawable, iconOffset, lp, mIsOpening, mIsVerticalBarLayout); if (drawable instanceof AdaptiveIconDrawable) { final int originalHeight = lp.height; final int originalWidth = lp.width;