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

Commit 99abb711 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Initialize values from sticy ACTION_BATTERY_CHANGED

ACTION_BATTERY_CHANGED is sent as a sticky, so classes in SystemUI need
to retrieve the last value as part of initialization.

As there is no API to retrieve this, the only solution is get the last
sticky for now.

Test: atest KeyguardUpdateMonitorTest BatteryControllerTest
Test: manual, restart and observe battery icon
Fixes: 159679049
Change-Id: I9e4ea67a34f9166b863abc8f99b687e542128f8b
parent a9d76001
Loading
Loading
Loading
Loading
+13 −1
Original line number Original line Diff line number Diff line
@@ -251,7 +251,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
    private boolean mDeviceProvisioned;
    private boolean mDeviceProvisioned;


    // Battery status
    // Battery status
    private BatteryStatus mBatteryStatus;
    @VisibleForTesting
    BatteryStatus mBatteryStatus;


    private StrongAuthTracker mStrongAuthTracker;
    private StrongAuthTracker mStrongAuthTracker;


@@ -1698,6 +1699,17 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
                    .getServiceStateForSubscriber(subId);
                    .getServiceStateForSubscriber(subId);
            mHandler.sendMessage(
            mHandler.sendMessage(
                    mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGE, subId, 0, serviceState));
                    mHandler.obtainMessage(MSG_SERVICE_STATE_CHANGE, subId, 0, serviceState));

            // Get initial state. Relying on Sticky behavior until API for getting info.
            if (mBatteryStatus == null) {
                Intent intent = mContext.registerReceiver(
                        null,
                        new IntentFilter(Intent.ACTION_BATTERY_CHANGED)
                );
                if (intent != null && mBatteryStatus == null) {
                    mBroadcastReceiver.onReceive(mContext, intent);
                }
            }
        });
        });


        mHandler.post(this::registerRingerTracker);
        mHandler.post(this::registerRingerTracker);
+14 −0
Original line number Original line Diff line number Diff line
@@ -225,6 +225,8 @@ public class PowerUI extends SystemUI implements CommandQueue.Callbacks {
    @VisibleForTesting
    @VisibleForTesting
    final class Receiver extends BroadcastReceiver {
    final class Receiver extends BroadcastReceiver {


        private boolean mHasReceivedBattery = false;

        public void init() {
        public void init() {
            // Register for Intent broadcasts for...
            // Register for Intent broadcasts for...
            IntentFilter filter = new IntentFilter();
            IntentFilter filter = new IntentFilter();
@@ -234,6 +236,17 @@ public class PowerUI extends SystemUI implements CommandQueue.Callbacks {
            filter.addAction(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_SCREEN_ON);
            filter.addAction(Intent.ACTION_USER_SWITCHED);
            filter.addAction(Intent.ACTION_USER_SWITCHED);
            mBroadcastDispatcher.registerReceiverWithHandler(this, filter, mHandler);
            mBroadcastDispatcher.registerReceiverWithHandler(this, filter, mHandler);
            // Force get initial values. Relying on Sticky behavior until API for getting info.
            if (!mHasReceivedBattery) {
                // Get initial state
                Intent intent = mContext.registerReceiver(
                        null,
                        new IntentFilter(Intent.ACTION_BATTERY_CHANGED)
                );
                if (intent != null) {
                    onReceive(mContext, intent);
                }
            }
        }
        }


        @Override
        @Override
@@ -246,6 +259,7 @@ public class PowerUI extends SystemUI implements CommandQueue.Callbacks {
                    }
                    }
                });
                });
            } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
            } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
                mHasReceivedBattery = true;
                final int oldBatteryLevel = mBatteryLevel;
                final int oldBatteryLevel = mBatteryLevel;
                mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100);
                mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100);
                final int oldBatteryStatus = mBatteryStatus;
                final int oldBatteryStatus = mBatteryStatus;
+12 −1
Original line number Original line Diff line number Diff line
@@ -74,7 +74,8 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    protected boolean mPowerSave;
    protected boolean mPowerSave;
    private boolean mAodPowerSave;
    private boolean mAodPowerSave;
    private boolean mTestmode = false;
    private boolean mTestmode = false;
    private boolean mHasReceivedBattery = false;
    @VisibleForTesting
    boolean mHasReceivedBattery = false;
    private Estimate mEstimate;
    private Estimate mEstimate;
    private boolean mFetchingEstimate = false;
    private boolean mFetchingEstimate = false;


@@ -102,6 +103,16 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
    @Override
    @Override
    public void init() {
    public void init() {
        registerReceiver();
        registerReceiver();
        if (!mHasReceivedBattery) {
            // Get initial state. Relying on Sticky behavior until API for getting info.
            Intent intent = mContext.registerReceiver(
                    null,
                    new IntentFilter(Intent.ACTION_BATTERY_CHANGED)
            );
            if (intent != null && !mHasReceivedBattery) {
                onReceive(mContext, intent);
            }
        }
        updatePowerSave();
        updatePowerSave();
        updateEstimate();
        updateEstimate();
    }
    }
+7 −0
Original line number Original line Diff line number Diff line
@@ -210,6 +210,13 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase {
        mKeyguardUpdateMonitor.destroy();
        mKeyguardUpdateMonitor.destroy();
    }
    }


    @Test
    public void testInitialBatteryLevelRequested() {
        mTestableLooper.processAllMessages();

        assertThat(mKeyguardUpdateMonitor.mBatteryStatus).isNotNull();
    }

    @Test
    @Test
    public void testReceiversRegistered() {
    public void testReceiversRegistered() {
        verify(mBroadcastDispatcher, atLeastOnce()).registerReceiverWithHandler(
        verify(mBroadcastDispatcher, atLeastOnce()).registerReceiverWithHandler(
+12 −4
Original line number Original line Diff line number Diff line
@@ -67,27 +67,35 @@ public class SysuiTestableContext extends TestableContext {


    @Override
    @Override
    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) {
        if (receiver != null) {
            mRegisteredReceivers.add(receiver);
            mRegisteredReceivers.add(receiver);
        }
        return super.registerReceiver(receiver, filter);
        return super.registerReceiver(receiver, filter);
    }
    }


    @Override
    @Override
    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,
    public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter,
            String broadcastPermission, Handler scheduler) {
            String broadcastPermission, Handler scheduler) {
        if (receiver != null) {
            mRegisteredReceivers.add(receiver);
            mRegisteredReceivers.add(receiver);
        }
        return super.registerReceiver(receiver, filter, broadcastPermission, scheduler);
        return super.registerReceiver(receiver, filter, broadcastPermission, scheduler);
    }
    }


    @Override
    @Override
    public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user,
    public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user,
            IntentFilter filter, String broadcastPermission, Handler scheduler) {
            IntentFilter filter, String broadcastPermission, Handler scheduler) {
        if (receiver != null) {
            mRegisteredReceivers.add(receiver);
            mRegisteredReceivers.add(receiver);
        }
        return super.registerReceiverAsUser(receiver, user, filter, broadcastPermission, scheduler);
        return super.registerReceiverAsUser(receiver, user, filter, broadcastPermission, scheduler);
    }
    }


    @Override
    @Override
    public void unregisterReceiver(BroadcastReceiver receiver) {
    public void unregisterReceiver(BroadcastReceiver receiver) {
        if (receiver != null) {
            mRegisteredReceivers.remove(receiver);
            mRegisteredReceivers.remove(receiver);
        }
        super.unregisterReceiver(receiver);
        super.unregisterReceiver(receiver);
    }
    }
}
}
Loading