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

Commit 7415c69c authored by Kenny Guy's avatar Kenny Guy Committed by Android (Google) Code Review
Browse files

Merge "Don't keep sensor listener while screen is off."

parents 25c3c34c 689ab8fa
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;
        }
    }
}