summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2018-03-29 22:16:58 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2018-03-29 22:16:58 +0000
commit3708933872cabb63f0a3042fe611cbb36d435b21 (patch)
tree2f04e42f4315c9764bf3e846f2024f67d358b96a
parent2254fe2e04fe2d06fd8ea43b2f8ca3b8ed56cec9 (diff)
parentb1b423a46f187c978ba7d7b7572890ea8e75ba56 (diff)
Merge "[Magnifier-37] Hide handle when overlaps magnifier" into pi-dev
-rw-r--r--core/java/android/widget/Editor.java40
1 files changed, 30 insertions, 10 deletions
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 92f496a87c3f..99467265b5c5 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -4585,8 +4585,8 @@ public class Editor {
return mContainer.isShowing();
}
- private boolean isVisible() {
- // Always show a dragging handle.
+ private boolean shouldShow() {
+ // A dragging handle should always be shown.
if (mIsDragging) {
return true;
}
@@ -4599,6 +4599,10 @@ public class Editor {
mPositionX + mHotspotX + getHorizontalOffset(), mPositionY);
}
+ private void setVisible(final boolean visible) {
+ mContainer.getContentView().setVisibility(visible ? VISIBLE : INVISIBLE);
+ }
+
public abstract int getCurrentCursorOffset();
protected abstract void updateSelection(int offset);
@@ -4692,7 +4696,7 @@ public class Editor {
onHandleMoved();
}
- if (isVisible()) {
+ if (shouldShow()) {
// Transform to the window coordinates to follow the view tranformation.
final int[] pts = { mPositionX + mHotspotX + getHorizontalOffset(), mPositionY};
mTextView.transformFromViewToWindowSpace(pts);
@@ -4745,6 +4749,15 @@ public class Editor {
return 0;
}
+ private boolean tooLargeTextForMagnifier() {
+ final float magnifierContentHeight = Math.round(
+ mMagnifierAnimator.mMagnifier.getHeight()
+ / mMagnifierAnimator.mMagnifier.getZoom());
+ final Paint.FontMetrics fontMetrics = mTextView.getPaint().getFontMetrics();
+ final float glyphHeight = fontMetrics.descent - fontMetrics.ascent;
+ return glyphHeight > magnifierContentHeight;
+ }
+
/**
* Computes the position where the magnifier should be shown, relative to
* {@code mTextView}, and writes them to {@code showPosInView}. Also decides
@@ -4824,13 +4837,12 @@ public class Editor {
return true;
}
- private boolean tooLargeTextForMagnifier() {
- final float magnifierContentHeight = Math.round(
- mMagnifierAnimator.mMagnifier.getHeight()
- / mMagnifierAnimator.mMagnifier.getZoom());
- final Paint.FontMetrics fontMetrics = mTextView.getPaint().getFontMetrics();
- final float glyphHeight = fontMetrics.descent - fontMetrics.ascent;
- return glyphHeight > magnifierContentHeight;
+ private boolean handleOverlapsMagnifier() {
+ final int handleY = mContainer.getDecorViewLayoutParams().y;
+ final int magnifierBottomWhenAtWindowTop =
+ mTextView.getRootWindowInsets().getSystemWindowInsetTop()
+ + mMagnifierAnimator.mMagnifier.getHeight();
+ return handleY <= magnifierBottomWhenAtWindowTop;
}
protected final void updateMagnifier(@NonNull final MotionEvent event) {
@@ -4846,6 +4858,13 @@ public class Editor {
mRenderCursorRegardlessTiming = true;
mTextView.invalidateCursorPath();
suspendBlink();
+ // Hide handle if it overlaps the magnifier.
+ if (handleOverlapsMagnifier()) {
+ setVisible(false);
+ } else {
+ setVisible(true);
+ }
+
mMagnifierAnimator.show(showPosInView.x, showPosInView.y);
} else {
dismissMagnifier();
@@ -4857,6 +4876,7 @@ public class Editor {
mMagnifierAnimator.dismiss();
mRenderCursorRegardlessTiming = false;
resumeBlink();
+ setVisible(true);
}
}