Merge "Double tap on a word no longer opens context menu. DO NOT MERGE" into gingerbread

This commit is contained in:
Gilles Debunne
2011-03-14 11:30:17 -07:00
committed by Android (Google) Code Review

View File

@@ -301,6 +301,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// Set when this TextView gained focus with some text selected. Will start selection mode.
private boolean mCreatedWithASelection = false;
private boolean mNoContextMenuOnUp = false;
/*
* Kick-start the font cache for the zygote process (to pay the cost of
* initializing freetype for our default font only once).
@@ -6777,8 +6779,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
// Restore previous selection
Selection.setSelection((Spannable)mText, prevStart, prevEnd);
// Tapping inside the selection displays the cut/copy/paste context menu
showContextMenu();
// Tapping inside the selection displays the cut/copy/paste context menu, unless
// this is a double tap that should simply trigger text selection mode.
if (!mNoContextMenuOnUp) showContextMenu();
} else {
// Tapping outside stops selection mode, if any
stopTextSelectionMode();
@@ -6836,7 +6839,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mScrolled = false;
}
final boolean superResult = super.onTouchEvent(event);
boolean result = super.onTouchEvent(event);
/*
* Don't handle the release after a long press, because it will
@@ -6845,10 +6848,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
*/
if (mEatTouchRelease && action == MotionEvent.ACTION_UP) {
mEatTouchRelease = false;
return superResult;
}
if ((mMovement != null || onCheckIsTextEditor()) && mText instanceof Spannable && mLayout != null) {
} else if ((mMovement != null || onCheckIsTextEditor()) && mText instanceof Spannable &&
mLayout != null) {
boolean handled = false;
// Save previous selection, in case this event is used to show the IME.
@@ -6889,12 +6890,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
if (handled) {
return true;
}
if (handled) result = true;
}
return superResult;
if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
mNoContextMenuOnUp = false;
}
return result;
}
private void prepareCursorControllers() {
@@ -8178,9 +8181,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
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();
// prevents onTapUpEvent from opening a context menu with cut/copy
mNoContextMenuOnUp = true;
}
}
mPreviousTapPositionX = x;