Android Open Source - NfcSettings I P Address Key Listener






From Project

Back to project page NfcSettings.

License

The source code is released under:

Apache License

If you think the Android project NfcSettings listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package se.sweetpeas.android.nfcsettings;
/*from  ww  w .j a  v a  2 s.  co m*/
import android.text.InputType;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.method.NumberKeyListener;

/**
 * Created by 23061151 on 3/3/15.
 */
public class IPAddressKeyListener extends NumberKeyListener {

    private char[] mAccepted;
    private static IPAddressKeyListener sInstance;

    @Override
    protected char[] getAcceptedChars() {
        return mAccepted;
    }

    /**
     * The characters that are used.
     *
     * @see KeyEvent#getMatch
     * @see #getAcceptedChars
     */
    private static final char[] CHARACTERS =

            new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.'};

    private IPAddressKeyListener() {
        mAccepted = CHARACTERS;
    }

    /**
     * Returns a IPAddressKeyListener that accepts the digits 0 through 9, plus the dot
     * character, subject to IP address rules: the first character has to be a digit, and
     * no more than 3 dots are allowed.
     */
    public static IPAddressKeyListener getInstance() {
        if (sInstance != null) return sInstance;

        sInstance = new IPAddressKeyListener();
        return sInstance;
    }

    /**
     * Display a number-only soft keyboard.
     */
    public int getInputType() {
        return InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL;
    }

    /**
     * Filter out unacceptable dot characters.
     */
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart,
                               int dend) {
        CharSequence out = super.filter(source, start, end, dest, dstart, dend);

        if (out != null) {
            source = out;
            start = 0;
            end = out.length();
        }

        int decimal = -1;
        int dlen = dest.length();

        // Prevent two dot characters in a row
        if (dstart > 0 && dest.charAt(dstart - 1) == '.') {
            decimal = dstart - 1;
        }
        if (dend < dlen && dest.charAt(dend) == '.') {
            decimal = dend;
        }

        // Up to three dot characters, and no more
        if (decimal == -1) {
            int decimalCount = 0;
            for (int i = 0; i < dstart; i++) {
                char c = dest.charAt(i);

                if (c == '.') {
                    decimalCount++;
                    decimal = i;
                }
            }
            for (int i = dend; i < dlen; i++) {
                char c = dest.charAt(i);

                if (c == '.') {
                    decimalCount++;
                    decimal = i;
                }
            }

            if (decimalCount < 3) {
                decimal = -1;
            }
        }

        SpannableStringBuilder stripped = null;

        for (int i = end - 1; i >= start; i--) {
            char c = source.charAt(i);
            boolean strip = false;

            if (c == '.') {
                if (i == start && dstart == 0) {
                    strip = true;
                } else if (decimal >= 0) {
                    strip = true;
                } else {
                    decimal = i;
                }
            }

            if (strip) {
                if (end == start + 1) {
                    return ""; // Only one character, and it was stripped.
                }

                if (stripped == null) {
                    stripped = new SpannableStringBuilder(source, start, end);
                }

                stripped.delete(i - start, i + 1 - start);
            }
        }

        if (stripped != null) {
            return stripped;
        } else if (out != null) {
            return out;
        } else {
            return null;
        }
    }
}




Java Source Code List

se.sweetpeas.android.nfcsettings.EspUserData.java
se.sweetpeas.android.nfcsettings.HandleEmptyTag.java
se.sweetpeas.android.nfcsettings.IPAddressKeyListener.java
se.sweetpeas.android.nfcsettings.MainActivity.java