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

Commit 60418b4d authored by Daniel Solomon's avatar Daniel Solomon
Browse files

Hide display white balance setting depending on color mode

Display white balance relies on a linear color transform matrix to work
as intended. When the current color mode is COLOR_MODE_SATURATED, this
condition is not guaranteed to be satisfied. In this case, hide the
display white balance setting.

Bug: 116516917

make ROBOTEST_FILTER=DisplayWhiteBalancePreferenceControllerTest
RunSettingsRoboTests -j32

Change-Id: I1fe1eb907485766888832db8b9c342339cc80ea7
parent 0057e45e
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -17,9 +17,11 @@ import android.content.Context;
import android.hardware.display.ColorDisplayManager;
import android.os.UserHandle;
import android.provider.Settings.Secure;
import com.android.internal.app.ColorDisplayController;
import com.android.settings.core.TogglePreferenceController;

public class DisplayWhiteBalancePreferenceController extends TogglePreferenceController {
    private ColorDisplayController mColorDisplayController;

    public DisplayWhiteBalancePreferenceController(Context context, String key) {
        super(context, key);
@@ -27,7 +29,11 @@ public class DisplayWhiteBalancePreferenceController extends TogglePreferenceCon

    @Override
    public int getAvailabilityStatus() {
        return ColorDisplayManager.isDisplayWhiteBalanceAvailable(mContext) ?
        // Display white balance is only valid in linear light space. COLOR_MODE_SATURATED implies
        // unmanaged color mode, and hence unknown color processing conditions.
        return ColorDisplayManager.isDisplayWhiteBalanceAvailable(mContext) &&
                getColorDisplayController().getColorMode() !=
                    ColorDisplayController.COLOR_MODE_SATURATED ?
                AVAILABLE : DISABLED_FOR_USER;
    }

@@ -43,4 +49,11 @@ public class DisplayWhiteBalancePreferenceController extends TogglePreferenceCon
                isChecked ? 1 : 0, UserHandle.USER_CURRENT);
        return true;
    }

    ColorDisplayController getColorDisplayController() {
        if (mColorDisplayController == null) {
            mColorDisplayController = new ColorDisplayController(mContext);
        }
        return mColorDisplayController;
    }
}
+29 −1
Original line number Diff line number Diff line
package com.android.settings.display;

import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import static com.google.common.truth.Truth.assertThat;

import android.content.Context;
import android.provider.Settings;
import android.provider.Settings.Secure;
import com.android.internal.app.ColorDisplayController;
import com.android.settings.testutils.shadow.SettingsShadowResources;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
@@ -23,6 +29,9 @@ public class DisplayWhiteBalancePreferenceControllerTest {
  private Context mContext;
  private DisplayWhiteBalancePreferenceController mController;

  @Mock
  private ColorDisplayController mColorDisplayController;

  @After
  public void tearDown() {
    SettingsShadowResources.reset();
@@ -30,14 +39,19 @@ public class DisplayWhiteBalancePreferenceControllerTest {

  @Before
  public void setUp() {
    MockitoAnnotations.initMocks(this);
    mContext = RuntimeEnvironment.application;
    mController = new DisplayWhiteBalancePreferenceController(mContext, "display_white_balance");
    mController = spy(new DisplayWhiteBalancePreferenceController(mContext,
        "display_white_balance"));
    doReturn(mColorDisplayController).when(mController).getColorDisplayController();
  }

  @Test
  public void isAvailable_configuredAvailable() {
    SettingsShadowResources.overrideResource(
        com.android.internal.R.bool.config_displayWhiteBalanceAvailable, true);
    when(mColorDisplayController.getColorMode())
        .thenReturn(ColorDisplayController.COLOR_MODE_NATURAL);
    assertThat(mController.isAvailable()).isTrue();
  }

@@ -45,6 +59,20 @@ public class DisplayWhiteBalancePreferenceControllerTest {
  public void isAvailable_configuredUnavailable() {
    SettingsShadowResources.overrideResource(
        com.android.internal.R.bool.config_displayWhiteBalanceAvailable, false);
    when(mColorDisplayController.getColorMode())
        .thenReturn(ColorDisplayController.COLOR_MODE_SATURATED);
    assertThat(mController.isAvailable()).isFalse();

    SettingsShadowResources.overrideResource(
        com.android.internal.R.bool.config_displayWhiteBalanceAvailable, false);
    when(mColorDisplayController.getColorMode())
        .thenReturn(ColorDisplayController.COLOR_MODE_NATURAL);
    assertThat(mController.isAvailable()).isFalse();

    SettingsShadowResources.overrideResource(
        com.android.internal.R.bool.config_displayWhiteBalanceAvailable, true);
    when(mColorDisplayController.getColorMode())
        .thenReturn(ColorDisplayController.COLOR_MODE_SATURATED);
    assertThat(mController.isAvailable()).isFalse();
  }