diff options
| author | 2019-11-21 03:26:45 +0000 | |
|---|---|---|
| committer | 2019-11-21 03:26:45 +0000 | |
| commit | 11f38a96093a826d35ba8c70e23623015b7bad61 (patch) | |
| tree | 2700c017c9223581b814f93cb6b6427057385c4e | |
| parent | 75275ad59c7176c784edefc2d4aac98bd193116d (diff) | |
| parent | 9131b28fb1149448b2bc40d1150da9f476138a50 (diff) | |
Merge "Remove IBatteryStats call from setDozing"
2 files changed, 62 insertions, 20 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 4d8abff6df94..5abca6b92a3b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -18,7 +18,6 @@ package com.android.systemui.statusbar; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; -import android.app.admin.DevicePolicyManager; import android.content.Context; import android.content.res.ColorStateList; import android.content.res.Resources; @@ -118,11 +117,11 @@ public class KeyguardIndicationController implements StateListener, private int mChargingSpeed; private int mChargingWattage; private int mBatteryLevel; + private long mChargingTimeRemaining; private String mMessageToShowOnScreenOn; private KeyguardUpdateMonitorCallback mUpdateMonitorCallback; - private final DevicePolicyManager mDevicePolicyManager; private boolean mDozing; private final ViewClippingUtil.ClippingParameters mClippingParams = new ViewClippingUtil.ClippingParameters() { @@ -144,7 +143,9 @@ public class KeyguardIndicationController implements StateListener, Dependency.get(KeyguardStateController.class), Dependency.get(StatusBarStateController.class), Dependency.get(KeyguardUpdateMonitor.class), - Dependency.get(DockManager.class)); + Dependency.get(DockManager.class), + IBatteryStats.Stub.asInterface( + ServiceManager.getService(BatteryStats.SERVICE_NAME))); } /** @@ -157,7 +158,8 @@ public class KeyguardIndicationController implements StateListener, KeyguardStateController keyguardStateController, StatusBarStateController statusBarStateController, KeyguardUpdateMonitor keyguardUpdateMonitor, - DockManager dockManager) { + DockManager dockManager, + IBatteryStats iBatteryStats) { mContext = context; mLockIcon = lockIcon; mShadeController = shadeController; @@ -180,11 +182,8 @@ public class KeyguardIndicationController implements StateListener, mFastThreshold = res.getInteger(R.integer.config_chargingFastThreshold); mUserManager = context.getSystemService(UserManager.class); - mBatteryInfo = IBatteryStats.Stub.asInterface( - ServiceManager.getService(BatteryStats.SERVICE_NAME)); + mBatteryInfo = iBatteryStats; - mDevicePolicyManager = (DevicePolicyManager) context.getSystemService( - Context.DEVICE_POLICY_SERVICE); setIndicationArea(indicationArea); mKeyguardUpdateMonitor.registerCallback(getKeyguardCallback()); @@ -480,16 +479,7 @@ public class KeyguardIndicationController implements StateListener, return mContext.getResources().getString(R.string.keyguard_charged); } - // Try fetching charging time from battery stats. - long chargingTimeRemaining = 0; - try { - chargingTimeRemaining = mBatteryInfo.computeChargeTimeRemaining(); - - } catch (RemoteException e) { - Log.e(TAG, "Error calling IBatteryStats: ", e); - } - final boolean hasChargingTime = chargingTimeRemaining > 0; - + final boolean hasChargingTime = mChargingTimeRemaining > 0; int chargingId; if (mPowerPluggedInWired) { switch (mChargingSpeed) { @@ -522,7 +512,7 @@ public class KeyguardIndicationController implements StateListener, // locales will also have it in the future. For now, we still have to support the old // format until all languages get the new translations. String chargingTimeFormatted = Formatter.formatShortElapsedTimeRoundingUpToMinutes( - mContext, chargingTimeRemaining); + mContext, mChargingTimeRemaining); try { return mContext.getResources().getString(chargingId, chargingTimeFormatted, percentage); @@ -639,6 +629,13 @@ public class KeyguardIndicationController implements StateListener, mChargingWattage = status.maxChargingWattage; mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold); mBatteryLevel = status.level; + try { + mChargingTimeRemaining = mPowerPluggedIn + ? mBatteryInfo.computeChargeTimeRemaining() : -1; + } catch (RemoteException e) { + Log.e(TAG, "Error calling IBatteryStats: ", e); + mChargingTimeRemaining = -1; + } updateIndication(!wasPluggedIn && mPowerPluggedInWired); if (mDozing) { if (!wasPluggedIn && mPowerPluggedIn) { 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 a0a3679af2a3..48169ea6c467 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.junit.Assert.assertTrue; 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.graphics.Color; 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.InstrumentationRegistry; 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 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { @Mock private UserManager mUserManager; @Mock + private IBatteryStats mIBatteryStats; + @Mock private DockManager mDockManager; @Captor private ArgumentCaptor<DockManager.AlignmentStateListener> mAlignmentListener; @@ -131,8 +139,9 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { 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 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { } @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)); |