Loading src/com/android/settings/notification/modes/ZenModeFragmentBase.java +5 −3 Original line number Diff line number Diff line Loading @@ -115,10 +115,12 @@ abstract class ZenModeFragmentBase extends ZenModesFragmentBase { * do it soon). */ private void maybeUpdateControllersState(@NonNull ZenMode zenMode) { // DashboardFragment will update every controller on first onResume. Thus, the first onStart // doesn't need to force it, but subsequent ones do. boolean needsFullUpdate = getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED) && (mModeOnLastControllerUpdate == null || !mModeOnLastControllerUpdate.equals(zenMode)); getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED) && (mModeOnLastControllerUpdate != null && !mModeOnLastControllerUpdate.equals(zenMode)); mModeOnLastControllerUpdate = zenMode.copy(); for (var controller : getZenPreferenceControllers()) { Loading tests/robotests/src/com/android/settings/notification/modes/ZenModeFragmentBaseTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -212,6 +212,37 @@ public class ZenModeFragmentBaseTest { scenario.close(); } @Test public void fragment_onModeUpdatedWhilePaused_updatesControllers() { ZenMode originalMode = new TestModeBuilder().setId("id").setName("Original").build(); when(mBackend.getMode("id")).thenReturn(originalMode); // Fragment starts, loads mode data. FragmentScenario<TestableFragment> scenario = createScenario("id"); scenario.moveToState(State.RESUMED).onFragment(fragment -> { Preference preference = fragment.requirePreference("pref_name"); assertThat(preference.getSummary()).isEqualTo("Original"); verify(fragment.mShowsName, times(1)).updateState(any(), eq(originalMode)); }); // Fragment is paused (but not stopped). scenario.moveToState(State.STARTED).onFragment(fragment -> { // Now, we get a message saying something changed. ZenMode updatedMode = new TestModeBuilder().setId("id").setName("Updated").build(); when(mBackend.getMode("id")).thenReturn(updatedMode); getSettingsContentObservers(fragment).stream().findFirst().get() .dispatchChange(false, SETTINGS_URI); ShadowLooper.idleMainLooper(); // The screen was updated, and only updated once. Preference preference = fragment.requirePreference("pref_name"); assertThat(preference.getSummary()).isEqualTo("Updated"); verify(fragment.mShowsName, times(1)).updateState(any(), eq(updatedMode)); }); scenario.close(); } @Test public void fragment_onFragmentRestart_reloadsMode() { ZenMode originalMode = new TestModeBuilder().setId("id").setName("Original").build(); Loading Loading
src/com/android/settings/notification/modes/ZenModeFragmentBase.java +5 −3 Original line number Diff line number Diff line Loading @@ -115,10 +115,12 @@ abstract class ZenModeFragmentBase extends ZenModesFragmentBase { * do it soon). */ private void maybeUpdateControllersState(@NonNull ZenMode zenMode) { // DashboardFragment will update every controller on first onResume. Thus, the first onStart // doesn't need to force it, but subsequent ones do. boolean needsFullUpdate = getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED) && (mModeOnLastControllerUpdate == null || !mModeOnLastControllerUpdate.equals(zenMode)); getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.STARTED) && (mModeOnLastControllerUpdate != null && !mModeOnLastControllerUpdate.equals(zenMode)); mModeOnLastControllerUpdate = zenMode.copy(); for (var controller : getZenPreferenceControllers()) { Loading
tests/robotests/src/com/android/settings/notification/modes/ZenModeFragmentBaseTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -212,6 +212,37 @@ public class ZenModeFragmentBaseTest { scenario.close(); } @Test public void fragment_onModeUpdatedWhilePaused_updatesControllers() { ZenMode originalMode = new TestModeBuilder().setId("id").setName("Original").build(); when(mBackend.getMode("id")).thenReturn(originalMode); // Fragment starts, loads mode data. FragmentScenario<TestableFragment> scenario = createScenario("id"); scenario.moveToState(State.RESUMED).onFragment(fragment -> { Preference preference = fragment.requirePreference("pref_name"); assertThat(preference.getSummary()).isEqualTo("Original"); verify(fragment.mShowsName, times(1)).updateState(any(), eq(originalMode)); }); // Fragment is paused (but not stopped). scenario.moveToState(State.STARTED).onFragment(fragment -> { // Now, we get a message saying something changed. ZenMode updatedMode = new TestModeBuilder().setId("id").setName("Updated").build(); when(mBackend.getMode("id")).thenReturn(updatedMode); getSettingsContentObservers(fragment).stream().findFirst().get() .dispatchChange(false, SETTINGS_URI); ShadowLooper.idleMainLooper(); // The screen was updated, and only updated once. Preference preference = fragment.requirePreference("pref_name"); assertThat(preference.getSummary()).isEqualTo("Updated"); verify(fragment.mShowsName, times(1)).updateState(any(), eq(updatedMode)); }); scenario.close(); } @Test public void fragment_onFragmentRestart_reloadsMode() { ZenMode originalMode = new TestModeBuilder().setId("id").setName("Original").build(); Loading