RESTRICT AUTOMERGE Add extra battery indication logging

See b/18166083 for original diagnosis of why we should
only show the battery info when the device is
actually charging.

- Add additional battery keyguard indication logs
- Remove unncessary code in KeyguardIndicationController
- Reset message in `KeyguardIndicationTextView`

Test: atest KeyguardIndicationControllerTest
Bug: 264143996
Change-Id: Iaa59b6b94c66e3e9b5e101fc4435b657f70ad943
This commit is contained in:
Beverly
2023-03-07 17:26:22 +00:00
committed by Beverly Tai
parent 049f8dc005
commit 067b0ad918
6 changed files with 72 additions and 26 deletions

View File

@@ -3375,8 +3375,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
*/ */
private void handleBatteryUpdate(BatteryStatus status) { private void handleBatteryUpdate(BatteryStatus status) {
Assert.isMainThread(); Assert.isMainThread();
mLogger.d("handleBatteryUpdate");
final boolean batteryUpdateInteresting = isBatteryUpdateInteresting(mBatteryStatus, status); final boolean batteryUpdateInteresting = isBatteryUpdateInteresting(mBatteryStatus, status);
mLogger.logHandleBatteryUpdate(batteryUpdateInteresting);
mBatteryStatus = status; mBatteryStatus = status;
if (batteryUpdateInteresting) { if (batteryUpdateInteresting) {
for (int i = 0; i < mCallbacks.size(); i++) { for (int i = 0; i < mCallbacks.size(); i++) {

View File

@@ -97,6 +97,21 @@ constructor(
) )
} }
fun logUpdateBatteryIndication(
powerIndication: String,
pluggedIn: Boolean,
) {
buffer.log(
KeyguardIndicationController.TAG,
LogLevel.DEBUG,
{
str1 = powerIndication
bool1 = pluggedIn
},
{ "updateBatteryIndication powerIndication:$str1 pluggedIn:$bool1" }
)
}
fun logKeyguardSwitchIndication( fun logKeyguardSwitchIndication(
type: Int, type: Int,
message: String?, message: String?,
@@ -112,6 +127,28 @@ constructor(
) )
} }
fun logRefreshBatteryInfo(
isChargingOrFull: Boolean,
powerPluggedIn: Boolean,
batteryLevel: Int,
batteryOverheated: Boolean
) {
buffer.log(
KeyguardIndicationController.TAG,
LogLevel.DEBUG,
{
bool1 = isChargingOrFull
bool2 = powerPluggedIn
bool3 = batteryOverheated
int1 = batteryLevel
},
{
"refreshBatteryInfo isChargingOrFull:$bool1 powerPluggedIn:$bool2" +
" batteryOverheated:$bool3 batteryLevel:$int1"
}
)
}
fun getKeyguardSwitchIndicationNonSensitiveLog(type: Int, message: String?): String { fun getKeyguardSwitchIndicationNonSensitiveLog(type: Int, message: String?): String {
// only show the battery string. other strings may contain sensitive info // only show the battery string. other strings may contain sensitive info
return if (type == KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BATTERY) { return if (type == KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BATTERY) {

View File

@@ -657,4 +657,15 @@ constructor(@KeyguardUpdateMonitorLog private val logBuffer: LogBuffer) {
} }
) )
} }
fun logHandleBatteryUpdate(isInteresting: Boolean) {
logBuffer.log(
TAG,
DEBUG,
{
bool1 = isInteresting
},
{ "handleBatteryUpdate: $bool1" }
)
}
} }

View File

@@ -177,10 +177,12 @@ public class KeyguardIndicationController {
private boolean mVisible; private boolean mVisible;
private boolean mOrganizationOwnedDevice; private boolean mOrganizationOwnedDevice;
// these all assume the device is plugged in (wired/wireless/docked) AND chargingOrFull:
private boolean mPowerPluggedIn; private boolean mPowerPluggedIn;
private boolean mPowerPluggedInWired; private boolean mPowerPluggedInWired;
private boolean mPowerPluggedInWireless; private boolean mPowerPluggedInWireless;
private boolean mPowerPluggedInDock; private boolean mPowerPluggedInDock;
private boolean mPowerCharged; private boolean mPowerCharged;
private boolean mBatteryOverheated; private boolean mBatteryOverheated;
private boolean mEnableBatteryDefender; private boolean mEnableBatteryDefender;
@@ -499,6 +501,7 @@ public class KeyguardIndicationController {
powerIndication += ", " + (mChargingWattage / 1000) + " mW"; powerIndication += ", " + (mChargingWattage / 1000) + " mW";
} }
mKeyguardLogger.logUpdateBatteryIndication(powerIndication, mPowerPluggedIn);
mRotateTextViewController.updateIndication( mRotateTextViewController.updateIndication(
INDICATION_TYPE_BATTERY, INDICATION_TYPE_BATTERY,
new KeyguardIndication.Builder() new KeyguardIndication.Builder()
@@ -507,6 +510,7 @@ public class KeyguardIndicationController {
.build(), .build(),
animate); animate);
} else { } else {
mKeyguardLogger.log(TAG, LogLevel.DEBUG, "hide battery indication");
// don't show the charging information if device isn't plugged in // don't show the charging information if device isn't plugged in
mRotateTextViewController.hideIndication(INDICATION_TYPE_BATTERY); mRotateTextViewController.hideIndication(INDICATION_TYPE_BATTERY);
} }
@@ -885,6 +889,9 @@ public class KeyguardIndicationController {
updateLockScreenIndications(animate, getCurrentUser()); updateLockScreenIndications(animate, getCurrentUser());
} }
/**
* Assumption: device is charging
*/
protected String computePowerIndication() { protected String computePowerIndication() {
int chargingId; int chargingId;
if (mBatteryOverheated) { if (mBatteryOverheated) {
@@ -1035,6 +1042,12 @@ public class KeyguardIndicationController {
} }
} }
/**
* KeyguardUpdateMonitor only sends "interesting" battery updates
* {@link KeyguardUpdateMonitor#isBatteryUpdateInteresting}.
* Therefore, make sure to always check plugged in state along with any charging status
* change, or else we could end up with stale state.
*/
@Override @Override
public void onRefreshBatteryInfo(BatteryStatus status) { public void onRefreshBatteryInfo(BatteryStatus status) {
boolean isChargingOrFull = status.status == BatteryManager.BATTERY_STATUS_CHARGING boolean isChargingOrFull = status.status == BatteryManager.BATTERY_STATUS_CHARGING
@@ -1050,7 +1063,9 @@ public class KeyguardIndicationController {
mBatteryLevel = status.level; mBatteryLevel = status.level;
mBatteryPresent = status.present; mBatteryPresent = status.present;
mBatteryOverheated = status.isOverheated(); mBatteryOverheated = status.isOverheated();
// when the battery is overheated, device doesn't charge so only guard on pluggedIn:
mEnableBatteryDefender = mBatteryOverheated && status.isPluggedIn(); mEnableBatteryDefender = mBatteryOverheated && status.isPluggedIn();
try { try {
mChargingTimeRemaining = mPowerPluggedIn mChargingTimeRemaining = mPowerPluggedIn
? mBatteryInfo.computeChargeTimeRemaining() : -1; ? mBatteryInfo.computeChargeTimeRemaining() : -1;
@@ -1058,14 +1073,10 @@ public class KeyguardIndicationController {
mKeyguardLogger.log(TAG, ERROR, "Error calling IBatteryStats", e); mKeyguardLogger.log(TAG, ERROR, "Error calling IBatteryStats", e);
mChargingTimeRemaining = -1; mChargingTimeRemaining = -1;
} }
mKeyguardLogger.logRefreshBatteryInfo(isChargingOrFull, mPowerPluggedIn, mBatteryLevel,
mBatteryOverheated);
updateDeviceEntryIndication(!wasPluggedIn && mPowerPluggedInWired); updateDeviceEntryIndication(!wasPluggedIn && mPowerPluggedInWired);
if (mDozing) {
if (!wasPluggedIn && mPowerPluggedIn) {
showTransientIndication(computePowerIndication());
} else if (wasPluggedIn && !mPowerPluggedIn) {
hideTransientIndication();
}
}
} }
@Override @Override
@@ -1317,6 +1328,10 @@ public class KeyguardIndicationController {
} }
} }
protected boolean isPluggedInAndCharging() {
return mPowerPluggedIn;
}
private boolean isCurrentUser(int userId) { private boolean isCurrentUser(int userId) {
return getCurrentUser() == userId; return getCurrentUser() == userId;
} }

View File

@@ -76,6 +76,7 @@ public class KeyguardIndicationTextView extends TextView {
if (mLastAnimator != null) { if (mLastAnimator != null) {
mLastAnimator.cancel(); mLastAnimator.cancel();
} }
mMessage = "";
setText(""); setText("");
} }

View File

@@ -1030,24 +1030,6 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
NumberFormat.getPercentInstance().format(80 / 100f))); NumberFormat.getPercentInstance().format(80 / 100f)));
} }
@Test
public void onRefreshBatteryInfo_pluggedWithOverheat_presentChargingLimited() {
createController();
BatteryStatus status = new BatteryStatus(BatteryManager.BATTERY_STATUS_DISCHARGING,
80 /* level */, BatteryManager.BATTERY_PLUGGED_AC,
BatteryManager.BATTERY_HEALTH_OVERHEAT, 0 /* maxChargingWattage */,
true /* present */);
mController.getKeyguardCallback().onRefreshBatteryInfo(status);
mController.setVisible(true);
verifyIndicationMessage(
INDICATION_TYPE_BATTERY,
mContext.getString(
R.string.keyguard_plugged_in_charging_limited,
NumberFormat.getPercentInstance().format(80 / 100f)));
}
@Test @Test
public void onRefreshBatteryInfo_fullChargedWithOverheat_presentChargingLimited() { public void onRefreshBatteryInfo_fullChargedWithOverheat_presentChargingLimited() {
createController(); createController();