From 82bd2c75f7a658a9ed034bc3697720279c079da0 Mon Sep 17 00:00:00 2001 From: Edgar Wang Date: Wed, 29 May 2024 11:46:46 +0000 Subject: [PATCH] Fix NPE in date time settings - the callback is null when slice call setChecked() of PreferenceController Bug: 343109816 Bug: 334924107 Test: robotest & manual Flag: EXEMPT bug fix Change-Id: Ia4d60455b6f14a46d00ae285017bc96ad4855679 --- .../settings/datetime/AutoTimePreferenceController.java | 5 +++++ .../settings/datetime/AutoTimeZonePreferenceController.java | 5 +++++ .../settings/datetime/TimeFormatPreferenceController.java | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/src/com/android/settings/datetime/AutoTimePreferenceController.java b/src/com/android/settings/datetime/AutoTimePreferenceController.java index 434eba9651e..2942acb1956 100644 --- a/src/com/android/settings/datetime/AutoTimePreferenceController.java +++ b/src/com/android/settings/datetime/AutoTimePreferenceController.java @@ -39,6 +39,11 @@ public class AutoTimePreferenceController extends TogglePreferenceController { public AutoTimePreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mTimeManager = context.getSystemService(TimeManager.class); + // This is a no-op implementation of UpdateTimeAndDateCallback to avoid a NPE when + // setTimeAndDateCallback() isn't called, e.g. for slices and other cases where the + // controller is instantiated outside of the context of the real Date & Time settings + // screen. + mCallback = (c) -> {}; } public void setDateAndTimeCallback(UpdateTimeAndDateCallback callback) { diff --git a/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java b/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java index 011cc9717cf..3a1f995aaf2 100644 --- a/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java +++ b/src/com/android/settings/datetime/AutoTimeZonePreferenceController.java @@ -40,6 +40,11 @@ public class AutoTimeZonePreferenceController extends TogglePreferenceController public AutoTimeZonePreferenceController(Context context, String preferenceKey) { super(context, preferenceKey); mTimeManager = context.getSystemService(TimeManager.class); + // This is a no-op implementation of UpdateTimeAndDateCallback to avoid a NPE when + // setTimeAndDateCallback() isn't called, e.g. for slices and other cases where the + // controller is instantiated outside of the context of the real Date & Time settings + // screen. + mCallback = (c) -> {}; } /** diff --git a/src/com/android/settings/datetime/TimeFormatPreferenceController.java b/src/com/android/settings/datetime/TimeFormatPreferenceController.java index 22f7509fb7f..19805ad03dd 100644 --- a/src/com/android/settings/datetime/TimeFormatPreferenceController.java +++ b/src/com/android/settings/datetime/TimeFormatPreferenceController.java @@ -43,6 +43,11 @@ public class TimeFormatPreferenceController extends TogglePreferenceController { public TimeFormatPreferenceController(Context context, String key) { super(context, key); mDummyDate = Calendar.getInstance(); + // This is a no-op implementation of UpdateTimeAndDateCallback to avoid a NPE when + // setTimeAndDateCallback() isn't called, e.g. for slices and other cases where the + // controller is instantiated outside of the context of the real Date & Time settings + // screen. + mUpdateTimeAndDateCallback = (c) -> {}; } /**