From 0dcad2bd017227b5cc186e657b5b24b52a00a1c8 Mon Sep 17 00:00:00 2001 From: Gilles Debunne Date: Fri, 15 Oct 2010 16:29:25 -0700 Subject: Removed "Select word" option on password fields. It would return an arbitrary selection around current position. Rely on select all instead. Bug: 3100750 Change-Id: I73d995e6481d7c230cc9f334c72fbfb7e9828007 --- core/java/android/widget/TextView.java | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index 9080f96b7dc4..d719783d075e 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -2956,6 +2956,25 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener if (imm != null) imm.restartInput(this); } + /** + * It would be better to rely on the input type for everything. A password inputType should have + * a password transformation. We should hence use isPasswordInputType instead of this method. + * + * We should: + * - Call setInputType in setKeyListener instead of changing the input type directly (which + * would install the correct transformation). + * - Refuse the installation of a non-password transformation in setTransformation if the input + * type is password. + * + * However, this is like this for legacy reasons and we cannot break existing apps. This method + * is useful since it matches what the user can see (obfuscated text or not). + * + * @return true if the current transformation method is of the password type. + */ + private boolean hasPasswordTransformationMethod() { + return mTransformation instanceof PasswordTransformationMethod; + } + private boolean isPasswordInputType(int inputType) { final int variation = inputType & (EditorInfo.TYPE_MASK_CLASS | EditorInfo.TYPE_MASK_VARIATION); @@ -7135,7 +7154,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } private boolean canCut() { - if (mTransformation instanceof PasswordTransformationMethod) { + if (hasPasswordTransformationMethod()) { return false; } @@ -7149,7 +7168,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } private boolean canCopy() { - if (mTransformation instanceof PasswordTransformationMethod) { + if (hasPasswordTransformationMethod()) { return false; } @@ -7398,8 +7417,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener MenuHandler handler = new MenuHandler(); if (canSelectText()) { - menu.add(0, ID_START_SELECTING_TEXT, 0, com.android.internal.R.string.selectText). - setOnMenuItemClickListener(handler); + if (!hasPasswordTransformationMethod()) { + // selectCurrentWord is not available on a password field and would return an + // arbitrary 10-charater selection around pressed position. Discard it. + // SelectAll is still useful to be able to clear the field using the delete key. + menu.add(0, ID_START_SELECTING_TEXT, 0, com.android.internal.R.string.selectText). + setOnMenuItemClickListener(handler); + } menu.add(0, ID_SELECT_ALL, 0, com.android.internal.R.string.selectAll). setOnMenuItemClickListener(handler). setAlphabeticShortcut('a'); -- cgit v1.2.3-59-g8ed1b