From f496cf6fb917465ad0b92a0ff924c2a7d55ee70c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Hern=C3=A1ndez?= Date: Wed, 8 Jan 2025 19:11:59 +0100 Subject: [PATCH] Fix NPE on modes page when schedule has no days Fixes: 387088843 Test: atest ZenModeTriggerUpdatePreferenceControllerTest Flag: EXEMPT trivial bugfix (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:5098df9b6c2a7caff5dde39911c70e35f2aacbe7) Merged-In: I3b845784f5923521d7f3f6cae9d6d27a21f55361 Change-Id: I3b845784f5923521d7f3f6cae9d6d27a21f55361 --- ...ModeTriggerUpdatePreferenceController.java | 8 +++++--- ...TriggerUpdatePreferenceControllerTest.java | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java b/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java index 13d5c6e9904..bbed5b960c8 100644 --- a/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java +++ b/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceController.java @@ -109,9 +109,11 @@ class ZenModeTriggerUpdatePreferenceController extends AbstractZenModePreference tryParseScheduleConditionId(mode.getRule().getConditionId()); if (schedule != null) { preference.setTitle(SystemZenRules.getTimeSummary(mContext, schedule)); - preference.setSummary(Utils.createAccessibleSequence( - SystemZenRules.getDaysOfWeekShort(mContext, schedule), - SystemZenRules.getDaysOfWeekFull(mContext, schedule))); + String shortDaysSummary = SystemZenRules.getDaysOfWeekShort(mContext, schedule); + String fullDaysSummary = SystemZenRules.getDaysOfWeekFull(mContext, schedule); + preference.setSummary(shortDaysSummary != null && fullDaysSummary != null + ? Utils.createAccessibleSequence(shortDaysSummary, fullDaysSummary) + : shortDaysSummary); } else { // Fallback, but shouldn't happen. Log.wtf(TAG, "SCHEDULE_TIME mode without schedule: " + mode); diff --git a/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java index d916dcfb068..7f4f2118f1a 100644 --- a/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/notification/modes/ZenModeTriggerUpdatePreferenceControllerTest.java @@ -309,6 +309,25 @@ public class ZenModeTriggerUpdatePreferenceControllerTest { .isEqualTo(ZenModeSetScheduleFragment.class.getName()); } + @Test + public void updateState_scheduleTimeRuleWithNoDays_emptySummary() { + ZenModeConfig.ScheduleInfo scheduleInfo = new ZenModeConfig.ScheduleInfo(); + scheduleInfo.days = new int[] {}; + scheduleInfo.startHour = 1; + scheduleInfo.endHour = 15; + ZenMode mode = new TestModeBuilder() + .setConditionId(ZenModeConfig.toScheduleConditionId(scheduleInfo)) + .setPackage(SystemZenRules.PACKAGE_ANDROID) + .setType(TYPE_SCHEDULE_TIME) + .setTriggerDescription("some schedule") + .build(); + + mController.updateState(mPreference, mode); + + assertThat(mPreference.getTitle()).isEqualTo("1:00 AM - 3:00 PM"); + assertThat(mPreference.getSummary()).isNull(); + } + @Test public void updateState_appWithConfigActivity_showsLinkToConfigActivity() { ZenMode mode = new TestModeBuilder()