Skip to content

Commit 671435e

Browse files
VNDRNJef Vandoorenvonovak
authored
fix: classCastException on Huawei devices with android 7.0 (#329) (#434)
* fix: classCastException on Huawei devices with android 7.0 (#329) stop using deprecated methods for android M + * refactor: tweak error message Co-authored-by: Jef Vandooren <[email protected]> Co-authored-by: Vojtech Novak <[email protected]>
1 parent cde07fb commit 671435e

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

android/src/main/java/com/reactcommunity/rndatetimepicker/MinuteIntervalSnappableTimePickerDialog.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import android.app.TimePickerDialog;
88
import android.content.DialogInterface;
99
import android.content.Context;
10+
import android.os.Build;
1011
import android.os.Handler;
12+
import android.util.Log;
1113
import android.widget.TimePicker;
1214
import android.view.View;
1315
import android.widget.EditText;
@@ -141,23 +143,30 @@ private boolean pickerIsInTextInputMode() {
141143
*/
142144
private void correctEnteredMinutes(final TimePicker view, final int hourOfDay, final int correctedMinutes) {
143145
assertNotSpinner("spinner never needs to be corrected because wrong values are not offered to user (both in scrolling and textInput mode)!");
144-
final EditText textInput = (EditText) view.findFocus();
145-
146146
// 'correction' callback
147147
runnable = new Runnable() {
148148
@Override
149149
public void run() {
150-
if (pickerIsInTextInputMode()) {
151-
// set valid minutes && move caret to the end of input
152-
view.setCurrentHour(hourOfDay);
153-
view.setCurrentMinute(correctedMinutes);
154-
textInput.setSelection(textInput.getText().length());
150+
// set valid hour & minutes
151+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
152+
view.setHour(hourOfDay);
153+
view.setMinute(correctedMinutes);
155154
} else {
156155
view.setCurrentHour(hourOfDay);
157156
// we need to set minutes to 0 for this to work on older android devices
158157
view.setCurrentMinute(0);
159158
view.setCurrentMinute(correctedMinutes);
160159
}
160+
if (pickerIsInTextInputMode()) {
161+
// move caret to the end of input
162+
View maybeTextInput = view.findFocus();
163+
if (maybeTextInput instanceof EditText) {
164+
final EditText textInput = (EditText) maybeTextInput;
165+
textInput.setSelection(textInput.getText().length());
166+
} else {
167+
Log.e("RN-datetimepicker", "could not set selection on time picker, this is a known issue on some Huawei devices");
168+
}
169+
}
161170
}
162171
};
163172

0 commit comments

Comments
 (0)