Skip to content

Commit f0a7fc3

Browse files
committed
[DatePicker] Fix auto-adding delimiters
1 parent cfef899 commit f0a7fc3

File tree

1 file changed

+14
-14
lines changed

1 file changed

+14
-14
lines changed

lib/java/com/google/android/material/datepicker/DateFormatTextWatcher.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,14 @@
2727
import com.google.android.material.textfield.TextInputLayout;
2828
import java.text.DateFormat;
2929
import java.text.ParseException;
30+
import java.text.SimpleDateFormat;
3031
import java.util.Date;
31-
import java.util.Locale;
3232

3333
abstract class DateFormatTextWatcher extends TextWatcherAdapter {
3434

3535
@NonNull private final TextInputLayout textInputLayout;
3636

37-
private final String formatHint;
38-
private final DateFormat dateFormat;
37+
private final SimpleDateFormat dateFormat;
3938
private final CalendarConstraints constraints;
4039
private final String outOfRange;
4140
private final Runnable setErrorCallback;
@@ -45,11 +44,10 @@ abstract class DateFormatTextWatcher extends TextWatcherAdapter {
4544

4645
DateFormatTextWatcher(
4746
final String formatHint,
48-
DateFormat dateFormat,
47+
SimpleDateFormat dateFormat,
4948
@NonNull TextInputLayout textInputLayout,
5049
CalendarConstraints constraints) {
5150

52-
this.formatHint = formatHint;
5351
this.dateFormat = dateFormat;
5452
this.textInputLayout = textInputLayout;
5553
this.constraints = constraints;
@@ -85,7 +83,8 @@ public void onTextChanged(@NonNull CharSequence s, int start, int before, int co
8583
textInputLayout.setError(null);
8684
onValidDate(null);
8785

88-
if (TextUtils.isEmpty(s) || s.length() < formatHint.length()) {
86+
String datePattern = dateFormat.toPattern();
87+
if (TextUtils.isEmpty(s) || s.length() < datePattern.length()) {
8988
return;
9089
}
9190

@@ -113,19 +112,20 @@ public void beforeTextChanged(@NonNull CharSequence s, int start, int count, int
113112

114113
@Override
115114
public void afterTextChanged(@NonNull Editable s) {
116-
// Exclude some languages from automatically adding delimiters.
117-
if (Locale.getDefault().getLanguage().equals(Locale.KOREAN.getLanguage())) {
115+
String datePattern = dateFormat.toPattern();
116+
if (s.length() == 0 || s.length() >= datePattern.length() || s.length() < lastLength) {
118117
return;
119118
}
120119

121-
if (s.length() == 0 || s.length() >= formatHint.length() || s.length() < lastLength) {
122-
return;
120+
char nextPatternChar = datePattern.charAt(s.length());
121+
if (isDelimiter(nextPatternChar)) {
122+
s.append(nextPatternChar);
123123
}
124+
}
124125

125-
char nextCharHint = formatHint.charAt(s.length());
126-
if (!Character.isLetterOrDigit(nextCharHint)) {
127-
s.append(nextCharHint);
128-
}
126+
private boolean isDelimiter(char ch) {
127+
return !(ch >= 'A' && ch <= 'Z')
128+
&& !(ch >= 'a' && ch <= 'z');
129129
}
130130

131131
private Runnable createRangeErrorCallback(final long milliseconds) {

0 commit comments

Comments
 (0)