Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f086c0e authored by Sunny Shao's avatar Sunny Shao
Browse files

Refine the DarkModeScheduleSelectorController

- 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
parent 8e25a3a6
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -102,9 +102,9 @@

    <!-- 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>

+19 −14
Original line number Diff line number Diff line
@@ -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;
+23 −15
Original line number Diff line number Diff line
@@ -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));
    }
}