resolved conflicts for merge of b39470b5 to master
Change-Id: If441c8684c576b6cbc485a37088d6869ad3fb23f
This commit is contained in:
@@ -290,6 +290,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
}
|
||||
InputMethodState mInputMethodState;
|
||||
|
||||
private int mTextSelectHandleLeftRes;
|
||||
private int mTextSelectHandleRightRes;
|
||||
private int mTextSelectHandleRes;
|
||||
|
||||
/*
|
||||
* Kick-start the font cache for the zygote process (to pay the cost of
|
||||
* initializing freetype for our default font only once).
|
||||
@@ -710,6 +714,18 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
Log.w(LOG_TAG, "Failure reading input extras", e);
|
||||
}
|
||||
break;
|
||||
|
||||
case com.android.internal.R.styleable.TextView_textSelectHandleLeft:
|
||||
mTextSelectHandleLeftRes = a.getResourceId(attr, 0);
|
||||
break;
|
||||
|
||||
case com.android.internal.R.styleable.TextView_textSelectHandleRight:
|
||||
mTextSelectHandleRightRes = a.getResourceId(attr, 0);
|
||||
break;
|
||||
|
||||
case com.android.internal.R.styleable.TextView_textSelectHandle:
|
||||
mTextSelectHandleRes = a.getResourceId(attr, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
a.recycle();
|
||||
@@ -3763,6 +3779,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
showError();
|
||||
mShowErrorAfterAttach = false;
|
||||
}
|
||||
|
||||
updateOverlay();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -3780,6 +3798,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
if (mError != null) {
|
||||
hideError();
|
||||
}
|
||||
|
||||
setOverlayEnabled(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -4147,7 +4167,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
*/
|
||||
|
||||
canvas.restore();
|
||||
}
|
||||
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
@Override
|
||||
public void onDrawOverlay(Canvas canvas) {
|
||||
if (mInsertionPointCursorController != null) {
|
||||
mInsertionPointCursorController.draw(canvas);
|
||||
}
|
||||
@@ -6742,10 +6768,31 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
final int action = event.getActionMasked();
|
||||
if (action == MotionEvent.ACTION_DOWN) {
|
||||
// Check to see if we're testing for our anchor overlay.
|
||||
boolean handled = false;
|
||||
final float x = event.getX();
|
||||
final float y = event.getY();
|
||||
if (x < 0 || x >= mRight - mLeft || y < 0 || y >= mBottom - mTop) {
|
||||
if (mInsertionPointCursorController != null) {
|
||||
handled |= mInsertionPointCursorController.onTouchEvent(event);
|
||||
}
|
||||
if (mSelectionModifierCursorController != null) {
|
||||
handled |= mSelectionModifierCursorController.onTouchEvent(event);
|
||||
}
|
||||
|
||||
if (!handled) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// Reset this state; it will be re-set if super.onTouchEvent
|
||||
// causes focus to move to the view.
|
||||
mTouchFocusSelected = false;
|
||||
mScrolled = false;
|
||||
|
||||
if (handled) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
final boolean superResult = super.onTouchEvent(event);
|
||||
@@ -7658,6 +7705,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
}
|
||||
}
|
||||
|
||||
private void updateOverlay() {
|
||||
boolean enableOverlay = false;
|
||||
if (mSelectionModifierCursorController != null) {
|
||||
enableOverlay |= mSelectionModifierCursorController.isShowing();
|
||||
}
|
||||
if (mInsertionPointCursorController != null) {
|
||||
enableOverlay |= mInsertionPointCursorController.isShowing();
|
||||
}
|
||||
setOverlayEnabled(enableOverlay);
|
||||
}
|
||||
|
||||
/**
|
||||
* A CursorController instance can be used to control a cursor in the text.
|
||||
*
|
||||
@@ -7680,6 +7738,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
*/
|
||||
public void hide();
|
||||
|
||||
/**
|
||||
* @return true if the CursorController is currently visible
|
||||
*/
|
||||
public boolean isShowing();
|
||||
|
||||
/**
|
||||
* Update the controller's position.
|
||||
*/
|
||||
@@ -7702,7 +7765,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
* a chance to become active and/or visible.
|
||||
* @param event The touch event
|
||||
*/
|
||||
public void onTouchEvent(MotionEvent event);
|
||||
public boolean onTouchEvent(MotionEvent event);
|
||||
|
||||
/**
|
||||
* Draws a visual representation of the controller on the canvas.
|
||||
@@ -7736,10 +7799,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
final Rect bounds = sCursorControllerTempRect;
|
||||
bounds.left = (int) (mLayout.getPrimaryHorizontal(offset) - drawableWidth / 2.0)
|
||||
+ mScrollX;
|
||||
bounds.top = (bottom ? lineBottom : lineTop) - drawableHeight / 2 + mScrollY;
|
||||
bounds.top = (bottom ? lineBottom : lineTop) + mScrollY;
|
||||
|
||||
mTopExtension = bottom ? 0 : drawableHeight / 2;
|
||||
mBottomExtension = drawableHeight;
|
||||
mBottomExtension = 0; //drawableHeight / 4;
|
||||
|
||||
// Extend touch region up when editing the last line of text (or a single line) so that
|
||||
// it is easier to grab.
|
||||
@@ -7797,7 +7860,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
|
||||
InsertionPointCursorController() {
|
||||
Resources res = mContext.getResources();
|
||||
mHandle = new Handle(res.getDrawable(com.android.internal.R.drawable.text_select_handle));
|
||||
mHandle = new Handle(res.getDrawable(mTextSelectHandleRes));
|
||||
}
|
||||
|
||||
public void show() {
|
||||
@@ -7805,6 +7868,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
// Has to be done after updateDrawablePosition, so that previous position invalidate
|
||||
// in only done if necessary.
|
||||
mIsVisible = true;
|
||||
updateOverlay();
|
||||
}
|
||||
|
||||
public void hide() {
|
||||
@@ -7818,6 +7882,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isShowing() {
|
||||
return mIsVisible;
|
||||
}
|
||||
|
||||
public void draw(Canvas canvas) {
|
||||
if (mIsVisible) {
|
||||
int time = (int) (System.currentTimeMillis() - mFadeOutTimerStart);
|
||||
@@ -7833,6 +7901,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
} else {
|
||||
mHandle.mDrawable.setAlpha(0);
|
||||
mIsVisible = false;
|
||||
updateOverlay();
|
||||
}
|
||||
}
|
||||
mHandle.mDrawable.draw(canvas);
|
||||
@@ -7861,6 +7930,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
// Should never happen, safety check.
|
||||
Log.w(LOG_TAG, "Update cursor controller position called with no cursor");
|
||||
mIsVisible = false;
|
||||
updateOverlay();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -7870,7 +7940,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
mHandle.mDrawable.setAlpha(255);
|
||||
}
|
||||
|
||||
public void onTouchEvent(MotionEvent event) {
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
if (isFocused() && isTextEditable() && mIsVisible) {
|
||||
switch (event.getActionMasked()) {
|
||||
case MotionEvent.ACTION_DOWN : {
|
||||
@@ -7898,8 +7968,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
mOffsetY += viewportToContentVerticalOffset();
|
||||
|
||||
mOnDownTimerStart = event.getEventTime();
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
return false;
|
||||
}
|
||||
|
||||
case MotionEvent.ACTION_UP : {
|
||||
@@ -7917,6 +7988,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public float getOffsetX() {
|
||||
@@ -7944,8 +8016,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
|
||||
SelectionModifierCursorController() {
|
||||
Resources res = mContext.getResources();
|
||||
mStartHandle = new Handle(res.getDrawable(com.android.internal.R.drawable.text_select_handle));
|
||||
mEndHandle = new Handle(res.getDrawable(com.android.internal.R.drawable.text_select_handle));
|
||||
mStartHandle = new Handle(res.getDrawable(mTextSelectHandleLeftRes));
|
||||
mEndHandle = new Handle(res.getDrawable(mTextSelectHandleRightRes));
|
||||
}
|
||||
|
||||
public void show() {
|
||||
@@ -7953,6 +8025,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
// Has to be done after updateDrawablePositions, so that previous position invalidate
|
||||
// in only done if necessary.
|
||||
mIsVisible = true;
|
||||
updateOverlay();
|
||||
mFadeOutTimerStart = -1;
|
||||
hideInsertionPointCursorController();
|
||||
}
|
||||
@@ -7965,8 +8038,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isShowing() {
|
||||
return mIsVisible;
|
||||
}
|
||||
|
||||
public void cancelFadeOutAnimation() {
|
||||
mIsVisible = false;
|
||||
updateOverlay();
|
||||
mStartHandle.postInvalidate();
|
||||
mEndHandle.postInvalidate();
|
||||
}
|
||||
@@ -7985,6 +8063,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
mStartHandle.mDrawable.setAlpha(0);
|
||||
mEndHandle.mDrawable.setAlpha(0);
|
||||
mIsVisible = false;
|
||||
updateOverlay();
|
||||
}
|
||||
}
|
||||
mStartHandle.mDrawable.draw(canvas);
|
||||
@@ -8042,6 +8121,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
// Should never happen, safety check.
|
||||
Log.w(LOG_TAG, "Update selection controller position called with no cursor");
|
||||
mIsVisible = false;
|
||||
updateOverlay();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -8054,7 +8134,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
mEndHandle.mDrawable.setAlpha(255);
|
||||
}
|
||||
|
||||
public void onTouchEvent(MotionEvent event) {
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
if (isTextEditable()) {
|
||||
switch (event.getActionMasked()) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
@@ -8088,6 +8168,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
mOffsetY += viewportToContentVerticalOffset();
|
||||
|
||||
((ArrowKeyMovementMethod)mMovement).setCursorController(this);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8104,6 +8185,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
||||
break;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user