Изменять маску в MaskedEditText динамически Android

Использую библиотеку MaskedEditText для ввода телефона с помощью маски, нужно использовать маску вида "+380 _ _ _ _ _ _ _ _ _", вся проблема в том что если не использовать пробелы между знаками _ они будут слитые (дизайнер против этого), а если так оставить то большие пробелы между цифрами, для этого я написал методы, которые динамически превращают маску в нужные, вызываются они в addTextChangedListener, однако так как маска это изменение текста то оно зацыкливается, помогите реализовать изменение, код класса ниже:

private MaskedEditText phone;
String uaMask = "# # # #  # #  # # #  # #  # #";
String currentMask = "_ _ _ _  _ _  _ _ _  _ _  _ _";

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    convertCurrentMaskToStart();

    phone = findViewById(R.id.phone);

    phone.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
        }

        @Override
        public void afterTextChanged(Editable s) {
            currentMask = phone.getText().toString();
            phone.setMask(toEndMask(convertCurrentMaskToStart()));
        }
    });
}

private String convertCurrentMaskToStart() {
    int j = 0;
    StringBuilder endMask = new StringBuilder();
    try {

        for (int i = 0; i < currentMask.length(); i++) {
            if (!Character.toString(currentMask.charAt(i)).equals("_") && !Character.toString(currentMask.charAt(i)).equals(" ")) {

                endMask.append(currentMask.charAt(i));
                j += 1;
            } else if (Character.toString(currentMask.charAt(i)).equals(" ")) {
                endMask.append(" ");
                j += 1;
            } else {
                endMask.append(uaMask.substring(j));
                return endMask.toString();
            }

        }

    } catch (Exception e) {
        return currentMask;
    }
    return endMask.toString();
}

private String toEndMask(String mask) {
    StringBuilder endMask = new StringBuilder();
    for (int i = 0; i < mask.length(); i++) {
        //System.out.println(mask.charAt(i) + ": " + (Character.toString(mask.charAt(i)).equals("+") || isNumeric(Character.toString(mask.charAt(i)))));
        if (Character.toString(mask.charAt(i)).equals("+") || isNumeric(Character.toString(mask.charAt(i)))) {
            endMask.append("#");
            i++;
        } else if (Character.toString(mask.charAt(i)).equals(" ")) {
            endMask.append(" ");
        } else {
            return endMask.append(mask.substring(i)).toString();
        }
    }
    return endMask.toString();
}

public static boolean isNumeric(String strNum) {
    return strNum.matches("-?\\d+(\\.\\d+)?");
}

А также разметка самого поля для ввода:

    <br.com.sapereaude.maskedEditText.MaskedEditText
    android:id="@+id/phone"
    android:layout_width="match_parent"
    android:layout_height="54dp"
    android:hint="_____________"
    android:inputType="phone"
    android:textColorHint="#000000"
    android:textColor="#000000"
    android:textCursorDrawable="@null"
    android:textSize="16sp"
    app:keep_hint="true"
    app:mask="# # # #  # #  # # #  # #  # #" />

Ответы (0 шт):