From 4f21b95526d225631e97ec2a4da322362edee254 Mon Sep 17 00:00:00 2001 From: pfthomas Date: Fri, 29 Mar 2024 17:56:33 +0000 Subject: [PATCH] [TimePicker] Only clear hour/minute fields when a digit is entered Fixes issue with keyboard navigation that unnecessarily clears the text. PiperOrigin-RevId: 620286833 --- .../timepicker/TimePickerTextInputKeyController.java | 8 ++++++-- .../TimePickerTextInputKeyControllerTest.java | 11 +++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/java/com/google/android/material/timepicker/TimePickerTextInputKeyController.java b/lib/java/com/google/android/material/timepicker/TimePickerTextInputKeyController.java index 45704427ba3..80f0452c9cb 100644 --- a/lib/java/com/google/android/material/timepicker/TimePickerTextInputKeyController.java +++ b/lib/java/com/google/android/material/timepicker/TimePickerTextInputKeyController.java @@ -112,7 +112,9 @@ private boolean onMinuteKeyPress(int keyCode, KeyEvent event, EditText editText) return true; } - clearPrefilledText(editText); + if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) { + clearPrefilledText(editText); + } return false; } @@ -135,7 +137,9 @@ private boolean onHourKeyPress(int keyCode, KeyEvent event, EditText editText) { return true; } - clearPrefilledText(editText); + if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) { + clearPrefilledText(editText); + } return false; } diff --git a/lib/javatests/com/google/android/material/timepicker/TimePickerTextInputKeyControllerTest.java b/lib/javatests/com/google/android/material/timepicker/TimePickerTextInputKeyControllerTest.java index 081dad2542b..2325a722244 100644 --- a/lib/javatests/com/google/android/material/timepicker/TimePickerTextInputKeyControllerTest.java +++ b/lib/javatests/com/google/android/material/timepicker/TimePickerTextInputKeyControllerTest.java @@ -121,6 +121,17 @@ public void controller_clearPrefilledText_shouldNotClearWhenPartialText() { assertThat(editText.getText().length()).isEqualTo(1); } + @Test + public void controller_clearPrefilledText_shouldNotClearWhenNotDigit() { + EditText editText = hourInput.getTextInput().getEditText(); + editText.setText("0"); + editText.setSelection(0); + pressKeys(editText, KeyEvent.KEYCODE_DPAD_RIGHT); + shadowOf(getMainLooper()).idle(); + + assertThat(editText.getText().length()).isEqualTo(1); + } + @Test public void afterTextChanged_validHourInput_formatsText() { EditText editText = hourInput.getTextInput().getEditText();