OSDN Git Service

Add summary for Display->Color settings.
authorDoris Ling <dling@google.com>
Tue, 27 Feb 2018 00:09:51 +0000 (16:09 -0800)
committerDoris Ling <dling@google.com>
Wed, 28 Feb 2018 19:29:36 +0000 (11:29 -0800)
Change-Id: Ia1332b4e3333099878ee52342c64b3d8595fdd94
Fixes: 73773857
Test: make RunSettingsRoboTests

src/com/android/settings/display/ColorModePreferenceController.java
tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java [new file with mode: 0644]

index 2ab2ec9..f3435d0 100644 (file)
@@ -18,34 +18,56 @@ import android.os.IBinder;
 import android.os.Parcel;
 import android.os.RemoteException;
 import android.os.ServiceManager;
+import android.support.v7.preference.Preference;
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settingslib.core.AbstractPreferenceController;
+import com.android.internal.app.ColorDisplayController;
+import com.android.settings.R;
+import com.android.settings.core.BasePreferenceController;
 
-public class ColorModePreferenceController extends AbstractPreferenceController implements
-        PreferenceControllerMixin {
+public class ColorModePreferenceController extends BasePreferenceController {
     private static final String TAG = "ColorModePreference";
     private static final String KEY_COLOR_MODE = "color_mode";
 
     private static final int SURFACE_FLINGER_TRANSACTION_QUERY_WIDE_COLOR = 1024;
 
     private final ConfigurationWrapper mConfigWrapper;
+    private ColorDisplayController mColorDisplayController;
 
     public ColorModePreferenceController(Context context) {
-        super(context);
+        super(context, KEY_COLOR_MODE);
         mConfigWrapper = new ConfigurationWrapper();
     }
 
     @Override
-    public String getPreferenceKey() {
-        return KEY_COLOR_MODE;
+    public int getAvailabilityStatus() {
+        return mConfigWrapper.isScreenWideColorGamut() ? AVAILABLE : DISABLED_FOR_USER;
     }
 
     @Override
-    public boolean isAvailable() {
-        return mConfigWrapper.isScreenWideColorGamut();
+    public void updateState(Preference preference) {
+        preference.setSummary(getSummary());
+    }
+
+    @Override
+    public CharSequence getSummary() {
+        final int colorMode = getColorDisplayController().getColorMode();
+        if (colorMode == ColorDisplayController.COLOR_MODE_SATURATED) {
+            return mContext.getText(R.string.color_mode_option_saturated);
+        }
+        if (colorMode == ColorDisplayController.COLOR_MODE_BOOSTED) {
+            return mContext.getText(R.string.color_mode_option_boosted);
+        }
+        return mContext.getText(R.string.color_mode_option_natural);
+    }
+
+    @VisibleForTesting
+    ColorDisplayController getColorDisplayController() {
+        if (mColorDisplayController == null) {
+            mColorDisplayController = new ColorDisplayController(mContext);
+        }
+        return mColorDisplayController;
     }
 
     @VisibleForTesting
diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java
new file mode 100644 (file)
index 0000000..567b200
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2018 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.display;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.support.v7.preference.Preference;
+
+import com.android.internal.app.ColorDisplayController;
+import com.android.settings.R;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class ColorModePreferenceControllerTest {
+
+    @Mock
+    private Preference mPreference;
+    @Mock
+    private ColorDisplayController mColorDisplayController;
+
+    private Context mContext;
+    private ColorModePreferenceController mController;
+
+    @Before
+    public void setup() {
+        MockitoAnnotations.initMocks(this);
+        mContext = RuntimeEnvironment.application;
+        mController = spy(new ColorModePreferenceController(mContext));
+        doReturn(mColorDisplayController).when(mController).getColorDisplayController();
+    }
+
+    @Test
+    public void updateState_colorModeSaturated_shouldSetSummaryToSaturated() {
+        when(mColorDisplayController.getColorMode())
+            .thenReturn(ColorDisplayController.COLOR_MODE_SATURATED);
+
+        mController.updateState(mPreference);
+
+        verify(mPreference).setSummary(mContext.getString(R.string.color_mode_option_saturated));
+    }
+
+    @Test
+    public void updateState_colorModeBoosted_shouldSetSummaryToBoosted() {
+        when(mColorDisplayController.getColorMode())
+            .thenReturn(ColorDisplayController.COLOR_MODE_BOOSTED);
+
+        mController.updateState(mPreference);
+
+        verify(mPreference).setSummary(mContext.getString(R.string.color_mode_option_boosted));
+    }
+
+    @Test
+    public void updateState_colorModeNatural_shouldSetSummaryToNatural() {
+        when(mColorDisplayController.getColorMode())
+            .thenReturn(ColorDisplayController.COLOR_MODE_NATURAL);
+
+        mController.updateState(mPreference);
+
+        verify(mPreference).setSummary(mContext.getString(R.string.color_mode_option_natural));
+    }
+
+}