From 815c5f215204ec062b7b9f86b5c49c13c17a8103 Mon Sep 17 00:00:00 2001 From: Bart Sears Date: Sat, 17 Jun 2023 01:37:48 +0000 Subject: [PATCH] Revert "No sensors support in DDC rework" This reverts commit 7f6c32e58dccc6e7db5ab84f04d93daf6aeb424a. Reason for revert: b/287573309 | Google Assistant Crash and rebooting the device with "G" Logo [UQ1A] [VIC] Change-Id: I1a2f708ef8a03223fc88470b70f0b20897c26582 --- .../server/display/DisplayDeviceConfig.java | 44 +++--- .../display/DisplayPowerController.java | 16 +- .../display/DisplayPowerController2.java | 10 +- .../DisplayPowerProximityStateController.java | 6 +- .../server/display/utils/SensorUtils.java | 24 +-- ...playPowerProximityStateControllerTest.java | 63 +------- .../display/DisplayDeviceConfigTest.java | 2 +- .../server/display/utils/SensorUtilsTest.java | 140 ------------------ 8 files changed, 53 insertions(+), 252 deletions(-) delete mode 100644 services/tests/servicestests/src/com/android/server/display/utils/SensorUtilsTest.java diff --git a/services/core/java/com/android/server/display/DisplayDeviceConfig.java b/services/core/java/com/android/server/display/DisplayDeviceConfig.java index bfb77b2e9c252..7ccfb448cf613 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 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)) { - // 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 1576a0b0810f5..80114ccd6568b 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 a20cd4cd82bb3..c8b0a724ffedc 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 882c02faedf99..c0747867b6203 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 56321cd01e201..48bc46c88df16 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; /** @@ -31,27 +28,18 @@ import java.util.List; 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 534a708af3c7b..5b0b989d478ab 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() { { @@ -178,44 +178,6 @@ public final class DisplayPowerProximityStateControllerTest { name = null; } }); - 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, @@ -223,19 +185,6 @@ public final class DisplayPowerProximityStateControllerTest { 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); @@ -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 8b04eca69132a..708421d2a431b 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 4494b0c412dce..0000000000000 --- 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 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)); - } -}