diff --git a/res/values/arrays.xml b/res/values/arrays.xml index eb2b869995a..79f46d6b79f 100644 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -102,9 +102,9 @@ - + @string/dark_ui_auto_mode_never - + @string/dark_ui_auto_mode_auto diff --git a/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorController.java b/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorController.java index d99c7bf59e8..9a867570885 100644 --- a/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorController.java +++ b/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorController.java @@ -18,9 +18,11 @@ import android.app.UiModeManager; 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; @@ -33,7 +35,7 @@ public class DarkModeScheduleSelectorController extends 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); @@ -44,8 +46,8 @@ public class DarkModeScheduleSelectorController extends BasePreferenceController @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); - mPreference = screen.findPreference(getPreferenceKey()); + init(); } @Override @@ -53,32 +55,35 @@ public class DarkModeScheduleSelectorController extends BasePreferenceController 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; diff --git a/tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java b/tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java index 53be42caddf..b1c6738647d 100644 --- a/tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java @@ -14,11 +14,27 @@ 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; @@ -26,16 +42,6 @@ import org.mockito.Mock; 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 { @@ -60,6 +66,11 @@ 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); @@ -81,23 +92,20 @@ public class DarkModeScheduleSelectorControllerTest { 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)); } }