Merge "Auto adjust screen brightness when display state on while docked" into sc-qpr1-dev
This commit is contained in:
@@ -194,6 +194,11 @@
|
|||||||
low powered state yet. -->
|
low powered state yet. -->
|
||||||
<bool name="doze_long_press_uses_prox">true</bool>
|
<bool name="doze_long_press_uses_prox">true</bool>
|
||||||
|
|
||||||
|
<!-- Doze: whether the brightness sensor uses the proximity sensor.
|
||||||
|
If both this parameter and doze_selectively_register_prox are true, registration for the
|
||||||
|
brightness sensor won't occur when the display state is ON. -->
|
||||||
|
<bool name="doze_brightness_uses_prox">true</bool>
|
||||||
|
|
||||||
<!-- Doze: should notifications be used as a pulse signal? -->
|
<!-- Doze: should notifications be used as a pulse signal? -->
|
||||||
<bool name="doze_pulse_on_notifications">true</bool>
|
<bool name="doze_pulse_on_notifications">true</bool>
|
||||||
|
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ import android.os.UserHandle;
|
|||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
|
|
||||||
|
import com.android.systemui.dock.DockManager;
|
||||||
import com.android.systemui.doze.dagger.BrightnessSensor;
|
import com.android.systemui.doze.dagger.BrightnessSensor;
|
||||||
import com.android.systemui.doze.dagger.DozeScope;
|
import com.android.systemui.doze.dagger.DozeScope;
|
||||||
import com.android.systemui.doze.dagger.WrappedService;
|
import com.android.systemui.doze.dagger.WrappedService;
|
||||||
@@ -63,6 +64,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
|
|||||||
private final Optional<Sensor> mLightSensorOptional;
|
private final Optional<Sensor> mLightSensorOptional;
|
||||||
private final WakefulnessLifecycle mWakefulnessLifecycle;
|
private final WakefulnessLifecycle mWakefulnessLifecycle;
|
||||||
private final DozeParameters mDozeParameters;
|
private final DozeParameters mDozeParameters;
|
||||||
|
private final DockManager mDockManager;
|
||||||
private final int[] mSensorToBrightness;
|
private final int[] mSensorToBrightness;
|
||||||
private final int[] mSensorToScrimOpacity;
|
private final int[] mSensorToScrimOpacity;
|
||||||
private final int mScreenBrightnessDim;
|
private final int mScreenBrightnessDim;
|
||||||
@@ -87,7 +89,8 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
|
|||||||
@BrightnessSensor Optional<Sensor> lightSensorOptional, DozeHost host, Handler handler,
|
@BrightnessSensor Optional<Sensor> lightSensorOptional, DozeHost host, Handler handler,
|
||||||
AlwaysOnDisplayPolicy alwaysOnDisplayPolicy,
|
AlwaysOnDisplayPolicy alwaysOnDisplayPolicy,
|
||||||
WakefulnessLifecycle wakefulnessLifecycle,
|
WakefulnessLifecycle wakefulnessLifecycle,
|
||||||
DozeParameters dozeParameters) {
|
DozeParameters dozeParameters,
|
||||||
|
DockManager dockManager) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mDozeService = service;
|
mDozeService = service;
|
||||||
mSensorManager = sensorManager;
|
mSensorManager = sensorManager;
|
||||||
@@ -96,6 +99,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
|
|||||||
mDozeParameters = dozeParameters;
|
mDozeParameters = dozeParameters;
|
||||||
mDozeHost = host;
|
mDozeHost = host;
|
||||||
mHandler = handler;
|
mHandler = handler;
|
||||||
|
mDockManager = dockManager;
|
||||||
|
|
||||||
mDefaultDozeBrightness = alwaysOnDisplayPolicy.defaultDozeBrightness;
|
mDefaultDozeBrightness = alwaysOnDisplayPolicy.defaultDozeBrightness;
|
||||||
mScreenBrightnessDim = alwaysOnDisplayPolicy.dimBrightness;
|
mScreenBrightnessDim = alwaysOnDisplayPolicy.dimBrightness;
|
||||||
@@ -122,13 +126,20 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onScreenState(int state) {
|
public void onScreenState(int state) {
|
||||||
if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND) {
|
boolean isDockedScreenOn = state == Display.STATE_ON && mDockManager.isDocked();
|
||||||
|
if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND
|
||||||
|
|| (isDockedScreenOn && shouldRegisterLightSensorWhenScreenOnDocked())) {
|
||||||
setLightSensorEnabled(true);
|
setLightSensorEnabled(true);
|
||||||
} else {
|
} else {
|
||||||
setLightSensorEnabled(false);
|
setLightSensorEnabled(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean shouldRegisterLightSensorWhenScreenOnDocked() {
|
||||||
|
return !mDozeParameters.brightnessUsesProx()
|
||||||
|
|| !mDozeParameters.getSelectivelyRegisterSensorsUsingProx();
|
||||||
|
}
|
||||||
|
|
||||||
private void onDestroy() {
|
private void onDestroy() {
|
||||||
setLightSensorEnabled(false);
|
setLightSensorEnabled(false);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -267,6 +267,13 @@ public class DozeParameters implements TunerService.Tunable,
|
|||||||
return mResources.getBoolean(R.bool.doze_long_press_uses_prox);
|
return mResources.getBoolean(R.bool.doze_long_press_uses_prox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the brightness sensor uses the proximity sensor.
|
||||||
|
*/
|
||||||
|
public boolean brightnessUsesProx() {
|
||||||
|
return mResources.getBoolean(R.bool.doze_brightness_uses_prox);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback to listen for DozeParameter changes.
|
* Callback to listen for DozeParameter changes.
|
||||||
*/
|
*/
|
||||||
@@ -303,6 +310,7 @@ public class DozeParameters implements TunerService.Tunable,
|
|||||||
pw.print("getPickupVibrationThreshold(): "); pw.println(getPickupVibrationThreshold());
|
pw.print("getPickupVibrationThreshold(): "); pw.println(getPickupVibrationThreshold());
|
||||||
pw.print("getSelectivelyRegisterSensorsUsingProx(): ");
|
pw.print("getSelectivelyRegisterSensorsUsingProx(): ");
|
||||||
pw.println(getSelectivelyRegisterSensorsUsingProx());
|
pw.println(getSelectivelyRegisterSensorsUsingProx());
|
||||||
|
pw.print("brightnessUsesProx(): "); pw.println(brightnessUsesProx());
|
||||||
}
|
}
|
||||||
|
|
||||||
interface Callback {
|
interface Callback {
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ public class DozeConfigurationUtil {
|
|||||||
when(params.singleTapUsesProx()).thenReturn(true);
|
when(params.singleTapUsesProx()).thenReturn(true);
|
||||||
when(params.longPressUsesProx()).thenReturn(true);
|
when(params.longPressUsesProx()).thenReturn(true);
|
||||||
when(params.getQuickPickupAodDuration()).thenReturn(500);
|
when(params.getQuickPickupAodDuration()).thenReturn(500);
|
||||||
|
when(params.brightnessUsesProx()).thenReturn(true);
|
||||||
|
|
||||||
doneHolder[0] = true;
|
doneHolder[0] = true;
|
||||||
return params;
|
return params;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import static com.android.systemui.doze.DozeMachine.State.UNINITIALIZED;
|
|||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotEquals;
|
import static org.junit.Assert.assertNotEquals;
|
||||||
|
import static org.junit.Assert.assertNotSame;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
import static org.mockito.ArgumentMatchers.eq;
|
||||||
@@ -47,6 +48,7 @@ import android.view.Display;
|
|||||||
import androidx.test.filters.SmallTest;
|
import androidx.test.filters.SmallTest;
|
||||||
|
|
||||||
import com.android.systemui.SysuiTestCase;
|
import com.android.systemui.SysuiTestCase;
|
||||||
|
import com.android.systemui.dock.DockManager;
|
||||||
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
import com.android.systemui.keyguard.WakefulnessLifecycle;
|
||||||
import com.android.systemui.statusbar.phone.DozeParameters;
|
import com.android.systemui.statusbar.phone.DozeParameters;
|
||||||
import com.android.systemui.util.concurrency.FakeExecutor;
|
import com.android.systemui.util.concurrency.FakeExecutor;
|
||||||
@@ -82,6 +84,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
|||||||
WakefulnessLifecycle mWakefulnessLifecycle;
|
WakefulnessLifecycle mWakefulnessLifecycle;
|
||||||
@Mock
|
@Mock
|
||||||
DozeParameters mDozeParameters;
|
DozeParameters mDozeParameters;
|
||||||
|
@Mock
|
||||||
|
DockManager mDockManager;
|
||||||
private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
|
private FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock());
|
||||||
private FakeThreadFactory mFakeThreadFactory = new FakeThreadFactory(mFakeExecutor);
|
private FakeThreadFactory mFakeThreadFactory = new FakeThreadFactory(mFakeExecutor);
|
||||||
|
|
||||||
@@ -109,7 +113,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
|||||||
mSensor = fakeSensorManager.getFakeLightSensor();
|
mSensor = fakeSensorManager.getFakeLightSensor();
|
||||||
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
||||||
Optional.of(mSensor.getSensor()), mDozeHost, null /* handler */,
|
Optional.of(mSensor.getSensor()), mDozeHost, null /* handler */,
|
||||||
mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters);
|
mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager);
|
||||||
|
|
||||||
mScreen.onScreenState(Display.STATE_ON);
|
mScreen.onScreenState(Display.STATE_ON);
|
||||||
}
|
}
|
||||||
@@ -156,6 +160,67 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
|||||||
assertEquals(maxBrightness, mServiceFake.screenBrightness);
|
assertEquals(maxBrightness, mServiceFake.screenBrightness);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAodDocked_doNotSelectivelyUseProx_usesLightSensor() {
|
||||||
|
// GIVEN the device doesn't need to selectively register for prox sensors and
|
||||||
|
// brightness sensor uses prox
|
||||||
|
when(mDozeParameters.getSelectivelyRegisterSensorsUsingProx()).thenReturn(false);
|
||||||
|
when(mDozeParameters.brightnessUsesProx()).thenReturn(true);
|
||||||
|
|
||||||
|
// GIVEN the device is docked and the display state changes to ON
|
||||||
|
when(mDockManager.isDocked()).thenReturn(true);
|
||||||
|
mScreen.onScreenState(Display.STATE_ON);
|
||||||
|
waitForSensorManager();
|
||||||
|
|
||||||
|
// WHEN new sensor event sent
|
||||||
|
mSensor.sendSensorEvent(3);
|
||||||
|
|
||||||
|
// THEN brightness is updated
|
||||||
|
assertEquals(3, mServiceFake.screenBrightness);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAodDocked_brightnessDoesNotUseProx_usesLightSensor() {
|
||||||
|
// GIVEN the device doesn't need to selectively register for prox sensors but
|
||||||
|
// the brightness sensor doesn't use prox
|
||||||
|
when(mDozeParameters.getSelectivelyRegisterSensorsUsingProx()).thenReturn(true);
|
||||||
|
when(mDozeParameters.brightnessUsesProx()).thenReturn(false);
|
||||||
|
|
||||||
|
// GIVEN the device is docked and the display state changes to ON
|
||||||
|
when(mDockManager.isDocked()).thenReturn(true);
|
||||||
|
mScreen.onScreenState(Display.STATE_ON);
|
||||||
|
waitForSensorManager();
|
||||||
|
|
||||||
|
// WHEN new sensor event sent
|
||||||
|
mSensor.sendSensorEvent(3);
|
||||||
|
|
||||||
|
// THEN brightness is updated
|
||||||
|
assertEquals(3, mServiceFake.screenBrightness);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAodDocked_noProx_brightnessUsesProx_doNotUseLightSensor() {
|
||||||
|
final int startBrightness = mServiceFake.screenBrightness;
|
||||||
|
|
||||||
|
// GIVEN the device needs to selectively register for prox sensors and
|
||||||
|
// the brightness sensor uses prox
|
||||||
|
when(mDozeParameters.getSelectivelyRegisterSensorsUsingProx()).thenReturn(true);
|
||||||
|
when(mDozeParameters.brightnessUsesProx()).thenReturn(true);
|
||||||
|
|
||||||
|
// GIVEN the device is docked and the display state is on
|
||||||
|
when(mDockManager.isDocked()).thenReturn(true);
|
||||||
|
mScreen.onScreenState(Display.STATE_ON);
|
||||||
|
waitForSensorManager();
|
||||||
|
|
||||||
|
// WHEN new sensor event sent
|
||||||
|
mSensor.sendSensorEvent(3);
|
||||||
|
|
||||||
|
// THEN brightness is NOT changed
|
||||||
|
assertNotSame(3, mServiceFake.screenBrightness);
|
||||||
|
assertEquals(startBrightness, mServiceFake.screenBrightness);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPausingAod_doesNotResetBrightness() throws Exception {
|
public void testPausingAod_doesNotResetBrightness() throws Exception {
|
||||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||||
@@ -175,7 +240,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
|||||||
public void testPulsing_withoutLightSensor_setsAoDDimmingScrimTransparent() throws Exception {
|
public void testPulsing_withoutLightSensor_setsAoDDimmingScrimTransparent() throws Exception {
|
||||||
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
||||||
Optional.empty() /* sensor */, mDozeHost, null /* handler */,
|
Optional.empty() /* sensor */, mDozeHost, null /* handler */,
|
||||||
mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters);
|
mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager);
|
||||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||||
mScreen.transitionTo(INITIALIZED, DOZE);
|
mScreen.transitionTo(INITIALIZED, DOZE);
|
||||||
reset(mDozeHost);
|
reset(mDozeHost);
|
||||||
@@ -216,7 +281,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
|||||||
public void testNullSensor() throws Exception {
|
public void testNullSensor() throws Exception {
|
||||||
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
||||||
Optional.empty() /* sensor */, mDozeHost, null /* handler */,
|
Optional.empty() /* sensor */, mDozeHost, null /* handler */,
|
||||||
mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters);
|
mAlwaysOnDisplayPolicy, mWakefulnessLifecycle, mDozeParameters, mDockManager);
|
||||||
|
|
||||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
||||||
|
|||||||
Reference in New Issue
Block a user