From 45b2d699e10474f0167691774c0cfb93cfe2dae9 Mon Sep 17 00:00:00 2001 From: Gilles Debunne Date: Thu, 26 Aug 2010 15:51:01 -0700 Subject: DO NOT MERGE Text selection: tapping on selection opens context menu Back key exit selection mode. No more "Stop selecting text" in second context menu. A tap on one of the handles also triggers the second context menu. Paste is only available on long press in first menu for empty text fields. Change-Id: Ic4fa00458d4f617a81885436b53d4fc923347609 --- api/current.xml | 4 ++-- core/java/android/widget/TextView.java | 41 +++++++++++++++++++++++++++++----- core/res/res/values/strings.xml | 3 --- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/api/current.xml b/api/current.xml index 215a864b1a13..47a847259d5d 100644 --- a/api/current.xml +++ b/api/current.xml @@ -78424,7 +78424,7 @@ type="float" transient="false" volatile="false" - value="0.0010f" + value="0.001f" static="true" final="true" deprecated="not deprecated" @@ -224842,7 +224842,7 @@ deprecated="not deprecated" visibility="public" > - + diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 248f6eb39aed..6f35b61ce332 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -4303,6 +4303,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (shouldAdvanceFocusOnEnter()) { return 0; } + break; + + case KeyEvent.KEYCODE_BACK: + if (mIsInTextSelectionMode) { + stopTextSelectionMode(); + return -1; + } + break; } if (mInput != null) { @@ -6618,9 +6626,10 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener end = mPrevEnd; } else { if ((mPrevStart != mPrevEnd) && (start == end)) { - if ((start >= mPrevStart) && (start <= mPrevEnd)) { + if ((start >= mPrevStart) && (start < mPrevEnd)) { // Tapping inside the selection does nothing Selection.setSelection((Spannable) mText, mPrevStart, mPrevEnd); + showContextMenu(); return; } else { // Tapping outside stops selection mode, if any @@ -7221,9 +7230,6 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener setAlphabeticShortcut('v'); } - menu.add(0, ID_STOP_SELECTING_TEXT, 0, com.android.internal.R.string.stopSelectingText). - setOnMenuItemClickListener(handler); - added = true; } else { /* @@ -7272,10 +7278,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } - if (canPaste()) { + // Paste location is too imprecise. Only allow on empty text fields. + if (canPaste() && textIsOnlySpaces()) { menu.add(0, ID_PASTE, 0, com.android.internal.R.string.paste). setOnMenuItemClickListener(handler). setAlphabeticShortcut('v'); + added = true; } if (isInputMethodTarget()) { @@ -7299,6 +7307,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } } + private boolean textIsOnlySpaces() { + final int length = mTransformed.length(); + for (int i=0; i Select word - - Stop selecting text - Cut -- cgit v1.2.3-59-g8ed1b