diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index ee31706c0b94a..7792afa3d84cd 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -251,7 +251,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab private boolean mDeviceProvisioned; // Battery status - private BatteryStatus mBatteryStatus; + @VisibleForTesting + BatteryStatus mBatteryStatus; private StrongAuthTracker mStrongAuthTracker; @@ -1698,6 +1699,17 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab .getServiceStateForSubscriber(subId); mHandler.sendMessage( 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); diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java index 078c540939aa6..66804bef8f531 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java @@ -225,6 +225,8 @@ public class PowerUI extends SystemUI implements CommandQueue.Callbacks { @VisibleForTesting final class Receiver extends BroadcastReceiver { + private boolean mHasReceivedBattery = false; + public void init() { // Register for Intent broadcasts for... 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_USER_SWITCHED); 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 @@ -246,6 +259,7 @@ public class PowerUI extends SystemUI implements CommandQueue.Callbacks { } }); } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) { + mHasReceivedBattery = true; final int oldBatteryLevel = mBatteryLevel; mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100); final int oldBatteryStatus = mBatteryStatus; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java index 5bf4b465fa48e..d30f01a658f6b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BatteryControllerImpl.java @@ -75,7 +75,8 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC private boolean mAodPowerSave; protected boolean mWirelessCharging; private boolean mTestmode = false; - private boolean mHasReceivedBattery = false; + @VisibleForTesting + boolean mHasReceivedBattery = false; private Estimate mEstimate; private boolean mFetchingEstimate = false; @@ -103,6 +104,16 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC @Override public void init() { 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(); updateEstimate(); } diff --git a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java index 7bc453ac9aa1b..9e056cf16ec72 100644 --- a/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java +++ b/packages/SystemUI/tests/src/com/android/keyguard/KeyguardUpdateMonitorTest.java @@ -210,6 +210,13 @@ public class KeyguardUpdateMonitorTest extends SysuiTestCase { mKeyguardUpdateMonitor.destroy(); } + @Test + public void testInitialBatteryLevelRequested() { + mTestableLooper.processAllMessages(); + + assertThat(mKeyguardUpdateMonitor.mBatteryStatus).isNotNull(); + } + @Test public void testReceiversRegistered() { verify(mBroadcastDispatcher, atLeastOnce()).registerReceiverWithHandler( diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java index 95ff98ae620b7..f29f04244901a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestableContext.java @@ -67,27 +67,35 @@ public class SysuiTestableContext extends TestableContext { @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter) { - mRegisteredReceivers.add(receiver); + if (receiver != null) { + mRegisteredReceivers.add(receiver); + } return super.registerReceiver(receiver, filter); } @Override public Intent registerReceiver(BroadcastReceiver receiver, IntentFilter filter, String broadcastPermission, Handler scheduler) { - mRegisteredReceivers.add(receiver); + if (receiver != null) { + mRegisteredReceivers.add(receiver); + } return super.registerReceiver(receiver, filter, broadcastPermission, scheduler); } @Override public Intent registerReceiverAsUser(BroadcastReceiver receiver, UserHandle user, IntentFilter filter, String broadcastPermission, Handler scheduler) { - mRegisteredReceivers.add(receiver); + if (receiver != null) { + mRegisteredReceivers.add(receiver); + } return super.registerReceiverAsUser(receiver, user, filter, broadcastPermission, scheduler); } @Override public void unregisterReceiver(BroadcastReceiver receiver) { - mRegisteredReceivers.remove(receiver); + if (receiver != null) { + mRegisteredReceivers.remove(receiver); + } super.unregisterReceiver(receiver); } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java index f83fbd478bf31..eca48c8c2ee12 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/BatteryControllerTest.java @@ -58,6 +58,11 @@ public class BatteryControllerTest extends SysuiTestCase { mBatteryController.init(); } + @Test + public void testBatteryInitialized() { + Assert.assertTrue(mBatteryController.mHasReceivedBattery); + } + @Test public void testIndependentAODBatterySaver_true() { PowerSaveState state = new PowerSaveState.Builder()