@@ -303,10 +303,12 @@ public boolean onTouchEvent(MotionEvent event) {
303
303
&& Math .abs (mDownPoint [1 ] - y ) <= mTouchSlop ) {
304
304
if (mClearClickListener != null ) {
305
305
if (!mClearClickListener .onClearClick (this , mClearDrawable )) {
306
- getText ().clear ();
306
+ event .setAction (MotionEvent .ACTION_CANCEL );
307
+ clearText ();
307
308
}
308
309
} else {
309
- getText ().clear ();
310
+ event .setAction (MotionEvent .ACTION_CANCEL );
311
+ clearText ();
310
312
}
311
313
super .onTouchEvent (event );
312
314
return true ;
@@ -396,6 +398,13 @@ public int getHintColor() {
396
398
return mHintColor ;
397
399
}
398
400
401
+ private void clearText () {
402
+ Editable editable = getText ();
403
+ if (editable != null ) {
404
+ editable .clear ();
405
+ }
406
+ }
407
+
399
408
private void setConfig (Config config , boolean create ) {
400
409
if (config .mMode != null ) {
401
410
mMode = config .mMode ;
@@ -530,7 +539,7 @@ public String getRealText() {
530
539
531
540
private String getRealText (boolean saved ) {
532
541
if (saved && mMode == MODE_NONE ) {
533
- return "" ;
542
+ return null ;
534
543
}
535
544
Editable editable = getText ();
536
545
if (editable == null || editable .length () == 0 ) {
@@ -552,11 +561,14 @@ private String getRealText(boolean saved) {
552
561
0 ,
553
562
Math .min (value .length (), mFormatStyle .length ()),
554
563
IPlaceholderSpan .class );
564
+ if (spans .length == mFormatStyle .length ()) {
565
+ return "" ;
566
+ }
555
567
}
556
568
if (spans .length == 0 ) {
557
569
if (saved ) {
558
570
value .clear ();
559
- return "" ;
571
+ return null ;
560
572
}
561
573
} else {
562
574
clearNonEmptySpans (value , spans );
@@ -671,13 +683,18 @@ private <T> void clearArray(final T[] holders) {
671
683
672
684
private void formatTextWhenDelete (final Editable editable , int start , int before ) {
673
685
mIsFormatted = true ;
686
+ final boolean filter = mFilterRestoreTextChangeEvent ;
674
687
super .removeTextChangedListener (mTextWatcher );
675
688
final int length = editable .length ();
676
689
InputFilter [] filters = editable .getFilters ();
677
690
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
+ }
681
698
if (mMode < MODE_MASK ) {
682
699
final boolean deletedLast = start >= editable .length ();
683
700
if (!deletedLast ) {
@@ -697,15 +714,19 @@ private void formatTextWhenDelete(final Editable editable, int start, int before
697
714
} else {
698
715
formatMask (editable , start , true );
699
716
}
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
+ }
709
730
mIsFormatted = false ;
710
731
super .addTextChangedListener (mTextWatcher );
711
732
}
@@ -721,6 +742,7 @@ private void formatTextWhenAppend(final Editable editable, int start, int count)
721
742
if (!filter ) {
722
743
selectionStart = Selection .getSelectionStart (editable );
723
744
selectionEnd = Selection .getSelectionEnd (editable );
745
+ Selection .removeSelection (editable );
724
746
editable .setSpan (SELECTION_SPAN , selectionStart , selectionEnd , Spanned .SPAN_MARK_MARK );
725
747
}
726
748
if (mMode < MODE_MASK ) {
@@ -876,7 +898,7 @@ private void formatMask(final Editable editable, int start, boolean delete) {
876
898
break ;
877
899
}
878
900
} else {
879
- if (mHintText == null ){
901
+ if (mHintText == null ) {
880
902
break ;
881
903
}
882
904
editable .insert (
@@ -1002,7 +1024,7 @@ public void onRestoreInstanceState(Parcelable state) {
1002
1024
} else if (mMode == MODE_COMPLEX ) {
1003
1025
parseComplexPlaceholders ();
1004
1026
}
1005
- if (! TextUtils . isEmpty ( savedState .mRealText ) ) {
1027
+ if (savedState .mRealText != null ) {
1006
1028
mRestoring = true ;
1007
1029
super .onRestoreInstanceState (savedState .getSuperState ());
1008
1030
mRestoring = false ;
0 commit comments