Only load the prox sensor for the default display
Bug: b/241308597 Test: adb shell dumpsys display | grep mProximitySensor Test: atest DisplayPowerProximityStateControllerTest Test: atest DisplayPowerControllerTest Test: atest DisplayPowerController2Test Change-Id: I04fa643d38784976ff86602c5e50f375567ddd6b
This commit is contained in:
@@ -2192,15 +2192,13 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
|
||||
}
|
||||
|
||||
private void loadProximitySensor() {
|
||||
if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
|
||||
if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT || mDisplayId != Display.DEFAULT_DISPLAY) {
|
||||
return;
|
||||
}
|
||||
final DisplayDeviceConfig.SensorData proxSensor =
|
||||
mDisplayDeviceConfig.getProximitySensor();
|
||||
final int fallbackType = mDisplayId == Display.DEFAULT_DISPLAY
|
||||
? Sensor.TYPE_PROXIMITY : SensorUtils.NO_FALLBACK;
|
||||
mProximitySensor = SensorUtils.findSensor(mSensorManager, proxSensor.type, proxSensor.name,
|
||||
fallbackType);
|
||||
Sensor.TYPE_PROXIMITY);
|
||||
if (mProximitySensor != null) {
|
||||
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
|
||||
TYPICAL_PROXIMITY_THRESHOLD);
|
||||
|
||||
@@ -346,15 +346,13 @@ public final class DisplayPowerProximityStateController {
|
||||
}
|
||||
|
||||
private void loadProximitySensor() {
|
||||
if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
|
||||
if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT || mDisplayId != Display.DEFAULT_DISPLAY) {
|
||||
return;
|
||||
}
|
||||
final DisplayDeviceConfig.SensorData proxSensor =
|
||||
mDisplayDeviceConfig.getProximitySensor();
|
||||
final int fallbackType = mDisplayId == Display.DEFAULT_DISPLAY
|
||||
? Sensor.TYPE_PROXIMITY : SensorUtils.NO_FALLBACK;
|
||||
mProximitySensor = SensorUtils.findSensor(mSensorManager, proxSensor.type, proxSensor.name,
|
||||
fallbackType);
|
||||
Sensor.TYPE_PROXIMITY);
|
||||
if (mProximitySensor != null) {
|
||||
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
|
||||
TYPICAL_PROXIMITY_THRESHOLD);
|
||||
|
||||
@@ -16,13 +16,17 @@
|
||||
|
||||
package com.android.server.display;
|
||||
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.isA;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@@ -46,8 +50,11 @@ import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.dx.mockito.inline.extended.ExtendedMockito;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.am.BatteryStatsService;
|
||||
import com.android.server.display.RampAnimator.DualRampAnimator;
|
||||
import com.android.server.display.color.ColorDisplayService;
|
||||
import com.android.server.policy.WindowManagerPolicy;
|
||||
import com.android.server.testutils.OffsettableClock;
|
||||
|
||||
@@ -58,7 +65,9 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Captor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.MockitoSession;
|
||||
import org.mockito.quality.Strictness;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -67,8 +76,9 @@ import java.util.List;
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public final class DisplayPowerController2Test {
|
||||
private static final String UNIQUE_DISPLAY_ID = "unique_id_test123";
|
||||
private static final int DISPLAY_ID = 42;
|
||||
private static final int DISPLAY_ID = Display.DEFAULT_DISPLAY;
|
||||
|
||||
private MockitoSession mSession;
|
||||
private OffsettableClock mClock;
|
||||
private TestLooper mTestLooper;
|
||||
private Handler mHandler;
|
||||
@@ -105,13 +115,20 @@ public final class DisplayPowerController2Test {
|
||||
private DualRampAnimator<DisplayPowerState> mDualRampAnimatorMock;
|
||||
@Mock
|
||||
private WakelockController mWakelockController;
|
||||
@Mock
|
||||
private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock;
|
||||
|
||||
@Captor
|
||||
private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mSession = ExtendedMockito.mockitoSession()
|
||||
.initMocks(this)
|
||||
.strictness(Strictness.LENIENT)
|
||||
.spyStatic(LocalServices.class)
|
||||
.spyStatic(BatteryStatsService.class)
|
||||
.startMocking();
|
||||
mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
|
||||
mClock = new OffsettableClock.Stopped();
|
||||
mTestLooper = new TestLooper(mClock::now);
|
||||
@@ -156,10 +173,17 @@ public final class DisplayPowerController2Test {
|
||||
|
||||
when(mContextSpy.getSystemService(eq(PowerManager.class))).thenReturn(mPowerManagerMock);
|
||||
when(mContextSpy.getResources()).thenReturn(mResourcesMock);
|
||||
|
||||
doAnswer((Answer<ColorDisplayService.ColorDisplayServiceInternal>) invocationOnMock ->
|
||||
mCdsiMock).when(() -> LocalServices.getService(
|
||||
ColorDisplayService.ColorDisplayServiceInternal.class));
|
||||
doAnswer((Answer<Void>) invocationOnMock -> null).when(() ->
|
||||
BatteryStatsService.getService());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
mSession.finishMocking();
|
||||
LocalServices.removeServiceForTest(WindowManagerPolicy.class);
|
||||
}
|
||||
|
||||
@@ -207,6 +231,32 @@ public final class DisplayPowerController2Test {
|
||||
WakelockController.WAKE_LOCK_PROXIMITY_DEBOUNCE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProximitySensorListenerNotRegisteredForNonDefaultDisplay() throws Exception {
|
||||
setUpDisplay(1, UNIQUE_DISPLAY_ID);
|
||||
|
||||
Sensor proxSensor = setUpProxSensor();
|
||||
|
||||
DisplayPowerController2 dpc = new DisplayPowerController2(
|
||||
mContextSpy, mInjector, mDisplayPowerCallbacksMock, mHandler,
|
||||
mSensorManagerMock, mDisplayBlankerMock, mLogicalDisplayMock,
|
||||
mBrightnessTrackerMock, mBrightnessSettingMock, () -> {
|
||||
}, mHighBrightnessModeMetadataMock);
|
||||
|
||||
when(mDisplayPowerStateMock.getScreenState()).thenReturn(Display.STATE_ON);
|
||||
// send a display power request
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
|
||||
dpr.useProximitySensor = true;
|
||||
dpc.requestPowerState(dpr, false /* waitForNegativeProximity */);
|
||||
|
||||
// Run updatePowerState
|
||||
advanceTime(1);
|
||||
|
||||
verify(mSensorManagerMock, never()).registerListener(any(SensorEventListener.class),
|
||||
eq(proxSensor), anyInt(), any(Handler.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a mock and registers it to {@link LocalServices}.
|
||||
*/
|
||||
|
||||
@@ -16,14 +16,18 @@
|
||||
|
||||
package com.android.server.display;
|
||||
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
|
||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
|
||||
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.ArgumentMatchers.isA;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@@ -46,8 +50,11 @@ import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
|
||||
import com.android.dx.mockito.inline.extended.ExtendedMockito;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.am.BatteryStatsService;
|
||||
import com.android.server.display.RampAnimator.DualRampAnimator;
|
||||
import com.android.server.display.color.ColorDisplayService;
|
||||
import com.android.server.policy.WindowManagerPolicy;
|
||||
import com.android.server.testutils.OffsettableClock;
|
||||
|
||||
@@ -58,7 +65,9 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Captor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.MockitoSession;
|
||||
import org.mockito.quality.Strictness;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -67,8 +76,9 @@ import java.util.List;
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public final class DisplayPowerControllerTest {
|
||||
private static final String UNIQUE_DISPLAY_ID = "unique_id_test123";
|
||||
private static final int DISPLAY_ID = 42;
|
||||
private static final int DISPLAY_ID = Display.DEFAULT_DISPLAY;
|
||||
|
||||
private MockitoSession mSession;
|
||||
private OffsettableClock mClock;
|
||||
private TestLooper mTestLooper;
|
||||
private Handler mHandler;
|
||||
@@ -103,13 +113,20 @@ public final class DisplayPowerControllerTest {
|
||||
private DisplayPowerState mDisplayPowerStateMock;
|
||||
@Mock
|
||||
private DualRampAnimator<DisplayPowerState> mDualRampAnimatorMock;
|
||||
@Mock
|
||||
private ColorDisplayService.ColorDisplayServiceInternal mCdsiMock;
|
||||
|
||||
@Captor
|
||||
private ArgumentCaptor<SensorEventListener> mSensorEventListenerCaptor;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mSession = ExtendedMockito.mockitoSession()
|
||||
.initMocks(this)
|
||||
.strictness(Strictness.LENIENT)
|
||||
.spyStatic(LocalServices.class)
|
||||
.spyStatic(BatteryStatsService.class)
|
||||
.startMocking();
|
||||
mContextSpy = spy(new ContextWrapper(ApplicationProvider.getApplicationContext()));
|
||||
mClock = new OffsettableClock.Stopped();
|
||||
mTestLooper = new TestLooper(mClock::now);
|
||||
@@ -138,10 +155,17 @@ public final class DisplayPowerControllerTest {
|
||||
|
||||
when(mContextSpy.getSystemService(eq(PowerManager.class))).thenReturn(mPowerManagerMock);
|
||||
when(mContextSpy.getResources()).thenReturn(mResourcesMock);
|
||||
|
||||
doAnswer((Answer<ColorDisplayService.ColorDisplayServiceInternal>) invocationOnMock ->
|
||||
mCdsiMock).when(() -> LocalServices.getService(
|
||||
ColorDisplayService.ColorDisplayServiceInternal.class));
|
||||
doAnswer((Answer<Void>) invocationOnMock -> null).when(() ->
|
||||
BatteryStatsService.getService());
|
||||
}
|
||||
|
||||
@After
|
||||
public void tearDown() {
|
||||
mSession.finishMocking();
|
||||
LocalServices.removeServiceForTest(WindowManagerPolicy.class);
|
||||
}
|
||||
|
||||
@@ -189,6 +213,32 @@ public final class DisplayPowerControllerTest {
|
||||
dpc.getSuspendBlockerProxDebounceId(DISPLAY_ID));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testProximitySensorListenerNotRegisteredForNonDefaultDisplay() throws Exception {
|
||||
setUpDisplay(1, UNIQUE_DISPLAY_ID);
|
||||
|
||||
Sensor proxSensor = setUpProxSensor();
|
||||
|
||||
DisplayPowerController dpc = new DisplayPowerController(
|
||||
mContextSpy, mInjector, mDisplayPowerCallbacksMock, mHandler,
|
||||
mSensorManagerMock, mDisplayBlankerMock, mLogicalDisplayMock,
|
||||
mBrightnessTrackerMock, mBrightnessSettingMock, () -> {
|
||||
}, mHighBrightnessModeMetadataMock);
|
||||
|
||||
when(mDisplayPowerStateMock.getScreenState()).thenReturn(Display.STATE_ON);
|
||||
// send a display power request
|
||||
DisplayPowerRequest dpr = new DisplayPowerRequest();
|
||||
dpr.policy = DisplayPowerRequest.POLICY_BRIGHT;
|
||||
dpr.useProximitySensor = true;
|
||||
dpc.requestPowerState(dpr, false /* waitForNegativeProximity */);
|
||||
|
||||
// Run updatePowerState
|
||||
advanceTime(1);
|
||||
|
||||
verify(mSensorManagerMock, never()).registerListener(any(SensorEventListener.class),
|
||||
eq(proxSensor), anyInt(), any(Handler.class));
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a mock and registers it to {@link LocalServices}.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user