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

Commit fa96f871 authored by Liana Kazanova's avatar Liana Kazanova Committed by Automerger Merge Worker
Browse files

Merge "Revert "Use testable components to cleanup display tests a bit."" into...

Merge "Revert "Use testable components to cleanup display tests a bit."" into udc-dev am: f1a35e74

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22162147



Change-Id: Ic7d88493d643bd029fb794d6597ed46b751a1666
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 221739a8 f1a35e74
Loading
Loading
Loading
Loading
+61 −43
Original line number Original line Diff line number Diff line
@@ -31,10 +31,13 @@ import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.content.ContentResolver;
import android.content.Context;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Resources;
import android.content.res.Resources;
import android.hardware.Sensor;
import android.hardware.Sensor;
import android.hardware.SensorEventListener;
import android.hardware.SensorEventListener;
@@ -45,18 +48,18 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Looper;
import android.os.PowerManager;
import android.os.PowerManager;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.test.TestLooper;
import android.os.test.TestLooper;
import android.provider.Settings;
import android.provider.Settings;
import android.testing.TestableContext;
import android.util.FloatProperty;
import android.util.FloatProperty;
import android.view.Display;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.DisplayInfo;


import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;


import com.android.server.ExtendedMockitoRule;
import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.am.BatteryStatsService;
import com.android.server.am.BatteryStatsService;
import com.android.server.display.RampAnimator.DualRampAnimator;
import com.android.server.display.RampAnimator.DualRampAnimator;
@@ -69,12 +72,12 @@ import com.android.server.testutils.OffsettableClock;


import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.MockitoSession;
import org.mockito.quality.Strictness;
import org.mockito.quality.Strictness;
import org.mockito.stubbing.Answer;
import org.mockito.stubbing.Answer;


@@ -92,9 +95,11 @@ public final class DisplayPowerController2Test {
    private static final String SECOND_FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_789";
    private static final String SECOND_FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_789";
    private static final float PROX_SENSOR_MAX_RANGE = 5;
    private static final float PROX_SENSOR_MAX_RANGE = 5;


    private MockitoSession mSession;
    private OffsettableClock mClock;
    private OffsettableClock mClock;
    private TestLooper mTestLooper;
    private TestLooper mTestLooper;
    private Handler mHandler;
    private Handler mHandler;
    private Context mContextSpy;
    private DisplayPowerControllerHolder mHolder;
    private DisplayPowerControllerHolder mHolder;
    private Sensor mProxSensor;
    private Sensor mProxSensor;


@@ -111,38 +116,40 @@ public final class DisplayPowerController2Test {
    @Mock
    @Mock
    private PowerManager mPowerManagerMock;
    private PowerManager mPowerManagerMock;
    @Mock
    @Mock
    private Resources mResourcesMock;
    @Mock
    private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock;
    private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock;


    @Captor
    @Captor
    private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor;
    private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor;


    @Rule
    public final TestableContext mContext = new TestableContext(
            InstrumentationRegistry.getInstrumentation().getContext());

    @Rule
    public final ExtendedMockitoRule mExtendedMockitoRule =
            new ExtendedMockitoRule.Builder(this)
                    .setStrictness(Strictness.LENIENT)
                    .spyStatic(SystemProperties.class)
                    .spyStatic(BatteryStatsService.class)
                    .build();

    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        mSession = ExtendedMockito.mockitoSession()
                .initMocks(this)
                .strictness(Strictness.LENIENT)
                .spyStatic(SystemProperties.class)
                .spyStatic(LocalServices.class)
                .spyStatic(BatteryStatsService.class)
                .spyStatic(Settings.System.class)
                .startMocking();
        mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
        mClock = new OffsettableClock.Stopped();
        mClock = new OffsettableClock.Stopped();
        mTestLooper = new TestLooper(mClock::now);
        mTestLooper = new TestLooper(mClock::now);
        mHandler = new Handler(mTestLooper.getLooper());
        mHandler = new Handler(mTestLooper.getLooper());

        addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
        addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
        addLocalServiceMock(ColorDisplayService.ColorDisplayServiceInternal.class,
                mCdsiMock);


        mContext.addMockSystemService(PowerManager.class, mPowerManagerMock);
        when(mContextSpy.getSystemService(eq(PowerManager.class))).thenReturn(mPowerManagerMock);
        when(mContextSpy.getResources()).thenReturn(mResourcesMock);


        doAnswer((Answer<Void>) invocationOnMock -> null).when(() ->
        doAnswer((Answer<Void>) invocationOnMock -> null).when(() ->
                SystemProperties.set(anyString(), any()));
                SystemProperties.set(anyString(), any()));
        doAnswer((Answer<ColorDisplayService.ColorDisplayServiceInternal>) invocationOnMock ->
                mCdsiMock).when(() -> LocalServices.getService(
                ColorDisplayService.ColorDisplayServiceInternal.class));
        doAnswer((Answer<Void>) invocationOnMock -> null).when(BatteryStatsService::getService);
        doAnswer((Answer<Void>) invocationOnMock -> null).when(BatteryStatsService::getService);
        doAnswer((Answer<Boolean>) invocationOnMock -> true).when(() ->
                Settings.System.putFloatForUser(any(), any(), anyFloat(), anyInt()));


        setUpSensors();
        setUpSensors();
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
@@ -150,8 +157,8 @@ public final class DisplayPowerController2Test {


    @After
    @After
    public void tearDown() {
    public void tearDown() {
        mSession.finishMocking();
        LocalServices.removeServiceForTest(WindowManagerPolicy.class);
        LocalServices.removeServiceForTest(WindowManagerPolicy.class);
        LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class);
    }
    }


    @Test
    @Test
@@ -412,9 +419,11 @@ public final class DisplayPowerController2Test {


    @Test
    @Test
    public void testDisplayBrightnessFollowers_AutomaticBrightness() {
    public void testDisplayBrightnessFollowers_AutomaticBrightness() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));
        final float brightness = 0.4f;
        final float brightness = 0.4f;
        final float nits = 300;
        final float nits = 300;
        final float ambientLux = 3000;
        final float ambientLux = 3000;
@@ -531,9 +540,11 @@ public final class DisplayPowerController2Test {


    @Test
    @Test
    public void testSetScreenOffBrightnessSensorEnabled_DisplayIsOff() {
    public void testSetScreenOffBrightnessSensorEnabled_DisplayIsOff() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));


        DisplayPowerRequest dpr = new DisplayPowerRequest();
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
@@ -564,14 +575,17 @@ public final class DisplayPowerController2Test {


    @Test
    @Test
    public void testSetScreenOffBrightnessSensorEnabled_DisplayIsInDoze() {
    public void testSetScreenOffBrightnessSensorEnabled_DisplayIsInDoze() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));


        DisplayPowerRequest dpr = new DisplayPowerRequest();
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        dpr.policy = DisplayPowerRequest.POLICY_DOZE;
        dpr.policy = DisplayPowerRequest.POLICY_DOZE;
        mContext.getOrCreateTestableResources().addOverride(
        when(mResourcesMock.getBoolean(
                com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, true);
                com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing))
                .thenReturn(true);
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        advanceTime(1); // Run updatePowerState
        advanceTime(1); // Run updatePowerState


@@ -599,9 +613,11 @@ public final class DisplayPowerController2Test {


    @Test
    @Test
    public void testSetScreenOffBrightnessSensorDisabled_AutoBrightnessIsDisabled() {
    public void testSetScreenOffBrightnessSensorDisabled_AutoBrightnessIsDisabled() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL)
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));


        DisplayPowerRequest dpr = new DisplayPowerRequest();
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
@@ -614,9 +630,11 @@ public final class DisplayPowerController2Test {


    @Test
    @Test
    public void testSetScreenOffBrightnessSensorDisabled_DisplayIsDisabled() {
    public void testSetScreenOffBrightnessSensorDisabled_DisplayIsDisabled() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ false);
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ false);


        DisplayPowerRequest dpr = new DisplayPowerRequest();
        DisplayPowerRequest dpr = new DisplayPowerRequest();
@@ -669,9 +687,9 @@ public final class DisplayPowerController2Test {
    public void testBrightnessNitsPersistWhenDisplayDeviceChanges() {
    public void testBrightnessNitsPersistWhenDisplayDeviceChanges() {
        float brightness = 0.3f;
        float brightness = 0.3f;
        float nits = 500;
        float nits = 500;
        mContext.getOrCreateTestableResources().addOverride(
        when(mResourcesMock.getBoolean(
                com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay,
                com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay))
                true);
                .thenReturn(true);
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
        when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
        when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);


@@ -791,7 +809,7 @@ public final class DisplayPowerController2Test {
        setUpDisplay(displayId, uniqueId, display, device, config, isEnabled);
        setUpDisplay(displayId, uniqueId, display, device, config, isEnabled);


        final DisplayPowerController2 dpc = new DisplayPowerController2(
        final DisplayPowerController2 dpc = new DisplayPowerController2(
                mContext, injector, mDisplayPowerCallbacksMock, mHandler,
                mContextSpy, injector, mDisplayPowerCallbacksMock, mHandler,
                mSensorManagerMock, mDisplayBlankerMock, display,
                mSensorManagerMock, mDisplayBlankerMock, display,
                mBrightnessTrackerMock, brightnessSetting, () -> {},
                mBrightnessTrackerMock, brightnessSetting, () -> {},
                hbmMetadata, /* bootCompleted= */ false);
                hbmMetadata, /* bootCompleted= */ false);
+61 −44
Original line number Original line Diff line number Diff line
@@ -31,10 +31,13 @@ import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


import android.content.ContentResolver;
import android.content.Context;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Resources;
import android.content.res.Resources;
import android.hardware.Sensor;
import android.hardware.Sensor;
import android.hardware.SensorEventListener;
import android.hardware.SensorEventListener;
@@ -45,18 +48,18 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Looper;
import android.os.PowerManager;
import android.os.PowerManager;
import android.os.SystemProperties;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.test.TestLooper;
import android.os.test.TestLooper;
import android.provider.Settings;
import android.provider.Settings;
import android.testing.TestableContext;
import android.util.FloatProperty;
import android.util.FloatProperty;
import android.view.Display;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.DisplayInfo;


import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.runner.AndroidJUnit4;


import com.android.server.ExtendedMockitoRule;
import com.android.dx.mockito.inline.extended.ExtendedMockito;
import com.android.server.LocalServices;
import com.android.server.LocalServices;
import com.android.server.am.BatteryStatsService;
import com.android.server.am.BatteryStatsService;
import com.android.server.display.RampAnimator.DualRampAnimator;
import com.android.server.display.RampAnimator.DualRampAnimator;
@@ -69,12 +72,12 @@ import com.android.server.testutils.OffsettableClock;


import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Captor;
import org.mockito.Mock;
import org.mockito.Mock;
import org.mockito.MockitoSession;
import org.mockito.quality.Strictness;
import org.mockito.quality.Strictness;
import org.mockito.stubbing.Answer;
import org.mockito.stubbing.Answer;


@@ -92,9 +95,11 @@ public final class DisplayPowerControllerTest {
    private static final String SECOND_FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_789";
    private static final String SECOND_FOLLOWER_UNIQUE_DISPLAY_ID = "unique_id_789";
    private static final float PROX_SENSOR_MAX_RANGE = 5;
    private static final float PROX_SENSOR_MAX_RANGE = 5;


    private MockitoSession mSession;
    private OffsettableClock mClock;
    private OffsettableClock mClock;
    private TestLooper mTestLooper;
    private TestLooper mTestLooper;
    private Handler mHandler;
    private Handler mHandler;
    private Context mContextSpy;
    private DisplayPowerControllerHolder mHolder;
    private DisplayPowerControllerHolder mHolder;
    private Sensor mProxSensor;
    private Sensor mProxSensor;


@@ -111,38 +116,41 @@ public final class DisplayPowerControllerTest {
    @Mock
    @Mock
    private PowerManager mPowerManagerMock;
    private PowerManager mPowerManagerMock;
    @Mock
    @Mock
    private Resources mResourcesMock;
    @Mock
    private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock;
    private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock;


    @Captor
    @Captor
    private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor;
    private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor;


    @Rule
    public final TestableContext mContext = new TestableContext(
            InstrumentationRegistry.getInstrumentation().getContext());

    @Rule
    public final ExtendedMockitoRule mExtendedMockitoRule =
            new ExtendedMockitoRule.Builder(this)
                    .setStrictness(Strictness.LENIENT)
                    .spyStatic(SystemProperties.class)
                    .spyStatic(BatteryStatsService.class)
                    .build();

    @Before
    @Before
    public void setUp() throws Exception {
    public void setUp() throws Exception {
        mSession = ExtendedMockito.mockitoSession()
                .initMocks(this)
                .strictness(Strictness.LENIENT)
                .spyStatic(SystemProperties.class)
                .spyStatic(LocalServices.class)
                .spyStatic(BatteryStatsService.class)
                .spyStatic(Settings.System.class)
                .startMocking();
        mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
        mClock = new OffsettableClock.Stopped();
        mClock = new OffsettableClock.Stopped();
        mTestLooper = new TestLooper(mClock::now);
        mTestLooper = new TestLooper(mClock::now);
        mHandler = new Handler(mTestLooper.getLooper());
        mHandler = new Handler(mTestLooper.getLooper());


        addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
        addLocalServiceMock(WindowManagerPolicy.class, mWindowManagerPolicyMock);
        addLocalServiceMock(ColorDisplayService.ColorDisplayServiceInternal.class,
                mCdsiMock);


        mContext.addMockSystemService(PowerManager.class, mPowerManagerMock);
        when(mContextSpy.getSystemService(eq(PowerManager.class))).thenReturn(mPowerManagerMock);
        when(mContextSpy.getResources()).thenReturn(mResourcesMock);


        doAnswer((Answer<Void>) invocationOnMock -> null).when(() ->
        doAnswer((Answer<Void>) invocationOnMock -> null).when(() ->
                SystemProperties.set(anyString(), any()));
                SystemProperties.set(anyString(), any()));
        doAnswer((Answer<ColorDisplayService.ColorDisplayServiceInternal>) invocationOnMock ->
                mCdsiMock).when(() -> LocalServices.getService(
                ColorDisplayService.ColorDisplayServiceInternal.class));
        doAnswer((Answer<Void>) invocationOnMock -> null).when(BatteryStatsService::getService);
        doAnswer((Answer<Void>) invocationOnMock -> null).when(BatteryStatsService::getService);
        doAnswer((Answer<Boolean>) invocationOnMock -> true).when(() ->
                Settings.System.putFloatForUser(any(), any(), anyFloat(), anyInt()));


        setUpSensors();
        setUpSensors();
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
@@ -150,8 +158,8 @@ public final class DisplayPowerControllerTest {


    @After
    @After
    public void tearDown() {
    public void tearDown() {
        mSession.finishMocking();
        LocalServices.removeServiceForTest(WindowManagerPolicy.class);
        LocalServices.removeServiceForTest(WindowManagerPolicy.class);
        LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class);
    }
    }


    @Test
    @Test
@@ -414,9 +422,11 @@ public final class DisplayPowerControllerTest {


    @Test
    @Test
    public void testDisplayBrightnessFollowers_AutomaticBrightness() {
    public void testDisplayBrightnessFollowers_AutomaticBrightness() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));
        final float brightness = 0.4f;
        final float brightness = 0.4f;
        final float nits = 300;
        final float nits = 300;
        final float ambientLux = 3000;
        final float ambientLux = 3000;
@@ -534,9 +544,11 @@ public final class DisplayPowerControllerTest {


    @Test
    @Test
    public void testSetScreenOffBrightnessSensorEnabled_DisplayIsOff() {
    public void testSetScreenOffBrightnessSensorEnabled_DisplayIsOff() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));


        DisplayPowerRequest dpr = new DisplayPowerRequest();
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
@@ -567,14 +579,17 @@ public final class DisplayPowerControllerTest {


    @Test
    @Test
    public void testSetScreenOffBrightnessSensorEnabled_DisplayIsInDoze() {
    public void testSetScreenOffBrightnessSensorEnabled_DisplayIsInDoze() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));


        DisplayPowerRequest dpr = new DisplayPowerRequest();
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        dpr.policy = DisplayPowerRequest.POLICY_DOZE;
        dpr.policy = DisplayPowerRequest.POLICY_DOZE;
        mContext.getOrCreateTestableResources().addOverride(
        when(mResourcesMock.getBoolean(
                com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing, true);
                com.android.internal.R.bool.config_allowAutoBrightnessWhileDozing))
                .thenReturn(true);
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        mHolder.dpc.requestPowerState(dpr, /* waitForNegativeProximity= */ false);
        advanceTime(1); // Run updatePowerState
        advanceTime(1); // Run updatePowerState


@@ -602,9 +617,11 @@ public final class DisplayPowerControllerTest {


    @Test
    @Test
    public void testSetScreenOffBrightnessSensorDisabled_AutoBrightnessIsDisabled() {
    public void testSetScreenOffBrightnessSensorDisabled_AutoBrightnessIsDisabled() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL)
                Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),
                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));


        DisplayPowerRequest dpr = new DisplayPowerRequest();
        DisplayPowerRequest dpr = new DisplayPowerRequest();
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
        dpr.policy = DisplayPowerRequest.POLICY_OFF;
@@ -617,10 +634,11 @@ public final class DisplayPowerControllerTest {


    @Test
    @Test
    public void testSetScreenOffBrightnessSensorDisabled_DisplayIsDisabled() {
    public void testSetScreenOffBrightnessSensorDisabled_DisplayIsDisabled() {
        Settings.System.putInt(mContext.getContentResolver(),
        doAnswer((Answer<Integer>) invocationOnMock ->
                Settings.System.SCREEN_BRIGHTNESS_MODE,
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
                Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                .when(() -> Settings.System.getIntForUser(any(ContentResolver.class),

                        eq(Settings.System.SCREEN_BRIGHTNESS_MODE), anyInt(),
                        eq(UserHandle.USER_CURRENT)));
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ false);
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID, /* isEnabled= */ false);


        DisplayPowerRequest dpr = new DisplayPowerRequest();
        DisplayPowerRequest dpr = new DisplayPowerRequest();
@@ -673,10 +691,9 @@ public final class DisplayPowerControllerTest {
    public void testBrightnessNitsPersistWhenDisplayDeviceChanges() {
    public void testBrightnessNitsPersistWhenDisplayDeviceChanges() {
        float brightness = 0.3f;
        float brightness = 0.3f;
        float nits = 500;
        float nits = 500;
        mContext.getOrCreateTestableResources().addOverride(
        when(mResourcesMock.getBoolean(
                com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay,
                com.android.internal.R.bool.config_persistBrightnessNitsForDefaultDisplay))
                true);
                .thenReturn(true);

        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
        mHolder = createDisplayPowerController(DISPLAY_ID, UNIQUE_ID);
        when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);
        when(mHolder.automaticBrightnessController.convertToNits(brightness)).thenReturn(nits);


@@ -795,7 +812,7 @@ public final class DisplayPowerControllerTest {
        setUpDisplay(displayId, uniqueId, display, device, config, isEnabled);
        setUpDisplay(displayId, uniqueId, display, device, config, isEnabled);


        final DisplayPowerController dpc = new DisplayPowerController(
        final DisplayPowerController dpc = new DisplayPowerController(
                mContext, injector, mDisplayPowerCallbacksMock, mHandler,
                mContextSpy, injector, mDisplayPowerCallbacksMock, mHandler,
                mSensorManagerMock, mDisplayBlankerMock, display,
                mSensorManagerMock, mDisplayBlankerMock, display,
                mBrightnessTrackerMock, brightnessSetting, () -> {},
                mBrightnessTrackerMock, brightnessSetting, () -> {},
                hbmMetadata, /* bootCompleted= */ false);
                hbmMetadata, /* bootCompleted= */ false);