FileDocCategorySizeDatePackage
PasswordTransformationMethod.javaAPI DocAndroid 1.5 API8618Wed May 06 22:41:56 BST 2009android.text.method

PasswordTransformationMethod

public class PasswordTransformationMethod extends Object implements TransformationMethod, android.text.TextWatcher

Fields Summary
private static PasswordTransformationMethod
sInstance
private static char
DOT
Constructors Summary
Methods Summary
public voidafterTextChanged(android.text.Editable s)

        // This callback isn't used.
    
public voidbeforeTextChanged(java.lang.CharSequence s, int start, int count, int after)

        // This callback isn't used.
    
public static android.text.method.PasswordTransformationMethodgetInstance()

        if (sInstance != null)
            return sInstance;

        sInstance = new PasswordTransformationMethod();
        return sInstance;
    
public java.lang.CharSequencegetTransformation(java.lang.CharSequence source, android.view.View view)

        if (source instanceof Spannable) {
            Spannable sp = (Spannable) source;

            /*
             * Remove any references to other views that may still be
             * attached.  This will happen when you flip the screen
             * while a password field is showing; there will still
             * be references to the old EditText in the text.
             */
            ViewReference[] vr = sp.getSpans(0, sp.length(),
                                             ViewReference.class);
            for (int i = 0; i < vr.length; i++) {
                sp.removeSpan(vr[i]);
            }

            sp.setSpan(new ViewReference(view), 0, 0,
                       Spannable.SPAN_POINT_POINT);
        }

        return new PasswordCharSequence(source);
    
public voidonFocusChanged(android.view.View view, java.lang.CharSequence sourceText, boolean focused, int direction, android.graphics.Rect previouslyFocusedRect)

        if (!focused) {
            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]);
                }
            }
        }
    
public voidonTextChanged(java.lang.CharSequence s, int start, int before, int count)

        if (s instanceof Spannable) {
            Spannable sp = (Spannable) s;
            ViewReference[] vr = sp.getSpans(0, s.length(),
                                             ViewReference.class);
            if (vr.length == 0) {
                return;
            }

            /*
             * There should generally only be one ViewReference in the text,
             * but make sure to look through all of them if necessary in case
             * something strange is going on.  (We might still end up with
             * multiple ViewReferences if someone moves text from one password
             * field to another.)
             */
            View v = null;
            for (int i = 0; v == null && i < vr.length; i++) {
                v = vr[i].get();
            }

            if (v == null) {
                return;
            }

            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]);
                    }

                    if (count == 1) {
                        sp.setSpan(new Visible(sp, this), start, start + count,
                                   Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                    }
                }
            }
        }