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

Commit 9dd71854 authored by Kweku Adams's avatar Kweku Adams
Browse files

Avoid crash when resetting defaults.

Tearing down means unregistering receivers, but if the receiver isn't
registered, then the system will crash. Now, we make sure the receivers
were registered before trying to unregister them.

Bug: 158300259
Test: manual via developer options
Change-Id: I3a022002e2f1286718e08fe1dddf83deda6290de
parent 34fd7c52
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -76,6 +76,8 @@ class ChargingModifier extends Modifier {
    }

    private final class ChargingTracker extends BroadcastReceiver {
        private boolean mIsSetup = false;

        /**
         * Track whether we're "charging", where charging means that we're ready to commit to
         * doing work.
@@ -83,6 +85,10 @@ class ChargingModifier extends Modifier {
        private volatile boolean mCharging;

        public void startTracking(@NonNull Context context) {
            if (mIsSetup) {
                return;
            }

            final IntentFilter filter = new IntentFilter();
            filter.addAction(BatteryManager.ACTION_CHARGING);
            filter.addAction(BatteryManager.ACTION_DISCHARGING);
@@ -91,10 +97,17 @@ class ChargingModifier extends Modifier {
            // Initialise tracker state.
            final BatteryManager batteryManager = context.getSystemService(BatteryManager.class);
            mCharging = batteryManager.isCharging();

            mIsSetup = true;
        }

        public void stopTracking(@NonNull Context context) {
            if (!mIsSetup) {
                return;
            }

            context.unregisterReceiver(this);
            mIsSetup = false;
        }

        @Override
+12 −0
Original line number Diff line number Diff line
@@ -72,6 +72,7 @@ class DeviceIdleModifier extends Modifier {
    }

    private final class DeviceIdleTracker extends BroadcastReceiver {
        private boolean mIsSetup = false;

        private volatile boolean mDeviceIdle;
        private volatile boolean mDeviceLightIdle;
@@ -80,6 +81,10 @@ class DeviceIdleModifier extends Modifier {
        }

        void startTracking(@NonNull Context context) {
            if (mIsSetup) {
                return;
            }

            IntentFilter filter = new IntentFilter();
            filter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
            filter.addAction(PowerManager.ACTION_LIGHT_DEVICE_IDLE_MODE_CHANGED);
@@ -88,10 +93,17 @@ class DeviceIdleModifier extends Modifier {
            // Initialise tracker state.
            mDeviceIdle = mPowerManager.isDeviceIdleMode();
            mDeviceLightIdle = mPowerManager.isLightDeviceIdleMode();

            mIsSetup = true;
        }

        void stopTracking(@NonNull Context context) {
            if (!mIsSetup) {
                return;
            }

            context.unregisterReceiver(this);
            mIsSetup = false;
        }

        @Override
+13 −0
Original line number Diff line number Diff line
@@ -72,6 +72,8 @@ class PowerSaveModeModifier extends Modifier {

    // TODO: migrate to relying on PowerSaveState and ServiceType.TARE
    private final class PowerSaveModeTracker extends BroadcastReceiver {
        private boolean mIsSetup = false;

        private final PowerManager mPowerManager;
        private volatile boolean mPowerSaveModeEnabled;

@@ -80,16 +82,27 @@ class PowerSaveModeModifier extends Modifier {
        }

        public void startTracking(@NonNull Context context) {
            if (mIsSetup) {
                return;
            }

            final IntentFilter filter = new IntentFilter();
            filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED);
            context.registerReceiver(this, filter);

            // Initialise tracker state.
            mPowerSaveModeEnabled = mPowerManager.isPowerSaveMode();

            mIsSetup = true;
        }

        public void stopTracking(@NonNull Context context) {
            if (!mIsSetup) {
                return;
            }

            context.unregisterReceiver(this);
            mIsSetup = false;
        }

        @Override