diff options
| author | 2010-10-18 10:16:13 -0700 | |
|---|---|---|
| committer | 2010-10-18 10:16:13 -0700 | |
| commit | 3d01cb934ba2c5161689834d49f520313e554571 (patch) | |
| tree | 39baa48f71227b3d729e7052d629f8c7d93d517c | |
| parent | 83366dfb96ad15e945a90270d329ce19dcf6b7e3 (diff) | |
| parent | 0dcad2bd017227b5cc186e657b5b24b52a00a1c8 (diff) | |
Merge "Removed "Select word" option on password fields." into gingerbread
| -rw-r--r-- | core/java/android/widget/TextView.java | 32 |
1 files 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'); |