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

Commit 689ab8fa authored by Kenny Guy's avatar Kenny Guy
Browse files

Don't keep sensor listener while screen is off.

Register / unregister on screen off / on intents.

Bug: 69564178
Test: runtest -c com.android.server.display.BrightnessTrackerTest frameworks-service
Test: manual, turn on/off screen and check adb shell dumpsys sensorservice
Change-Id: I7bfb6b35108887baf40d9134d16d13a9f5aa839f
parent c20270b5
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.net.Uri;
import android.os.BatteryManager;
import android.os.Environment;
import android.os.Handler;
import android.os.PowerManager;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
@@ -162,7 +163,10 @@ public class BrightnessTracker {
                UserHandle.USER_CURRENT);

        mSensorListener = new SensorListener();
        mInjector.registerSensorListener(mContext, mSensorListener);

        if (mInjector.isInteractive(mContext)) {
            mInjector.registerSensorListener(mContext, mSensorListener, mBgHandler);
        }

        mSettingsObserver = new SettingsObserver(mBgHandler);
        mInjector.registerBrightnessObserver(mContentResolver, mSettingsObserver);
@@ -170,6 +174,8 @@ public class BrightnessTracker {
        final IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(Intent.ACTION_SHUTDOWN);
        intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
        intentFilter.addAction(Intent.ACTION_SCREEN_ON);
        intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
        mBroadcastReceiver = new Receiver();
        mInjector.registerReceiver(mContext, mBroadcastReceiver, intentFilter);

@@ -584,6 +590,11 @@ public class BrightnessTracker {
                if (level != -1 && scale != 0) {
                    batteryLevelChanged(level, scale);
                }
            } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
                mInjector.unregisterSensorListener(mContext, mSensorListener);
            } else if (Intent.ACTION_SCREEN_ON.equals(action)) {
                mInjector.registerSensorListener(mContext, mSensorListener,
                        mInjector.getBackgroundHandler());
            }
        }
    }
@@ -591,11 +602,11 @@ public class BrightnessTracker {
    @VisibleForTesting
    static class Injector {
        public void registerSensorListener(Context context,
                SensorEventListener sensorListener) {
                SensorEventListener sensorListener, Handler handler) {
            SensorManager sensorManager = context.getSystemService(SensorManager.class);
            Sensor lightSensor = sensorManager.getDefaultSensor(Sensor.TYPE_LIGHT);
            sensorManager.registerListener(sensorListener,
                    lightSensor, SensorManager.SENSOR_DELAY_NORMAL);
                    lightSensor, SensorManager.SENSOR_DELAY_NORMAL, handler);
        }

        public void unregisterSensorListener(Context context, SensorEventListener sensorListener) {
@@ -675,5 +686,9 @@ public class BrightnessTracker {
        public void cancelIdleJob(Context context) {
            BrightnessIdleJob.cancelJob(context);
        }

        public boolean isInteractive(Context context) {
            return context.getSystemService(PowerManager.class).isInteractive();
        }
    }
}
+25 −4
Original line number Diff line number Diff line
@@ -94,12 +94,29 @@ public class BrightnessTrackerTest {
    }

    @Test
    public void testStartStopTracker() {
    public void testStartStopTrackerScreenOnOff() {
        mInjector.mInteractive = false;
        startTracker(mTracker);
        assertNotNull(mInjector.mSensorListener);
        assertNull(mInjector.mSensorListener);
        assertNotNull(mInjector.mSettingsObserver);
        assertNotNull(mInjector.mBroadcastReceiver);
        assertTrue(mInjector.mIdleScheduled);
        Intent onIntent = new Intent();
        onIntent.setAction(Intent.ACTION_SCREEN_ON);
        mInjector.mBroadcastReceiver.onReceive(InstrumentationRegistry.getContext(),
                onIntent);
        assertNotNull(mInjector.mSensorListener);

        Intent offIntent = new Intent();
        offIntent.setAction(Intent.ACTION_SCREEN_OFF);
        mInjector.mBroadcastReceiver.onReceive(InstrumentationRegistry.getContext(),
                offIntent);
        assertNull(mInjector.mSensorListener);

        mInjector.mBroadcastReceiver.onReceive(InstrumentationRegistry.getContext(),
                onIntent);
        assertNotNull(mInjector.mSensorListener);

        mTracker.stop();
        assertNull(mInjector.mSensorListener);
        assertNull(mInjector.mSettingsObserver);
@@ -532,7 +549,6 @@ public class BrightnessTrackerTest {
        mInjector.waitForHandler();
    }


    private static final class Idle implements MessageQueue.IdleHandler {
        private boolean mIdle;

@@ -565,6 +581,7 @@ public class BrightnessTrackerTest {
        long mElapsedRealtimeNanos = SystemClock.elapsedRealtimeNanos();
        Handler mHandler;
        boolean mIdleScheduled;
        boolean mInteractive = true;

        public TestInjector(Handler handler) {
            mHandler = handler;
@@ -577,7 +594,7 @@ public class BrightnessTrackerTest {

        @Override
        public void registerSensorListener(Context context,
                SensorEventListener sensorListener) {
                SensorEventListener sensorListener, Handler handler) {
            mSensorListener = sensorListener;
        }

@@ -694,5 +711,9 @@ public class BrightnessTrackerTest {
        public void cancelIdleJob(Context context) {
            mIdleScheduled = false;
        }

        public boolean isInteractive(Context context) {
            return mInteractive;
        }
    }
}