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:
tmfang
2018-07-31 16:24:57 +08:00
parent 89d35f949c
commit 4b5cbca5c8

View File

@@ -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