@Override public void addTextChangedListener(TextWatcher watcher) { // Some flavors of Android call addTextChangedListener in the constructor, so add a // null check to mTextWatchers if (watcher.equals(mTextWatcher) || mTextWatchers == null) { super.addTextChangedListener(watcher); } else { mTextWatchers.add(watcher); } }
@Override public void setText(CharSequence text, BufferType type) { if (mTextWatchersEnabled) { for (TextWatcher textWatcher : mTextWatchers) { textWatcher.beforeTextChanged(getCleanText(), 0, 0, 0); } } super.setText(text, type); if (text != null && !mIsInserting) { setSelection(getText().length()); } invalidateTextSize(); if (mTextWatchersEnabled) { for (TextWatcher textWatcher : mTextWatchers) { textWatcher.afterTextChanged(getEditableFactory().newEditable(getCleanText())); textWatcher.onTextChanged(getCleanText(), 0, 0, 0); } } }
@Override public void setSelection(int index) { super.setSelection(Math.max(0, Math.min(getText().length(), index))); }