summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/display/DisplayDeviceConfig.java44
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java16
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController2.java10
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerProximityStateController.java6
-rw-r--r--services/core/java/com/android/server/display/utils/SensorUtils.java24
-rw-r--r--services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java63
-rw-r--r--services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java2
-rw-r--r--services/tests/servicestests/src/com/android/server/display/utils/SensorUtilsTest.java140
8 files changed, 53 insertions, 252 deletions
diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
index bfb77b2e9c25..7ccfb448cf61 100644
--- a/services/core/java/com/android/server/display/DisplayDeviceConfig.java
+++ b/services/core/java/com/android/server/display/DisplayDeviceConfig.java
@@ -515,9 +515,7 @@ public class DisplayDeviceConfig {
private final SensorData mScreenOffBrightnessSensor = new SensorData();
// The details of the proximity sensor associated with this display.
- // Is null when no sensor should be used for that display
- @Nullable
- private SensorData mProximitySensor = new SensorData();
+ private final SensorData mProximitySensor = new SensorData();
private final List<RefreshRateLimitation> mRefreshRateLimitations =
new ArrayList<>(2 /*initialCapacity*/);
@@ -1339,7 +1337,6 @@ public class DisplayDeviceConfig {
return mScreenOffBrightnessSensor;
}
- @Nullable
SensorData getProximitySensor() {
return mProximitySensor;
}
@@ -2566,51 +2563,46 @@ public class DisplayDeviceConfig {
private void loadAmbientLightSensorFromDdc(DisplayConfiguration config) {
final SensorDetails sensorDetails = config.getLightSensor();
if (sensorDetails != null) {
- loadSensorData(sensorDetails, mAmbientLightSensor);
+ mAmbientLightSensor.type = sensorDetails.getType();
+ mAmbientLightSensor.name = sensorDetails.getName();
+ final RefreshRateRange rr = sensorDetails.getRefreshRate();
+ if (rr != null) {
+ mAmbientLightSensor.minRefreshRate = rr.getMinimum().floatValue();
+ mAmbientLightSensor.maxRefreshRate = rr.getMaximum().floatValue();
+ }
} else {
loadAmbientLightSensorFromConfigXml();
}
}
private void setProxSensorUnspecified() {
- mProximitySensor = new SensorData();
+ mProximitySensor.name = null;
+ mProximitySensor.type = null;
}
private void loadScreenOffBrightnessSensorFromDdc(DisplayConfiguration config) {
final SensorDetails sensorDetails = config.getScreenOffBrightnessSensor();
if (sensorDetails != null) {
- loadSensorData(sensorDetails, mScreenOffBrightnessSensor);
+ mScreenOffBrightnessSensor.type = sensorDetails.getType();
+ mScreenOffBrightnessSensor.name = sensorDetails.getName();
}
}
private void loadProxSensorFromDdc(DisplayConfiguration config) {
SensorDetails sensorDetails = config.getProxSensor();
if (sensorDetails != null) {
- String name = sensorDetails.getName();
- String type = sensorDetails.getType();
- if ("".equals(name) && "".equals(type)) {
- // <proxSensor> with empty values to the config means no sensor should be used
- mProximitySensor = null;
- } else {
- mProximitySensor = new SensorData();
- loadSensorData(sensorDetails, mProximitySensor);
+ mProximitySensor.name = sensorDetails.getName();
+ mProximitySensor.type = sensorDetails.getType();
+ final RefreshRateRange rr = sensorDetails.getRefreshRate();
+ if (rr != null) {
+ mProximitySensor.minRefreshRate = rr.getMinimum().floatValue();
+ mProximitySensor.maxRefreshRate = rr.getMaximum().floatValue();
}
} else {
setProxSensorUnspecified();
}
}
- private void loadSensorData(@NonNull SensorDetails sensorDetails,
- @NonNull SensorData sensorData) {
- sensorData.name = sensorDetails.getName();
- sensorData.type = sensorDetails.getType();
- final RefreshRateRange rr = sensorDetails.getRefreshRate();
- if (rr != null) {
- sensorData.minRefreshRate = rr.getMinimum().floatValue();
- sensorData.maxRefreshRate = rr.getMaximum().floatValue();
- }
- }
-
private void loadBrightnessChangeThresholdsFromXml() {
loadBrightnessChangeThresholds(/* config= */ null);
}
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 1576a0b0810f..80114ccd6568 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -2294,23 +2294,29 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
}
private void loadAmbientLightSensor() {
+ DisplayDeviceConfig.SensorData lightSensor = mDisplayDeviceConfig.getAmbientLightSensor();
final int fallbackType = mDisplayId == Display.DEFAULT_DISPLAY
? Sensor.TYPE_LIGHT : SensorUtils.NO_FALLBACK;
- mLightSensor = SensorUtils.findSensor(mSensorManager,
- mDisplayDeviceConfig.getAmbientLightSensor(), fallbackType);
+ mLightSensor = SensorUtils.findSensor(mSensorManager, lightSensor.type, lightSensor.name,
+ fallbackType);
}
private void loadScreenOffBrightnessSensor() {
+ DisplayDeviceConfig.SensorData screenOffBrightnessSensor =
+ mDisplayDeviceConfig.getScreenOffBrightnessSensor();
mScreenOffBrightnessSensor = SensorUtils.findSensor(mSensorManager,
- mDisplayDeviceConfig.getScreenOffBrightnessSensor(), SensorUtils.NO_FALLBACK);
+ screenOffBrightnessSensor.type, screenOffBrightnessSensor.name,
+ SensorUtils.NO_FALLBACK);
}
private void loadProximitySensor() {
if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT || mDisplayId != Display.DEFAULT_DISPLAY) {
return;
}
- mProximitySensor = SensorUtils.findSensor(mSensorManager,
- mDisplayDeviceConfig.getProximitySensor(), Sensor.TYPE_PROXIMITY);
+ final DisplayDeviceConfig.SensorData proxSensor =
+ mDisplayDeviceConfig.getProximitySensor();
+ mProximitySensor = SensorUtils.findSensor(mSensorManager, proxSensor.type, proxSensor.name,
+ Sensor.TYPE_PROXIMITY);
if (mProximitySensor != null) {
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
TYPICAL_PROXIMITY_THRESHOLD);
diff --git a/services/core/java/com/android/server/display/DisplayPowerController2.java b/services/core/java/com/android/server/display/DisplayPowerController2.java
index a20cd4cd82bb..c8b0a724ffed 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController2.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController2.java
@@ -1936,15 +1936,19 @@ final class DisplayPowerController2 implements AutomaticBrightnessController.Cal
}
private void loadAmbientLightSensor() {
+ DisplayDeviceConfig.SensorData lightSensor = mDisplayDeviceConfig.getAmbientLightSensor();
final int fallbackType = mDisplayId == Display.DEFAULT_DISPLAY
? Sensor.TYPE_LIGHT : SensorUtils.NO_FALLBACK;
- mLightSensor = SensorUtils.findSensor(mSensorManager,
- mDisplayDeviceConfig.getAmbientLightSensor(), fallbackType);
+ mLightSensor = SensorUtils.findSensor(mSensorManager, lightSensor.type, lightSensor.name,
+ fallbackType);
}
private void loadScreenOffBrightnessSensor() {
+ DisplayDeviceConfig.SensorData screenOffBrightnessSensor =
+ mDisplayDeviceConfig.getScreenOffBrightnessSensor();
mScreenOffBrightnessSensor = SensorUtils.findSensor(mSensorManager,
- mDisplayDeviceConfig.getScreenOffBrightnessSensor(), SensorUtils.NO_FALLBACK);
+ screenOffBrightnessSensor.type, screenOffBrightnessSensor.name,
+ SensorUtils.NO_FALLBACK);
}
private float clampScreenBrightness(float value) {
diff --git a/services/core/java/com/android/server/display/DisplayPowerProximityStateController.java b/services/core/java/com/android/server/display/DisplayPowerProximityStateController.java
index 882c02faedf9..c0747867b620 100644
--- a/services/core/java/com/android/server/display/DisplayPowerProximityStateController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerProximityStateController.java
@@ -358,8 +358,10 @@ public final class DisplayPowerProximityStateController {
if (DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT || mDisplayId != Display.DEFAULT_DISPLAY) {
return;
}
- mProximitySensor = SensorUtils.findSensor(mSensorManager,
- mDisplayDeviceConfig.getProximitySensor(), Sensor.TYPE_PROXIMITY);
+ final DisplayDeviceConfig.SensorData proxSensor =
+ mDisplayDeviceConfig.getProximitySensor();
+ mProximitySensor = SensorUtils.findSensor(mSensorManager, proxSensor.type, proxSensor.name,
+ Sensor.TYPE_PROXIMITY);
if (mProximitySensor != null) {
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
TYPICAL_PROXIMITY_THRESHOLD);
diff --git a/services/core/java/com/android/server/display/utils/SensorUtils.java b/services/core/java/com/android/server/display/utils/SensorUtils.java
index 56321cd01e20..48bc46c88df1 100644
--- a/services/core/java/com/android/server/display/utils/SensorUtils.java
+++ b/services/core/java/com/android/server/display/utils/SensorUtils.java
@@ -16,13 +16,10 @@
package com.android.server.display.utils;
-import android.annotation.Nullable;
import android.hardware.Sensor;
import android.hardware.SensorManager;
import android.text.TextUtils;
-import com.android.server.display.DisplayDeviceConfig;
-
import java.util.List;
/**
@@ -32,26 +29,17 @@ public class SensorUtils {
public static final int NO_FALLBACK = 0;
/**
- * Finds the specified sensor for SensorData from DisplayDeviceConfig.
- */
- @Nullable
- public static Sensor findSensor(@Nullable SensorManager sensorManager,
- @Nullable DisplayDeviceConfig.SensorData sensorData, int fallbackType) {
- if (sensorData == null) {
- return null;
- } else {
- return findSensor(sensorManager, sensorData.type, sensorData.name, fallbackType);
- }
- }
- /**
* Finds the specified sensor by type and name using SensorManager.
*/
- @Nullable
- public static Sensor findSensor(@Nullable SensorManager sensorManager,
- @Nullable String sensorType, @Nullable String sensorName, int fallbackType) {
+ public static Sensor findSensor(SensorManager sensorManager, String sensorType,
+ String sensorName, int fallbackType) {
if (sensorManager == null) {
return null;
}
+
+ if ("".equals(sensorName) && "".equals(sensorType)) {
+ return null;
+ }
final boolean isNameSpecified = !TextUtils.isEmpty(sensorName);
final boolean isTypeSpecified = !TextUtils.isEmpty(sensorType);
if (isNameSpecified || isTypeSpecified) {
diff --git a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java
index 534a708af3c7..5b0b989d478a 100644
--- a/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java
+++ b/services/tests/mockingservicestests/src/com/android/server/display/DisplayPowerProximityStateControllerTest.java
@@ -34,8 +34,8 @@ import android.hardware.display.DisplayManagerInternal;
import android.os.test.TestLooper;
import android.view.Display;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.server.testutils.OffsettableClock;
@@ -92,7 +92,7 @@ public final class DisplayPowerProximityStateControllerTest {
};
mDisplayPowerProximityStateController = new DisplayPowerProximityStateController(
mWakelockController, mDisplayDeviceConfig, mTestLooper.getLooper(),
- mNudgeUpdatePowerState, Display.DEFAULT_DISPLAY,
+ mNudgeUpdatePowerState, 0,
mSensorManager, injector);
mSensorEventListener = mDisplayPowerProximityStateController.getProximitySensorListener();
}
@@ -128,7 +128,7 @@ public final class DisplayPowerProximityStateControllerTest {
enableProximitySensor();
emitAndValidatePositiveProximityEvent();
mDisplayPowerProximityStateController.ignoreProximitySensorUntilChangedInternal();
- advanceTime();
+ advanceTime(1);
assertTrue(mDisplayPowerProximityStateController.shouldIgnoreProximityUntilChanged());
verify(mNudgeUpdatePowerState, times(2)).run();
@@ -170,7 +170,7 @@ public final class DisplayPowerProximityStateControllerTest {
}
@Test
- public void isProximitySensorAvailableReturnsFalseWhenNotAvailableAndNoDefault() {
+ public void isProximitySensorAvailableReturnsFalseWhenNotAvailable() {
when(mDisplayDeviceConfig.getProximitySensor()).thenReturn(
new DisplayDeviceConfig.SensorData() {
{
@@ -180,63 +180,12 @@ public final class DisplayPowerProximityStateControllerTest {
});
mDisplayPowerProximityStateController = new DisplayPowerProximityStateController(
mWakelockController, mDisplayDeviceConfig, mTestLooper.getLooper(),
- mNudgeUpdatePowerState, Display.DEFAULT_DISPLAY,
- mSensorManager, null);
- assertFalse(mDisplayPowerProximityStateController.isProximitySensorAvailable());
- }
-
- @Test
- public void isProximitySensorAvailableReturnsTrueWhenNotAvailableAndHasDefault()
- throws Exception {
- when(mDisplayDeviceConfig.getProximitySensor()).thenReturn(
- new DisplayDeviceConfig.SensorData() {
- {
- type = null;
- name = null;
- }
- });
- when(mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)).thenReturn(
- TestUtils.createSensor(Sensor.TYPE_PROXIMITY, "proximity"));
- mDisplayPowerProximityStateController = new DisplayPowerProximityStateController(
- mWakelockController, mDisplayDeviceConfig, mTestLooper.getLooper(),
- mNudgeUpdatePowerState, Display.DEFAULT_DISPLAY,
- mSensorManager, null);
- assertTrue(mDisplayPowerProximityStateController.isProximitySensorAvailable());
- }
-
- @Test
- public void isProximitySensorAvailableReturnsFalseWhenNotAvailableHasDefaultNonDefaultDisplay()
- throws Exception {
- when(mDisplayDeviceConfig.getProximitySensor()).thenReturn(
- new DisplayDeviceConfig.SensorData() {
- {
- type = null;
- name = null;
- }
- });
- when(mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)).thenReturn(
- TestUtils.createSensor(Sensor.TYPE_PROXIMITY, "proximity"));
- mDisplayPowerProximityStateController = new DisplayPowerProximityStateController(
- mWakelockController, mDisplayDeviceConfig, mTestLooper.getLooper(),
mNudgeUpdatePowerState, 1,
mSensorManager, null);
assertFalse(mDisplayPowerProximityStateController.isProximitySensorAvailable());
}
@Test
- public void isProximitySensorAvailableReturnsTrueWhenNoSensorConfigured() throws Exception {
- when(mDisplayDeviceConfig.getProximitySensor()).thenReturn(null);
- when(mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)).thenReturn(
- TestUtils.createSensor(Sensor.TYPE_PROXIMITY, Sensor.STRING_TYPE_PROXIMITY));
-
- mDisplayPowerProximityStateController = new DisplayPowerProximityStateController(
- mWakelockController, mDisplayDeviceConfig, mTestLooper.getLooper(),
- mNudgeUpdatePowerState, Display.DEFAULT_DISPLAY,
- mSensorManager, null);
- assertFalse(mDisplayPowerProximityStateController.isProximitySensorAvailable());
- }
-
- @Test
public void notifyDisplayDeviceChangedReloadsTheProximitySensor() throws Exception {
DisplayDeviceConfig updatedDisplayDeviceConfig = mock(DisplayDeviceConfig.class);
when(updatedDisplayDeviceConfig.getProximitySensor()).thenReturn(
@@ -377,8 +326,8 @@ public final class DisplayPowerProximityStateControllerTest {
assertEquals(mDisplayPowerProximityStateController.getPendingProximityDebounceTime(), -1);
}
- private void advanceTime() {
- mClock.fastForward(1);
+ private void advanceTime(long timeMs) {
+ mClock.fastForward(timeMs);
mTestLooper.dispatchAll();
}
diff --git a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java
index 8b04eca69132..708421d2a431 100644
--- a/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java
+++ b/services/tests/servicestests/src/com/android/server/display/DisplayDeviceConfigTest.java
@@ -33,8 +33,8 @@ import android.os.Temperature;
import android.util.SparseArray;
import android.view.SurfaceControl;
-import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
+import androidx.test.runner.AndroidJUnit4;
import com.android.internal.R;
import com.android.server.display.config.ThermalStatus;
diff --git a/services/tests/servicestests/src/com/android/server/display/utils/SensorUtilsTest.java b/services/tests/servicestests/src/com/android/server/display/utils/SensorUtilsTest.java
deleted file mode 100644
index 4494b0c412dc..000000000000
--- a/services/tests/servicestests/src/com/android/server/display/utils/SensorUtilsTest.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright (C) 2023 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.server.display.utils;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
-import static org.mockito.Mockito.when;
-
-import android.annotation.Nullable;
-import android.hardware.Sensor;
-import android.hardware.SensorManager;
-import android.hardware.input.InputSensorInfo;
-
-import androidx.test.filters.SmallTest;
-
-import com.android.internal.annotations.Keep;
-import com.android.server.display.DisplayDeviceConfig.SensorData;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-
-import java.util.Collections;
-import java.util.List;
-
-import junitparams.JUnitParamsRunner;
-import junitparams.Parameters;
-
-@SmallTest
-@RunWith(JUnitParamsRunner.class)
-public class SensorUtilsTest {
-
- private static final String TEST_SENSOR_NAME = "test_sensor_name";
- private static final String TEST_SENSOR_TYPE = "test_sensor_type";
- private static final Sensor TEST_SENSOR = createSensor();
- @Mock
- private SensorManager mSensorManager;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- }
-
- @Test
- public void testNoSensorData() {
- Sensor result = SensorUtils.findSensor(mSensorManager, null, Sensor.TYPE_LIGHT);
- assertNull(result);
- }
-
- @Test
- public void testNoSensorManager() {
- Sensor result = SensorUtils.findSensor(null, new SensorData(), Sensor.TYPE_LIGHT);
- assertNull(result);
- }
-
- @Keep
- private static Object[][] findSensorData() {
- // sensorName, sensorType, fallbackType, allSensors, defaultSensor, expectedResult
- return new Object[][]{
- // no data, no default
- {null, null, Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, null},
- // matching name, matching type, no default
- {TEST_SENSOR_NAME, TEST_SENSOR_TYPE, Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, TEST_SENSOR},
- // matching name, no default
- {TEST_SENSOR_NAME, null, Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, TEST_SENSOR},
- // not matching name, no default
- {"not_matching_name", null, Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, null},
- // matching type, no default
- {null, TEST_SENSOR_TYPE, Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, TEST_SENSOR},
- // not matching type, no default
- {null, "not_matching_type", Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, null},
- // not matching type, matching name, no default
- {TEST_SENSOR_NAME, "not_matching_type", Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, null},
- // not matching name, matching type, no default
- {"not_matching_name", TEST_SENSOR_TYPE, Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, null},
- // not matching type, not matching name, no default
- {"not_matching_name", "not_matching_type", Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), null, null},
- // not matching type, not matching name, with default
- {"not_matching_name", "not_matching_type", Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), TEST_SENSOR, TEST_SENSOR},
- // no data, with default
- {null, null, Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), TEST_SENSOR, TEST_SENSOR},
- // empty data, with default
- {"", "", Sensor.TYPE_LIGHT,
- Collections.singletonList(TEST_SENSOR), TEST_SENSOR, TEST_SENSOR},
- // empty data, with default, no fallback
- {"", "", SensorUtils.NO_FALLBACK,
- Collections.singletonList(TEST_SENSOR), TEST_SENSOR, null},
- };
- }
-
- @Test
- @Parameters(method = "findSensorData")
- public void testFindSensor(@Nullable String sensorName, @Nullable String sensorType,
- int fallbackType, List<Sensor> allSensors, @Nullable Sensor defaultSensor,
- @Nullable Sensor expectedResult) {
- when(mSensorManager.getSensorList(Sensor.TYPE_ALL)).thenReturn(allSensors);
- when(mSensorManager.getDefaultSensor(fallbackType)).thenReturn(defaultSensor);
-
- SensorData sensorData = new SensorData();
- sensorData.name = sensorName;
- sensorData.type = sensorType;
-
- Sensor result = SensorUtils.findSensor(mSensorManager, sensorData, fallbackType);
-
- assertEquals(expectedResult, result);
- }
-
- private static Sensor createSensor() {
- return new Sensor(new InputSensorInfo(
- TEST_SENSOR_NAME, "vendor", 0, 0, 0, 1f, 1f, 1, 1, 1, 1,
- TEST_SENSOR_TYPE, "", 0, 0, 0));
- }
-}