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

Commit 56523df8 authored by Oleg Petšjonkin's avatar Oleg Petšjonkin Committed by Android (Google) Code Review
Browse files

Merge "Moving lightSensor subscritpion to bg thread" into main

parents 7aa54bb1 511110aa
Loading
Loading
Loading
Loading
+19 −7
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.view.Display;

import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.BackgroundThread;
import com.android.server.display.config.SensorData;
import com.android.server.display.utils.AmbientFilter;
import com.android.server.display.utils.AmbientFilterFactory;
@@ -51,7 +52,8 @@ public class LightSensorController {

    private final SensorManager mSensorManager;
    private final LightSensorListener mLightSensorListener;
    private final Handler mHandler;
    private final Handler mUpdateHandler;
    private final Handler mRegistrationHandler;
    private final Injector mInjector;
    private final AmbientFilter mAmbientFilter;

@@ -80,17 +82,20 @@ public class LightSensorController {

    LightSensorController(SensorManager sensorManager, Resources resources,
            LightSensorListener listener, Handler handler) {
        this(sensorManager, resources, listener, handler, new Injector());
        this(sensorManager, resources, listener, handler, BackgroundThread.getHandler(),
                new Injector());
    }

    @VisibleForTesting
    LightSensorController(SensorManager sensorManager, Resources resources,
            LightSensorListener listener, Handler handler, Injector injector) {
            LightSensorListener listener, Handler updateHandler, Handler registrationHandler,
            Injector injector) {
        mSensorManager = sensorManager;
        mLightSensorRate = injector.getLightSensorRate(resources);
        mAmbientFilter = injector.getAmbientFilter(resources);
        mLightSensorListener = listener;
        mHandler = handler;
        mUpdateHandler = updateHandler;
        mRegistrationHandler = registrationHandler;
        mInjector = injector;
    }

@@ -99,8 +104,12 @@ public class LightSensorController {
            return;
        }
        if (mLightSensor != null) {
            mSensorManager.registerListener(mLightSensorEventListener,
                    mLightSensor, mLightSensorRate * 1000, mHandler);
            // move light sensor registration to registration handler, to avoid blocking
            // updatePowerState
            Sensor sensorToRegister = mLightSensor;
            mRegistrationHandler.post(
                    () -> mSensorManager.registerListener(mLightSensorEventListener,
                            sensorToRegister, mLightSensorRate * 1000, mUpdateHandler));
        }
        if (mRegisteredLightSensor != null) {
            stop();
@@ -116,7 +125,10 @@ public class LightSensorController {
        if (mRegisteredLightSensor == null) {
            return;
        }
        mSensorManager.unregisterListener(mLightSensorEventListener, mRegisteredLightSensor);
        Sensor sensorToUnregister = mRegisteredLightSensor;
        mRegistrationHandler.post(() ->
                mSensorManager.unregisterListener(mLightSensorEventListener,
                        sensorToUnregister));
        mRegisteredLightSensor = null;
        mAmbientFilter.clear();
        mLightSensorListener.onAmbientLuxChange(INVALID_LUX);
+17 −4
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import com.android.server.display.brightness.clamper.LightSensorController.Light
import com.android.server.display.config.SensorData
import com.android.server.display.config.createSensorData
import com.android.server.display.utils.AmbientFilter
import com.android.server.testutils.TestHandler
import org.junit.Before
import org.junit.Test
import org.mockito.kotlin.any
@@ -52,6 +53,7 @@ class LightSensorControllerTest {
    private val mockHandler: Handler = mock()
    private val mockAmbientFilter: AmbientFilter = mock()

    private val testHandler = TestHandler(null)
    private val testInjector = TestInjector()
    private val dummySensorData = createSensorData()

@@ -60,12 +62,13 @@ class LightSensorControllerTest {
    @Before
    fun setUp() {
        controller = LightSensorController(mockSensorManager, mockResources,
            mockLightSensorListener, mockHandler, testInjector)
            mockLightSensorListener, mockHandler, testHandler, testInjector)
    }

    @Test
    fun doesNotRegisterLightSensorIfNotConfigured() {
        controller.restart()
        testHandler.flush()

        verifyNoMoreInteractions(mockSensorManager, mockAmbientFilter, mockLightSensorListener)
    }
@@ -74,6 +77,7 @@ class LightSensorControllerTest {
    fun doesNotRegisterLightSensorIfMissing() {
        controller.configure(dummySensorData, DISPLAY_ID)
        controller.restart()
        testHandler.flush()

        verifyNoMoreInteractions(mockSensorManager, mockAmbientFilter, mockLightSensorListener)
    }
@@ -84,6 +88,7 @@ class LightSensorControllerTest {
                .createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT)
        controller.configure(dummySensorData, DISPLAY_ID)
        controller.restart()
        testHandler.flush()

        verify(mockSensorManager).registerListener(any(),
            eq(testInjector.lightSensor), eq(LIGHT_SENSOR_RATE * 1000), eq(mockHandler))
@@ -97,7 +102,9 @@ class LightSensorControllerTest {
        controller.configure(dummySensorData, DISPLAY_ID)

        controller.restart()
        testHandler.flush()
        controller.restart()
        testHandler.flush()

        verify(mockSensorManager).registerListener(any(),
            eq(testInjector.lightSensor), eq(LIGHT_SENSOR_RATE * 1000), eq(mockHandler))
@@ -111,22 +118,27 @@ class LightSensorControllerTest {
        testInjector.lightSensor = lightSensor1
        controller.configure(dummySensorData, DISPLAY_ID)
        controller.restart()
        testHandler.flush()

        val lightSensor2 = TestUtils
                .createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT)
        testInjector.lightSensor = lightSensor2
        controller.configure(dummySensorData, DISPLAY_ID)
        controller.restart()
        testHandler.flush()

        inOrder(mockSensorManager, mockAmbientFilter, mockLightSensorListener) {
            // first restart
            verify(mockSensorManager).registerListener(any(),
                eq(lightSensor1), eq(LIGHT_SENSOR_RATE * 1000), eq(mockHandler))
            // second restart
            verify(mockAmbientFilter).clear()
            verify(mockLightSensorListener).onAmbientLuxChange(LightSensorController.INVALID_LUX)
            // delayed resubscribe
            verify(mockSensorManager).registerListener(any(),
                eq(lightSensor2), eq(LIGHT_SENSOR_RATE * 1000), eq(mockHandler))
            verify(mockSensorManager).unregisterListener(any<SensorEventListener>(),
                eq(lightSensor1))
            verify(mockAmbientFilter).clear()
            verify(mockLightSensorListener).onAmbientLuxChange(LightSensorController.INVALID_LUX)
            }
        verifyNoMoreInteractions(mockSensorManager, mockAmbientFilter, mockLightSensorListener)
    }
@@ -142,6 +154,7 @@ class LightSensorControllerTest {
                .createSensor(Sensor.TYPE_LIGHT, Sensor.STRING_TYPE_LIGHT)
        controller.configure(dummySensorData, DISPLAY_ID)
        controller.restart()
        testHandler.flush()
        verify(mockSensorManager).registerListener(listenerCaptor.capture(),
            eq(testInjector.lightSensor), eq(LIGHT_SENSOR_RATE * 1000), eq(mockHandler))