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
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
@@ -340,6 +349,42 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
||||
assertThat(mTextView.getText()).isEqualTo(restingIndication);
|
||||
}
|
||||
|
||||
@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();
|
||||
|
||||
Reference in New Issue
Block a user