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)
This commit is contained in:
ldjesper 2019-11-07 15:48:11 -05:00 committed by Daniel Nizri
parent cc1cfd7acc
commit 945a220138
3 changed files with 49 additions and 0 deletions

View File

@ -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<Pair<Long, Long>> {
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);

View File

@ -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<Long> {
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);

View File

@ -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");
}
}