Provide different ways to detect battery defender.

Bug: 335567248
Test: robotests
Change-Id: Ie1d3d7da99fa698468ffd124410cfd3b56bc0c34
This commit is contained in:
Yiling Chuang
2024-04-25 08:00:59 +00:00
parent c44d4f3f6f
commit 11e810e7a7
5 changed files with 74 additions and 51 deletions

View File

@@ -151,4 +151,7 @@ public interface PowerUsageFeatureProvider {
/** Whether the app optimization mode is valid to restore */ /** Whether the app optimization mode is valid to restore */
boolean isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap); boolean isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap);
/** Whether the device is under the battery defender mode */
boolean isBatteryDefend(BatteryInfo info);
} }

View File

@@ -235,4 +235,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider
public boolean isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap) { public boolean isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap) {
return false; return false;
} }
@Override
public boolean isBatteryDefend(BatteryInfo info) {
return info.isBatteryDefender && !isExtraDefend();
}
} }

View File

@@ -36,10 +36,9 @@ public class BatteryDefenderDetector implements BatteryTipDetector {
@Override @Override
public BatteryTip detect() { public BatteryTip detect() {
final boolean isBasicBatteryDefend = final boolean isBasicBatteryDefend =
mBatteryInfo.isBatteryDefender FeatureFactory.getFeatureFactory()
&& !FeatureFactory.getFeatureFactory() .getPowerUsageFeatureProvider()
.getPowerUsageFeatureProvider() .isBatteryDefend(mBatteryInfo);
.isExtraDefend();
final int state = final int state =
isBasicBatteryDefend ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE; isBasicBatteryDefend ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE;
final boolean isPluggedIn = mBatteryInfo.pluggedStatus != 0; final boolean isPluggedIn = mBatteryInfo.pluggedStatus != 0;

View File

@@ -18,6 +18,8 @@ package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Context; import android.content.Context;
@@ -48,6 +50,8 @@ public class PowerUsageFeatureProviderImplTest {
private Context mContext; private Context mContext;
@Mock private PackageManager mPackageManager; @Mock private PackageManager mPackageManager;
@Mock private BatteryInfo mBatteryInfo;
private PowerUsageFeatureProviderImpl mPowerFeatureProvider; private PowerUsageFeatureProviderImpl mPowerFeatureProvider;
@Before @Before
@@ -55,73 +59,74 @@ public class PowerUsageFeatureProviderImplTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
when(mContext.getApplicationContext()).thenReturn(mContext); when(mContext.getApplicationContext()).thenReturn(mContext);
mPowerFeatureProvider = new PowerUsageFeatureProviderImpl(mContext); mPowerFeatureProvider = spy(new PowerUsageFeatureProviderImpl(mContext));
when(mPackageManager.getPackagesForUid(UID_CALENDAR)).thenReturn(PACKAGES_CALENDAR); when(mPackageManager.getPackagesForUid(UID_CALENDAR)).thenReturn(PACKAGES_CALENDAR);
when(mPackageManager.getPackagesForUid(UID_MEDIA)).thenReturn(PACKAGES_MEDIA); when(mPackageManager.getPackagesForUid(UID_MEDIA)).thenReturn(PACKAGES_MEDIA);
when(mPackageManager.getPackagesForUid(UID_SYSTEMUI)).thenReturn(PACKAGES_SYSTEMUI); when(mPackageManager.getPackagesForUid(UID_SYSTEMUI)).thenReturn(PACKAGES_SYSTEMUI);
mPowerFeatureProvider.mPackageManager = mPackageManager; mPowerFeatureProvider.mPackageManager = mPackageManager;
mBatteryInfo.discharging = false;
} }
@Test @Test
public void testIsBatteryUsageEnabled_returnFalse() { public void isBatteryUsageEnabled_returnFalse() {
assertThat(mPowerFeatureProvider.isBatteryUsageEnabled()).isTrue(); assertThat(mPowerFeatureProvider.isBatteryUsageEnabled()).isTrue();
} }
@Test @Test
public void testIsBatteryTipsEnabled_returnFalse() { public void isBatteryTipsEnabled_returnFalse() {
assertThat(mPowerFeatureProvider.isBatteryTipsEnabled()).isFalse(); assertThat(mPowerFeatureProvider.isBatteryTipsEnabled()).isFalse();
} }
@Test @Test
public void testIsAppOptimizationModeLogged_returnFalse() { public void isAppOptimizationModeLogged_returnFalse() {
assertThat(mPowerFeatureProvider.isAppOptimizationModeLogged()).isFalse(); assertThat(mPowerFeatureProvider.isAppOptimizationModeLogged()).isFalse();
} }
@Test @Test
public void testGetBatteryUsageListConsumePowerThreshold_return0() { public void getBatteryUsageListConsumePowerThreshold_return0() {
assertThat(mPowerFeatureProvider.getBatteryUsageListConsumePowerThreshold()).isEqualTo(0.0); assertThat(mPowerFeatureProvider.getBatteryUsageListConsumePowerThreshold()).isEqualTo(0.0);
} }
@Test @Test
public void testIsTypeSystem_uidRoot_returnTrue() { public void isTypeSystem_uidRoot_returnTrue() {
assertThat(mPowerFeatureProvider.isTypeSystem(Process.ROOT_UID, null)).isTrue(); assertThat(mPowerFeatureProvider.isTypeSystem(Process.ROOT_UID, null)).isTrue();
} }
@Test @Test
public void testIsTypeSystem_uidSystem_returnTrue() { public void isTypeSystem_uidSystem_returnTrue() {
assertThat(mPowerFeatureProvider.isTypeSystem(Process.SYSTEM_UID, null)).isTrue(); assertThat(mPowerFeatureProvider.isTypeSystem(Process.SYSTEM_UID, null)).isTrue();
} }
@Test @Test
public void testIsTypeSystem_uidMedia_returnTrue() { public void isTypeSystem_uidMedia_returnTrue() {
assertThat(mPowerFeatureProvider.isTypeSystem(Process.MEDIA_UID, null)).isTrue(); assertThat(mPowerFeatureProvider.isTypeSystem(Process.MEDIA_UID, null)).isTrue();
} }
@Test @Test
@Ignore @Ignore
public void testIsTypeSystem_appCalendar_returnTrue() { public void isTypeSystem_appCalendar_returnTrue() {
assertThat(mPowerFeatureProvider.isTypeSystem(UID_CALENDAR, null)).isTrue(); assertThat(mPowerFeatureProvider.isTypeSystem(UID_CALENDAR, null)).isTrue();
} }
@Test @Test
@Ignore @Ignore
public void testIsTypeSystem_appMedia_returnTrue() { public void isTypeSystem_appMedia_returnTrue() {
assertThat(mPowerFeatureProvider.isTypeSystem(UID_MEDIA, null)).isTrue(); assertThat(mPowerFeatureProvider.isTypeSystem(UID_MEDIA, null)).isTrue();
} }
@Test @Test
@Ignore @Ignore
public void testIsTypeSystem_appSystemUi_returnTrue() { public void isTypeSystem_appSystemUi_returnTrue() {
assertThat(mPowerFeatureProvider.isTypeSystem(UID_SYSTEMUI, null)).isTrue(); assertThat(mPowerFeatureProvider.isTypeSystem(UID_SYSTEMUI, null)).isTrue();
} }
@Test @Test
public void testIsTypeSystem_uidOther_returnFalse() { public void isTypeSystem_uidOther_returnFalse() {
assertThat(mPowerFeatureProvider.isTypeSystem(UID_OTHER, null)).isFalse(); assertThat(mPowerFeatureProvider.isTypeSystem(UID_OTHER, null)).isFalse();
} }
@Test @Test
public void testIsSmartBatterySupported_smartBatterySupported_returnTrue() { public void isSmartBatterySupported_smartBatterySupported_returnTrue() {
when(mContext.getResources() when(mContext.getResources()
.getBoolean(com.android.internal.R.bool.config_smart_battery_available)) .getBoolean(com.android.internal.R.bool.config_smart_battery_available))
.thenReturn(true); .thenReturn(true);
@@ -130,7 +135,7 @@ public class PowerUsageFeatureProviderImplTest {
} }
@Test @Test
public void testIsSmartBatterySupported_smartBatteryNotSupported_returnFalse() { public void isSmartBatterySupported_smartBatteryNotSupported_returnFalse() {
when(mContext.getResources() when(mContext.getResources()
.getBoolean(com.android.internal.R.bool.config_smart_battery_available)) .getBoolean(com.android.internal.R.bool.config_smart_battery_available))
.thenReturn(false); .thenReturn(false);
@@ -139,17 +144,49 @@ public class PowerUsageFeatureProviderImplTest {
} }
@Test @Test
public void testIsAdaptiveChargingSupported_returnFalse() { public void isAdaptiveChargingSupported_returnFalse() {
assertThat(mPowerFeatureProvider.isAdaptiveChargingSupported()).isFalse(); assertThat(mPowerFeatureProvider.isAdaptiveChargingSupported()).isFalse();
} }
@Test @Test
public void testGetResumeChargeIntentWithoutDockDefender_returnNull() { public void getResumeChargeIntentWithoutDockDefender_returnNull() {
assertThat(mPowerFeatureProvider.getResumeChargeIntent(false)).isNull(); assertThat(mPowerFeatureProvider.getResumeChargeIntent(false)).isNull();
} }
@Test @Test
public void testGetResumeChargeIntentWithDockDefender_returnNull() { public void getResumeChargeIntentWithDockDefender_returnNull() {
assertThat(mPowerFeatureProvider.getResumeChargeIntent(true)).isNull(); assertThat(mPowerFeatureProvider.getResumeChargeIntent(true)).isNull();
} }
@Test
public void isBatteryDefend_defenderModeAndExtraDefendAreFalse_returnFalse() {
mBatteryInfo.isBatteryDefender = false;
doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
}
@Test
public void isBatteryDefend_defenderModeIsFalse_returnFalse() {
mBatteryInfo.isBatteryDefender = false;
doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
}
@Test
public void isBatteryDefend_defenderModeAndExtraDefendAreTrue_returnFalse() {
mBatteryInfo.isBatteryDefender = true;
doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
}
@Test
public void isBatteryDefend_extraDefendIsFalse_returnTrue() {
mBatteryInfo.isBatteryDefender = true;
doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isTrue();
}
} }

View File

@@ -40,53 +40,32 @@ public class BatteryDefenderDetectorTest {
@Mock private BatteryInfo mBatteryInfo; @Mock private BatteryInfo mBatteryInfo;
private BatteryDefenderDetector mBatteryDefenderDetector; private BatteryDefenderDetector mBatteryDefenderDetector;
private Context mContext;
private FakeFeatureFactory mFakeFeatureFactory; private FakeFeatureFactory mFakeFeatureFactory;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
final Context context = ApplicationProvider.getApplicationContext();
mBatteryInfo.discharging = false; mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, context);
mContext = ApplicationProvider.getApplicationContext();
mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, mContext);
mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
} }
@Test @Test
public void testDetect_notDefenderNotExtraDefend_tipInvisible() { public void detect_notBatteryDefend_tipInvisible() {
mBatteryInfo.isBatteryDefender = false; when(mFakeFeatureFactory.powerUsageFeatureProvider.isBatteryDefend(mBatteryInfo))
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(false); .thenReturn(false);
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse(); assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
} }
@Test @Test
public void testDetect_notDefenderIsExtraDefend_tipInvisible() { public void detect_isBatteryDefend_tipNew() {
mBatteryInfo.isBatteryDefender = false; when(mFakeFeatureFactory.powerUsageFeatureProvider.isBatteryDefend(mBatteryInfo))
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(true); .thenReturn(true);
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
}
@Test
public void testDetect_isDefenderIsExtraDefend_tipInvisible() {
mBatteryInfo.isBatteryDefender = false;
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(true);
assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
}
@Test
public void testDetect_isDefenderNotExtraDefend_tipNew() {
mBatteryInfo.isBatteryDefender = true;
when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(false);
assertThat(mBatteryDefenderDetector.detect().getState()) assertThat(mBatteryDefenderDetector.detect().getState())
.isEqualTo(BatteryTip.StateType.NEW); .isEqualTo(BatteryTip.StateType.NEW);
assertThat(mBatteryDefenderDetector.detect().isVisible()).isTrue();
} }
} }