From 43da25c6707b7ddd118bf507865d21cebc4ae70b Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Tue, 23 May 2017 15:56:59 -0700 Subject: [PATCH] Disable state save/restore for inflated date/time picker views Fix a bug where the internal date/time picker views reused view IDs causing state save/restore bugs when placed within AlertDialogs and other places. Since the pickers already save/restore their state at a higher level leaving this enabled was redundant. Bug 32654446 Test: manual Change-Id: I3df2fc932ac5296ab6eb0a5013dddef8d1117635 --- core/java/android/widget/DatePickerCalendarDelegate.java | 1 + core/java/android/widget/DatePickerSpinnerDelegate.java | 3 ++- core/java/android/widget/TimePickerClockDelegate.java | 1 + core/java/android/widget/TimePickerSpinnerDelegate.java | 3 ++- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/java/android/widget/DatePickerCalendarDelegate.java b/core/java/android/widget/DatePickerCalendarDelegate.java index ca1bf582e6036..636519b197e7e 100755 --- a/core/java/android/widget/DatePickerCalendarDelegate.java +++ b/core/java/android/widget/DatePickerCalendarDelegate.java @@ -112,6 +112,7 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate { // Set up and attach container. mContainer = (ViewGroup) inflater.inflate(layoutResourceId, mDelegator, false); + mContainer.setSaveFromParentEnabled(false); mDelegator.addView(mContainer); // Set up header views. diff --git a/core/java/android/widget/DatePickerSpinnerDelegate.java b/core/java/android/widget/DatePickerSpinnerDelegate.java index fc2d1faca019c..4f9316f881cdc 100644 --- a/core/java/android/widget/DatePickerSpinnerDelegate.java +++ b/core/java/android/widget/DatePickerSpinnerDelegate.java @@ -115,7 +115,8 @@ class DatePickerSpinnerDelegate extends AbstractDatePickerDelegate { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - inflater.inflate(layoutResourceId, mDelegator, true); + final View view = inflater.inflate(layoutResourceId, mDelegator, true); + view.setSaveFromParentEnabled(false); OnValueChangeListener onChangeListener = new OnValueChangeListener() { public void onValueChange(NumberPicker picker, int oldVal, int newVal) { diff --git a/core/java/android/widget/TimePickerClockDelegate.java b/core/java/android/widget/TimePickerClockDelegate.java index 05d0f960131fa..d3c83eefbe1f5 100644 --- a/core/java/android/widget/TimePickerClockDelegate.java +++ b/core/java/android/widget/TimePickerClockDelegate.java @@ -137,6 +137,7 @@ class TimePickerClockDelegate extends TimePicker.AbstractTimePickerDelegate { final int layoutResourceId = a.getResourceId(R.styleable.TimePicker_internalLayout, R.layout.time_picker_material); final View mainView = inflater.inflate(layoutResourceId, delegator); + mainView.setSaveFromParentEnabled(false); mRadialTimePickerHeader = mainView.findViewById(R.id.time_header); mRadialTimePickerHeader.setOnTouchListener(new NearestTouchDelegate()); diff --git a/core/java/android/widget/TimePickerSpinnerDelegate.java b/core/java/android/widget/TimePickerSpinnerDelegate.java index 813c30e344c05..7a7d9a948dcc5 100644 --- a/core/java/android/widget/TimePickerSpinnerDelegate.java +++ b/core/java/android/widget/TimePickerSpinnerDelegate.java @@ -83,7 +83,8 @@ class TimePickerSpinnerDelegate extends TimePicker.AbstractTimePickerDelegate { a.recycle(); final LayoutInflater inflater = LayoutInflater.from(mContext); - inflater.inflate(layoutResourceId, mDelegator, true); + final View view = inflater.inflate(layoutResourceId, mDelegator, true); + view.setSaveFromParentEnabled(false); // hour mHourSpinner = delegator.findViewById(R.id.hour);