resolved conflicts for merge of c0728cc0 to gingerbread-plus-aosp

Change-Id: I1b941e0610e498365d441c7bd23af276d1b5f986
This commit is contained in:
Gilles Debunne
2011-02-08 16:33:58 -08:00

View File

@@ -91,6 +91,7 @@ import android.view.LayoutInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.MotionEvent; import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.view.ViewConfiguration;
import android.view.ViewDebug; import android.view.ViewDebug;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams; import android.view.ViewGroup.LayoutParams;
@@ -6841,16 +6842,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
@Override @Override
public boolean onTouchEvent(MotionEvent event) { public boolean onTouchEvent(MotionEvent event) {
final int action = event.getActionMasked(); final int action = event.getActionMasked();
if (action == MotionEvent.ACTION_DOWN) {
if (hasInsertionController()) {
getInsertionController().onTouchEvent(event);
}
if (hasSelectionController()) {
getSelectionController().onTouchEvent(event);
}
// Reset this state; it will be re-set if super.onTouchEvent if (mInsertionPointCursorController != null) {
// causes focus to move to the view. mInsertionPointCursorController.onTouchEvent(event);
}
if (mSelectionModifierCursorController != null) {
mSelectionModifierCursorController.onTouchEvent(event);
}
if (action == MotionEvent.ACTION_DOWN) {
// Reset this state; it will be re-set if super.onTouchEvent
// causes focus to move to the view.
mTouchFocusSelected = false; mTouchFocusSelected = false;
mScrolled = false; mScrolled = false;
} }
@@ -6869,13 +6871,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
if ((mMovement != null || onCheckIsTextEditor()) && isEnabled() && if ((mMovement != null || onCheckIsTextEditor()) && isEnabled() &&
mText instanceof Spannable && mLayout != null) { mText instanceof Spannable && mLayout != null) {
if (hasInsertionController()) {
getInsertionController().onTouchEvent(event);
}
if (hasSelectionController()) {
getSelectionController().onTouchEvent(event);
}
boolean handled = false; boolean handled = false;
// Save previous selection, in case this event is used to show the IME. // Save previous selection, in case this event is used to show the IME.
@@ -7804,7 +7799,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
} }
mDrawable = mSelectHandleLeft; mDrawable = mSelectHandleLeft;
handleWidth = mDrawable.getIntrinsicWidth(); handleWidth = mDrawable.getIntrinsicWidth();
mHotspotX = handleWidth / 4 * 3; mHotspotX = (handleWidth * 3) / 4;
break; break;
} }
@@ -7971,6 +7966,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mIsDragging = true; mIsDragging = true;
break; break;
} }
case MotionEvent.ACTION_MOVE: { case MotionEvent.ACTION_MOVE: {
final float rawX = ev.getRawX(); final float rawX = ev.getRawX();
final float rawY = ev.getRawY(); final float rawY = ev.getRawY();
@@ -7981,6 +7977,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
break; break;
} }
case MotionEvent.ACTION_UP: case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_CANCEL:
mIsDragging = false; mIsDragging = false;
@@ -8095,6 +8092,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
private int mMinTouchOffset, mMaxTouchOffset; private int mMinTouchOffset, mMaxTouchOffset;
// Whether selection anchors are active // Whether selection anchors are active
private boolean mIsShowing; private boolean mIsShowing;
// Double tap detection
private long mPreviousTapUpTime = 0;
private int mPreviousTapPositionX;
private int mPreviousTapPositionY;
SelectionModifierCursorController() { SelectionModifierCursorController() {
mStartHandle = new HandleView(this, HandleView.LEFT); mStartHandle = new HandleView(this, HandleView.LEFT);
@@ -8189,6 +8190,24 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// Remember finger down position, to be able to start selection from there // Remember finger down position, to be able to start selection from there
mMinTouchOffset = mMaxTouchOffset = getOffset(x, y); mMinTouchOffset = mMaxTouchOffset = getOffset(x, y);
// Double tap detection
long duration = SystemClock.uptimeMillis() - mPreviousTapUpTime;
if (duration <= ViewConfiguration.getDoubleTapTimeout()) {
final int deltaX = x - mPreviousTapPositionX;
final int deltaY = y - mPreviousTapPositionY;
final int distanceSquared = deltaX * deltaX + deltaY * deltaY;
final int doubleTapSlop = ViewConfiguration.get(getContext()).getScaledDoubleTapSlop();
final int slopSquared = doubleTapSlop * doubleTapSlop;
if (distanceSquared < slopSquared) {
startTextSelectionMode();
// Hacky: onTapUpEvent will open a context menu with cut/copy
// Prevent this by hiding handles which will be revived instead.
hide();
}
}
mPreviousTapPositionX = x;
mPreviousTapPositionY = y;
break; break;
case MotionEvent.ACTION_POINTER_DOWN: case MotionEvent.ACTION_POINTER_DOWN:
@@ -8200,6 +8219,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
updateMinAndMaxOffsets(event); updateMinAndMaxOffsets(event);
} }
break; break;
case MotionEvent.ACTION_UP:
mPreviousTapUpTime = SystemClock.uptimeMillis();
break;
} }
} }
return false; return false;