Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8e1cf18f authored by Abodunrinwa Toki's avatar Abodunrinwa Toki Committed by Android Git Automerger
Browse files

am 1fa8290d: Merge "Fix FloatingToolbar flicker in reaction to text cursor blink." into mnc-dev

* commit '1fa8290d':
  Fix FloatingToolbar flicker in reaction to text cursor blink.
parents c9a7b419 1fa8290d
Loading
Loading
Loading
Loading
+15 −1
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ import com.android.internal.util.Preconditions;
import com.android.internal.view.menu.MenuBuilder;
import com.android.internal.widget.FloatingToolbar;

import java.util.Arrays;

public class FloatingActionMode extends ActionMode {

    private static final int MAX_HIDE_DURATION = 3000;
@@ -42,7 +44,9 @@ public class FloatingActionMode extends ActionMode {
    private final Rect mContentRectOnWindow;
    private final Rect mPreviousContentRectOnWindow;
    private final int[] mViewPosition;
    private final int[] mPreviousViewPosition;
    private final Rect mViewRect;
    private final Rect mPreviousViewRect;
    private final Rect mScreenRect;
    private final View mOriginatingView;
    private final int mBottomAllowance;
@@ -75,7 +79,9 @@ public class FloatingActionMode extends ActionMode {
        mContentRectOnWindow = new Rect();
        mPreviousContentRectOnWindow = new Rect();
        mViewPosition = new int[2];
        mPreviousViewPosition = new int[2];
        mViewRect = new Rect();
        mPreviousViewRect = new Rect();
        mScreenRect = new Rect();
        mOriginatingView = Preconditions.checkNotNull(originatingView);
        mOriginatingView.getLocationInWindow(mViewPosition);
@@ -129,9 +135,17 @@ public class FloatingActionMode extends ActionMode {

    public void updateViewLocationInWindow() {
        checkToolbarInitialized();

        mOriginatingView.getLocationInWindow(mViewPosition);
        mOriginatingView.getGlobalVisibleRect(mViewRect);

        if (!Arrays.equals(mViewPosition, mPreviousViewPosition)
                || !mViewRect.equals(mPreviousViewRect)) {
            repositionToolbar();
            mPreviousViewPosition[0] = mViewPosition[0];
            mPreviousViewPosition[1] = mViewPosition[1];
            mPreviousViewRect.set(mViewRect);
        }
    }

    private void repositionToolbar() {
+24 −21
Original line number Diff line number Diff line
@@ -85,6 +85,7 @@ public final class FloatingToolbar {
    private final FloatingToolbarPopup mPopup;

    private final Rect mContentRect = new Rect();
    private final Rect mPreviousContentRect = new Rect();

    private Menu mMenu;
    private List<Object> mShowingMenuItems = new ArrayList<Object>();
@@ -178,11 +179,13 @@ public final class FloatingToolbar {
            mPopup.layoutMenuItems(menuItems, mMenuItemClickListener, mSuggestedWidth);
            mShowingMenuItems = getShowingMenuItemsReferences(menuItems);
        }
        mPopup.updateCoordinates(mContentRect);
        if (!mPopup.isShowing()) {
            mPopup.show(mContentRect);
        } else if (!mPreviousContentRect.equals(mContentRect)) {
            mPopup.updateCoordinates(mContentRect);
        }
        mWidthChanged = false;
        mPreviousContentRect.set(mContentRect);
        return this;
    }

@@ -318,24 +321,8 @@ public final class FloatingToolbar {
                };
        private final AnimatorSet mDismissAnimation;
        private final AnimatorSet mHideAnimation;
        private final AnimationSet mOpenOverflowAnimation = new AnimationSet(true) {
            @Override
            public void cancel() {
                if (hasStarted() && !hasEnded()) {
                    super.cancel();
                    setOverflowPanelAsContent();
                }
            }
        };
        private final AnimationSet mCloseOverflowAnimation = new AnimationSet(true) {
            @Override
            public void cancel() {
                if (hasStarted() && !hasEnded()) {
                    super.cancel();
                    setMainPanelAsContent();
                }
            }
        };
        private final AnimationSet mOpenOverflowAnimation = new AnimationSet(true);
        private final AnimationSet mCloseOverflowAnimation = new AnimationSet(true);

        private final Runnable mOpenOverflow = new Runnable() {
            @Override
@@ -657,8 +644,24 @@ public final class FloatingToolbar {
        }

        private void cancelOverflowAnimations() {
            mOpenOverflowAnimation.cancel();
            mCloseOverflowAnimation.cancel();
            if (mOpenOverflowAnimation.hasStarted()
                    && !mOpenOverflowAnimation.hasEnded()) {
                // Remove the animation listener, stop the animation,
                // then trigger the lister explicitly so it is not posted
                // to the message queue.
                mOpenOverflowAnimation.setAnimationListener(null);
                mContentContainer.clearAnimation();
                mOnOverflowOpened.onAnimationEnd(null);
            }
            if (mCloseOverflowAnimation.hasStarted()
                    && !mCloseOverflowAnimation.hasEnded()) {
                // Remove the animation listener, stop the animation,
                // then trigger the lister explicitly so it is not posted
                // to the message queue.
                mCloseOverflowAnimation.setAnimationListener(null);
                mContentContainer.clearAnimation();
                mOnOverflowClosed.onAnimationEnd(null);
            }
        }

        /**