Skip to content

Commit 2519ae0

Browse files
committed
Bug fixes
1 parent 433285e commit 2519ae0

File tree

2 files changed

+45
-21
lines changed

2 files changed

+45
-21
lines changed

app/src/main/res/layout/activity_main.xml

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,14 @@
4343
android:layout_height="wrap_content"
4444
android:hint="@string/please_input_phone_number"
4545
android:inputType="phone"
46-
android:maxLength="22"
46+
android:maxLength="19"
4747
android:padding="12dp"
4848
android:text="13012345678"
4949
android:textColor="@android:color/black"
5050
android:textSize="16sp"
51+
app:fet_clearDrawable="@drawable/icon_clear"
52+
app:fet_drawableGravity="fet_center"
53+
app:fet_drawablePadding="4dp"
5154
app:fet_formatStyle="+(86)-***-****-****"
5255
app:fet_mark="*"
5356
app:fet_mode="mode_complex" />
@@ -76,7 +79,6 @@
7679
app:fet_clearDrawable="@drawable/icon_clear"
7780
app:fet_drawableGravity="fet_center"
7881
app:fet_drawablePadding="4dp"
79-
app:fet_emptyPlaceholder="_"
8082
app:fet_formatStyle="+(86)-000-0000-0000"
8183
app:fet_mode="mode_mask"
8284
app:fet_showHintWhileEmpty="true" />
@@ -108,7 +110,7 @@
108110
app:fet_formatStyle="000 000 0000 0000 000*"
109111
app:fet_hintText="100 000 2020 0101 000X"
110112
app:fet_mode="mode_hint"
111-
app:fet_showHintWhileEmpty="true" />
113+
app:fet_showHintWhileEmpty="false" />
112114

113115
<TextView
114116
android:id="@+id/textView_hint"

core/src/main/java/me/dkzwm/widget/fet/FormattedEditText.java

Lines changed: 40 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -303,10 +303,12 @@ public boolean onTouchEvent(MotionEvent event) {
303303
&& Math.abs(mDownPoint[1] - y) <= mTouchSlop) {
304304
if (mClearClickListener != null) {
305305
if (!mClearClickListener.onClearClick(this, mClearDrawable)) {
306-
getText().clear();
306+
event.setAction(MotionEvent.ACTION_CANCEL);
307+
clearText();
307308
}
308309
} else {
309-
getText().clear();
310+
event.setAction(MotionEvent.ACTION_CANCEL);
311+
clearText();
310312
}
311313
super.onTouchEvent(event);
312314
return true;
@@ -396,6 +398,13 @@ public int getHintColor() {
396398
return mHintColor;
397399
}
398400

401+
private void clearText() {
402+
Editable editable = getText();
403+
if (editable != null) {
404+
editable.clear();
405+
}
406+
}
407+
399408
private void setConfig(Config config, boolean create) {
400409
if (config.mMode != null) {
401410
mMode = config.mMode;
@@ -530,7 +539,7 @@ public String getRealText() {
530539

531540
private String getRealText(boolean saved) {
532541
if (saved && mMode == MODE_NONE) {
533-
return "";
542+
return null;
534543
}
535544
Editable editable = getText();
536545
if (editable == null || editable.length() == 0) {
@@ -552,11 +561,14 @@ private String getRealText(boolean saved) {
552561
0,
553562
Math.min(value.length(), mFormatStyle.length()),
554563
IPlaceholderSpan.class);
564+
if (spans.length == mFormatStyle.length()) {
565+
return "";
566+
}
555567
}
556568
if (spans.length == 0) {
557569
if (saved) {
558570
value.clear();
559-
return "";
571+
return null;
560572
}
561573
} else {
562574
clearNonEmptySpans(value, spans);
@@ -671,13 +683,18 @@ private <T> void clearArray(final T[] holders) {
671683

672684
private void formatTextWhenDelete(final Editable editable, int start, int before) {
673685
mIsFormatted = true;
686+
final boolean filter = mFilterRestoreTextChangeEvent;
674687
super.removeTextChangedListener(mTextWatcher);
675688
final int length = editable.length();
676689
InputFilter[] filters = editable.getFilters();
677690
editable.setFilters(EMPTY_FILTERS);
678-
int selectionStart = Selection.getSelectionStart(editable);
679-
int selectionEnd = Selection.getSelectionEnd(editable);
680-
editable.setSpan(SELECTION_SPAN, selectionStart, selectionEnd, Spanned.SPAN_MARK_MARK);
691+
int selectionStart, selectionEnd;
692+
if (!filter) {
693+
selectionStart = Selection.getSelectionStart(editable);
694+
selectionEnd = Selection.getSelectionEnd(editable);
695+
Selection.removeSelection(editable);
696+
editable.setSpan(SELECTION_SPAN, selectionStart, selectionEnd, Spanned.SPAN_MARK_MARK);
697+
}
681698
if (mMode < MODE_MASK) {
682699
final boolean deletedLast = start >= editable.length();
683700
if (!deletedLast) {
@@ -697,15 +714,19 @@ private void formatTextWhenDelete(final Editable editable, int start, int before
697714
} else {
698715
formatMask(editable, start, true);
699716
}
700-
final int realCount = before + Math.max(length - editable.length(), 0);
701-
selectionStart = editable.getSpanStart(SELECTION_SPAN);
702-
selectionEnd = editable.getSpanEnd(SELECTION_SPAN);
703-
editable.removeSpan(SELECTION_SPAN);
704-
editable.setFilters(filters);
705-
Editable text = getText();
706-
Selection.setSelection(text, selectionStart, selectionEnd);
707-
sendOnTextChanged(text, selectionStart, realCount, 0);
708-
sendAfterTextChanged(text);
717+
if (!filter) {
718+
final int realCount = before + Math.max(length - editable.length(), 0);
719+
selectionStart = editable.getSpanStart(SELECTION_SPAN);
720+
selectionEnd = editable.getSpanEnd(SELECTION_SPAN);
721+
editable.removeSpan(SELECTION_SPAN);
722+
editable.setFilters(filters);
723+
Editable text = getText();
724+
Selection.setSelection(text, selectionStart, selectionEnd);
725+
sendOnTextChanged(text, selectionStart, realCount, 0);
726+
sendAfterTextChanged(text);
727+
} else {
728+
setFilters(filters);
729+
}
709730
mIsFormatted = false;
710731
super.addTextChangedListener(mTextWatcher);
711732
}
@@ -721,6 +742,7 @@ private void formatTextWhenAppend(final Editable editable, int start, int count)
721742
if (!filter) {
722743
selectionStart = Selection.getSelectionStart(editable);
723744
selectionEnd = Selection.getSelectionEnd(editable);
745+
Selection.removeSelection(editable);
724746
editable.setSpan(SELECTION_SPAN, selectionStart, selectionEnd, Spanned.SPAN_MARK_MARK);
725747
}
726748
if (mMode < MODE_MASK) {
@@ -876,7 +898,7 @@ private void formatMask(final Editable editable, int start, boolean delete) {
876898
break;
877899
}
878900
} else {
879-
if (mHintText==null){
901+
if (mHintText == null) {
880902
break;
881903
}
882904
editable.insert(
@@ -1002,7 +1024,7 @@ public void onRestoreInstanceState(Parcelable state) {
10021024
} else if (mMode == MODE_COMPLEX) {
10031025
parseComplexPlaceholders();
10041026
}
1005-
if (!TextUtils.isEmpty(savedState.mRealText)) {
1027+
if (savedState.mRealText != null) {
10061028
mRestoring = true;
10071029
super.onRestoreInstanceState(savedState.getSuperState());
10081030
mRestoring = false;

0 commit comments

Comments
 (0)