diff --git a/lib/java/com/google/android/material/datepicker/RangeDateSelector.java b/lib/java/com/google/android/material/datepicker/RangeDateSelector.java index c12d491c9..f145b2693 100644 --- a/lib/java/com/google/android/material/datepicker/RangeDateSelector.java +++ b/lib/java/com/google/android/material/datepicker/RangeDateSelector.java @@ -28,11 +28,13 @@ import androidx.annotation.RestrictTo; import androidx.annotation.RestrictTo.Scope; import androidx.core.util.Pair; import androidx.core.util.Preconditions; +import android.text.InputType; import android.util.DisplayMetrics; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; +import com.google.android.material.internal.ManufacturerUtils; import com.google.android.material.internal.ViewUtils; import com.google.android.material.resources.MaterialAttributes; import com.google.android.material.textfield.TextInputLayout; @@ -178,6 +180,12 @@ public class RangeDateSelector implements DateSelector> { final TextInputLayout endTextInput = root.findViewById(R.id.mtrl_picker_text_input_range_end); EditText startEditText = startTextInput.getEditText(); EditText endEditText = endTextInput.getEditText(); + // The date inputType for Samsung does not include any separator characters + if (ManufacturerUtils.isSamsungDevice()) { + // Using the URI variation places the '/' and '.' in more prominent positions + startEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); + endEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); + } invalidRangeStartError = root.getResources().getString(R.string.mtrl_picker_invalid_range); diff --git a/lib/java/com/google/android/material/datepicker/SingleDateSelector.java b/lib/java/com/google/android/material/datepicker/SingleDateSelector.java index 12605e4c2..9f4574e56 100644 --- a/lib/java/com/google/android/material/datepicker/SingleDateSelector.java +++ b/lib/java/com/google/android/material/datepicker/SingleDateSelector.java @@ -27,10 +27,12 @@ import androidx.annotation.Nullable; import androidx.annotation.RestrictTo; import androidx.annotation.RestrictTo.Scope; import androidx.core.util.Pair; +import android.text.InputType; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; +import com.google.android.material.internal.ManufacturerUtils; import com.google.android.material.internal.ViewUtils; import com.google.android.material.resources.MaterialAttributes; import com.google.android.material.textfield.TextInputLayout; @@ -100,6 +102,11 @@ public class SingleDateSelector implements DateSelector { TextInputLayout dateTextInput = root.findViewById(R.id.mtrl_picker_text_input_date); EditText dateEditText = dateTextInput.getEditText(); + // The date inputType for Samsung does not include any separator characters + if (ManufacturerUtils.isSamsungDevice()) { + // Using the URI variation places the '/' and '.' in more prominent positions + dateEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_URI); + } SimpleDateFormat format = UtcDates.getTextInputFormat(); String formatHint = UtcDates.getTextInputHint(root.getResources(), format); diff --git a/lib/java/com/google/android/material/internal/ManufacturerUtils.java b/lib/java/com/google/android/material/internal/ManufacturerUtils.java new file mode 100644 index 000000000..fb2980739 --- /dev/null +++ b/lib/java/com/google/android/material/internal/ManufacturerUtils.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.material.internal; + +import com.google.android.material.R; + +import android.os.Build; +import androidx.annotation.RestrictTo; +import androidx.annotation.RestrictTo.Scope; + +/** Utils to determine device manufacturers for special handling. */ +@RestrictTo(Scope.LIBRARY_GROUP) +public class ManufacturerUtils { + + private ManufacturerUtils() {} + + /** Returns true if the device manufacturer is Samsung. */ + public static boolean isSamsungDevice() { + return Build.MANUFACTURER.equalsIgnoreCase("samsung"); + } +}