OSDN Git Service

Fix last character of password field being visible after rotation
authorDevin Taylor <devin.taylor@garmin.com>
Thu, 18 Mar 2010 20:35:11 +0000 (15:35 -0500)
committerGarmin Android technology group <android@garmin.com>
Fri, 26 Mar 2010 15:25:08 +0000 (10:25 -0500)
This is a fix for http://code.google.com/p/android/issues/detail?id=907. Note that
that issue was declined without comment, but the bug (while incredibly minor)
does exist. This can be seen on the facebook app, as well as many third party apps.

Change-Id: I8f1449c47228f5f757a5baf389656e51c817b150

core/java/android/text/method/PasswordTransformationMethod.java

index fad4f64..b769b76 100644 (file)
@@ -51,6 +51,8 @@ implements TransformationMethod, TextWatcher
                 sp.removeSpan(vr[i]);
             }
 
+            removeVisibleSpans(sp);
+
             sp.setSpan(new ViewReference(view), 0, 0,
                        Spannable.SPAN_POINT_POINT);
         }
@@ -100,10 +102,7 @@ implements TransformationMethod, TextWatcher
             int pref = TextKeyListener.getInstance().getPrefs(v.getContext());
             if ((pref & TextKeyListener.SHOW_PASSWORD) != 0) {
                 if (count > 0) {
-                    Visible[] old = sp.getSpans(0, sp.length(), Visible.class);
-                    for (int i = 0; i < old.length; i++) {
-                        sp.removeSpan(old[i]);
-                    }
+                    removeVisibleSpans(sp);
 
                     if (count == 1) {
                         sp.setSpan(new Visible(sp, this), start, start + count,
@@ -125,14 +124,18 @@ implements TransformationMethod, TextWatcher
             if (sourceText instanceof Spannable) {
                 Spannable sp = (Spannable) sourceText;
 
-                Visible[] old = sp.getSpans(0, sp.length(), Visible.class);
-                for (int i = 0; i < old.length; i++) {
-                    sp.removeSpan(old[i]);
-                }
+                removeVisibleSpans(sp);
             }
         }
     }
 
+    private static void removeVisibleSpans(Spannable sp) {
+        Visible[] old = sp.getSpans(0, sp.length(), Visible.class);
+        for (int i = 0; i < old.length; i++) {
+            sp.removeSpan(old[i]);
+        }
+    }
+
     private static class PasswordCharSequence
     implements CharSequence, GetChars
     {