diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index 1c23644243..cc9f08eadc 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -485,7 +485,10 @@ public abstract class PagedView extends ViewGrou super.onVisibilityAggregated(isVisible); } - protected boolean isPageInTransition() { + /** + * Returns true if the page is in the middle of transition to another page + */ + public boolean isPageInTransition() { return mIsPageInTransition; } diff --git a/src/com/android/launcher3/keyboard/ItemFocusIndicatorHelper.java b/src/com/android/launcher3/keyboard/ItemFocusIndicatorHelper.java index 456cde8d45..480e8f3e56 100644 --- a/src/com/android/launcher3/keyboard/ItemFocusIndicatorHelper.java +++ b/src/com/android/launcher3/keyboard/ItemFocusIndicatorHelper.java @@ -246,7 +246,8 @@ public abstract class ItemFocusIndicatorHelper implements AnimatorUpdateListe protected void setCurrentItem(T item) { mCurrentItem = item; - mShift = 0; + // Set it to end value directly to skip the animation for outline + mShift = Flags.enableFocusOutline() ? 1 : 0; mTargetItem = null; } diff --git a/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java b/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java index 4653bf12f3..21d157a41b 100644 --- a/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java +++ b/src/com/android/launcher3/keyboard/ViewGroupFocusHelper.java @@ -19,6 +19,7 @@ package com.android.launcher3.keyboard; import android.graphics.Rect; import android.view.View; +import com.android.launcher3.Flags; import com.android.launcher3.PagedView; /** @@ -34,6 +35,28 @@ public class ViewGroupFocusHelper extends FocusIndicatorHelper { mContainer = container; } + @Override + protected boolean shouldDraw(View item) { + if (Flags.enableFocusOutline()) { + // Not draw outline in page transition because the outline just remains fully + // persistent during the transition and does not look smooth + return super.shouldDraw(item) && !isInPageTransition(item); + } else { + return super.shouldDraw(item); + } + } + + private boolean isInPageTransition(View view) { + if (view == null || !(view.getParent() instanceof View)) { + return false; + } + boolean isInTransition = false; + if (view instanceof PagedView) { + isInTransition = ((PagedView) view).isPageInTransition(); + } + return isInTransition || isInPageTransition((View) view.getParent()); + } + @Override public void viewToRect(View v, Rect outRect) { // Using FocusedRect here allows views to provide their custom rect for drawing outline,