Remove IBatteryStats call from setDozing
We should only update the charging state when there's a battery
event. Not whenever we need to refresh the text field.
Fixes: 142959859
Test: manually plug and unplug device
Test: atest KeyguardIndicationControllerTest
Change-Id: I902eb838a1bf81a8c85655423c3ea218a93afd00
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
index a0a3679..48169ea 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java
@@ -23,7 +23,9 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -37,7 +39,9 @@
import android.hardware.biometrics.BiometricSourceType;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
+import android.os.BatteryManager;
import android.os.Looper;
+import android.os.RemoteException;
import android.os.UserManager;
import android.view.View;
import android.view.ViewGroup;
@@ -46,8 +50,10 @@
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
+import com.android.internal.app.IBatteryStats;
import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.KeyguardUpdateMonitor;
+import com.android.keyguard.KeyguardUpdateMonitor.BatteryStatus;
import com.android.settingslib.Utils;
import com.android.systemui.R;
import com.android.systemui.SysuiTestCase;
@@ -96,6 +102,8 @@
@Mock
private UserManager mUserManager;
@Mock
+ private IBatteryStats mIBatteryStats;
+ @Mock
private DockManager mDockManager;
@Captor
private ArgumentCaptor<DockManager.AlignmentStateListener> mAlignmentListener;
@@ -131,8 +139,9 @@
mController = new KeyguardIndicationController(mContext, mIndicationArea, mLockIcon,
mLockPatternUtils, mWakeLock, mShadeController, mAccessibilityController,
mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor,
- mDockManager);
+ mDockManager, mIBatteryStats);
mController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
+ clearInvocations(mIBatteryStats);
}
@Test
@@ -341,6 +350,42 @@
}
@Test
+ public void onRefreshBatteryInfo_computesChargingTime() throws RemoteException {
+ createController();
+ BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING,
+ 80 /* level */, BatteryManager.BATTERY_PLUGGED_WIRELESS, 100 /* health */,
+ 0 /* maxChargingWattage */);
+
+ mController.getKeyguardCallback().onRefreshBatteryInfo(status);
+ verify(mIBatteryStats).computeChargeTimeRemaining();
+ }
+
+ @Test
+ public void onRefreshBatteryInfo_computesChargingTime_onlyWhenCharging()
+ throws RemoteException {
+ createController();
+ BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_CHARGING,
+ 80 /* level */, 0 /* plugged */, 100 /* health */,
+ 0 /* maxChargingWattage */);
+
+ mController.getKeyguardCallback().onRefreshBatteryInfo(status);
+ verify(mIBatteryStats, never()).computeChargeTimeRemaining();
+ }
+
+ /**
+ * Regression test.
+ * We should not make calls to the system_process when updating the doze state.
+ */
+ @Test
+ public void setDozing_noIBatteryCalls() throws RemoteException {
+ createController();
+ mController.setVisible(true);
+ mController.setDozing(true);
+ mController.setDozing(false);
+ verify(mIBatteryStats, never()).computeChargeTimeRemaining();
+ }
+
+ @Test
public void updateMonitor_listener() {
createController();
verify(mKeyguardStateController).addCallback(eq(mController));