From 945a220138221bca8da00ef7333eecc61ff7f841 Mon Sep 17 00:00:00 2001 From: ldjesper Date: Thu, 7 Nov 2019 15:48:11 -0500 Subject: [PATCH] Include separator characters for Samsung devices in MaterialDatePicker Resolves https://github.com/material-components/material-components-android/issues/682 PiperOrigin-RevId: 279146671 (cherry picked from commit 62a2164f1808a559c0ddb799aff4965f3669f20b) --- .../datepicker/RangeDateSelector.java | 8 +++++ .../datepicker/SingleDateSelector.java | 7 ++++ .../material/internal/ManufacturerUtils.java | 34 +++++++++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 lib/java/com/google/android/material/internal/ManufacturerUtils.java 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"); + } +}