diff --git a/src/com/android/settings/display/darkmode/DarkModeCustomPreferenceController.java b/src/com/android/settings/display/darkmode/DarkModeCustomPreferenceController.java index 10cda5334c5..c45bb3d2b34 100644 --- a/src/com/android/settings/display/darkmode/DarkModeCustomPreferenceController.java +++ b/src/com/android/settings/display/darkmode/DarkModeCustomPreferenceController.java @@ -27,7 +27,6 @@ import androidx.preference.Preference; import com.android.settings.core.BasePreferenceController; import java.time.LocalTime; -import java.time.format.DateTimeFormatter; /** * Controller for custom mode night mode time settings @@ -35,7 +34,6 @@ import java.time.format.DateTimeFormatter; public class DarkModeCustomPreferenceController extends BasePreferenceController { private static final String START_TIME_KEY = "dark_theme_start_time"; private static final String END_TIME_KEY = "dark_theme_end_time"; - public static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm a"); private final UiModeManager mUiModeManager; private TimeFormatter mFormat; private DarkModeSettingsFragment mFragmet; @@ -63,7 +61,10 @@ public class DarkModeCustomPreferenceController extends BasePreferenceController @Override public int getAvailabilityStatus() { - return AVAILABLE; + return mUiModeManager.getNightMode() == MODE_NIGHT_CUSTOM + && mUiModeManager.getNightModeCustomType() + == UiModeManager.MODE_NIGHT_CUSTOM_TYPE_SCHEDULE + ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } public TimePickerDialog getDialog() { @@ -88,13 +89,6 @@ public class DarkModeCustomPreferenceController extends BasePreferenceController @Override protected void refreshSummary(Preference preference) { - if (mUiModeManager.getNightMode() != MODE_NIGHT_CUSTOM - || mUiModeManager.getNightModeCustomType() - != UiModeManager.MODE_NIGHT_CUSTOM_TYPE_SCHEDULE) { - preference.setVisible(false); - return; - } - preference.setVisible(true); final LocalTime time; if (TextUtils.equals(getPreferenceKey(), START_TIME_KEY)) { time = mUiModeManager.getCustomNightModeStart(); diff --git a/src/com/android/settings/display/darkmode/DarkModeSettingsFragment.java b/src/com/android/settings/display/darkmode/DarkModeSettingsFragment.java index a5103b0aef9..17d32a536f6 100644 --- a/src/com/android/settings/display/darkmode/DarkModeSettingsFragment.java +++ b/src/com/android/settings/display/darkmode/DarkModeSettingsFragment.java @@ -21,6 +21,7 @@ import android.os.Bundle; import android.os.PowerManager; import androidx.preference.Preference; +import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.dashboard.DashboardFragment; @@ -43,9 +44,6 @@ public class DarkModeSettingsFragment extends DashboardFragment { private DarkModeObserver mContentObserver; private DarkModeCustomPreferenceController mCustomStartController; private DarkModeCustomPreferenceController mCustomEndController; - private Runnable mCallback = () -> { - updatePreferenceStates(); - }; private static final int DIALOG_START_TIME = 0; private static final int DIALOG_END_TIME = 1; @@ -60,7 +58,12 @@ public class DarkModeSettingsFragment extends DashboardFragment { public void onStart() { super.onStart(); // Listen for changes only while visible. - mContentObserver.subscribe(mCallback); + mContentObserver.subscribe(() -> { + PreferenceScreen preferenceScreen = getPreferenceScreen(); + mCustomStartController.displayPreference(preferenceScreen); + mCustomEndController.displayPreference(preferenceScreen); + updatePreferenceStates(); + }); } @Override diff --git a/tests/robotests/src/com/android/settings/display/darkmode/DarkModeCustomPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/darkmode/DarkModeCustomPreferenceControllerTest.java index 4a26205bb58..8ac6257491b 100644 --- a/tests/robotests/src/com/android/settings/display/darkmode/DarkModeCustomPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/darkmode/DarkModeCustomPreferenceControllerTest.java @@ -15,6 +15,11 @@ package com.android.settings.display.darkmode; +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; + +import static com.google.common.truth.Truth.assertThat; + import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; @@ -71,68 +76,55 @@ public class DarkModeCustomPreferenceControllerTest { } @Test - public void nightMode_manualOn_hidePreference() { + public void getAvailabilityStatus_nightModeManualOn_unavailable() { when(mService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_YES); mConfig.uiMode = Configuration.UI_MODE_NIGHT_YES; - mController.refreshSummary(mPreference); - - verify(mPreference).setVisible(eq(false)); + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); } @Test - public void nightMode_manualOff_hidePreference() { + public void getAvailabilityStatus_nightModeManualOff_unavailable() { when(mService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_NO); mConfig.uiMode = Configuration.UI_MODE_NIGHT_NO; - mController.refreshSummary(mPreference); - - verify(mPreference).setVisible(eq(false)); + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); } - @Test - public void nightMode_customOn_showPreference() { + public void getAvailabilityStatus_nightModeCustomOn_available() { when(mService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_CUSTOM); mConfig.uiMode = Configuration.UI_MODE_NIGHT_YES; - mController.refreshSummary(mPreference); - - verify(mPreference).setVisible(eq(true)); + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); } @Test - public void nightMode_customOff_showPreference() { + public void getAvailabilityStatus_nightModeCustomOff_available() { when(mService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_CUSTOM); mConfig.uiMode = Configuration.UI_MODE_NIGHT_NO; - mController.refreshSummary(mPreference); - - verify(mPreference).setVisible(eq(true)); + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); } @Test - public void nightMode_customBedtimeOn_hidePreference() { + public void getAvailabilityStatus_nightModeCustomBedtimeOn_unavailable() { when(mService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_CUSTOM); when(mService.getNightModeCustomType()) .thenReturn(UiModeManager.MODE_NIGHT_CUSTOM_TYPE_BEDTIME); mConfig.uiMode = Configuration.UI_MODE_NIGHT_YES; - mController.refreshSummary(mPreference); - - verify(mPreference).setVisible(eq(false)); + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); } @Test - public void nightMode_customBedtimeOff_hidePreference() { + public void getAvailabilityStatus_nightModeCustomBedtimeOff_unavailable() { when(mService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_CUSTOM); when(mService.getNightModeCustomType()) .thenReturn(UiModeManager.MODE_NIGHT_CUSTOM_TYPE_BEDTIME); mConfig.uiMode = Configuration.UI_MODE_NIGHT_NO; - mController.refreshSummary(mPreference); - - verify(mPreference).setVisible(eq(false)); + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); } @Test