[Bug Fix] "Dock defend string and tips in settings are incorrectly" issue
Symptom: After the dock defend was triggered, the battery tips still show "Future-Bypass" dock defend mode. It should be the "Active" dock defend mode. Root Cause: The original `BatteryInfo.isBatteryDefender` was implemented by using `longlife`, due to the charging limit also reuse `longlife` issue, we replace the implementation of `BatteryInfo.isBatteryDefender` with HAL API call `isTempDefend` and `isDwellDefend`. However, the dock defend also needs `longlife`, the original `BatteryInfo.isBatteryDefender`. So the dock defend checking failed after replacing the implementation of `BatteryInfo.isBatteryDefender` Solution: - Add new property isLonglife in BatteryInfo - Replace all isBatteryDefender reference that needs isLonglife Bug: 348563863 Test: Manual Test and robotest Test: http://ab/I08300010291126076 (unit test) Test: http://ab/I67800010291096764 (robo test) Flag: EXEMPT bugfix Change-Id: I58424927522acc29dc49261a2c24829a5b34ef85
This commit is contained in:
@@ -53,7 +53,8 @@ public class BatteryInfo {
|
||||
public int batteryStatus;
|
||||
public int pluggedStatus;
|
||||
public boolean discharging = true;
|
||||
public boolean isBatteryDefender;
|
||||
public boolean isBatteryDefender = false;
|
||||
public boolean isLongLife = false;
|
||||
public boolean isFastCharging;
|
||||
public long remainingTimeUs = 0;
|
||||
public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
|
||||
@@ -306,7 +307,7 @@ public class BatteryInfo {
|
||||
info.pluggedStatus = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
|
||||
info.mCharging = info.pluggedStatus != 0;
|
||||
info.averageTimeToDischarge = estimate.getAverageDischargeTime();
|
||||
info.isBatteryDefender =
|
||||
info.isLongLife =
|
||||
batteryBroadcast.getIntExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_DEFAULT)
|
||||
@@ -319,7 +320,7 @@ public class BatteryInfo {
|
||||
info.isFastCharging =
|
||||
BatteryStatus.getChargingSpeed(context, batteryBroadcast)
|
||||
== BatteryStatus.CHARGING_FAST;
|
||||
if (info.isBatteryDefender) {
|
||||
if (info.isLongLife) {
|
||||
info.isBatteryDefender =
|
||||
FeatureFactory.getFeatureFactory()
|
||||
.getPowerUsageFeatureProvider()
|
||||
|
@@ -600,12 +600,12 @@ public class BatteryUtils {
|
||||
context.getContentResolver(), SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0)
|
||||
== 1) {
|
||||
return DockDefenderMode.TEMPORARILY_BYPASSED;
|
||||
} else if (batteryInfo.isBatteryDefender
|
||||
} else if (batteryInfo.isLongLife
|
||||
&& FeatureFactory.getFeatureFactory()
|
||||
.getPowerUsageFeatureProvider()
|
||||
.isExtraDefend()) {
|
||||
return DockDefenderMode.ACTIVE;
|
||||
} else if (!batteryInfo.isBatteryDefender) {
|
||||
} else if (!batteryInfo.isLongLife) {
|
||||
return DockDefenderMode.FUTURE_BYPASS;
|
||||
}
|
||||
}
|
||||
|
@@ -247,7 +247,7 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
|
||||
|
||||
@Override
|
||||
public boolean isBatteryDefend(BatteryInfo info) {
|
||||
return info.isBatteryDefender && !isExtraDefend();
|
||||
return info.isLongLife && !isExtraDefend();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@@ -21,7 +21,6 @@ import android.content.Context;
|
||||
import com.android.settings.fuelgauge.BatteryInfo;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryDefenderTip;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
|
||||
/** Detect whether the battery is overheated */
|
||||
public class BatteryDefenderDetector implements BatteryTipDetector {
|
||||
@@ -35,12 +34,10 @@ public class BatteryDefenderDetector implements BatteryTipDetector {
|
||||
|
||||
@Override
|
||||
public BatteryTip detect() {
|
||||
final boolean isBasicBatteryDefend =
|
||||
FeatureFactory.getFeatureFactory()
|
||||
.getPowerUsageFeatureProvider()
|
||||
.isBatteryDefend(mBatteryInfo);
|
||||
final int state =
|
||||
isBasicBatteryDefend ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE;
|
||||
mBatteryInfo.isBatteryDefender
|
||||
? BatteryTip.StateType.NEW
|
||||
: BatteryTip.StateType.INVISIBLE;
|
||||
final boolean isPluggedIn = mBatteryInfo.pluggedStatus != 0;
|
||||
return new BatteryDefenderTip(state, isPluggedIn);
|
||||
}
|
||||
|
@@ -789,6 +789,40 @@ public class BatteryInfoTest {
|
||||
expectedChargeLabel);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBatteryInfo_longlife_shouldSetLonglife() {
|
||||
var batteryIntent = createIntentForLongLifeTest(/* hasLongLife= */ true);
|
||||
|
||||
var batteryInfo =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
batteryIntent,
|
||||
mBatteryUsageStats,
|
||||
/* estimate= */ MOCK_ESTIMATE,
|
||||
/* elapsedRealtimeUs= */ 0L,
|
||||
/* shortString= */ false,
|
||||
/* currentTimeMs= */ 0L);
|
||||
|
||||
assertThat(batteryInfo.isLongLife).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBatteryInfo_noLonglife_shouldNotLonglife() {
|
||||
var batteryIntent = createIntentForLongLifeTest(/* hasLongLife= */ false);
|
||||
|
||||
var batteryInfo =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
batteryIntent,
|
||||
mBatteryUsageStats,
|
||||
/* estimate= */ MOCK_ESTIMATE,
|
||||
/* elapsedRealtimeUs= */ 0L,
|
||||
/* shortString= */ false,
|
||||
/* currentTimeMs= */ 0L);
|
||||
|
||||
assertThat(batteryInfo.isLongLife).isFalse();
|
||||
}
|
||||
|
||||
private enum ChargingSpeed {
|
||||
FAST,
|
||||
REGULAR,
|
||||
@@ -801,6 +835,15 @@ public class BatteryInfoTest {
|
||||
DOCKED
|
||||
}
|
||||
|
||||
private Intent createIntentForLongLifeTest(Boolean hasLongLife) {
|
||||
return new Intent(Intent.ACTION_BATTERY_CHANGED)
|
||||
.putExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
hasLongLife
|
||||
? BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE
|
||||
: BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
}
|
||||
|
||||
private Intent createIntentForGetBatteryInfoTest(
|
||||
ChargingType chargingType, ChargingSpeed chargingSpeed, int batteryLevel) {
|
||||
return createBatteryIntent(
|
||||
|
@@ -165,7 +165,7 @@ public class PowerUsageFeatureProviderImplTest {
|
||||
|
||||
@Test
|
||||
public void isBatteryDefend_defenderModeAndExtraDefendAreFalse_returnFalse() {
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
mBatteryInfo.isLongLife = false;
|
||||
doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
|
||||
|
||||
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
||||
@@ -173,7 +173,7 @@ public class PowerUsageFeatureProviderImplTest {
|
||||
|
||||
@Test
|
||||
public void isBatteryDefend_defenderModeIsFalse_returnFalse() {
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
mBatteryInfo.isLongLife = false;
|
||||
doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
|
||||
|
||||
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
||||
@@ -181,7 +181,7 @@ public class PowerUsageFeatureProviderImplTest {
|
||||
|
||||
@Test
|
||||
public void isBatteryDefend_defenderModeAndExtraDefendAreTrue_returnFalse() {
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
mBatteryInfo.isLongLife = true;
|
||||
doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
|
||||
|
||||
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
||||
@@ -189,7 +189,7 @@ public class PowerUsageFeatureProviderImplTest {
|
||||
|
||||
@Test
|
||||
public void isBatteryDefend_extraDefendIsFalse_returnTrue() {
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
mBatteryInfo.isLongLife = true;
|
||||
doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
|
||||
|
||||
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isTrue();
|
||||
|
@@ -18,15 +18,12 @@ package com.android.settings.fuelgauge.batterytip.detectors;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
|
||||
import com.android.settings.fuelgauge.BatteryInfo;
|
||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||
import com.android.settings.testutils.FakeFeatureFactory;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@@ -41,28 +38,23 @@ public class BatteryDefenderDetectorTest {
|
||||
@Mock private BatteryInfo mBatteryInfo;
|
||||
private BatteryDefenderDetector mBatteryDefenderDetector;
|
||||
|
||||
private FakeFeatureFactory mFakeFeatureFactory;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
final Context context = ApplicationProvider.getApplicationContext();
|
||||
mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, context);
|
||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void detect_notBatteryDefend_tipInvisible() {
|
||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.isBatteryDefend(mBatteryInfo))
|
||||
.thenReturn(false);
|
||||
mBatteryInfo.isBatteryDefender = false;
|
||||
|
||||
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void detect_isBatteryDefend_tipNew() {
|
||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.isBatteryDefend(mBatteryInfo))
|
||||
.thenReturn(true);
|
||||
mBatteryInfo.isBatteryDefender = true;
|
||||
|
||||
assertThat(mBatteryDefenderDetector.detect().getState())
|
||||
.isEqualTo(BatteryTip.StateType.NEW);
|
||||
|
Reference in New Issue
Block a user