OSDN Git Service

Refine the DarkModeScheduleSelectorController
authorSunny Shao <sunnyshao@google.com>
Thu, 12 Dec 2019 15:49:41 +0000 (23:49 +0800)
committerSunny Shao <sunnyshao@google.com>
Tue, 17 Dec 2019 05:15:11 +0000 (13:15 +0800)
- move the initial part to the displayPreference.
- use indext compared instead of the direct string compared.

Bug: 141567787
Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=ROBOTEST_FILTER=com.android.settings.display
Change-Id: I49ccc248bc1f5f9659f8543793ea502ac3e2ea6f

res/values/arrays.xml
src/com/android/settings/display/darkmode/DarkModeScheduleSelectorController.java
tests/robotests/src/com/android/settings/display/darkmode/DarkModeScheduleSelectorControllerTest.java

index eb2b869..79f46d6 100644 (file)
 
     <!-- Dark theme scheduling preferences  [CHAR LIMIT=NONE] -->
     <string-array name="dark_ui_scheduler_preference_titles">
-        <!-- 1: None -->
+        <!-- 0: None -->
         <item>@string/dark_ui_auto_mode_never</item>
-        <!-- 2: Auto -->
+        <!-- 1: Auto -->
         <item>@string/dark_ui_auto_mode_auto</item>
     </string-array>
 
index d99c7bf..9a86757 100644 (file)
@@ -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;
index 53be42c..b1c6738 100644 (file)
 
 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));
     }
 }