am 1fa8290d: Merge "Fix FloatingToolbar flicker in reaction to text cursor blink." into mnc-dev
* commit '1fa8290dbec37519576d346ba9ae8bbe20b64aa9': Fix FloatingToolbar flicker in reaction to text cursor blink.
This commit is contained in:
@@ -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);
|
||||
repositionToolbar();
|
||||
|
||||
if (!Arrays.equals(mViewPosition, mPreviousViewPosition)
|
||||
|| !mViewRect.equals(mPreviousViewRect)) {
|
||||
repositionToolbar();
|
||||
mPreviousViewPosition[0] = mViewPosition[0];
|
||||
mPreviousViewPosition[1] = mViewPosition[1];
|
||||
mPreviousViewRect.set(mViewRect);
|
||||
}
|
||||
}
|
||||
|
||||
private void repositionToolbar() {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user