import android.content.Context;
import android.content.res.Configuration;
import android.os.PowerManager;
+
import androidx.preference.DropDownPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;
+
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
private final UiModeManager mUiModeManager;
private PowerManager mPowerManager;
private DropDownPreference mPreference;
- private String mCurrentMode;
+ private int mCurrentMode;
public DarkModeScheduleSelectorController(Context context, String key) {
super(context, key);
@Override
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
-
mPreference = screen.findPreference(getPreferenceKey());
+ init();
}
@Override
return BasePreferenceController.AVAILABLE;
}
- @Override
- public final void updateState(Preference preference) {
+ private void init() {
final boolean batterySaver = mPowerManager.isPowerSaveMode();
mPreference.setEnabled(!batterySaver);
- mCurrentMode =
- mUiModeManager.getNightMode() == UiModeManager.MODE_NIGHT_AUTO
- ? mContext.getString(R.string.dark_ui_auto_mode_auto)
- : mContext.getString(R.string.dark_ui_auto_mode_never);
- mPreference.setValue(mCurrentMode);
+ mCurrentMode = getCurrentMode();
+ mPreference.setValueIndex(mCurrentMode);
}
+
+ private int getCurrentMode() {
+ final int resId = mUiModeManager.getNightMode() == UiModeManager.MODE_NIGHT_AUTO
+ ? R.string.dark_ui_auto_mode_auto : R.string.dark_ui_auto_mode_never;
+ return mPreference.findIndexOfValue(mContext.getString(resId));
+ }
+
@Override
public final boolean onPreferenceChange(Preference preference, Object newValue) {
- String newMode = (String) newValue;
+ final int newMode = mPreference.findIndexOfValue((String) newValue);
if (newMode == mCurrentMode) {
return false;
}
mCurrentMode = newMode;
- if (mCurrentMode == mContext.getString(R.string.dark_ui_auto_mode_never)) {
+ if (mCurrentMode == mPreference.findIndexOfValue(
+ mContext.getString(R.string.dark_ui_auto_mode_never))) {
boolean active = (mContext.getResources().getConfiguration().uiMode
& Configuration.UI_MODE_NIGHT_YES) != 0;
int mode = active ? UiModeManager.MODE_NIGHT_YES
: UiModeManager.MODE_NIGHT_NO;
mUiModeManager.setNightMode(mode);
-
- } else if (mCurrentMode ==
- mContext.getString(R.string.dark_ui_auto_mode_auto)) {
+ } else if (mCurrentMode == mPreference.findIndexOfValue(
+ mContext.getString(R.string.dark_ui_auto_mode_auto))) {
mUiModeManager.setNightMode(UiModeManager.MODE_NIGHT_AUTO);
}
return true;
package com.android.settings.display.darkmode;
+import static junit.framework.TestCase.assertFalse;
+
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
import android.app.UiModeManager;
import android.content.Context;
import android.os.PowerManager;
+
import androidx.preference.DropDownPreference;
import androidx.preference.PreferenceScreen;
+
+import com.android.settings.R;
+
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
-import com.android.settings.R;
-
-import static junit.framework.TestCase.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.spy;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
@RunWith(RobolectricTestRunner.class)
public class DarkModeScheduleSelectorControllerTest {
when(mContext.getString(R.string.dark_ui_auto_mode_never)).thenReturn("never");
when(mContext.getString(R.string.dark_ui_auto_mode_auto)).thenReturn("auto");
mPreference = spy(new DropDownPreference(mContext));
+ mPreference.setEntryValues(new CharSequence[]{
+ mContext.getString(R.string.dark_ui_auto_mode_never),
+ mContext.getString(R.string.dark_ui_auto_mode_auto)
+ });
+ doNothing().when(mPreference).setValueIndex(anyInt());
when(mScreen.findPreference(anyString())).thenReturn(mPreference);
when(mUiService.setNightModeActivated(anyBoolean())).thenReturn(true);
mController = new DarkModeScheduleSelectorController(mContext, mPreferenceKey);
public void nightMode_updateStateNone_dropDownValueChangedToNone() {
when(mUiService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_YES);
mController.displayPreference(mScreen);
- mController.updateState(mPreference);
- verify(mPreference).setValue(mContext.getString(R.string.dark_ui_auto_mode_never));
+ verify(mPreference).setValueIndex(0);
}
@Test
public void nightMode_updateStateNone_dropDownValueChangedToAuto() {
when(mUiService.getNightMode()).thenReturn(UiModeManager.MODE_NIGHT_AUTO);
mController.displayPreference(mScreen);
- mController.updateState(mPreference);
- verify(mPreference).setValue(mContext.getString(R.string.dark_ui_auto_mode_auto));
+ verify(mPreference).setValueIndex(1);
}
@Test
public void batterySaver_dropDown_disabledSelector() {
when(mPM.isPowerSaveMode()).thenReturn(true);
mController.displayPreference(mScreen);
- mController.updateState(mPreference);
verify(mPreference).setEnabled(eq(false));
}
}