FileDocCategorySizeDatePackage
PhoneNumberFormattingTextWatcher.javaAPI DocAndroid 1.5 API3689Wed May 06 22:42:00 BST 2009android.telephony

PhoneNumberFormattingTextWatcher

public class PhoneNumberFormattingTextWatcher extends Object implements android.text.TextWatcher
Watches a {@link TextView} and if a phone number is entered will format it using {@link PhoneNumberUtils#formatNumber(Editable, int)}. The formatting is based on the current system locale when this object is created and future locale changes may not take effect on this instance.

Fields Summary
private static int
sFormatType
private static Locale
sCachedLocale
private boolean
mFormatting
private boolean
mDeletingHyphen
private int
mHyphenStart
private boolean
mDeletingBackward
Constructors Summary
public PhoneNumberFormattingTextWatcher()

        if (sCachedLocale == null || sCachedLocale != Locale.getDefault()) {
            sCachedLocale = Locale.getDefault();
            sFormatType = PhoneNumberUtils.getFormatTypeForLocale(sCachedLocale);
        }
    
Methods Summary
public synchronized voidafterTextChanged(android.text.Editable text)

        // Make sure to ignore calls to afterTextChanged caused by the work done below
        if (!mFormatting) {
            mFormatting = true;

            // If deleting the hyphen, also delete the char before or after that
            if (mDeletingHyphen && mHyphenStart > 0) {
                if (mDeletingBackward) {
                    if (mHyphenStart - 1 < text.length()) {
                        text.delete(mHyphenStart - 1, mHyphenStart);
                    }
                } else if (mHyphenStart < text.length()) {
                    text.delete(mHyphenStart, mHyphenStart + 1);
                }
            }
            
            PhoneNumberUtils.formatNumber(text, sFormatType);

            mFormatting = false;
        }
    
public voidbeforeTextChanged(java.lang.CharSequence s, int start, int count, int after)

        // Check if the user is deleting a hyphen
        if (!mFormatting) {
            // Make sure user is deleting one char, without a selection
            final int selStart = Selection.getSelectionStart(s);
            final int selEnd = Selection.getSelectionEnd(s);
            if (s.length() > 1 // Can delete another character 
                    && count == 1 // Deleting only one character 
                    && after == 0 // Deleting
                    && s.charAt(start) == '-" // a hyphen
                    && selStart == selEnd) { // no selection
                mDeletingHyphen = true;
                mHyphenStart = start;
                // Check if the user is deleting forward or backward
                if (selStart == start + 1) {
                    mDeletingBackward = true;
                } else {
                    mDeletingBackward = false;
                }
            } else {
                mDeletingHyphen = false;
            }
        }        
    
public voidonTextChanged(java.lang.CharSequence s, int start, int before, int count)

        // Does nothing