[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 batteryStatus;
|
||||||
public int pluggedStatus;
|
public int pluggedStatus;
|
||||||
public boolean discharging = true;
|
public boolean discharging = true;
|
||||||
public boolean isBatteryDefender;
|
public boolean isBatteryDefender = false;
|
||||||
|
public boolean isLongLife = false;
|
||||||
public boolean isFastCharging;
|
public boolean isFastCharging;
|
||||||
public long remainingTimeUs = 0;
|
public long remainingTimeUs = 0;
|
||||||
public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
|
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.pluggedStatus = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0);
|
||||||
info.mCharging = info.pluggedStatus != 0;
|
info.mCharging = info.pluggedStatus != 0;
|
||||||
info.averageTimeToDischarge = estimate.getAverageDischargeTime();
|
info.averageTimeToDischarge = estimate.getAverageDischargeTime();
|
||||||
info.isBatteryDefender =
|
info.isLongLife =
|
||||||
batteryBroadcast.getIntExtra(
|
batteryBroadcast.getIntExtra(
|
||||||
BatteryManager.EXTRA_CHARGING_STATUS,
|
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||||
BatteryManager.CHARGING_POLICY_DEFAULT)
|
BatteryManager.CHARGING_POLICY_DEFAULT)
|
||||||
@@ -319,7 +320,7 @@ public class BatteryInfo {
|
|||||||
info.isFastCharging =
|
info.isFastCharging =
|
||||||
BatteryStatus.getChargingSpeed(context, batteryBroadcast)
|
BatteryStatus.getChargingSpeed(context, batteryBroadcast)
|
||||||
== BatteryStatus.CHARGING_FAST;
|
== BatteryStatus.CHARGING_FAST;
|
||||||
if (info.isBatteryDefender) {
|
if (info.isLongLife) {
|
||||||
info.isBatteryDefender =
|
info.isBatteryDefender =
|
||||||
FeatureFactory.getFeatureFactory()
|
FeatureFactory.getFeatureFactory()
|
||||||
.getPowerUsageFeatureProvider()
|
.getPowerUsageFeatureProvider()
|
||||||
|
@@ -600,12 +600,12 @@ public class BatteryUtils {
|
|||||||
context.getContentResolver(), SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0)
|
context.getContentResolver(), SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0)
|
||||||
== 1) {
|
== 1) {
|
||||||
return DockDefenderMode.TEMPORARILY_BYPASSED;
|
return DockDefenderMode.TEMPORARILY_BYPASSED;
|
||||||
} else if (batteryInfo.isBatteryDefender
|
} else if (batteryInfo.isLongLife
|
||||||
&& FeatureFactory.getFeatureFactory()
|
&& FeatureFactory.getFeatureFactory()
|
||||||
.getPowerUsageFeatureProvider()
|
.getPowerUsageFeatureProvider()
|
||||||
.isExtraDefend()) {
|
.isExtraDefend()) {
|
||||||
return DockDefenderMode.ACTIVE;
|
return DockDefenderMode.ACTIVE;
|
||||||
} else if (!batteryInfo.isBatteryDefender) {
|
} else if (!batteryInfo.isLongLife) {
|
||||||
return DockDefenderMode.FUTURE_BYPASS;
|
return DockDefenderMode.FUTURE_BYPASS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -247,7 +247,7 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isBatteryDefend(BatteryInfo info) {
|
public boolean isBatteryDefend(BatteryInfo info) {
|
||||||
return info.isBatteryDefender && !isExtraDefend();
|
return info.isLongLife && !isExtraDefend();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -21,7 +21,6 @@ import android.content.Context;
|
|||||||
import com.android.settings.fuelgauge.BatteryInfo;
|
import com.android.settings.fuelgauge.BatteryInfo;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryDefenderTip;
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryDefenderTip;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||||
import com.android.settings.overlay.FeatureFactory;
|
|
||||||
|
|
||||||
/** Detect whether the battery is overheated */
|
/** Detect whether the battery is overheated */
|
||||||
public class BatteryDefenderDetector implements BatteryTipDetector {
|
public class BatteryDefenderDetector implements BatteryTipDetector {
|
||||||
@@ -35,12 +34,10 @@ public class BatteryDefenderDetector implements BatteryTipDetector {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BatteryTip detect() {
|
public BatteryTip detect() {
|
||||||
final boolean isBasicBatteryDefend =
|
|
||||||
FeatureFactory.getFeatureFactory()
|
|
||||||
.getPowerUsageFeatureProvider()
|
|
||||||
.isBatteryDefend(mBatteryInfo);
|
|
||||||
final int state =
|
final int state =
|
||||||
isBasicBatteryDefend ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE;
|
mBatteryInfo.isBatteryDefender
|
||||||
|
? BatteryTip.StateType.NEW
|
||||||
|
: BatteryTip.StateType.INVISIBLE;
|
||||||
final boolean isPluggedIn = mBatteryInfo.pluggedStatus != 0;
|
final boolean isPluggedIn = mBatteryInfo.pluggedStatus != 0;
|
||||||
return new BatteryDefenderTip(state, isPluggedIn);
|
return new BatteryDefenderTip(state, isPluggedIn);
|
||||||
}
|
}
|
||||||
|
@@ -789,6 +789,40 @@ public class BatteryInfoTest {
|
|||||||
expectedChargeLabel);
|
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 {
|
private enum ChargingSpeed {
|
||||||
FAST,
|
FAST,
|
||||||
REGULAR,
|
REGULAR,
|
||||||
@@ -801,6 +835,15 @@ public class BatteryInfoTest {
|
|||||||
DOCKED
|
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(
|
private Intent createIntentForGetBatteryInfoTest(
|
||||||
ChargingType chargingType, ChargingSpeed chargingSpeed, int batteryLevel) {
|
ChargingType chargingType, ChargingSpeed chargingSpeed, int batteryLevel) {
|
||||||
return createBatteryIntent(
|
return createBatteryIntent(
|
||||||
|
@@ -165,7 +165,7 @@ public class PowerUsageFeatureProviderImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isBatteryDefend_defenderModeAndExtraDefendAreFalse_returnFalse() {
|
public void isBatteryDefend_defenderModeAndExtraDefendAreFalse_returnFalse() {
|
||||||
mBatteryInfo.isBatteryDefender = false;
|
mBatteryInfo.isLongLife = false;
|
||||||
doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
|
doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
|
||||||
|
|
||||||
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
||||||
@@ -173,7 +173,7 @@ public class PowerUsageFeatureProviderImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isBatteryDefend_defenderModeIsFalse_returnFalse() {
|
public void isBatteryDefend_defenderModeIsFalse_returnFalse() {
|
||||||
mBatteryInfo.isBatteryDefender = false;
|
mBatteryInfo.isLongLife = false;
|
||||||
doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
|
doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
|
||||||
|
|
||||||
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
||||||
@@ -181,7 +181,7 @@ public class PowerUsageFeatureProviderImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isBatteryDefend_defenderModeAndExtraDefendAreTrue_returnFalse() {
|
public void isBatteryDefend_defenderModeAndExtraDefendAreTrue_returnFalse() {
|
||||||
mBatteryInfo.isBatteryDefender = true;
|
mBatteryInfo.isLongLife = true;
|
||||||
doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
|
doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
|
||||||
|
|
||||||
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
|
||||||
@@ -189,7 +189,7 @@ public class PowerUsageFeatureProviderImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void isBatteryDefend_extraDefendIsFalse_returnTrue() {
|
public void isBatteryDefend_extraDefendIsFalse_returnTrue() {
|
||||||
mBatteryInfo.isBatteryDefender = true;
|
mBatteryInfo.isLongLife = true;
|
||||||
doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
|
doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
|
||||||
|
|
||||||
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isTrue();
|
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 com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
|
||||||
import com.android.settings.fuelgauge.BatteryInfo;
|
import com.android.settings.fuelgauge.BatteryInfo;
|
||||||
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
|
||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
|
||||||
|
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
@@ -41,28 +38,23 @@ public class BatteryDefenderDetectorTest {
|
|||||||
@Mock private BatteryInfo mBatteryInfo;
|
@Mock private BatteryInfo mBatteryInfo;
|
||||||
private BatteryDefenderDetector mBatteryDefenderDetector;
|
private BatteryDefenderDetector mBatteryDefenderDetector;
|
||||||
|
|
||||||
private FakeFeatureFactory mFakeFeatureFactory;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
final Context context = ApplicationProvider.getApplicationContext();
|
final Context context = ApplicationProvider.getApplicationContext();
|
||||||
mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, context);
|
mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, context);
|
||||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void detect_notBatteryDefend_tipInvisible() {
|
public void detect_notBatteryDefend_tipInvisible() {
|
||||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.isBatteryDefend(mBatteryInfo))
|
mBatteryInfo.isBatteryDefender = false;
|
||||||
.thenReturn(false);
|
|
||||||
|
|
||||||
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
|
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void detect_isBatteryDefend_tipNew() {
|
public void detect_isBatteryDefend_tipNew() {
|
||||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.isBatteryDefend(mBatteryInfo))
|
mBatteryInfo.isBatteryDefender = true;
|
||||||
.thenReturn(true);
|
|
||||||
|
|
||||||
assertThat(mBatteryDefenderDetector.detect().getState())
|
assertThat(mBatteryDefenderDetector.detect().getState())
|
||||||
.isEqualTo(BatteryTip.StateType.NEW);
|
.isEqualTo(BatteryTip.StateType.NEW);
|
||||||
|
Reference in New Issue
Block a user