Loading res/xml/dream_fragment_overview.xml +2 −3 Original line number Diff line number Diff line Loading @@ -50,12 +50,11 @@ android:summary="@string/dream_complications_toggle_summary" settings:controller="com.android.settings.dream.DreamComplicationPreferenceController"/> <com.android.settingslib.PrimarySwitchPreference <com.android.settings.dream.LowLightModePreference android:key="low_light_mode" android:order="350" android:title="@string/screensaver_settings_low_light_mode" android:fragment="com.android.settings.dream.LowLightModePicker" settings:controller="com.android.settings.dream.LowLightModePreferenceController" /> android:fragment="com.android.settings.dream.LowLightModePicker" /> <SwitchPreferenceCompat android:key="dream_home_controls_toggle" Loading src/com/android/settings/dream/DreamSettings.java +31 −12 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; Loading Loading @@ -70,9 +71,12 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL private DreamPickerController mDreamPickerController; private DreamHomeControlsPreferenceController mDreamHomeControlsPreferenceController; private LowLightModePreferenceController mLowLightModePreferenceController; private final DreamPickerController.Callback mCallback = this::updateComplicationsToggleVisibility; /** A callback that is invoked whenever the selected dream changes. */ private final DreamPickerController.Callback mCallback = () -> updateSelectedDreamSettingsState( mMainSwitchPreference != null ? mMainSwitchPreference.isChecked() : false); @WhenToDream static int getSettingFromPrefKey(String key) { Loading Loading @@ -157,12 +161,20 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL if (mDreamPickerController == null) { mDreamPickerController = new DreamPickerController(context); } DreamBackend backend = DreamBackend.getInstance(context); if (mDreamHomeControlsPreferenceController == null) { mDreamHomeControlsPreferenceController = new DreamHomeControlsPreferenceController( context, DreamBackend.getInstance(getContext())); mDreamHomeControlsPreferenceController = new DreamHomeControlsPreferenceController(context, backend); } if (mLowLightModePreferenceController == null) { mLowLightModePreferenceController = new LowLightModePreferenceController(context, backend); } controllers.add(mDreamPickerController); controllers.add(mDreamHomeControlsPreferenceController); controllers.add(mLowLightModePreferenceController); controllers.add(new WhenToDreamPreferenceController(context)); return controllers; } Loading Loading @@ -193,6 +205,11 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL mDreamHomeControlsPreferenceController = dreamHomeControlsPreferenceController; } @VisibleForTesting void setLowLightModePreferenceController(LowLightModePreferenceController controller) { mLowLightModePreferenceController = controller; } private void setAllPreferencesEnabled(boolean isEnabled) { getPreferenceControllers().forEach(controllers -> { controllers.forEach(controller -> { Loading @@ -210,7 +227,8 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL } }); }); updateComplicationsToggleVisibility(); updateSelectedDreamSettingsState(isEnabled); } @Override Loading Loading @@ -275,14 +293,16 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL return mRecyclerView; } private void updateComplicationsToggleVisibility() { /** * Updates the visibility and enabled state of preferences that depend on the currently selected * dream. */ private void updateSelectedDreamSettingsState(boolean dreamsEnabled) { if (mDreamPickerController == null) { return; } final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo(); final DreamBackend dreamBackend = DreamBackend.getInstance(getContext()); final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo(); if (mComplicationsTogglePreference != null) { mComplicationsTogglePreference.setVisible( Loading @@ -290,13 +310,12 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL } if (mHomeControllerTogglePreference != null) { boolean isEnabled = dreamBackend.isEnabled() boolean isEnabled = dreamsEnabled && (activeDream == null || (activeDream.dreamCategory & DreamService.DREAM_CATEGORY_HOME_PANEL) == 0) && mDreamHomeControlsPreferenceController .getAvailabilityStatus() == mDreamHomeControlsPreferenceController.AVAILABLE; .getAvailabilityStatus() == BasePreferenceController.AVAILABLE; mHomeControllerTogglePreference.setEnabled(isEnabled); } } Loading src/com/android/settings/dream/LowLightModePreference.java 0 → 100644 +40 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.dream; import android.content.Context; import android.util.AttributeSet; import com.android.settingslib.PrimarySwitchPreference; /** * A {@link PrimarySwitchPreference} used for the low-light mode setting that includes an in-line * toggle. The toggle is enabled or disabled with the preference whenever setEnabled() is called. */ public class LowLightModePreference extends PrimarySwitchPreference { public LowLightModePreference(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); // Set the switch's enabled state as well. setSwitchEnabled(enabled); } } src/com/android/settings/dream/LowLightModePreferenceController.java +5 −3 Original line number Diff line number Diff line Loading @@ -33,14 +33,16 @@ import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.dream.DreamBackend; public class LowLightModePreferenceController extends TogglePreferenceController { public static final String PREF_KEY = "low_light_mode"; private final DreamBackend mBackend; @Nullable private Preference mPreference; public LowLightModePreferenceController(@NonNull Context context, @NonNull String key) { super(context, key); public LowLightModePreferenceController(@NonNull Context context, DreamBackend dreamBackend) { super(context, PREF_KEY); mBackend = DreamBackend.getInstance(context); mBackend = dreamBackend; } @Override Loading tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java +66 −4 Original line number Diff line number Diff line Loading @@ -21,12 +21,14 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.os.Bundle; import android.service.dreams.DreamService; import android.widget.CompoundButton; import androidx.preference.Preference; import androidx.preference.PreferenceManager; Loading @@ -37,6 +39,7 @@ import com.android.settings.R; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settingslib.dream.DreamBackend; import com.android.settingslib.dream.DreamBackend.WhenToDream; import com.android.settingslib.widget.MainSwitchPreference; import org.junit.Test; import org.junit.runner.RunWith; Loading Loading @@ -88,6 +91,8 @@ public class DreamSettingsTest { R.string.screensaver_settings_summary_never }; @Mock private MainSwitchPreference mMainSwitchPreference; @Mock private Preference mDreamPickerPref; @Mock Loading @@ -95,9 +100,13 @@ public class DreamSettingsTest { @Mock private Preference mHomeControllerTogglePref; @Mock private LowLightModePreference mLowLightModeTogglePref; @Mock private DreamPickerController mDreamPickerController; @Mock private DreamHomeControlsPreferenceController mDreamHomeControlsPreferenceController; @Mock private LowLightModePreferenceController mLowLightModePreferenceController; @Captor private ArgumentCaptor<DreamPickerController.Callback> mDreamPickerCallbackCaptor; Loading Loading @@ -290,7 +299,6 @@ public class DreamSettingsTest { final Context context = ApplicationProvider.getApplicationContext(); final DreamSettings dreamSettings = prepareDreamSettings(context); // Active dream does not support complications final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo(); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT; Loading @@ -315,7 +323,6 @@ public class DreamSettingsTest { final Context context = ApplicationProvider.getApplicationContext(); final DreamSettings dreamSettings = prepareDreamSettings(context); // Active dream does not support complications final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo(); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_HOME_PANEL; Loading @@ -328,33 +335,88 @@ public class DreamSettingsTest { verify(mHomeControllerTogglePref).setEnabled(false); verify(mDreamPickerController).addCallback(mDreamPickerCallbackCaptor.capture()); when(mMainSwitchPreference.isChecked()).thenReturn(true); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT; mDreamPickerCallbackCaptor.getValue().onActiveDreamChanged(); verify(mHomeControllerTogglePref).setEnabled(true); } @Test public void lowLightModeToggle_disabledWhenMainSwitchDisabled() { MockitoAnnotations.initMocks(this); final Context context = ApplicationProvider.getApplicationContext(); final DreamSettings dreamSettings = prepareDreamSettings(context); final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo(); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT; when(mDreamPickerController.getActiveDreamInfo()).thenReturn(activeDream); dreamSettings.onAttach(context); dreamSettings.onCreate(Bundle.EMPTY); reset(mLowLightModeTogglePref); // DreamSettings ignores the button, but we need something to pass into onCheckedChanged. final CompoundButton mockButton = mock(CompoundButton.class); dreamSettings.onCheckedChanged(mockButton, false); verify(mLowLightModeTogglePref).setEnabled(false); } @Test public void lowLightModeToggle_enabledWhenMainSwitchEnabled() { MockitoAnnotations.initMocks(this); final Context context = ApplicationProvider.getApplicationContext(); final DreamSettings dreamSettings = prepareDreamSettings(context); final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo(); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT; when(mDreamPickerController.getActiveDreamInfo()).thenReturn(activeDream); dreamSettings.onAttach(context); dreamSettings.onCreate(Bundle.EMPTY); reset(mLowLightModeTogglePref); // DreamSettings ignores the button, but we need something to pass into onCheckedChanged. final CompoundButton mockButton = mock(CompoundButton.class); dreamSettings.onCheckedChanged(mockButton, true); verify(mLowLightModeTogglePref).setEnabled(true); } private DreamSettings prepareDreamSettings(Context context) { final TestDreamSettings dreamSettings = new TestDreamSettings(context); final Bundle extras = new Bundle(); when(mDreamPickerController.getPreferenceKey()).thenReturn(DreamPickerController.PREF_KEY); when(mDreamHomeControlsPreferenceController.getPreferenceKey()) .thenReturn(DreamHomeControlsPreferenceController.PREF_KEY); when(mDreamPickerPref.getExtras()).thenReturn(new Bundle()); when(mDreamPickerPref.getExtras()).thenReturn(extras); when(mDreamPickerPref.getKey()).thenReturn(DreamPickerController.PREF_KEY); when(mComplicationsTogglePref.getKey()).thenReturn( DreamComplicationPreferenceController.PREF_KEY); when(mHomeControllerTogglePref.getExtras()).thenReturn(new Bundle()); when(mHomeControllerTogglePref.getExtras()).thenReturn(extras); when(mHomeControllerTogglePref.getKey()).thenReturn( DreamHomeControlsPreferenceController.PREF_KEY); when(mDreamHomeControlsPreferenceController.getAvailabilityStatus()) .thenReturn(mDreamHomeControlsPreferenceController.AVAILABLE); when(mLowLightModeTogglePref.getExtras()).thenReturn(extras); when(mLowLightModeTogglePref.getKey()) .thenReturn(LowLightModePreferenceController.PREF_KEY); when(mLowLightModePreferenceController.getPreferenceKey()) .thenReturn(LowLightModePreferenceController.PREF_KEY); dreamSettings.addPreference( DreamMainSwitchPreferenceController.MAIN_SWITCH_PREF_KEY, mMainSwitchPreference); dreamSettings.addPreference(DreamPickerController.PREF_KEY, mDreamPickerPref); dreamSettings.addPreference(DreamComplicationPreferenceController.PREF_KEY, mComplicationsTogglePref); dreamSettings.addPreference(DreamHomeControlsPreferenceController.PREF_KEY, mHomeControllerTogglePref); dreamSettings.addPreference(LowLightModePreferenceController.PREF_KEY, mLowLightModeTogglePref); dreamSettings.setDreamPickerController(mDreamPickerController); dreamSettings .setDreamHomeControlsPreferenceController(mDreamHomeControlsPreferenceController); dreamSettings.setLowLightModePreferenceController(mLowLightModePreferenceController); return dreamSettings; } Loading Loading
res/xml/dream_fragment_overview.xml +2 −3 Original line number Diff line number Diff line Loading @@ -50,12 +50,11 @@ android:summary="@string/dream_complications_toggle_summary" settings:controller="com.android.settings.dream.DreamComplicationPreferenceController"/> <com.android.settingslib.PrimarySwitchPreference <com.android.settings.dream.LowLightModePreference android:key="low_light_mode" android:order="350" android:title="@string/screensaver_settings_low_light_mode" android:fragment="com.android.settings.dream.LowLightModePicker" settings:controller="com.android.settings.dream.LowLightModePreferenceController" /> android:fragment="com.android.settings.dream.LowLightModePicker" /> <SwitchPreferenceCompat android:key="dream_home_controls_toggle" Loading
src/com/android/settings/dream/DreamSettings.java +31 −12 Original line number Diff line number Diff line Loading @@ -39,6 +39,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.android.settings.R; import com.android.settings.Utils; import com.android.settings.core.BasePreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settingslib.core.AbstractPreferenceController; Loading Loading @@ -70,9 +71,12 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL private DreamPickerController mDreamPickerController; private DreamHomeControlsPreferenceController mDreamHomeControlsPreferenceController; private LowLightModePreferenceController mLowLightModePreferenceController; private final DreamPickerController.Callback mCallback = this::updateComplicationsToggleVisibility; /** A callback that is invoked whenever the selected dream changes. */ private final DreamPickerController.Callback mCallback = () -> updateSelectedDreamSettingsState( mMainSwitchPreference != null ? mMainSwitchPreference.isChecked() : false); @WhenToDream static int getSettingFromPrefKey(String key) { Loading Loading @@ -157,12 +161,20 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL if (mDreamPickerController == null) { mDreamPickerController = new DreamPickerController(context); } DreamBackend backend = DreamBackend.getInstance(context); if (mDreamHomeControlsPreferenceController == null) { mDreamHomeControlsPreferenceController = new DreamHomeControlsPreferenceController( context, DreamBackend.getInstance(getContext())); mDreamHomeControlsPreferenceController = new DreamHomeControlsPreferenceController(context, backend); } if (mLowLightModePreferenceController == null) { mLowLightModePreferenceController = new LowLightModePreferenceController(context, backend); } controllers.add(mDreamPickerController); controllers.add(mDreamHomeControlsPreferenceController); controllers.add(mLowLightModePreferenceController); controllers.add(new WhenToDreamPreferenceController(context)); return controllers; } Loading Loading @@ -193,6 +205,11 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL mDreamHomeControlsPreferenceController = dreamHomeControlsPreferenceController; } @VisibleForTesting void setLowLightModePreferenceController(LowLightModePreferenceController controller) { mLowLightModePreferenceController = controller; } private void setAllPreferencesEnabled(boolean isEnabled) { getPreferenceControllers().forEach(controllers -> { controllers.forEach(controller -> { Loading @@ -210,7 +227,8 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL } }); }); updateComplicationsToggleVisibility(); updateSelectedDreamSettingsState(isEnabled); } @Override Loading Loading @@ -275,14 +293,16 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL return mRecyclerView; } private void updateComplicationsToggleVisibility() { /** * Updates the visibility and enabled state of preferences that depend on the currently selected * dream. */ private void updateSelectedDreamSettingsState(boolean dreamsEnabled) { if (mDreamPickerController == null) { return; } final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo(); final DreamBackend dreamBackend = DreamBackend.getInstance(getContext()); final DreamBackend.DreamInfo activeDream = mDreamPickerController.getActiveDreamInfo(); if (mComplicationsTogglePreference != null) { mComplicationsTogglePreference.setVisible( Loading @@ -290,13 +310,12 @@ public class DreamSettings extends DashboardFragment implements OnCheckedChangeL } if (mHomeControllerTogglePreference != null) { boolean isEnabled = dreamBackend.isEnabled() boolean isEnabled = dreamsEnabled && (activeDream == null || (activeDream.dreamCategory & DreamService.DREAM_CATEGORY_HOME_PANEL) == 0) && mDreamHomeControlsPreferenceController .getAvailabilityStatus() == mDreamHomeControlsPreferenceController.AVAILABLE; .getAvailabilityStatus() == BasePreferenceController.AVAILABLE; mHomeControllerTogglePreference.setEnabled(isEnabled); } } Loading
src/com/android/settings/dream/LowLightModePreference.java 0 → 100644 +40 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.dream; import android.content.Context; import android.util.AttributeSet; import com.android.settingslib.PrimarySwitchPreference; /** * A {@link PrimarySwitchPreference} used for the low-light mode setting that includes an in-line * toggle. The toggle is enabled or disabled with the preference whenever setEnabled() is called. */ public class LowLightModePreference extends PrimarySwitchPreference { public LowLightModePreference(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); // Set the switch's enabled state as well. setSwitchEnabled(enabled); } }
src/com/android/settings/dream/LowLightModePreferenceController.java +5 −3 Original line number Diff line number Diff line Loading @@ -33,14 +33,16 @@ import com.android.settings.core.TogglePreferenceController; import com.android.settingslib.dream.DreamBackend; public class LowLightModePreferenceController extends TogglePreferenceController { public static final String PREF_KEY = "low_light_mode"; private final DreamBackend mBackend; @Nullable private Preference mPreference; public LowLightModePreferenceController(@NonNull Context context, @NonNull String key) { super(context, key); public LowLightModePreferenceController(@NonNull Context context, DreamBackend dreamBackend) { super(context, PREF_KEY); mBackend = DreamBackend.getInstance(context); mBackend = dreamBackend; } @Override Loading
tests/robotests/src/com/android/settings/dream/DreamSettingsTest.java +66 −4 Original line number Diff line number Diff line Loading @@ -21,12 +21,14 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.os.Bundle; import android.service.dreams.DreamService; import android.widget.CompoundButton; import androidx.preference.Preference; import androidx.preference.PreferenceManager; Loading @@ -37,6 +39,7 @@ import com.android.settings.R; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settingslib.dream.DreamBackend; import com.android.settingslib.dream.DreamBackend.WhenToDream; import com.android.settingslib.widget.MainSwitchPreference; import org.junit.Test; import org.junit.runner.RunWith; Loading Loading @@ -88,6 +91,8 @@ public class DreamSettingsTest { R.string.screensaver_settings_summary_never }; @Mock private MainSwitchPreference mMainSwitchPreference; @Mock private Preference mDreamPickerPref; @Mock Loading @@ -95,9 +100,13 @@ public class DreamSettingsTest { @Mock private Preference mHomeControllerTogglePref; @Mock private LowLightModePreference mLowLightModeTogglePref; @Mock private DreamPickerController mDreamPickerController; @Mock private DreamHomeControlsPreferenceController mDreamHomeControlsPreferenceController; @Mock private LowLightModePreferenceController mLowLightModePreferenceController; @Captor private ArgumentCaptor<DreamPickerController.Callback> mDreamPickerCallbackCaptor; Loading Loading @@ -290,7 +299,6 @@ public class DreamSettingsTest { final Context context = ApplicationProvider.getApplicationContext(); final DreamSettings dreamSettings = prepareDreamSettings(context); // Active dream does not support complications final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo(); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT; Loading @@ -315,7 +323,6 @@ public class DreamSettingsTest { final Context context = ApplicationProvider.getApplicationContext(); final DreamSettings dreamSettings = prepareDreamSettings(context); // Active dream does not support complications final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo(); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_HOME_PANEL; Loading @@ -328,33 +335,88 @@ public class DreamSettingsTest { verify(mHomeControllerTogglePref).setEnabled(false); verify(mDreamPickerController).addCallback(mDreamPickerCallbackCaptor.capture()); when(mMainSwitchPreference.isChecked()).thenReturn(true); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT; mDreamPickerCallbackCaptor.getValue().onActiveDreamChanged(); verify(mHomeControllerTogglePref).setEnabled(true); } @Test public void lowLightModeToggle_disabledWhenMainSwitchDisabled() { MockitoAnnotations.initMocks(this); final Context context = ApplicationProvider.getApplicationContext(); final DreamSettings dreamSettings = prepareDreamSettings(context); final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo(); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT; when(mDreamPickerController.getActiveDreamInfo()).thenReturn(activeDream); dreamSettings.onAttach(context); dreamSettings.onCreate(Bundle.EMPTY); reset(mLowLightModeTogglePref); // DreamSettings ignores the button, but we need something to pass into onCheckedChanged. final CompoundButton mockButton = mock(CompoundButton.class); dreamSettings.onCheckedChanged(mockButton, false); verify(mLowLightModeTogglePref).setEnabled(false); } @Test public void lowLightModeToggle_enabledWhenMainSwitchEnabled() { MockitoAnnotations.initMocks(this); final Context context = ApplicationProvider.getApplicationContext(); final DreamSettings dreamSettings = prepareDreamSettings(context); final DreamBackend.DreamInfo activeDream = new DreamBackend.DreamInfo(); activeDream.dreamCategory = DreamService.DREAM_CATEGORY_DEFAULT; when(mDreamPickerController.getActiveDreamInfo()).thenReturn(activeDream); dreamSettings.onAttach(context); dreamSettings.onCreate(Bundle.EMPTY); reset(mLowLightModeTogglePref); // DreamSettings ignores the button, but we need something to pass into onCheckedChanged. final CompoundButton mockButton = mock(CompoundButton.class); dreamSettings.onCheckedChanged(mockButton, true); verify(mLowLightModeTogglePref).setEnabled(true); } private DreamSettings prepareDreamSettings(Context context) { final TestDreamSettings dreamSettings = new TestDreamSettings(context); final Bundle extras = new Bundle(); when(mDreamPickerController.getPreferenceKey()).thenReturn(DreamPickerController.PREF_KEY); when(mDreamHomeControlsPreferenceController.getPreferenceKey()) .thenReturn(DreamHomeControlsPreferenceController.PREF_KEY); when(mDreamPickerPref.getExtras()).thenReturn(new Bundle()); when(mDreamPickerPref.getExtras()).thenReturn(extras); when(mDreamPickerPref.getKey()).thenReturn(DreamPickerController.PREF_KEY); when(mComplicationsTogglePref.getKey()).thenReturn( DreamComplicationPreferenceController.PREF_KEY); when(mHomeControllerTogglePref.getExtras()).thenReturn(new Bundle()); when(mHomeControllerTogglePref.getExtras()).thenReturn(extras); when(mHomeControllerTogglePref.getKey()).thenReturn( DreamHomeControlsPreferenceController.PREF_KEY); when(mDreamHomeControlsPreferenceController.getAvailabilityStatus()) .thenReturn(mDreamHomeControlsPreferenceController.AVAILABLE); when(mLowLightModeTogglePref.getExtras()).thenReturn(extras); when(mLowLightModeTogglePref.getKey()) .thenReturn(LowLightModePreferenceController.PREF_KEY); when(mLowLightModePreferenceController.getPreferenceKey()) .thenReturn(LowLightModePreferenceController.PREF_KEY); dreamSettings.addPreference( DreamMainSwitchPreferenceController.MAIN_SWITCH_PREF_KEY, mMainSwitchPreference); dreamSettings.addPreference(DreamPickerController.PREF_KEY, mDreamPickerPref); dreamSettings.addPreference(DreamComplicationPreferenceController.PREF_KEY, mComplicationsTogglePref); dreamSettings.addPreference(DreamHomeControlsPreferenceController.PREF_KEY, mHomeControllerTogglePref); dreamSettings.addPreference(LowLightModePreferenceController.PREF_KEY, mLowLightModeTogglePref); dreamSettings.setDreamPickerController(mDreamPickerController); dreamSettings .setDreamHomeControlsPreferenceController(mDreamHomeControlsPreferenceController); dreamSettings.setLowLightModePreferenceController(mLowLightModePreferenceController); return dreamSettings; } Loading