Fix windows leaked in ZenModeScheduleRuleSettings
ZenModeScheduleRuleSettings creates an DaysDialog when user clicked Days option. If Activity was destroyed suddenly, WindowsManager throws a windows leaked exception. And then DaysDialog try to do something(dismiss), settings app will crash. So, we need to dismiss dialog when activity was destroyed. Test: robo test, change code to recover symptom, manual test Change-Id: I8d5370fe9673573581d613da91c7ab9be55d8199 Fixes: 111841375
This commit is contained in:
@@ -63,6 +63,7 @@ public class ZenModeScheduleRuleSettings extends ZenModeRuleSettingsBase {
|
|||||||
private TimePickerPreference mStart;
|
private TimePickerPreference mStart;
|
||||||
private TimePickerPreference mEnd;
|
private TimePickerPreference mEnd;
|
||||||
private SwitchPreference mExitAtAlarm;
|
private SwitchPreference mExitAtAlarm;
|
||||||
|
private AlertDialog mDayDialog;
|
||||||
|
|
||||||
private ScheduleInfo mSchedule;
|
private ScheduleInfo mSchedule;
|
||||||
|
|
||||||
@@ -195,7 +196,6 @@ public class ZenModeScheduleRuleSettings extends ZenModeRuleSettingsBase {
|
|||||||
updateEndSummary();
|
updateEndSummary();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||||
List<AbstractPreferenceController> controllers = new ArrayList<>();
|
List<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||||
@@ -214,8 +214,17 @@ public class ZenModeScheduleRuleSettings extends ZenModeRuleSettingsBase {
|
|||||||
return MetricsEvent.NOTIFICATION_ZEN_MODE_SCHEDULE_RULE;
|
return MetricsEvent.NOTIFICATION_ZEN_MODE_SCHEDULE_RULE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (mDayDialog != null && mDayDialog.isShowing()) {
|
||||||
|
mDayDialog.dismiss();
|
||||||
|
mDayDialog = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void showDaysDialog() {
|
private void showDaysDialog() {
|
||||||
new AlertDialog.Builder(mContext)
|
mDayDialog = new AlertDialog.Builder(mContext)
|
||||||
.setTitle(R.string.zen_mode_schedule_rule_days)
|
.setTitle(R.string.zen_mode_schedule_rule_days)
|
||||||
.setView(new ZenModeScheduleDaysSelection(mContext, mSchedule.days) {
|
.setView(new ZenModeScheduleDaysSelection(mContext, mSchedule.days) {
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user