[Magnifier - 4] Batch of tweaks

* magnifier zoom from 1.5 to 1.25
* max scale from 10 to 4
* magnifier shows over the text if there is no more space above
  instead of showing underneath the cursor
* paused the blink while showing the magnifier and resumed when
  dismissing

Bug: 63531115
Test: bit FrameworksCoreTests:android.widget.TextViewActivityTest
Test: bit CtsWidgetTestCases:android.widget.cts.TextViewTest
Test: manual test that shows the magnifier working
Change-Id: Ief3e0b7dc9e287e7dd1a9102548b1861598b69c4
This commit is contained in:
Andrei Stingaceanu
2017-10-13 16:41:28 +01:00
parent 92ec65eee1
commit 451f947ffa
2 changed files with 23 additions and 7 deletions

View File

@@ -165,7 +165,7 @@ public class Editor {
private static final int MENU_ITEM_ORDER_PASTE_AS_PLAIN_TEXT = 11;
private static final int MENU_ITEM_ORDER_PROCESS_TEXT_INTENT_ACTIONS_START = 100;
private static final float MAGNIFIER_ZOOM = 1.5f;
private static final float MAGNIFIER_ZOOM = 1.25f;
@IntDef({MagnifierHandleTrigger.SELECTION_START,
MagnifierHandleTrigger.SELECTION_END,
MagnifierHandleTrigger.INSERTION})
@@ -4550,12 +4550,14 @@ public class Editor {
final float centerYOnScreen = yPosInView + mTextView.getTotalPaddingTop()
- mTextView.getScrollY() + coordinatesOnScreen[1];
suspendBlink();
mMagnifier.show(centerXOnScreen, centerYOnScreen, MAGNIFIER_ZOOM);
}
protected final void dismissMagnifier() {
if (mMagnifier != null) {
mMagnifier.dismiss();
resumeBlink();
}
}

View File

@@ -41,6 +41,8 @@ import com.android.internal.util.Preconditions;
*/
public final class Magnifier {
private static final String LOG_TAG = "magnifier";
private static final int MINIMUM_MAGNIFIER_SCALE = 1;
private static final int MAXIMUM_MAGNIFIER_SCALE = 4;
// The view for which this magnifier is attached.
private final View mView;
// The window containing the magnifier.
@@ -94,7 +96,23 @@ public final class Magnifier {
*/
public void show(@FloatRange(from=0) float centerXOnScreen,
@FloatRange(from=0) float centerYOnScreen,
@FloatRange(from=1, to=10) float scale) {
@FloatRange(from=MINIMUM_MAGNIFIER_SCALE, to=MAXIMUM_MAGNIFIER_SCALE) float scale) {
if (scale > MAXIMUM_MAGNIFIER_SCALE) {
scale = MAXIMUM_MAGNIFIER_SCALE;
}
if (scale < MINIMUM_MAGNIFIER_SCALE) {
scale = MINIMUM_MAGNIFIER_SCALE;
}
if (centerXOnScreen < 0) {
centerXOnScreen = 0;
}
if (centerYOnScreen < 0) {
centerYOnScreen = 0;
}
maybeResizeBitmap(scale);
configureCoordinates(centerXOnScreen, centerYOnScreen);
performPixelCopy();
@@ -144,12 +162,8 @@ public final class Magnifier {
final int verticalMagnifierOffset = mView.getContext().getResources().getDimensionPixelSize(
R.dimen.magnifier_offset);
final int availableTopSpace = (mCenterZoomCoords.y - mWindowHeight / 2)
- verticalMagnifierOffset - (mBitmap.getHeight() / 2);
mWindowCoords.x = mCenterZoomCoords.x - mWindowWidth / 2;
mWindowCoords.y = mCenterZoomCoords.y - mWindowHeight / 2
+ verticalMagnifierOffset * (availableTopSpace > 0 ? -1 : 1);
mWindowCoords.y = mCenterZoomCoords.y - mWindowHeight / 2 - verticalMagnifierOffset;
}
private void performPixelCopy() {