Format battery java test code

context:go/pixel-energizer-java-format

Test: manual
Bug: 304439460
Fix: 304439460
Change-Id: I5be0ee41afb3a7018bc7e25cceccc25669924d6c
This commit is contained in:
Jun Lan
2023-11-07 10:16:53 +08:00
parent 2ddabf5785
commit 358a85ecfe
95 changed files with 4477 additions and 3385 deletions

View File

@@ -78,7 +78,8 @@ import org.robolectric.util.ReflectionHelpers;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = { @Config(
shadows = {
ShadowEntityHeaderController.class, ShadowEntityHeaderController.class,
ShadowActivityManager.class, ShadowActivityManager.class,
com.android.settings.testutils.shadow.ShadowFragment.class, com.android.settings.testutils.shadow.ShadowFragment.class,
@@ -99,30 +100,19 @@ public class AdvancedPowerUsageDetailTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private FragmentActivity mActivity; private FragmentActivity mActivity;
@Mock
private EntityHeaderController mEntityHeaderController; @Mock private EntityHeaderController mEntityHeaderController;
@Mock @Mock private LayoutPreference mHeaderPreference;
private LayoutPreference mHeaderPreference; @Mock private ApplicationsState mState;
@Mock @Mock private ApplicationsState.AppEntry mAppEntry;
private ApplicationsState mState; @Mock private Bundle mBundle;
@Mock @Mock private BatteryEntry mBatteryEntry;
private ApplicationsState.AppEntry mAppEntry; @Mock private PackageManager mPackageManager;
@Mock @Mock private InstallSourceInfo mInstallSourceInfo;
private Bundle mBundle; @Mock private AppOpsManager mAppOpsManager;
@Mock @Mock private LoaderManager mLoaderManager;
private BatteryEntry mBatteryEntry; @Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
@Mock @Mock private BackupManager mBackupManager;
private PackageManager mPackageManager;
@Mock
private InstallSourceInfo mInstallSourceInfo;
@Mock
private AppOpsManager mAppOpsManager;
@Mock
private LoaderManager mLoaderManager;
@Mock
private BatteryOptimizeUtils mBatteryOptimizeUtils;
@Mock
private BackupManager mBackupManager;
private Context mContext; private Context mContext;
private PrimarySwitchPreference mAllowBackgroundUsagePreference; private PrimarySwitchPreference mAllowBackgroundUsagePreference;
@@ -149,19 +139,26 @@ public class AdvancedPowerUsageDetailTest {
doReturn(mLoaderManager).when(mFragment).getLoaderManager(); doReturn(mLoaderManager).when(mFragment).getLoaderManager();
ShadowEntityHeaderController.setUseMock(mEntityHeaderController); ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setButtonActions(anyInt(), anyInt()); .setButtonActions(anyInt(), anyInt());
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setIcon(nullable(Drawable.class)); .setIcon(nullable(Drawable.class));
doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable( doReturn(mEntityHeaderController)
ApplicationsState.AppEntry.class)); .when(mEntityHeaderController)
doReturn(mEntityHeaderController).when(mEntityHeaderController) .setIcon(nullable(ApplicationsState.AppEntry.class));
doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setLabel(nullable(String.class)); .setLabel(nullable(String.class));
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setLabel(nullable(String.class)); .setLabel(nullable(String.class));
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setLabel(nullable(ApplicationsState.AppEntry.class)); .setLabel(nullable(ApplicationsState.AppEntry.class));
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setSummary(nullable(String.class)); .setSummary(nullable(String.class));
when(mBatteryEntry.getUid()).thenReturn(UID); when(mBatteryEntry.getUid()).thenReturn(UID);
@@ -184,13 +181,15 @@ public class AdvancedPowerUsageDetailTest {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
Answer<Void> callable = invocation -> { Answer<Void> callable =
invocation -> {
mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
System.out.println("mBundle = " + mBundle); System.out.println("mBundle = " + mBundle);
return null; return null;
}; };
doAnswer(callable).when(mActivity).startActivityAsUser(captor.capture(), doAnswer(callable)
nullable(UserHandle.class)); .when(mActivity)
.startActivityAsUser(captor.capture(), nullable(UserHandle.class));
doAnswer(callable).when(mActivity).startActivity(captor.capture()); doAnswer(callable).when(mActivity).startActivity(captor.capture());
mAllowBackgroundUsagePreference = new PrimarySwitchPreference(mContext); mAllowBackgroundUsagePreference = new PrimarySwitchPreference(mContext);
@@ -219,7 +218,9 @@ public class AdvancedPowerUsageDetailTest {
@Test @Test
public void initHeader_HasAppEntry_BuildByAppEntry() { public void initHeader_HasAppEntry_BuildByAppEntry() {
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", ReflectionHelpers.setStaticField(
AppUtils.class,
"sInstantAppDataProvider",
new InstantAppDataProvider() { new InstantAppDataProvider() {
@Override @Override
public boolean isInstantApp(ApplicationInfo info) { public boolean isInstantApp(ApplicationInfo info) {
@@ -236,7 +237,9 @@ public class AdvancedPowerUsageDetailTest {
@Test @Test
public void initHeader_HasAppEntry_InstantApp() { public void initHeader_HasAppEntry_InstantApp() {
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", ReflectionHelpers.setStaticField(
AppUtils.class,
"sInstantAppDataProvider",
new InstantAppDataProvider() { new InstantAppDataProvider() {
@Override @Override
public boolean isInstantApp(ApplicationInfo info) { public boolean isInstantApp(ApplicationInfo info) {
@@ -253,16 +256,13 @@ public class AdvancedPowerUsageDetailTest {
@Test @Test
public void startBatteryDetailPage_invalidToShowSummary_noFGBDData() { public void startBatteryDetailPage_invalidToShowSummary_noFGBDData() {
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment, AdvancedPowerUsageDetail.startBatteryDetailPage(
mBatteryEntry, USAGE_PERCENT); mActivity, mFragment, mBatteryEntry, USAGE_PERCENT);
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID); assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)) assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo(0);
.isEqualTo(0); assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo(0);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)) assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_SCREEN_ON_TIME)).isEqualTo(0);
.isEqualTo(0);
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_SCREEN_ON_TIME))
.isEqualTo(0);
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)) assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
.isEqualTo(USAGE_PERCENT); .isEqualTo(USAGE_PERCENT);
} }
@@ -276,18 +276,22 @@ public class AdvancedPowerUsageDetailTest {
verify(mActivity).startActivity(captor.capture()); verify(mActivity).startActivity(captor.capture());
assertThat(captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS) assertThat(
captor.getValue()
.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME)) .getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME))
.isEqualTo(PACKAGE_NAME[0]); .isEqualTo(PACKAGE_NAME[0]);
assertThat(captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS) assertThat(
captor.getValue()
.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT)) .getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
.isEqualTo("0%"); .isEqualTo("0%");
} }
@Test @Test
public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName() throws public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName()
PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException {
doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */); doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
AdvancedPowerUsageDetail.startBatteryDetailPage( AdvancedPowerUsageDetail.startBatteryDetailPage(

View File

@@ -88,8 +88,8 @@ public class AllowBackgroundPreferenceControllerTest {
public void testUpdateState_isSystemOrDefaultAppAndRestrictedStates_prefChecked() { public void testUpdateState_isSystemOrDefaultAppAndRestrictedStates_prefChecked() {
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true); when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_RESTRICTED); .thenReturn(BatteryOptimizeUtils.MODE_RESTRICTED);
mController.updateState(mMainSwitchPreference); mController.updateState(mMainSwitchPreference);
@@ -101,8 +101,8 @@ public class AllowBackgroundPreferenceControllerTest {
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() { public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true); when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_OPTIMIZED); .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
mController.updateState(mMainSwitchPreference); mController.updateState(mMainSwitchPreference);
@@ -113,8 +113,8 @@ public class AllowBackgroundPreferenceControllerTest {
@Test @Test
public void testUpdateState_isRestrictedStates_prefChecked() { public void testUpdateState_isRestrictedStates_prefChecked() {
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true); when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_RESTRICTED); .thenReturn(BatteryOptimizeUtils.MODE_RESTRICTED);
mController.updateState(mMainSwitchPreference); mController.updateState(mMainSwitchPreference);
@@ -125,8 +125,8 @@ public class AllowBackgroundPreferenceControllerTest {
@Test @Test
public void testUpdateState_prefUnchecked() { public void testUpdateState_prefUnchecked() {
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true); when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_OPTIMIZED); .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
mController.updateState(mMainSwitchPreference); mController.updateState(mMainSwitchPreference);

View File

@@ -91,26 +91,25 @@ public class AutoRestrictionPreferenceControllerTest {
public void testGetAvailabilityStatus_smartBatterySupported_returnDisabled() { public void testGetAvailabilityStatus_smartBatterySupported_returnDisabled() {
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported(); doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus())
BasePreferenceController.UNSUPPORTED_ON_DEVICE); .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
} }
@Test @Test
public void testGetAvailabilityStatus_smartBatteryUnSupported_returnAvailable() { public void testGetAvailabilityStatus_smartBatteryUnSupported_returnAvailable() {
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported(); doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus())
BasePreferenceController.AVAILABLE); .isEqualTo(BasePreferenceController.AVAILABLE);
} }
private void putAutoRestrictionValue(int value) { private void putAutoRestrictionValue(int value) {
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
Settings.Global.APP_AUTO_RESTRICTION_ENABLED, mContext.getContentResolver(), Settings.Global.APP_AUTO_RESTRICTION_ENABLED, value);
value);
} }
private int getAutoRestrictionValue() { private int getAutoRestrictionValue() {
return Settings.Global.getInt(mContext.getContentResolver(), return Settings.Global.getInt(
Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON); mContext.getContentResolver(), Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON);
} }
} }

View File

@@ -94,30 +94,20 @@ public final class BatteryBackupHelperTest {
private BatteryBackupHelper mBatteryBackupHelper; private BatteryBackupHelper mBatteryBackupHelper;
private PowerUsageFeatureProvider mPowerUsageFeatureProvider; private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
@Mock @Mock private PackageManager mPackageManager;
private PackageManager mPackageManager; @Mock private BackupDataOutput mBackupDataOutput;
@Mock @Mock private BackupDataInputStream mBackupDataInputStream;
private BackupDataOutput mBackupDataOutput; @Mock private IDeviceIdleController mDeviceController;
@Mock @Mock private IPackageManager mIPackageManager;
private BackupDataInputStream mBackupDataInputStream; @Mock private AppOpsManager mAppOpsManager;
@Mock @Mock private UserManager mUserManager;
private IDeviceIdleController mDeviceController; @Mock private PowerAllowlistBackend mPowerAllowlistBackend;
@Mock @Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
private IPackageManager mIPackageManager;
@Mock
private AppOpsManager mAppOpsManager;
@Mock
private UserManager mUserManager;
@Mock
private PowerAllowlistBackend mPowerAllowlistBackend;
@Mock
private BatteryOptimizeUtils mBatteryOptimizeUtils;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mPowerUsageFeatureProvider = mPowerUsageFeatureProvider = FakeFeatureFactory.setupForTest().powerUsageFeatureProvider;
FakeFeatureFactory.setupForTest().powerUsageFeatureProvider;
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mStringWriter = new StringWriter(); mStringWriter = new StringWriter();
mPrintWriter = new PrintWriter(mStringWriter); mPrintWriter = new PrintWriter(mStringWriter);
@@ -199,8 +189,7 @@ public final class BatteryBackupHelperTest {
} }
@Test @Test
public void backupOptimizationMode_backupOptimizationModeAndIgnoreSystemApp() public void backupOptimizationMode_backupOptimizationModeAndIgnoreSystemApp() throws Exception {
throws Exception {
final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1); final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
createTestingData(PACKAGE_NAME1, UID1, PACKAGE_NAME2, PACKAGE_NAME3); createTestingData(PACKAGE_NAME1, UID1, PACKAGE_NAME2, PACKAGE_NAME3);
// Sets "com.android.testing.1" as system app. // Sets "com.android.testing.1" as system app.
@@ -294,8 +283,7 @@ public final class BatteryBackupHelperTest {
// Invoke the restoreEntity() method 2nd time. // Invoke the restoreEntity() method 2nd time.
mBatteryBackupHelper.restoreEntity(mBackupDataInputStream); mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
assertThat(TestUtils.getScheduledLevel(mContext)) assertThat(TestUtils.getScheduledLevel(mContext)).isEqualTo(invalidScheduledLevel);
.isEqualTo(invalidScheduledLevel);
} }
@Test @Test
@@ -313,9 +301,14 @@ public final class BatteryBackupHelperTest {
@Test @Test
public void restoreOptimizationMode_invalidModeFormat_skipRestore() throws Exception { public void restoreOptimizationMode_invalidModeFormat_skipRestore() throws Exception {
final String invalidNumberFormat = "google"; final String invalidNumberFormat = "google";
final String packageModes = final String package1Mode = PACKAGE_NAME1
PACKAGE_NAME1 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER + + DELIMITER_MODE
PACKAGE_NAME2 + DELIMITER_MODE + invalidNumberFormat; + MODE_RESTRICTED
+ DELIMITER;
final String package2Mode = PACKAGE_NAME2
+ DELIMITER_MODE
+ invalidNumberFormat;
final String packageModes = package1Mode + package2Mode;
mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes()); mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
TimeUnit.SECONDS.sleep(1); TimeUnit.SECONDS.sleep(1);
@@ -328,10 +321,19 @@ public final class BatteryBackupHelperTest {
@Test @Test
public void restoreOptimizationMode_restoreExpectedModes() throws Exception { public void restoreOptimizationMode_restoreExpectedModes() throws Exception {
final String packageModes = final String package1Mode = PACKAGE_NAME1
PACKAGE_NAME1 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER + + DELIMITER_MODE
PACKAGE_NAME2 + DELIMITER_MODE + MODE_UNRESTRICTED + DELIMITER + + MODE_RESTRICTED
PACKAGE_NAME3 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER; + DELIMITER;
final String package2Mode = PACKAGE_NAME2
+ DELIMITER_MODE
+ MODE_UNRESTRICTED
+ DELIMITER;
final String package3Mode = PACKAGE_NAME3
+ DELIMITER_MODE
+ MODE_RESTRICTED
+ DELIMITER;
final String packageModes = package1Mode + package2Mode + package3Mode;
mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes()); mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
TimeUnit.SECONDS.sleep(1); TimeUnit.SECONDS.sleep(1);
@@ -358,13 +360,14 @@ public final class BatteryBackupHelperTest {
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_PRODUCT, Build.PRODUCT); verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_PRODUCT, Build.PRODUCT);
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_MANUFACTURER, Build.MANUFACTURER); verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_MANUFACTURER, Build.MANUFACTURER);
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_FINGERPRINT, Build.FINGERPRINT); verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_FINGERPRINT, Build.FINGERPRINT);
inOrder.verify(mBackupDataOutput, never()).writeEntityHeader( inOrder.verify(mBackupDataOutput, never())
eq(BatteryBackupHelper.KEY_BUILD_METADATA_1), anyInt()); .writeEntityHeader(eq(BatteryBackupHelper.KEY_BUILD_METADATA_1), anyInt());
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_METADATA_2, deviceMetadata); verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_METADATA_2, deviceMetadata);
} }
private void mockUid(int uid, String packageName) throws Exception { private void mockUid(int uid, String packageName) throws Exception {
doReturn(uid).when(mPackageManager) doReturn(uid)
.when(mPackageManager)
.getPackageUid(packageName, PackageManager.GET_META_DATA); .getPackageUid(packageName, PackageManager.GET_META_DATA);
} }
@@ -384,8 +387,8 @@ public final class BatteryBackupHelperTest {
final Set<String> expectedResultSet = final Set<String> expectedResultSet =
Set.of(expectedResult.split(BatteryBackupHelper.DELIMITER)); Set.of(expectedResult.split(BatteryBackupHelper.DELIMITER));
verify(mBackupDataOutput).writeEntityHeader( verify(mBackupDataOutput)
BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length); .writeEntityHeader(BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
verify(mBackupDataOutput).writeEntityData(captor.capture(), eq(expectedBytes.length)); verify(mBackupDataOutput).writeEntityData(captor.capture(), eq(expectedBytes.length));
final String actualResult = new String(captor.getValue()); final String actualResult = new String(captor.getValue());
final Set<String> actualResultSet = final Set<String> actualResultSet =
@@ -393,8 +396,9 @@ public final class BatteryBackupHelperTest {
assertThat(actualResultSet).isEqualTo(expectedResultSet); assertThat(actualResultSet).isEqualTo(expectedResultSet);
} }
private void createTestingData(String packageName1, int uid1, String packageName2, private void createTestingData(
String packageName3) throws Exception { String packageName1, int uid1, String packageName2, String packageName3)
throws Exception {
// Sets the getInstalledApplications() method for testing. // Sets the getInstalledApplications() method for testing.
final UserInfo userInfo = final UserInfo userInfo =
new UserInfo(/* userId= */ 0, /* userName= */ "google", /* flag= */ 0); new UserInfo(/* userId= */ 0, /* userName= */ "google", /* flag= */ 0);
@@ -413,8 +417,10 @@ public final class BatteryBackupHelperTest {
applicationInfo3.uid = 3; applicationInfo3.uid = 3;
applicationInfo3.packageName = packageName3; applicationInfo3.packageName = packageName3;
applicationInfo3.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED; applicationInfo3.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
doReturn(new ParceledListSlice<ApplicationInfo>( doReturn(
Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3))) new ParceledListSlice<ApplicationInfo>(
Arrays.asList(
applicationInfo1, applicationInfo2, applicationInfo3)))
.when(mIPackageManager) .when(mIPackageManager)
.getInstalledApplications(anyLong(), anyInt()); .getInstalledApplications(anyLong(), anyInt());
// Sets the AppOpsManager for checkOpNoThrow() method. // Sets the AppOpsManager for checkOpNoThrow() method.
@@ -434,8 +440,8 @@ public final class BatteryBackupHelperTest {
new ArraySet<>(Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3)); new ArraySet<>(Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3));
} }
private void verifyBackupData( private void verifyBackupData(InOrder inOrder, String dataKey, String dataContent)
InOrder inOrder, String dataKey, String dataContent) throws Exception { throws Exception {
final byte[] expectedBytes = dataContent.getBytes(); final byte[] expectedBytes = dataContent.getBytes();
inOrder.verify(mBackupDataOutput).writeEntityHeader(dataKey, expectedBytes.length); inOrder.verify(mBackupDataOutput).writeEntityHeader(dataKey, expectedBytes.length);
inOrder.verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length); inOrder.verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length);

View File

@@ -54,8 +54,7 @@ public class BatteryBroadcastReceiverTest {
private static final int BATTERY_INTENT_LEVEL = 80; private static final int BATTERY_INTENT_LEVEL = 80;
private static final int BATTERY_INTENT_SCALE = 100; private static final int BATTERY_INTENT_SCALE = 100;
@Mock @Mock private BatteryBroadcastReceiver.OnBatteryChangedListener mBatteryListener;
private BatteryBroadcastReceiver.OnBatteryChangedListener mBatteryListener;
private BatteryBroadcastReceiver mBatteryBroadcastReceiver; private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
private Context mContext; private Context mContext;
private Intent mChargingIntent; private Intent mChargingIntent;
@@ -75,8 +74,8 @@ public class BatteryBroadcastReceiverTest {
mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED); mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED);
mChargingIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_INTENT_LEVEL); mChargingIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_INTENT_LEVEL);
mChargingIntent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_INTENT_SCALE); mChargingIntent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_INTENT_SCALE);
mChargingIntent mChargingIntent.putExtra(
.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING); BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
} }
@Test @Test
@@ -85,8 +84,10 @@ public class BatteryBroadcastReceiverTest {
assertThat(mBatteryBroadcastReceiver.mBatteryLevel) assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
.isEqualTo(Utils.getBatteryPercentage(mChargingIntent)); .isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo( assertThat(mBatteryBroadcastReceiver.mBatteryStatus)
Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false)); .isEqualTo(
Utils.getBatteryStatus(
mContext, mChargingIntent, /* compactStatus= */ false));
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL); verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL);
} }
@@ -103,7 +104,8 @@ public class BatteryBroadcastReceiverTest {
@Test @Test
public void onReceive_chargingStatusChanged_dataUpdated() { public void onReceive_chargingStatusChanged_dataUpdated() {
mChargingIntent.putExtra(BatteryManager.EXTRA_CHARGING_STATUS, mChargingIntent.putExtra(
BatteryManager.EXTRA_CHARGING_STATUS,
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE); BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent); mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent);
@@ -123,8 +125,8 @@ public class BatteryBroadcastReceiverTest {
@Test @Test
public void onReceive_powerSaveModeChanged_listenerInvoked() { public void onReceive_powerSaveModeChanged_listenerInvoked() {
mBatteryBroadcastReceiver.onReceive(mContext, mBatteryBroadcastReceiver.onReceive(
new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED)); mContext, new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_SAVER); verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_SAVER);
} }
@@ -150,16 +152,16 @@ public class BatteryBroadcastReceiverTest {
@Test @Test
public void onReceive_dockDefenderBypassed_listenerInvoked() { public void onReceive_dockDefenderBypassed_listenerInvoked() {
mBatteryBroadcastReceiver.onReceive(mContext, mBatteryBroadcastReceiver.onReceive(
new Intent(BatteryUtils.BYPASS_DOCK_DEFENDER_ACTION)); mContext, new Intent(BatteryUtils.BYPASS_DOCK_DEFENDER_ACTION));
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS); verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
} }
@Test @Test
public void onReceive_usbPortComplianceChanged_listenerInvoked() { public void onReceive_usbPortComplianceChanged_listenerInvoked() {
mBatteryBroadcastReceiver.onReceive(mContext, mBatteryBroadcastReceiver.onReceive(
new Intent(UsbManager.ACTION_USB_PORT_COMPLIANCE_CHANGED)); mContext, new Intent(UsbManager.ACTION_USB_PORT_COMPLIANCE_CHANGED));
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS); verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
} }
@@ -173,8 +175,10 @@ public class BatteryBroadcastReceiverTest {
assertThat(mBatteryBroadcastReceiver.mBatteryLevel) assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
.isEqualTo(Utils.getBatteryPercentage(mChargingIntent)); .isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo( assertThat(mBatteryBroadcastReceiver.mBatteryStatus)
Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false)); .isEqualTo(
Utils.getBatteryStatus(
mContext, mChargingIntent, /* compactStatus= */ false));
assertThat(mBatteryBroadcastReceiver.mBatteryHealth) assertThat(mBatteryBroadcastReceiver.mBatteryHealth)
.isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN); .isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN);
assertThat(mBatteryBroadcastReceiver.mChargingStatus) assertThat(mBatteryBroadcastReceiver.mChargingStatus)
@@ -188,7 +192,8 @@ public class BatteryBroadcastReceiverTest {
mBatteryBroadcastReceiver.register(); mBatteryBroadcastReceiver.register();
ArgumentCaptor<IntentFilter> captor = ArgumentCaptor.forClass(IntentFilter.class); ArgumentCaptor<IntentFilter> captor = ArgumentCaptor.forClass(IntentFilter.class);
verify(mContext).registerReceiver( verify(mContext)
.registerReceiver(
eq(mBatteryBroadcastReceiver), eq(mBatteryBroadcastReceiver),
captor.capture(), captor.capture(),
eq(Context.RECEIVER_EXPORTED)); eq(Context.RECEIVER_EXPORTED));

View File

@@ -68,22 +68,14 @@ public class BatteryHeaderPreferenceControllerTest {
private static final String TIME_LEFT = "2h30min"; private static final String TIME_LEFT = "2h30min";
private static final String BATTERY_STATUS = "Charging"; private static final String BATTERY_STATUS = "Charging";
@Mock @Mock private PreferenceScreen mPreferenceScreen;
private PreferenceScreen mPreferenceScreen; @Mock private BatteryInfo mBatteryInfo;
@Mock @Mock private EntityHeaderController mEntityHeaderController;
private BatteryInfo mBatteryInfo; @Mock private UsageProgressBarPreference mBatteryUsageProgressBarPref;
@Mock @Mock private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
private EntityHeaderController mEntityHeaderController; @Mock private UsbPort mUsbPort;
@Mock @Mock private UsbManager mUsbManager;
private UsageProgressBarPreference mBatteryUsageProgressBarPref; @Mock private UsbPortStatus mUsbPortStatus;
@Mock
private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
@Mock
private UsbPort mUsbPort;
@Mock
private UsbManager mUsbManager;
@Mock
private UsbPortStatus mUsbPortStatus;
private BatteryHeaderPreferenceController mController; private BatteryHeaderPreferenceController mController;
private Context mContext; private Context mContext;
@@ -104,7 +96,8 @@ public class BatteryHeaderPreferenceControllerTest {
mBatteryIntent.putExtra(BatteryManager.EXTRA_PLUGGED, 1); mBatteryIntent.putExtra(BatteryManager.EXTRA_PLUGGED, 1);
doReturn(mBatteryIntent).when(mContext).registerReceiver(any(), any()); doReturn(mBatteryIntent).when(mContext).registerReceiver(any(), any());
doReturn(mBatteryUsageProgressBarPref).when(mPreferenceScreen) doReturn(mBatteryUsageProgressBarPref)
.when(mPreferenceScreen)
.findPreference(BatteryHeaderPreferenceController.KEY_BATTERY_HEADER); .findPreference(BatteryHeaderPreferenceController.KEY_BATTERY_HEADER);
mBatteryInfo.batteryLevel = BATTERY_LEVEL; mBatteryInfo.batteryLevel = BATTERY_LEVEL;
@@ -235,8 +228,8 @@ public class BatteryHeaderPreferenceControllerTest {
@Test @Test
public void updateHeaderByBatteryTips_lowBatteryTip_showLowBattery() { public void updateHeaderByBatteryTips_lowBatteryTip_showLowBattery() {
setChargingState(/* isDischarging */ true, /* updatedByStatusFeature */ false); setChargingState(/* isDischarging */ true, /* updatedByStatusFeature */ false);
BatteryTip lowBatteryTip = new LowBatteryTip( BatteryTip lowBatteryTip =
BatteryTip.StateType.NEW, /* powerSaveModeOn */false); new LowBatteryTip(BatteryTip.StateType.NEW, /* powerSaveModeOn */ false);
mController.updateHeaderByBatteryTips(lowBatteryTip, mBatteryInfo); mController.updateHeaderByBatteryTips(lowBatteryTip, mBatteryInfo);
@@ -265,8 +258,8 @@ public class BatteryHeaderPreferenceControllerTest {
@Test @Test
public void updateHeaderByBatteryTips_noBatteryInfo_noAction() { public void updateHeaderByBatteryTips_noBatteryInfo_noAction() {
BatteryTip lowBatteryTip = new LowBatteryTip( BatteryTip lowBatteryTip =
BatteryTip.StateType.NEW, /* powerSaveModeOn */false); new LowBatteryTip(BatteryTip.StateType.NEW, /* powerSaveModeOn */ false);
mController.updateHeaderByBatteryTips(lowBatteryTip, null); mController.updateHeaderByBatteryTips(lowBatteryTip, null);
@@ -288,7 +281,9 @@ public class BatteryHeaderPreferenceControllerTest {
mController.updateHeaderPreference(mBatteryInfo); mController.updateHeaderPreference(mBatteryInfo);
verify(mBatteryUsageProgressBarPref).setBottomSummary(mContext.getString( verify(mBatteryUsageProgressBarPref)
.setBottomSummary(
mContext.getString(
com.android.settingslib.R.string.battery_info_status_not_charging)); com.android.settingslib.R.string.battery_info_status_not_charging));
} }
@@ -302,8 +297,8 @@ public class BatteryHeaderPreferenceControllerTest {
@Test @Test
public void getAvailabilityStatus_returnAvailableUnsearchable() { public void getAvailabilityStatus_returnAvailableUnsearchable() {
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus())
BasePreferenceController.AVAILABLE_UNSEARCHABLE); .isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
} }
@Test @Test
@@ -319,12 +314,13 @@ public class BatteryHeaderPreferenceControllerTest {
public void displayPreference_init_showLoading() { public void displayPreference_init_showLoading() {
mController.displayPreference(mPreferenceScreen); mController.displayPreference(mPreferenceScreen);
verify(mBatteryUsageProgressBarPref).setBottomSummary( verify(mBatteryUsageProgressBarPref)
mContext.getString(R.string.settings_license_activity_loading)); .setBottomSummary(mContext.getString(R.string.settings_license_activity_loading));
} }
private CharSequence formatBatteryPercentageText() { private CharSequence formatBatteryPercentageText() {
return TextUtils.expandTemplate(mContext.getText(R.string.battery_header_title_alternate), return TextUtils.expandTemplate(
mContext.getText(R.string.battery_header_title_alternate),
NumberFormat.getIntegerInstance().format(BATTERY_LEVEL)); NumberFormat.getIntegerInstance().format(BATTERY_LEVEL));
} }
@@ -333,7 +329,7 @@ public class BatteryHeaderPreferenceControllerTest {
mBatteryInfo.statusLabel = BATTERY_STATUS; mBatteryInfo.statusLabel = BATTERY_STATUS;
mBatteryInfo.discharging = isDischarging; mBatteryInfo.discharging = isDischarging;
when(mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate( when(mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(mController, mBatteryInfo))
mController, mBatteryInfo)).thenReturn(updatedByStatusFeature); .thenReturn(updatedByStatusFeature);
} }
} }

View File

@@ -46,10 +46,8 @@ public class BatteryInfoLoaderTest {
private static final long TEST_TIME_REMAINING = 1000L; private static final long TEST_TIME_REMAINING = 1000L;
@Mock @Mock private BatteryStatsManager mBatteryStatsManager;
private BatteryStatsManager mBatteryStatsManager; @Mock private BatteryUsageStats mBatteryUsageStats;
@Mock
private BatteryUsageStats mBatteryUsageStats;
private Context mContext; private Context mContext;

View File

@@ -72,11 +72,11 @@ public class BatteryInfoTest {
private static final String ENHANCED_STRING_SUFFIX = "based on your usage"; private static final String ENHANCED_STRING_SUFFIX = "based on your usage";
private static final String BATTERY_RUN_OUT_PREFIX = "Battery may run out by"; private static final String BATTERY_RUN_OUT_PREFIX = "Battery may run out by";
private static final long TEST_CHARGE_TIME_REMAINING = TimeUnit.MINUTES.toMicros(1); private static final long TEST_CHARGE_TIME_REMAINING = TimeUnit.MINUTES.toMicros(1);
private static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED = private static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED = "1 min left until full";
"1 min left until full";
private static final String TEST_BATTERY_LEVEL_10 = "10%"; private static final String TEST_BATTERY_LEVEL_10 = "10%";
private static final String FIFTEEN_MIN_FORMATTED = "15 min"; private static final String FIFTEEN_MIN_FORMATTED = "15 min";
private static final Estimate MOCK_ESTIMATE = new Estimate( private static final Estimate MOCK_ESTIMATE =
new Estimate(
1000, /* estimateMillis */ 1000, /* estimateMillis */
false, /* isBasedOnUsage */ false, /* isBasedOnUsage */
1000 /* averageDischargeTime */); 1000 /* averageDischargeTime */);
@@ -85,8 +85,7 @@ public class BatteryInfoTest {
private Intent mChargingBatteryBroadcast; private Intent mChargingBatteryBroadcast;
private Context mContext; private Context mContext;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
@Mock @Mock private BatteryUsageStats mBatteryUsageStats;
private BatteryUsageStats mBatteryUsageStats;
@Before @Before
public void setUp() { public void setUp() {
@@ -99,15 +98,20 @@ public class BatteryInfoTest {
mChargingBatteryBroadcast = BatteryTestUtils.getChargingIntent(); mChargingBatteryBroadcast = BatteryTestUtils.getChargingIntent();
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend(); doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0); mContext.getContentResolver(),
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
0);
} }
@Test @Test
public void testGetBatteryInfo_hasStatusLabel() { public void testGetBatteryInfo_hasStatusLabel() {
doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getBatteryTimeRemainingMs(); doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getBatteryTimeRemainingMs();
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, BatteryInfo info =
mDisChargingBatteryBroadcast, mBatteryUsageStats, BatteryInfo.getBatteryInfoOld(
mContext,
mDisChargingBatteryBroadcast,
mBatteryUsageStats,
SystemClock.elapsedRealtime() * 1000, SystemClock.elapsedRealtime() * 1000,
true /* shortString */); true /* shortString */);
@@ -117,8 +121,13 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_doNotShowChargingMethod_hasRemainingTime() { public void testGetBatteryInfo_doNotShowChargingMethod_hasRemainingTime() {
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs(); doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast, BatteryInfo info =
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */); BatteryInfo.getBatteryInfoOld(
mContext,
mChargingBatteryBroadcast,
mBatteryUsageStats,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */);
assertThat(info.chargeLabel.toString()).isEqualTo(STATUS_CHARGING_TIME); assertThat(info.chargeLabel.toString()).isEqualTo(STATUS_CHARGING_TIME);
} }
@@ -126,8 +135,13 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_doNotShowChargingMethod_noRemainingTime() { public void testGetBatteryInfo_doNotShowChargingMethod_noRemainingTime() {
doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getChargeTimeRemainingMs(); doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getChargeTimeRemainingMs();
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast, BatteryInfo info =
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */); BatteryInfo.getBatteryInfoOld(
mContext,
mChargingBatteryBroadcast,
mBatteryUsageStats,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */);
assertThat(info.chargeLabel.toString()).ignoringCase().isEqualTo(STATUS_CHARGING_NO_TIME); assertThat(info.chargeLabel.toString()).ignoringCase().isEqualTo(STATUS_CHARGING_NO_TIME);
} }
@@ -135,9 +149,15 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_pluggedInUsingShortString_usesCorrectData() { public void testGetBatteryInfo_pluggedInUsingShortString_usesCorrectData() {
doReturn(TEST_CHARGE_TIME_REMAINING / 1000) doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
.when(mBatteryUsageStats).getChargeTimeRemainingMs(); .when(mBatteryUsageStats)
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast, .getChargeTimeRemainingMs();
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */); BatteryInfo info =
BatteryInfo.getBatteryInfoOld(
mContext,
mChargingBatteryBroadcast,
mBatteryUsageStats,
SystemClock.elapsedRealtime() * 1000,
true /* shortString */);
assertThat(info.discharging).isEqualTo(false); assertThat(info.discharging).isEqualTo(false);
assertThat(info.chargeLabel.toString()).isEqualTo("50% - 1 min left until full"); assertThat(info.chargeLabel.toString()).isEqualTo("50% - 1 min left until full");
@@ -145,14 +165,26 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_basedOnUsageTrueMoreThanFifteenMinutes_usesCorrectString() { public void testGetBatteryInfo_basedOnUsageTrueMoreThanFifteenMinutes_usesCorrectString() {
Estimate estimate = new Estimate(Duration.ofHours(4).toMillis(), Estimate estimate =
new Estimate(
Duration.ofHours(4).toMillis(),
true /* isBasedOnUsage */, true /* isBasedOnUsage */,
1000 /* averageDischargeTime */); 1000 /* averageDischargeTime */);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast, BatteryInfo info =
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
mDisChargingBatteryBroadcast,
mBatteryUsageStats,
estimate,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast, BatteryInfo info2 =
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
mDisChargingBatteryBroadcast,
mBatteryUsageStats,
estimate,
SystemClock.elapsedRealtime() * 1000,
true /* shortString */); true /* shortString */);
// Both long and short strings should not have extra text // Both long and short strings should not have extra text
@@ -165,11 +197,18 @@ public class BatteryInfoTest {
@Test @Test
@Ignore @Ignore
public void getBatteryInfo_MoreThanOneDay_suggestionLabelIsCorrectString() { public void getBatteryInfo_MoreThanOneDay_suggestionLabelIsCorrectString() {
Estimate estimate = new Estimate(Duration.ofDays(3).toMillis(), Estimate estimate =
new Estimate(
Duration.ofDays(3).toMillis(),
true /* isBasedOnUsage */, true /* isBasedOnUsage */,
1000 /* averageDischargeTime */); 1000 /* averageDischargeTime */);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast, BatteryInfo info =
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
mDisChargingBatteryBroadcast,
mBatteryUsageStats,
estimate,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(info.suggestionLabel).doesNotContain(BATTERY_RUN_OUT_PREFIX); assertThat(info.suggestionLabel).doesNotContain(BATTERY_RUN_OUT_PREFIX);
@@ -177,11 +216,21 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_basedOnUsageFalse_usesDefaultString() { public void testGetBatteryInfo_basedOnUsageFalse_usesDefaultString() {
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast, BatteryInfo info =
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
mDisChargingBatteryBroadcast,
mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast, BatteryInfo info2 =
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
mDisChargingBatteryBroadcast,
mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
true /* shortString */); true /* shortString */);
assertThat(info.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX); assertThat(info.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
@@ -191,10 +240,16 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_charging_usesChargeTime() { public void testGetBatteryInfo_charging_usesChargeTime() {
doReturn(TEST_CHARGE_TIME_REMAINING / 1000) doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
.when(mBatteryUsageStats).getChargeTimeRemainingMs(); .when(mBatteryUsageStats)
.getChargeTimeRemainingMs();
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast, BatteryInfo info =
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
mChargingBatteryBroadcast,
mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(info.remainingTimeUs).isEqualTo(TEST_CHARGE_TIME_REMAINING); assertThat(info.remainingTimeUs).isEqualTo(TEST_CHARGE_TIME_REMAINING);
@@ -206,8 +261,13 @@ public class BatteryInfoTest {
public void testGetBatteryInfo_pluggedInWithFullBattery_onlyShowBatteryLevel() { public void testGetBatteryInfo_pluggedInWithFullBattery_onlyShowBatteryLevel() {
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 100); mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 100);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast, BatteryInfo info =
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
mChargingBatteryBroadcast,
mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(info.chargeLabel).isEqualTo("100%"); assertThat(info.chargeLabel).isEqualTo("100%");
@@ -215,14 +275,18 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_chargingWithDefender_updateChargeLabel() { public void testGetBatteryInfo_chargingWithDefender_updateChargeLabel() {
doReturn(TEST_CHARGE_TIME_REMAINING) doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
.when(mBatteryUsageStats) mChargingBatteryBroadcast.putExtra(
.getChargeTimeRemainingMs(); BatteryManager.EXTRA_CHARGING_STATUS,
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE); BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast, BatteryInfo info =
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
mChargingBatteryBroadcast,
mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(info.isBatteryDefender).isTrue(); assertThat(info.isBatteryDefender).isTrue();
@@ -231,30 +295,32 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_getChargeTimeRemaining_updateSettingsGlobal() { public void testGetBatteryInfo_getChargeTimeRemaining_updateSettingsGlobal() {
doReturn(TEST_CHARGE_TIME_REMAINING) doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
.when(mBatteryUsageStats)
.getChargeTimeRemainingMs();
BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast, BatteryInfo.getBatteryInfo(
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, mContext,
mChargingBatteryBroadcast,
mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo( assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext))
TEST_CHARGE_TIME_REMAINING); .isEqualTo(TEST_CHARGE_TIME_REMAINING);
} }
@Test @Test
public void testGetBatteryInfo_differentChargeTimeRemaining_updateSettingsGlobal() { public void testGetBatteryInfo_differentChargeTimeRemaining_updateSettingsGlobal() {
doReturn(TEST_CHARGE_TIME_REMAINING) doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
.when(mBatteryUsageStats)
.getChargeTimeRemainingMs();
final long newTimeToFull = 300L; final long newTimeToFull = 300L;
doReturn(newTimeToFull) doReturn(newTimeToFull).when(mBatteryUsageStats).getChargeTimeRemainingMs();
.when(mBatteryUsageStats)
.getChargeTimeRemainingMs();
BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast, BatteryInfo.getBatteryInfo(
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, mContext,
mChargingBatteryBroadcast,
mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(newTimeToFull); assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(newTimeToFull);
@@ -263,17 +329,26 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_dockDefenderActive_updateChargeString() { public void testGetBatteryInfo_dockDefenderActive_updateChargeString() {
doReturn(TEST_CHARGE_TIME_REMAINING / 1000) doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
.when(mBatteryUsageStats).getChargeTimeRemainingMs(); .when(mBatteryUsageStats)
.getChargeTimeRemainingMs();
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend(); doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
Intent intent = BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK, Intent intent =
BatteryTestUtils.getCustomBatteryIntent(
BatteryManager.BATTERY_PLUGGED_DOCK,
50 /* level */, 50 /* level */,
100 /* scale */, 100 /* scale */,
BatteryManager.BATTERY_STATUS_CHARGING) BatteryManager.BATTERY_STATUS_CHARGING)
.putExtra(BatteryManager.EXTRA_CHARGING_STATUS, .putExtra(
BatteryManager.EXTRA_CHARGING_STATUS,
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE); BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, intent, BatteryInfo info =
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, BatteryInfo.getBatteryInfo(
mContext,
intent,
mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_PAUSED); assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_PAUSED);
@@ -282,17 +357,24 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_dockDefenderTemporarilyBypassed_updateChargeLabel() { public void testGetBatteryInfo_dockDefenderTemporarilyBypassed_updateChargeLabel() {
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs(); doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS, mChargingBatteryBroadcast.putExtra(
BatteryManager.CHARGING_POLICY_DEFAULT); BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 1); mContext.getContentResolver(),
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
1);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, BatteryInfo info =
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK, BatteryInfo.getBatteryInfo(
mContext,
BatteryTestUtils.getCustomBatteryIntent(
BatteryManager.BATTERY_PLUGGED_DOCK,
50 /* level */, 50 /* level */,
100 /* scale */, 100 /* scale */,
BatteryManager.BATTERY_STATUS_CHARGING), BatteryManager.BATTERY_STATUS_CHARGING),
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_TIME); assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_TIME);
@@ -301,15 +383,20 @@ public class BatteryInfoTest {
@Test @Test
public void testGetBatteryInfo_dockDefenderFutureBypass_updateChargeLabel() { public void testGetBatteryInfo_dockDefenderFutureBypass_updateChargeLabel() {
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend(); doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS, mChargingBatteryBroadcast.putExtra(
BatteryManager.CHARGING_POLICY_DEFAULT); BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, BatteryInfo info =
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK, BatteryInfo.getBatteryInfo(
mContext,
BatteryTestUtils.getCustomBatteryIntent(
BatteryManager.BATTERY_PLUGGED_DOCK,
50 /* level */, 50 /* level */,
100 /* scale */, 100 /* scale */,
BatteryManager.BATTERY_STATUS_CHARGING), BatteryManager.BATTERY_STATUS_CHARGING),
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000, mBatteryUsageStats,
MOCK_ESTIMATE,
SystemClock.elapsedRealtime() * 1000,
false /* shortString */); false /* shortString */);
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_FUTURE_BYPASS); assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_FUTURE_BYPASS);
@@ -318,15 +405,20 @@ public class BatteryInfoTest {
// Make our battery stats return a sequence of battery events. // Make our battery stats return a sequence of battery events.
private void mockBatteryStatsHistory() { private void mockBatteryStatsHistory() {
// Mock out new data every time iterateBatteryStatsHistory is called. // Mock out new data every time iterateBatteryStatsHistory is called.
doAnswer(invocation -> { doAnswer(
BatteryStatsHistoryIterator iterator = mock(BatteryStatsHistoryIterator.class); invocation -> {
when(iterator.next()).thenReturn( BatteryStatsHistoryIterator iterator =
mock(BatteryStatsHistoryIterator.class);
when(iterator.next())
.thenReturn(
makeHistoryIterm(1000, 99), makeHistoryIterm(1000, 99),
makeHistoryIterm(1500, 98), makeHistoryIterm(1500, 98),
makeHistoryIterm(2000, 97), makeHistoryIterm(2000, 97),
null); null);
return iterator; return iterator;
}).when(mBatteryUsageStats).iterateBatteryStatsHistory(); })
.when(mBatteryUsageStats)
.iterateBatteryStatsHistory();
} }
private BatteryStats.HistoryItem makeHistoryIterm(long time, int batteryLevel) { private BatteryStats.HistoryItem makeHistoryIterm(long time, int batteryLevel) {
@@ -373,7 +465,8 @@ public class BatteryInfoTest {
pointsExpected.append(2000, 96); pointsExpected.append(2000, 96);
pointsExpected.append(2500, 95); pointsExpected.append(2500, 95);
pointsExpected.append(3000, 94); pointsExpected.append(3000, 94);
doReturn(pointsExpected).when(mFeatureFactory.powerUsageFeatureProvider) doReturn(pointsExpected)
.when(mFeatureFactory.powerUsageFeatureProvider)
.getEnhancedBatteryPredictionCurve(any(Context.class), anyLong()); .getEnhancedBatteryPredictionCurve(any(Context.class), anyLong());
info.bindHistory(view); info.bindHistory(view);
@@ -390,14 +483,21 @@ public class BatteryInfoTest {
} else { } else {
doReturn(0L).when(mBatteryUsageStats).getChargeTimeRemainingMs(); doReturn(0L).when(mBatteryUsageStats).getChargeTimeRemainingMs();
} }
Estimate batteryEstimate = new Estimate( Estimate batteryEstimate =
new Estimate(
estimate ? 1000 : 0, estimate ? 1000 : 0,
false /* isBasedOnUsage */, false /* isBasedOnUsage */,
1000 /* averageDischargeTime */); 1000 /* averageDischargeTime */);
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, BatteryInfo info =
BatteryInfo.getBatteryInfo(
mContext,
charging ? mChargingBatteryBroadcast : mDisChargingBatteryBroadcast, charging ? mChargingBatteryBroadcast : mDisChargingBatteryBroadcast,
mBatteryUsageStats, batteryEstimate, SystemClock.elapsedRealtime() * 1000, false); mBatteryUsageStats,
doReturn(enhanced).when(mFeatureFactory.powerUsageFeatureProvider) batteryEstimate,
SystemClock.elapsedRealtime() * 1000,
false);
doReturn(enhanced)
.when(mFeatureFactory.powerUsageFeatureProvider)
.isEnhancedBatteryPredictionEnabled(mContext); .isEnhancedBatteryPredictionEnabled(mContext);
return info; return info;
} }

View File

@@ -39,12 +39,9 @@ public class BatteryMeterViewTest {
private static final int BATTERY_CRITICAL_LEVEL = 15; private static final int BATTERY_CRITICAL_LEVEL = 15;
private static final int BATTERY_LOW_LEVEL = 3; private static final int BATTERY_LOW_LEVEL = 3;
@Mock @Mock private ColorFilter mErrorColorFilter;
private ColorFilter mErrorColorFilter; @Mock private ColorFilter mAccentColorFilter;
@Mock @Mock private ColorFilter mForegroundColorFilter;
private ColorFilter mAccentColorFilter;
@Mock
private ColorFilter mForegroundColorFilter;
private Context mContext; private Context mContext;
private BatteryMeterView mBatteryMeterView; private BatteryMeterView mBatteryMeterView;
private BatteryMeterView.BatteryMeterDrawable mDrawable; private BatteryMeterView.BatteryMeterDrawable mDrawable;

View File

@@ -57,8 +57,7 @@ public final class BatteryOptimizeLogUtilsTest {
BatteryOptimizeLogUtils.writeLog(mContext, Action.APPLY, "pkg1", "logs"); BatteryOptimizeLogUtils.writeLog(mContext, Action.APPLY, "pkg1", "logs");
BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter); BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
assertThat(mTestStringWriter.toString()).contains( assertThat(mTestStringWriter.toString()).contains("pkg1\taction:APPLY\tevent:logs");
"pkg1\taction:APPLY\tevent:logs");
} }
@Test @Test

View File

@@ -98,8 +98,7 @@ public class BatteryOptimizeUtilsTest {
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString())) when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
.thenReturn(AppOpsManager.MODE_IGNORED); .thenReturn(AppOpsManager.MODE_IGNORED);
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()) assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_RESTRICTED);
.isEqualTo(MODE_RESTRICTED);
} }
@Test @Test
@@ -108,8 +107,7 @@ public class BatteryOptimizeUtilsTest {
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString())) when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
.thenReturn(AppOpsManager.MODE_ALLOWED); .thenReturn(AppOpsManager.MODE_ALLOWED);
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()) assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_UNRESTRICTED);
.isEqualTo(MODE_UNRESTRICTED);
} }
@Test @Test
@@ -118,8 +116,7 @@ public class BatteryOptimizeUtilsTest {
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString())) when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
.thenReturn(AppOpsManager.MODE_ALLOWED); .thenReturn(AppOpsManager.MODE_ALLOWED);
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()) assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_OPTIMIZED);
.isEqualTo(MODE_OPTIMIZED);
} }
@Test @Test
@@ -168,7 +165,6 @@ public class BatteryOptimizeUtilsTest {
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString())) when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
.thenReturn(AppOpsManager.MODE_IGNORED); .thenReturn(AppOpsManager.MODE_IGNORED);
mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED, Action.UNKNOWN); mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED, Action.UNKNOWN);
TimeUnit.SECONDS.sleep(1); TimeUnit.SECONDS.sleep(1);
@@ -205,7 +201,8 @@ public class BatteryOptimizeUtilsTest {
@Test @Test
public void testGetInstalledApplications_returnEmptyArray() { public void testGetInstalledApplications_returnEmptyArray() {
assertTrue(BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager) assertTrue(
BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager)
.isEmpty()); .isEmpty());
} }
@@ -242,8 +239,13 @@ public class BatteryOptimizeUtilsTest {
applicationInfo4.enabled = true; applicationInfo4.enabled = true;
applicationInfo4.uid = 4; applicationInfo4.uid = 4;
applicationInfo4.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER; applicationInfo4.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
doReturn(new ParceledListSlice<ApplicationInfo>( doReturn(
Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3, applicationInfo4))) new ParceledListSlice<ApplicationInfo>(
Arrays.asList(
applicationInfo1,
applicationInfo2,
applicationInfo3,
applicationInfo4)))
.when(mMockIPackageManager) .when(mMockIPackageManager)
.getInstalledApplications(anyLong(), anyInt()); .getInstalledApplications(anyLong(), anyInt());
@@ -260,7 +262,8 @@ public class BatteryOptimizeUtilsTest {
@Test @Test
public void testResetAppOptimizationMode_Optimized_verifyAction() throws Exception { public void testResetAppOptimizationMode_Optimized_verifyAction() throws Exception {
runTestForResetWithMode( runTestForResetWithMode(
AppOpsManager.MODE_ALLOWED, /* allowListed */ false, AppOpsManager.MODE_ALLOWED, /* allowListed */
false,
/* isSystemOrDefaultApp */ false); /* isSystemOrDefaultApp */ false);
verifyNoInteractions(mMockBatteryUtils); verifyNoInteractions(mMockBatteryUtils);
@@ -274,7 +277,8 @@ public class BatteryOptimizeUtilsTest {
@Test @Test
public void testResetAppOptimizationMode_SystemOrDefault_verifyAction() throws Exception { public void testResetAppOptimizationMode_SystemOrDefault_verifyAction() throws Exception {
runTestForResetWithMode( runTestForResetWithMode(
AppOpsManager.MODE_ALLOWED, /* allowListed */ true, AppOpsManager.MODE_ALLOWED, /* allowListed */
true,
/* isSystemOrDefaultApp */ true); /* isSystemOrDefaultApp */ true);
verifyNoInteractions(mMockBatteryUtils); verifyNoInteractions(mMockBatteryUtils);
@@ -289,7 +293,8 @@ public class BatteryOptimizeUtilsTest {
@Test @Test
public void testResetAppOptimizationMode_Restricted_verifyAction() throws Exception { public void testResetAppOptimizationMode_Restricted_verifyAction() throws Exception {
runTestForResetWithMode( runTestForResetWithMode(
AppOpsManager.MODE_IGNORED, /* allowListed */ false, AppOpsManager.MODE_IGNORED, /* allowListed */
false,
/* isSystemOrDefaultApp */ false); /* isSystemOrDefaultApp */ false);
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false); verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
@@ -298,7 +303,8 @@ public class BatteryOptimizeUtilsTest {
@Test @Test
public void testResetAppOptimizationMode_Unrestricted_verifyAction() throws Exception { public void testResetAppOptimizationMode_Unrestricted_verifyAction() throws Exception {
runTestForResetWithMode( runTestForResetWithMode(
AppOpsManager.MODE_ALLOWED, /* allowListed */ true, AppOpsManager.MODE_ALLOWED, /* allowListed */
true,
/* isSystemOrDefaultApp */ false); /* isSystemOrDefaultApp */ false);
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false); verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
@@ -314,26 +320,22 @@ public class BatteryOptimizeUtilsTest {
applicationInfo.uid = UID; applicationInfo.uid = UID;
applicationInfo.packageName = PACKAGE_NAME; applicationInfo.packageName = PACKAGE_NAME;
applicationInfo.enabled = true; applicationInfo.enabled = true;
doReturn(new ParceledListSlice<ApplicationInfo>( doReturn(new ParceledListSlice<ApplicationInfo>(Arrays.asList(applicationInfo)))
Arrays.asList(applicationInfo)))
.when(mMockIPackageManager) .when(mMockIPackageManager)
.getInstalledApplications(anyLong(), anyInt()); .getInstalledApplications(anyLong(), anyInt());
doReturn(appStandbyMode) doReturn(appStandbyMode)
.when(mMockAppOpsManager) .when(mMockAppOpsManager)
.checkOpNoThrow(anyInt(), anyInt(), anyString()); .checkOpNoThrow(anyInt(), anyInt(), anyString());
doReturn(allowListed) doReturn(allowListed).when(mMockBackend).isAllowlisted(anyString(), anyInt());
.when(mMockBackend) doReturn(isSystemOrDefaultApp).when(mMockBackend).isSysAllowlisted(anyString());
.isAllowlisted(anyString(), anyInt()); doReturn(isSystemOrDefaultApp).when(mMockBackend).isDefaultActiveApp(anyString(), anyInt());
doReturn(isSystemOrDefaultApp)
.when(mMockBackend)
.isSysAllowlisted(anyString());
doReturn(isSystemOrDefaultApp)
.when(mMockBackend)
.isDefaultActiveApp(anyString(), anyInt());
BatteryOptimizeUtils.resetAppOptimizationMode( BatteryOptimizeUtils.resetAppOptimizationMode(
mContext, mMockIPackageManager, mMockAppOpsManager, mMockBackend, mContext,
mMockIPackageManager,
mMockAppOpsManager,
mMockBackend,
mMockBatteryUtils); mMockBatteryUtils);
TimeUnit.SECONDS.sleep(1); TimeUnit.SECONDS.sleep(1);
} }

View File

@@ -21,11 +21,9 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.os.PowerManager; import android.os.PowerManager;
import android.provider.Settings; import android.provider.Settings;
import android.util.Pair;
import androidx.preference.Preference; import androidx.preference.Preference;
@@ -41,10 +39,8 @@ import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BatterySaverControllerTest { public class BatterySaverControllerTest {
@Mock @Mock private Preference mBatterySaverPref;
private Preference mBatterySaverPref; @Mock private PowerManager mPowerManager;
@Mock
private PowerManager mPowerManager;
private BatterySaverController mBatterySaverController; private BatterySaverController mBatterySaverController;
private Context mContext; private Context mContext;
@@ -58,8 +54,8 @@ public class BatterySaverControllerTest {
ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager); ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref); ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0); mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
} }
@Test @Test
@@ -84,8 +80,8 @@ public class BatterySaverControllerTest {
@Test @Test
public void getSummary_batterySaverOffButScheduled_showSummaryScheduled() { public void getSummary_batterySaverOffButScheduled_showSummaryScheduled() {
when(mPowerManager.isPowerSaveMode()).thenReturn(false); when(mPowerManager.isPowerSaveMode()).thenReturn(false);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 15); mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 15);
assertThat(mBatterySaverController.getSummary()).isEqualTo("Will turn on at 15%"); assertThat(mBatterySaverController.getSummary()).isEqualTo("Will turn on at 15%");
} }
@@ -93,8 +89,8 @@ public class BatterySaverControllerTest {
@Test @Test
public void getSummary_batterySaverOffButScheduledZeroPercent_showSummaryOff() { public void getSummary_batterySaverOffButScheduledZeroPercent_showSummaryOff() {
when(mPowerManager.isPowerSaveMode()).thenReturn(false); when(mPowerManager.isPowerSaveMode()).thenReturn(false);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0); mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
assertThat(mBatterySaverController.getSummary()).isEqualTo("Off"); assertThat(mBatterySaverController.getSummary()).isEqualTo("Off");
} }
@@ -107,8 +103,8 @@ public class BatterySaverControllerTest {
Settings.Global.AUTOMATIC_POWER_SAVE_MODE, Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC); PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
assertThat(mBatterySaverController.getSummary()). assertThat(mBatterySaverController.getSummary())
isEqualTo("Will turn on based on your routine"); .isEqualTo("Will turn on based on your routine");
} }
@Test @Test

View File

@@ -32,10 +32,8 @@ import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BatterySaverReceiverTest { public class BatterySaverReceiverTest {
@Mock @Mock private BatterySaverReceiver.BatterySaverListener mBatterySaverListener;
private BatterySaverReceiver.BatterySaverListener mBatterySaverListener; @Mock private Context mContext;
@Mock
private Context mContext;
private BatterySaverReceiver mBatterySaverReceiver; private BatterySaverReceiver mBatterySaverReceiver;
@Before @Before

View File

@@ -56,18 +56,15 @@ import java.util.Arrays;
@Config(shadows = {BatterySettingsMigrateCheckerTest.ShadowUserHandle.class}) @Config(shadows = {BatterySettingsMigrateCheckerTest.ShadowUserHandle.class})
public final class BatterySettingsMigrateCheckerTest { public final class BatterySettingsMigrateCheckerTest {
private static final Intent BOOT_COMPLETED_INTENT = private static final Intent BOOT_COMPLETED_INTENT = new Intent(Intent.ACTION_BOOT_COMPLETED);
new Intent(Intent.ACTION_BOOT_COMPLETED);
private static final int UID = 2003; private static final int UID = 2003;
private static final String PACKAGE_NAME = "com.android.test.app"; private static final String PACKAGE_NAME = "com.android.test.app";
private Context mContext; private Context mContext;
private BatterySettingsMigrateChecker mBatterySettingsMigrateChecker; private BatterySettingsMigrateChecker mBatterySettingsMigrateChecker;
@Mock @Mock private PackageManager mPackageManager;
private PackageManager mPackageManager; @Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
@Mock
private BatteryOptimizeUtils mBatteryOptimizeUtils;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
@@ -76,7 +73,8 @@ public final class BatterySettingsMigrateCheckerTest {
BatteryUtils.getInstance(mContext).reset(); BatteryUtils.getInstance(mContext).reset();
doReturn(mContext).when(mContext).getApplicationContext(); doReturn(mContext).when(mContext).getApplicationContext();
doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(UID).when(mPackageManager) doReturn(UID)
.when(mPackageManager)
.getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA); .getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA);
BatterySettingsMigrateChecker.sBatteryOptimizeUtils = mBatteryOptimizeUtils; BatterySettingsMigrateChecker.sBatteryOptimizeUtils = mBatteryOptimizeUtils;
mBatterySettingsMigrateChecker = new BatterySettingsMigrateChecker(); mBatterySettingsMigrateChecker = new BatterySettingsMigrateChecker();
@@ -150,45 +148,42 @@ public final class BatterySettingsMigrateCheckerTest {
} }
@Test @Test
public void verifyBatteryOptimizeModeApps_inAllowList_resetOptimizationMode() public void verifyBatteryOptimizeModeApps_inAllowList_resetOptimizationMode() throws Exception {
throws Exception { doReturn(BatteryOptimizeUtils.MODE_RESTRICTED)
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils) .when(mBatteryOptimizeUtils)
.getAppOptimizationMode(); .getAppOptimizationMode();
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps( mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
mContext, mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, Arrays.asList(PACKAGE_NAME));
BatteryOptimizeUtils.MODE_OPTIMIZED,
Arrays.asList(PACKAGE_NAME));
final InOrder inOrder = inOrder(mBatteryOptimizeUtils); final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
inOrder.verify(mBatteryOptimizeUtils).getAppOptimizationMode(); inOrder.verify(mBatteryOptimizeUtils).getAppOptimizationMode();
inOrder.verify(mBatteryOptimizeUtils).setAppUsageState( inOrder.verify(mBatteryOptimizeUtils)
.setAppUsageState(
BatteryOptimizeUtils.MODE_OPTIMIZED, BatteryOptimizeUtils.MODE_OPTIMIZED,
BatteryOptimizeHistoricalLogEntry.Action.FORCE_RESET); BatteryOptimizeHistoricalLogEntry.Action.FORCE_RESET);
} }
@Test @Test
public void verifyBatteryOptimizeModeApps_optimizedMode_noAction() throws Exception { public void verifyBatteryOptimizeModeApps_optimizedMode_noAction() throws Exception {
doReturn(BatteryOptimizeUtils.MODE_OPTIMIZED).when(mBatteryOptimizeUtils) doReturn(BatteryOptimizeUtils.MODE_OPTIMIZED)
.when(mBatteryOptimizeUtils)
.getAppOptimizationMode(); .getAppOptimizationMode();
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps( mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
mContext, mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, Arrays.asList(PACKAGE_NAME));
BatteryOptimizeUtils.MODE_OPTIMIZED,
Arrays.asList(PACKAGE_NAME));
verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any()); verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any());
} }
@Test @Test
public void verifyBatteryOptimizeModeApps_notInAllowList_noAction() throws Exception { public void verifyBatteryOptimizeModeApps_notInAllowList_noAction() throws Exception {
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils) doReturn(BatteryOptimizeUtils.MODE_RESTRICTED)
.when(mBatteryOptimizeUtils)
.getAppOptimizationMode(); .getAppOptimizationMode();
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps( mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
mContext, mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, new ArrayList<String>());
BatteryOptimizeUtils.MODE_OPTIMIZED,
new ArrayList<String>());
verifyNoInteractions(mBatteryOptimizeUtils); verifyNoInteractions(mBatteryOptimizeUtils);
} }

View File

@@ -106,32 +106,22 @@ public class BatteryUtilsTest {
private static final String INFO_EXCESSIVE = "anomaly_type=4,auto_restriction=false"; private static final String INFO_EXCESSIVE = "anomaly_type=4,auto_restriction=false";
private static final String INFO_WAKELOCK = "anomaly_type=1,auto_restriction=false"; private static final String INFO_WAKELOCK = "anomaly_type=1,auto_restriction=false";
@Mock @Mock private BatteryStats.Uid mUid;
private BatteryStats.Uid mUid; @Mock private BatteryStats.Timer mTimer;
@Mock @Mock private BatteryUsageStats mBatteryUsageStats;
private BatteryStats.Timer mTimer; @Mock private BatteryConsumer mAggregateBatteryConsumer;
@Mock @Mock private BatteryInfo mBatteryInfo;
private BatteryUsageStats mBatteryUsageStats; @Mock private PackageManager mPackageManager;
@Mock @Mock private AppOpsManager mAppOpsManager;
private BatteryConsumer mAggregateBatteryConsumer; @Mock private ApplicationInfo mApplicationInfo;
@Mock
private BatteryInfo mBatteryInfo;
@Mock
private PackageManager mPackageManager;
@Mock
private AppOpsManager mAppOpsManager;
@Mock
private ApplicationInfo mApplicationInfo;
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private BatteryStatsManager mBatteryStatsManager; private BatteryStatsManager mBatteryStatsManager;
@Mock
private ApplicationInfo mHighApplicationInfo; @Mock private ApplicationInfo mHighApplicationInfo;
@Mock @Mock private ApplicationInfo mLowApplicationInfo;
private ApplicationInfo mLowApplicationInfo; @Mock private PowerAllowlistBackend mPowerAllowlistBackend;
@Mock @Mock private BatteryDatabaseManager mBatteryDatabaseManager;
private PowerAllowlistBackend mPowerAllowlistBackend;
@Mock
private BatteryDatabaseManager mBatteryDatabaseManager;
private AnomalyInfo mAnomalyInfo; private AnomalyInfo mAnomalyInfo;
private BatteryUtils mBatteryUtils; private BatteryUtils mBatteryUtils;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
@@ -145,16 +135,21 @@ public class BatteryUtilsTest {
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mProvider = mFeatureFactory.powerUsageFeatureProvider; mProvider = mFeatureFactory.powerUsageFeatureProvider;
doReturn(TIME_STATE_TOP).when(mUid).getProcessStateTime(eq(PROCESS_STATE_TOP), anyLong(), doReturn(TIME_STATE_TOP)
anyInt()); .when(mUid)
doReturn(TIME_STATE_FOREGROUND_SERVICE).when(mUid).getProcessStateTime( .getProcessStateTime(eq(PROCESS_STATE_TOP), anyLong(), anyInt());
eq(PROCESS_STATE_FOREGROUND_SERVICE), anyLong(), anyInt()); doReturn(TIME_STATE_FOREGROUND_SERVICE)
doReturn(TIME_STATE_TOP_SLEEPING).when(mUid).getProcessStateTime( .when(mUid)
eq(PROCESS_STATE_TOP_SLEEPING), anyLong(), anyInt()); .getProcessStateTime(eq(PROCESS_STATE_FOREGROUND_SERVICE), anyLong(), anyInt());
doReturn(TIME_STATE_FOREGROUND).when(mUid).getProcessStateTime(eq(PROCESS_STATE_FOREGROUND), doReturn(TIME_STATE_TOP_SLEEPING)
anyLong(), anyInt()); .when(mUid)
doReturn(TIME_STATE_BACKGROUND).when(mUid).getProcessStateTime(eq(PROCESS_STATE_BACKGROUND), .getProcessStateTime(eq(PROCESS_STATE_TOP_SLEEPING), anyLong(), anyInt());
anyLong(), anyInt()); doReturn(TIME_STATE_FOREGROUND)
.when(mUid)
.getProcessStateTime(eq(PROCESS_STATE_FOREGROUND), anyLong(), anyInt());
doReturn(TIME_STATE_BACKGROUND)
.when(mUid)
.getProcessStateTime(eq(PROCESS_STATE_BACKGROUND), anyLong(), anyInt());
when(mPackageManager.getApplicationInfo(eq(HIGH_SDK_PACKAGE), anyInt())) when(mPackageManager.getApplicationInfo(eq(HIGH_SDK_PACKAGE), anyInt()))
.thenReturn(mHighApplicationInfo); .thenReturn(mHighApplicationInfo);
@@ -166,11 +161,13 @@ public class BatteryUtilsTest {
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE); doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
doReturn(mBatteryStatsManager).when(mContext) doReturn(mBatteryStatsManager)
.when(mContext)
.getSystemService(Context.BATTERY_STATS_SERVICE); .getSystemService(Context.BATTERY_STATS_SERVICE);
mBatteryUtils = spy(new BatteryUtils(mContext)); mBatteryUtils = spy(new BatteryUtils(mContext));
mBatteryUtils.mPowerUsageFeatureProvider = mProvider; mBatteryUtils.mPowerUsageFeatureProvider = mProvider;
doReturn(0L).when(mBatteryUtils) doReturn(0L)
.when(mBatteryUtils)
.getForegroundServiceTotalTimeUs(any(BatteryStats.Uid.class), anyLong()); .getForegroundServiceTotalTimeUs(any(BatteryStats.Uid.class), anyLong());
mAnomalyInfo = new AnomalyInfo(INFO_WAKELOCK); mAnomalyInfo = new AnomalyInfo(INFO_WAKELOCK);
@@ -180,54 +177,62 @@ public class BatteryUtilsTest {
@Test @Test
public void testGetProcessTimeMs_typeForeground_timeCorrect() { public void testGetProcessTimeMs_typeForeground_timeCorrect() {
doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils) doReturn(TIME_STATE_FOREGROUND + 500)
.when(mBatteryUtils)
.getForegroundActivityTotalTimeUs(eq(mUid), anyLong()); .getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.FOREGROUND, mUid, final long time =
BatteryStats.STATS_SINCE_CHARGED); mBatteryUtils.getProcessTimeMs(
BatteryUtils.StatusType.FOREGROUND, mUid, BatteryStats.STATS_SINCE_CHARGED);
assertThat(time).isEqualTo(TIME_EXPECTED_FOREGROUND); assertThat(time).isEqualTo(TIME_EXPECTED_FOREGROUND);
} }
@Test @Test
public void testGetProcessTimeMs_typeBackground_timeCorrect() { public void testGetProcessTimeMs_typeBackground_timeCorrect() {
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.BACKGROUND, mUid, final long time =
BatteryStats.STATS_SINCE_CHARGED); mBatteryUtils.getProcessTimeMs(
BatteryUtils.StatusType.BACKGROUND, mUid, BatteryStats.STATS_SINCE_CHARGED);
assertThat(time).isEqualTo(TIME_EXPECTED_BACKGROUND); assertThat(time).isEqualTo(TIME_EXPECTED_BACKGROUND);
} }
@Test @Test
public void testGetProcessTimeMs_typeAll_timeCorrect() { public void testGetProcessTimeMs_typeAll_timeCorrect() {
doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils) doReturn(TIME_STATE_FOREGROUND + 500)
.when(mBatteryUtils)
.getForegroundActivityTotalTimeUs(eq(mUid), anyLong()); .getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, mUid, final long time =
BatteryStats.STATS_SINCE_CHARGED); mBatteryUtils.getProcessTimeMs(
BatteryUtils.StatusType.ALL, mUid, BatteryStats.STATS_SINCE_CHARGED);
assertThat(time).isEqualTo(TIME_EXPECTED_ALL); assertThat(time).isEqualTo(TIME_EXPECTED_ALL);
} }
@Test @Test
public void testGetProcessTimeMs_uidNull_returnZero() { public void testGetProcessTimeMs_uidNull_returnZero() {
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, null, final long time =
BatteryStats.STATS_SINCE_CHARGED); mBatteryUtils.getProcessTimeMs(
BatteryUtils.StatusType.ALL, null, BatteryStats.STATS_SINCE_CHARGED);
assertThat(time).isEqualTo(0); assertThat(time).isEqualTo(0);
} }
@Test @Test
public void testCalculateBatteryPercent() { public void testCalculateBatteryPercent() {
assertThat(mBatteryUtils.calculateBatteryPercent(BATTERY_SYSTEM_USAGE, TOTAL_BATTERY_USAGE, assertThat(
DISCHARGE_AMOUNT)) mBatteryUtils.calculateBatteryPercent(
.isWithin(PRECISION).of(PERCENT_SYSTEM_USAGE); BATTERY_SYSTEM_USAGE, TOTAL_BATTERY_USAGE, DISCHARGE_AMOUNT))
.isWithin(PRECISION)
.of(PERCENT_SYSTEM_USAGE);
} }
@Test @Test
public void testCalculateLastFullChargeTime() { public void testCalculateLastFullChargeTime() {
final long currentTimeMs = System.currentTimeMillis(); final long currentTimeMs = System.currentTimeMillis();
when(mBatteryUsageStats.getStatsStartTimestamp()).thenReturn( when(mBatteryUsageStats.getStatsStartTimestamp())
currentTimeMs - TIME_SINCE_LAST_FULL_CHARGE_MS); .thenReturn(currentTimeMs - TIME_SINCE_LAST_FULL_CHARGE_MS);
assertThat(mBatteryUtils.calculateLastFullChargeTime(mBatteryUsageStats, currentTimeMs)) assertThat(mBatteryUtils.calculateLastFullChargeTime(mBatteryUsageStats, currentTimeMs))
.isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_MS); .isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_MS);
@@ -237,46 +242,51 @@ public class BatteryUtilsTest {
public void testGetForegroundActivityTotalTimeMs_returnMilliseconds() { public void testGetForegroundActivityTotalTimeMs_returnMilliseconds() {
final long rawRealtimeUs = SystemClock.elapsedRealtime() * 1000; final long rawRealtimeUs = SystemClock.elapsedRealtime() * 1000;
doReturn(mTimer).when(mUid).getForegroundActivityTimer(); doReturn(mTimer).when(mUid).getForegroundActivityTimer();
doReturn(TIME_SINCE_LAST_FULL_CHARGE_US).when(mTimer) doReturn(TIME_SINCE_LAST_FULL_CHARGE_US)
.when(mTimer)
.getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED); .getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED);
assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs)).isEqualTo( assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs))
TIME_SINCE_LAST_FULL_CHARGE_US); .isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_US);
} }
@Test @Test
public void testGetTargetSdkVersion_packageExist_returnSdk() throws public void testGetTargetSdkVersion_packageExist_returnSdk()
PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException {
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME, doReturn(mApplicationInfo)
PackageManager.GET_META_DATA); .when(mPackageManager)
.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA);
mApplicationInfo.targetSdkVersion = SDK_VERSION; mApplicationInfo.targetSdkVersion = SDK_VERSION;
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME)).isEqualTo(SDK_VERSION); assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME)).isEqualTo(SDK_VERSION);
} }
@Test @Test
public void testGetTargetSdkVersion_packageNotExist_returnSdkNull() throws public void testGetTargetSdkVersion_packageNotExist_returnSdkNull()
PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException {
doThrow(new PackageManager.NameNotFoundException()).when( doThrow(new PackageManager.NameNotFoundException())
mPackageManager).getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA); .when(mPackageManager)
.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA);
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME)).isEqualTo( assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME))
BatteryUtils.SDK_NULL); .isEqualTo(BatteryUtils.SDK_NULL);
} }
@Test @Test
public void testBackgroundRestrictionOn_restrictionOn_returnTrue() { public void testBackgroundRestrictionOn_restrictionOn_returnTrue() {
doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager).checkOpNoThrow( doReturn(AppOpsManager.MODE_IGNORED)
AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME); .when(mAppOpsManager)
.checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, PACKAGE_NAME))
PACKAGE_NAME)).isTrue(); .isTrue();
} }
@Test @Test
public void testBackgroundRestrictionOn_restrictionOff_returnFalse() { public void testBackgroundRestrictionOn_restrictionOff_returnFalse() {
doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).checkOpNoThrow( doReturn(AppOpsManager.MODE_ALLOWED)
AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME); .when(mAppOpsManager)
.checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, PACKAGE_NAME)) assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, PACKAGE_NAME))
.isFalse(); .isFalse();
@@ -294,8 +304,8 @@ public class BatteryUtilsTest {
@Test @Test
public void testIsPreOApp_containPreOApp_ReturnTrue() { public void testIsPreOApp_containPreOApp_ReturnTrue() {
assertThat( assertThat(mBatteryUtils.isPreOApp(new String[] {HIGH_SDK_PACKAGE, LOW_SDK_PACKAGE}))
mBatteryUtils.isPreOApp(new String[]{HIGH_SDK_PACKAGE, LOW_SDK_PACKAGE})).isTrue(); .isTrue();
} }
@Test @Test
@@ -309,9 +319,17 @@ public class BatteryUtilsTest {
mBatteryUtils.setForceAppStandby(UID, LOW_SDK_PACKAGE, AppOpsManager.MODE_IGNORED); mBatteryUtils.setForceAppStandby(UID, LOW_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
// Restrict both OP_RUN_IN_BACKGROUND and OP_RUN_ANY_IN_BACKGROUND // Restrict both OP_RUN_IN_BACKGROUND and OP_RUN_ANY_IN_BACKGROUND
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, LOW_SDK_PACKAGE, verify(mAppOpsManager)
.setMode(
AppOpsManager.OP_RUN_IN_BACKGROUND,
UID,
LOW_SDK_PACKAGE,
AppOpsManager.MODE_IGNORED); AppOpsManager.MODE_IGNORED);
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, LOW_SDK_PACKAGE, verify(mAppOpsManager)
.setMode(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
UID,
LOW_SDK_PACKAGE,
AppOpsManager.MODE_IGNORED); AppOpsManager.MODE_IGNORED);
} }
@@ -321,18 +339,27 @@ public class BatteryUtilsTest {
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED); mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
// Don't restrict OP_RUN_IN_BACKGROUND because it is already been restricted for O app // Don't restrict OP_RUN_IN_BACKGROUND because it is already been restricted for O app
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, verify(mAppOpsManager, never())
HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED); .setMode(
AppOpsManager.OP_RUN_IN_BACKGROUND,
UID,
HIGH_SDK_PACKAGE,
AppOpsManager.MODE_IGNORED);
// Restrict OP_RUN_ANY_IN_BACKGROUND // Restrict OP_RUN_ANY_IN_BACKGROUND
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, verify(mAppOpsManager)
HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED); .setMode(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
UID,
HIGH_SDK_PACKAGE,
AppOpsManager.MODE_IGNORED);
} }
@Test @Test
public void testSetForceAppStandby_restrictApp_recordTime() { public void testSetForceAppStandby_restrictApp_recordTime() {
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED); mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
verify(mBatteryDatabaseManager).insertAction( verify(mBatteryDatabaseManager)
.insertAction(
eq(AnomalyDatabaseHelper.ActionType.RESTRICTION), eq(UID), eq(AnomalyDatabaseHelper.ActionType.RESTRICTION), eq(UID),
eq(HIGH_SDK_PACKAGE), anyLong()); eq(HIGH_SDK_PACKAGE), anyLong());
} }
@@ -341,22 +368,24 @@ public class BatteryUtilsTest {
public void testSetForceAppStandby_unrestrictApp_deleteTime() { public void testSetForceAppStandby_unrestrictApp_deleteTime() {
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_ALLOWED); mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_ALLOWED);
verify(mBatteryDatabaseManager).deleteAction(AnomalyDatabaseHelper.ActionType.RESTRICTION, verify(mBatteryDatabaseManager)
UID, HIGH_SDK_PACKAGE); .deleteAction(AnomalyDatabaseHelper.ActionType.RESTRICTION, UID, HIGH_SDK_PACKAGE);
} }
@Test @Test
public void testIsForceAppStandbyEnabled_enabled_returnTrue() { public void testIsForceAppStandbyEnabled_enabled_returnTrue() {
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, when(mAppOpsManager.checkOpNoThrow(
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_IGNORED); AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
.thenReturn(AppOpsManager.MODE_IGNORED);
assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isTrue(); assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isTrue();
} }
@Test @Test
public void testIsForceAppStandbyEnabled_disabled_returnFalse() { public void testIsForceAppStandbyEnabled_disabled_returnFalse() {
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, when(mAppOpsManager.checkOpNoThrow(
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_ALLOWED); AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
.thenReturn(AppOpsManager.MODE_ALLOWED);
assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isFalse(); assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isFalse();
} }
@@ -372,8 +401,8 @@ public class BatteryUtilsTest {
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID); doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM; mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
mAnomalyInfo)).isTrue(); .isTrue();
} }
@Test @Test
@@ -382,35 +411,38 @@ public class BatteryUtilsTest {
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID); doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM; mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
mAnomalyInfo)).isTrue(); .isTrue();
} }
@Test @Test
public void testShouldHideAnomaly_systemUid_returnTrue() { public void testShouldHideAnomaly_systemUid_returnTrue() {
final int systemUid = Process.ROOT_UID; final int systemUid = Process.ROOT_UID;
doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(systemUid); doReturn(new String[] {HIGH_SDK_PACKAGE})
.when(mPackageManager)
.getPackagesForUid(systemUid);
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, systemUid, assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, systemUid, mAnomalyInfo))
mAnomalyInfo)).isTrue(); .isTrue();
} }
@Test @Test
public void testShouldHideAnomaly_AppInDozeList_returnTrue() { public void testShouldHideAnomaly_AppInDozeList_returnTrue() {
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID); doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
doReturn(true).when(mPowerAllowlistBackend) doReturn(true)
.when(mPowerAllowlistBackend)
.isAllowlisted(new String[] {HIGH_SDK_PACKAGE}, UID); .isAllowlisted(new String[] {HIGH_SDK_PACKAGE}, UID);
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
mAnomalyInfo)).isTrue(); .isTrue();
} }
@Test @Test
public void testShouldHideAnomaly_normalApp_returnFalse() { public void testShouldHideAnomaly_normalApp_returnFalse() {
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID); doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
mAnomalyInfo)).isFalse(); .isFalse();
} }
@Test @Test
@@ -418,8 +450,8 @@ public class BatteryUtilsTest {
doReturn(new String[] {LOW_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID); doReturn(new String[] {LOW_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE); mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
mAnomalyInfo)).isFalse(); .isFalse();
} }
@Test @Test
@@ -427,19 +459,24 @@ public class BatteryUtilsTest {
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID); doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE); mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
mAnomalyInfo)).isTrue(); .isTrue();
} }
@Test @Test
public void clearForceAppStandby_appRestricted_clearAndReturnTrue() { public void clearForceAppStandby_appRestricted_clearAndReturnTrue() {
when(mBatteryUtils.getPackageUid(HIGH_SDK_PACKAGE)).thenReturn(UID); when(mBatteryUtils.getPackageUid(HIGH_SDK_PACKAGE)).thenReturn(UID);
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, when(mAppOpsManager.checkOpNoThrow(
HIGH_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_IGNORED); AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, HIGH_SDK_PACKAGE))
.thenReturn(AppOpsManager.MODE_IGNORED);
assertThat(mBatteryUtils.clearForceAppStandby(HIGH_SDK_PACKAGE)).isTrue(); assertThat(mBatteryUtils.clearForceAppStandby(HIGH_SDK_PACKAGE)).isTrue();
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, verify(mAppOpsManager)
HIGH_SDK_PACKAGE, AppOpsManager.MODE_ALLOWED); .setMode(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
UID,
HIGH_SDK_PACKAGE,
AppOpsManager.MODE_ALLOWED);
} }
@Test @Test
@@ -447,27 +484,36 @@ public class BatteryUtilsTest {
when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(BatteryUtils.UID_NULL); when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(BatteryUtils.UID_NULL);
assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse(); assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse();
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, verify(mAppOpsManager, never())
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED); .setMode(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
UID,
PACKAGE_NAME,
AppOpsManager.MODE_ALLOWED);
} }
@Test @Test
public void clearForceAppStandby_appUnrestricted_returnFalse() { public void clearForceAppStandby_appUnrestricted_returnFalse() {
when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(UID); when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(UID);
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, when(mAppOpsManager.checkOpNoThrow(
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_ALLOWED); AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
.thenReturn(AppOpsManager.MODE_ALLOWED);
assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse(); assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse();
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, verify(mAppOpsManager, never())
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED); .setMode(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
UID,
PACKAGE_NAME,
AppOpsManager.MODE_ALLOWED);
} }
@Test @Test
public void getBatteryInfo_providerNull_shouldNotCrash() { public void getBatteryInfo_providerNull_shouldNotCrash() {
when(mProvider.isEnhancedBatteryPredictionEnabled(mContext)).thenReturn(true); when(mProvider.isEnhancedBatteryPredictionEnabled(mContext)).thenReturn(true);
when(mProvider.getEnhancedBatteryPrediction(mContext)).thenReturn(null); when(mProvider.getEnhancedBatteryPrediction(mContext)).thenReturn(null);
when(mContext.registerReceiver(nullable(BroadcastReceiver.class), when(mContext.registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class)))
any(IntentFilter.class))).thenReturn(new Intent()); .thenReturn(new Intent());
// Should not crash // Should not crash
assertThat(mBatteryUtils.getBatteryInfo(TAG)).isNotNull(); assertThat(mBatteryUtils.getBatteryInfo(TAG)).isNotNull();

View File

@@ -51,10 +51,8 @@ public class HighPowerDetailTest {
private HighPowerDetail mFragment; private HighPowerDetail mFragment;
private Context mContext; private Context mContext;
@Mock @Mock private PowerAllowlistBackend mPowerAllowlistBackend;
private PowerAllowlistBackend mPowerAllowlistBackend; @Mock private BatteryUtils mBatteryUtils;
@Mock
private BatteryUtils mBatteryUtils;
@Before @Before
public void setUp() { public void setUp() {
@@ -73,13 +71,19 @@ public class HighPowerDetailTest {
public void logSpecialPermissionChange() { public void logSpecialPermissionChange() {
// Deny means app is allowlisted to opt out of power save restrictions // Deny means app is allowlisted to opt out of power save restrictions
HighPowerDetail.logSpecialPermissionChange(true, "app", RuntimeEnvironment.application); HighPowerDetail.logSpecialPermissionChange(true, "app", RuntimeEnvironment.application);
verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class), verify(mFeatureFactory.metricsFeatureProvider)
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_DENY), eq("app")); .action(
any(Context.class),
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_DENY),
eq("app"));
// Allow means app is NOT allowlisted to opt out of power save restrictions // Allow means app is NOT allowlisted to opt out of power save restrictions
HighPowerDetail.logSpecialPermissionChange(false, "app", RuntimeEnvironment.application); HighPowerDetail.logSpecialPermissionChange(false, "app", RuntimeEnvironment.application);
verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class), verify(mFeatureFactory.metricsFeatureProvider)
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW), eq("app")); .action(
any(Context.class),
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW),
eq("app"));
} }
@Test @Test
@@ -87,15 +91,17 @@ public class HighPowerDetailTest {
mFragment.mIsEnabled = true; mFragment.mIsEnabled = true;
when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE, TEST_UID)).thenReturn(false); when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE, TEST_UID)).thenReturn(false);
mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE); mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
verify(mBatteryUtils).setForceAppStandby(TEST_UID, TEST_PACKAGE, verify(mBatteryUtils)
AppOpsManager.MODE_ALLOWED); .setForceAppStandby(TEST_UID, TEST_PACKAGE, AppOpsManager.MODE_ALLOWED);
} }
@Test @Test
public void getSummary_defaultActivePackage_returnUnavailable() { public void getSummary_defaultActivePackage_returnUnavailable() {
doReturn(true).when(mPowerAllowlistBackend).isDefaultActiveApp(TEST_PACKAGE, TEST_UID); doReturn(true).when(mPowerAllowlistBackend).isDefaultActiveApp(TEST_PACKAGE, TEST_UID);
assertThat(HighPowerDetail.getSummary(mContext, mPowerAllowlistBackend, TEST_PACKAGE, assertThat(
TEST_UID)).isEqualTo(mContext.getString(R.string.high_power_system)); HighPowerDetail.getSummary(
mContext, mPowerAllowlistBackend, TEST_PACKAGE, TEST_UID))
.isEqualTo(mContext.getString(R.string.high_power_system));
} }
} }

View File

@@ -76,8 +76,8 @@ public class OptimizedPreferenceControllerTest {
public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() { public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() {
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true); when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_OPTIMIZED); .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -98,8 +98,8 @@ public class OptimizedPreferenceControllerTest {
@Test @Test
public void testUpdateState_isOptimizedStates_prefChecked() { public void testUpdateState_isOptimizedStates_prefChecked() {
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_OPTIMIZED); .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
mController.updateState(mPreference); mController.updateState(mPreference);

View File

@@ -72,7 +72,8 @@ import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers; import org.robolectric.util.ReflectionHelpers;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = { @Config(
shadows = {
ShadowEntityHeaderController.class, ShadowEntityHeaderController.class,
ShadowActivityManager.class, ShadowActivityManager.class,
com.android.settings.testutils.shadow.ShadowFragment.class, com.android.settings.testutils.shadow.ShadowFragment.class,
@@ -96,30 +97,19 @@ public class PowerBackgroundUsageDetailTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private FragmentActivity mActivity; private FragmentActivity mActivity;
@Mock
private EntityHeaderController mEntityHeaderController; @Mock private EntityHeaderController mEntityHeaderController;
@Mock @Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
private BatteryOptimizeUtils mBatteryOptimizeUtils; @Mock private LayoutPreference mHeaderPreference;
@Mock @Mock private ApplicationsState mState;
private LayoutPreference mHeaderPreference; @Mock private Bundle mBundle;
@Mock @Mock private LoaderManager mLoaderManager;
private ApplicationsState mState; @Mock private ApplicationsState.AppEntry mAppEntry;
@Mock @Mock private BatteryEntry mBatteryEntry;
private Bundle mBundle; @Mock private BackupManager mBackupManager;
@Mock @Mock private PackageManager mPackageManager;
private LoaderManager mLoaderManager; @Mock private AppOpsManager mAppOpsManager;
@Mock @Mock private Switch mMockSwitch;
private ApplicationsState.AppEntry mAppEntry;
@Mock
private BatteryEntry mBatteryEntry;
@Mock
private BackupManager mBackupManager;
@Mock
private PackageManager mPackageManager;
@Mock
private AppOpsManager mAppOpsManager;
@Mock
private Switch mMockSwitch;
@Before @Before
public void setUp() { public void setUp() {
@@ -137,19 +127,26 @@ public class PowerBackgroundUsageDetailTest {
doReturn(mLoaderManager).when(mFragment).getLoaderManager(); doReturn(mLoaderManager).when(mFragment).getLoaderManager();
ShadowEntityHeaderController.setUseMock(mEntityHeaderController); ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setButtonActions(anyInt(), anyInt()); .setButtonActions(anyInt(), anyInt());
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setIcon(nullable(Drawable.class)); .setIcon(nullable(Drawable.class));
doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable( doReturn(mEntityHeaderController)
ApplicationsState.AppEntry.class)); .when(mEntityHeaderController)
doReturn(mEntityHeaderController).when(mEntityHeaderController) .setIcon(nullable(ApplicationsState.AppEntry.class));
doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setLabel(nullable(String.class)); .setLabel(nullable(String.class));
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setLabel(nullable(String.class)); .setLabel(nullable(String.class));
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setLabel(nullable(ApplicationsState.AppEntry.class)); .setLabel(nullable(ApplicationsState.AppEntry.class));
doReturn(mEntityHeaderController).when(mEntityHeaderController) doReturn(mEntityHeaderController)
.when(mEntityHeaderController)
.setSummary(nullable(String.class)); .setSummary(nullable(String.class));
when(mBatteryEntry.getUid()).thenReturn(UID); when(mBatteryEntry.getUid()).thenReturn(UID);
@@ -169,13 +166,15 @@ public class PowerBackgroundUsageDetailTest {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
Answer<Void> callable = invocation -> { Answer<Void> callable =
invocation -> {
mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS); mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
System.out.println("mBundle = " + mBundle); System.out.println("mBundle = " + mBundle);
return null; return null;
}; };
doAnswer(callable).when(mActivity).startActivityAsUser(captor.capture(), doAnswer(callable)
nullable(UserHandle.class)); .when(mActivity)
.startActivityAsUser(captor.capture(), nullable(UserHandle.class));
doAnswer(callable).when(mActivity).startActivity(captor.capture()); doAnswer(callable).when(mActivity).startActivity(captor.capture());
mFooterPreference = spy(new FooterPreference(mContext)); mFooterPreference = spy(new FooterPreference(mContext));
@@ -207,7 +206,9 @@ public class PowerBackgroundUsageDetailTest {
@Test @Test
public void initHeader_HasAppEntry_BuildByAppEntry() { public void initHeader_HasAppEntry_BuildByAppEntry() {
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", ReflectionHelpers.setStaticField(
AppUtils.class,
"sInstantAppDataProvider",
new InstantAppDataProvider() { new InstantAppDataProvider() {
@Override @Override
public boolean isInstantApp(ApplicationInfo info) { public boolean isInstantApp(ApplicationInfo info) {
@@ -224,7 +225,9 @@ public class PowerBackgroundUsageDetailTest {
@Test @Test
public void initHeader_HasAppEntry_InstantApp() { public void initHeader_HasAppEntry_InstantApp() {
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider", ReflectionHelpers.setStaticField(
AppUtils.class,
"sInstantAppDataProvider",
new InstantAppDataProvider() { new InstantAppDataProvider() {
@Override @Override
public boolean isInstantApp(ApplicationInfo info) { public boolean isInstantApp(ApplicationInfo info) {

View File

@@ -46,8 +46,8 @@ public class PowerUsageFeatureProviderImplTest {
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mContext; private Context mContext;
@Mock
private PackageManager mPackageManager; @Mock private PackageManager mPackageManager;
private PowerUsageFeatureProviderImpl mPowerFeatureProvider; private PowerUsageFeatureProviderImpl mPowerFeatureProvider;
@Before @Before
@@ -117,16 +117,18 @@ public class PowerUsageFeatureProviderImplTest {
@Test @Test
public void testIsSmartBatterySupported_smartBatterySupported_returnTrue() { public void testIsSmartBatterySupported_smartBatterySupported_returnTrue() {
when(mContext.getResources().getBoolean( when(mContext.getResources()
com.android.internal.R.bool.config_smart_battery_available)).thenReturn(true); .getBoolean(com.android.internal.R.bool.config_smart_battery_available))
.thenReturn(true);
assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isTrue(); assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isTrue();
} }
@Test @Test
public void testIsSmartBatterySupported_smartBatteryNotSupported_returnFalse() { public void testIsSmartBatterySupported_smartBatteryNotSupported_returnFalse() {
when(mContext.getResources().getBoolean( when(mContext.getResources()
com.android.internal.R.bool.config_smart_battery_available)).thenReturn(false); .getBoolean(com.android.internal.R.bool.config_smart_battery_available))
.thenReturn(false);
assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isFalse(); assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isFalse();
} }

View File

@@ -46,12 +46,9 @@ public final class PowerUsageTimeControllerTest {
private Context mContext; private Context mContext;
private PowerUsageTimeController mPowerUsageTimeController; private PowerUsageTimeController mPowerUsageTimeController;
@Mock @Mock private PreferenceCategory mPowerUsageTimeCategory;
private PreferenceCategory mPowerUsageTimeCategory; @Mock private PowerUsageTimePreference mScreenTimePreference;
@Mock @Mock private PowerUsageTimePreference mBackgroundTimePreference;
private PowerUsageTimePreference mScreenTimePreference;
@Mock
private PowerUsageTimePreference mBackgroundTimePreference;
@Before @Before
public void setUp() { public void setUp() {
@@ -67,18 +64,24 @@ public final class PowerUsageTimeControllerTest {
@Test @Test
public void handleScreenTimeUpdated_noInfo_prefInvisible() { public void handleScreenTimeUpdated_noInfo_prefInvisible() {
mPowerUsageTimeController.handleScreenTimeUpdated(/*slotTime=*/ null, mPowerUsageTimeController.handleScreenTimeUpdated(
/*screenOnTimeInMs=*/ 0, /*backgroundTimeInMs=*/ 0, /* slotTime= */ null,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); /* screenOnTimeInMs= */ 0,
/* backgroundTimeInMs= */ 0,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyAllPreferencesVisible(false); verifyAllPreferencesVisible(false);
} }
@Test @Test
public void handleScreenTimeUpdated_onlySlotTime_prefInvisible() { public void handleScreenTimeUpdated_onlySlotTime_prefInvisible() {
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
/*screenOnTimeInMs=*/ 0, /*backgroundTimeInMs=*/ 0, SLOT_TIME,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); /* screenOnTimeInMs= */ 0,
/* backgroundTimeInMs= */ 0,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyAllPreferencesVisible(false); verifyAllPreferencesVisible(false);
} }
@@ -88,9 +91,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeAMinute = 60000; final long screenOnTimeAMinute = 60000;
final long backgroundTimeZero = 0; final long backgroundTimeZero = 0;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeAMinute, backgroundTimeZero, SLOT_TIME,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); screenOnTimeAMinute,
backgroundTimeZero,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyOnePreferenceInvisible(mBackgroundTimePreference); verifyOnePreferenceInvisible(mBackgroundTimePreference);
verify(mScreenTimePreference).setTimeTitle("Screen time"); verify(mScreenTimePreference).setTimeTitle("Screen time");
@@ -103,9 +109,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeZero = 0; final long screenOnTimeZero = 0;
final long backgroundTimeTwoMinutes = 120000; final long backgroundTimeTwoMinutes = 120000;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeZero, backgroundTimeTwoMinutes, SLOT_TIME,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); screenOnTimeZero,
backgroundTimeTwoMinutes,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyOnePreferenceInvisible(mScreenTimePreference); verifyOnePreferenceInvisible(mScreenTimePreference);
verify(mBackgroundTimePreference).setTimeTitle("Background time"); verify(mBackgroundTimePreference).setTimeTitle("Background time");
@@ -118,9 +127,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeAMinute = 60000; final long screenOnTimeAMinute = 60000;
final long backgroundTimeTwoMinutes = 120000; final long backgroundTimeTwoMinutes = 120000;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeAMinute, backgroundTimeTwoMinutes, SLOT_TIME,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); screenOnTimeAMinute,
backgroundTimeTwoMinutes,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyAllPreferencesVisible(true); verifyAllPreferencesVisible(true);
verify(mScreenTimePreference).setTimeTitle("Screen time"); verify(mScreenTimePreference).setTimeTitle("Screen time");
@@ -137,9 +149,12 @@ public final class PowerUsageTimeControllerTest {
final long backgroundTimeTwoMinutes = 120000; final long backgroundTimeTwoMinutes = 120000;
final long screenOnTimeAMinute = 60000; final long screenOnTimeAMinute = 60000;
mPowerUsageTimeController.handleScreenTimeUpdated(/*slotTime=*/ null, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeAMinute, backgroundTimeTwoMinutes, /* slotTime= */ null,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); screenOnTimeAMinute,
backgroundTimeTwoMinutes,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyAllPreferencesVisible(true); verifyAllPreferencesVisible(true);
verify(mPowerUsageTimeCategory).setTitle("App usage since last full charge"); verify(mPowerUsageTimeCategory).setTitle("App usage since last full charge");
@@ -150,9 +165,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeAMinute = 60000; final long screenOnTimeAMinute = 60000;
final long backgroundTimeLessThanAMinute = 59999; final long backgroundTimeLessThanAMinute = 59999;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeAMinute, backgroundTimeLessThanAMinute, SLOT_TIME,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); screenOnTimeAMinute,
backgroundTimeLessThanAMinute,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyAllPreferencesVisible(true); verifyAllPreferencesVisible(true);
verify(mScreenTimePreference).setTimeSummary("1 min"); verify(mScreenTimePreference).setTimeSummary("1 min");
@@ -164,9 +182,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeLessThanAMinute = 59999; final long screenOnTimeLessThanAMinute = 59999;
final long backgroundTimeTwoMinutes = 120000; final long backgroundTimeTwoMinutes = 120000;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeLessThanAMinute, backgroundTimeTwoMinutes, SLOT_TIME,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); screenOnTimeLessThanAMinute,
backgroundTimeTwoMinutes,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyAllPreferencesVisible(true); verifyAllPreferencesVisible(true);
verify(mScreenTimePreference).setTimeSummary("Less than a min"); verify(mScreenTimePreference).setTimeSummary("Less than a min");
@@ -178,9 +199,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeLessThanAMinute = 59999; final long screenOnTimeLessThanAMinute = 59999;
final long backgroundTimeLessThanAMinute = 59999; final long backgroundTimeLessThanAMinute = 59999;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeLessThanAMinute, backgroundTimeLessThanAMinute, SLOT_TIME,
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null); screenOnTimeLessThanAMinute,
backgroundTimeLessThanAMinute,
/* anomalyHintPrefKey= */ null,
/* anomalyHintText= */ null);
verifyAllPreferencesVisible(true); verifyAllPreferencesVisible(true);
verify(mScreenTimePreference).setTimeSummary("Less than a min"); verify(mScreenTimePreference).setTimeSummary("Less than a min");
@@ -192,9 +216,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeAMinute = 60000; final long screenOnTimeAMinute = 60000;
final long backgroundTimeTwoMinutes = 120000; final long backgroundTimeTwoMinutes = 120000;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeAMinute, backgroundTimeTwoMinutes, SLOT_TIME,
KEY_SCREEN_ON_TIME_PREF, TEST_ANOMALY_HINT_TEXT); screenOnTimeAMinute,
backgroundTimeTwoMinutes,
KEY_SCREEN_ON_TIME_PREF,
TEST_ANOMALY_HINT_TEXT);
verifyAllPreferencesVisible(true); verifyAllPreferencesVisible(true);
verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT); verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT);
@@ -206,9 +233,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeAMinute = 60000; final long screenOnTimeAMinute = 60000;
final long backgroundTimeTwoMinutes = 120000; final long backgroundTimeTwoMinutes = 120000;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeAMinute, backgroundTimeTwoMinutes, SLOT_TIME,
KEY_BACKGROUND_TIME_PREF, TEST_ANOMALY_HINT_TEXT); screenOnTimeAMinute,
backgroundTimeTwoMinutes,
KEY_BACKGROUND_TIME_PREF,
TEST_ANOMALY_HINT_TEXT);
verifyAllPreferencesVisible(true); verifyAllPreferencesVisible(true);
verify(mScreenTimePreference, never()).setAnomalyHint(anyString()); verify(mScreenTimePreference, never()).setAnomalyHint(anyString());
@@ -220,9 +250,12 @@ public final class PowerUsageTimeControllerTest {
final long screenOnTimeZero = 0; final long screenOnTimeZero = 0;
final long backgroundTimeTwoMinutes = 120000; final long backgroundTimeTwoMinutes = 120000;
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME, mPowerUsageTimeController.handleScreenTimeUpdated(
screenOnTimeZero, backgroundTimeTwoMinutes, SLOT_TIME,
KEY_SCREEN_ON_TIME_PREF, TEST_ANOMALY_HINT_TEXT); screenOnTimeZero,
backgroundTimeTwoMinutes,
KEY_SCREEN_ON_TIME_PREF,
TEST_ANOMALY_HINT_TEXT);
verifyAllPreferencesVisible(true); verifyAllPreferencesVisible(true);
verify(mScreenTimePreference).setTimeSummary("Less than a min"); verify(mScreenTimePreference).setTimeSummary("Less than a min");

View File

@@ -33,7 +33,6 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.util.Pair;
import androidx.preference.Preference; import androidx.preference.Preference;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
@@ -65,12 +64,9 @@ public class RestrictAppPreferenceControllerTest {
private static final String RESTRICTED_PACKAGE_NAME = "com.android.restricted.package"; private static final String RESTRICTED_PACKAGE_NAME = "com.android.restricted.package";
private static final int OTHER_USER_UID = UserHandle.PER_USER_RANGE + RESTRICTED_UID; private static final int OTHER_USER_UID = UserHandle.PER_USER_RANGE + RESTRICTED_UID;
@Mock @Mock private AppOpsManager mAppOpsManager;
private AppOpsManager mAppOpsManager; @Mock private InstrumentedPreferenceFragment mFragment;
@Mock @Mock private UserManager mUserManager;
private InstrumentedPreferenceFragment mFragment;
@Mock
private UserManager mUserManager;
private AppOpsManager.PackageOps mRestrictedPackageOps; private AppOpsManager.PackageOps mRestrictedPackageOps;
private AppOpsManager.PackageOps mAllowedPackageOps; private AppOpsManager.PackageOps mAllowedPackageOps;
@@ -84,18 +80,24 @@ public class RestrictAppPreferenceControllerTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
final List<AppOpsManager.OpEntry> allowOps = new ArrayList<>(); final List<AppOpsManager.OpEntry> allowOps = new ArrayList<>();
allowOps.add(new AppOpsManager.OpEntry( allowOps.add(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_ALLOWED, new AppOpsManager.OpEntry(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
AppOpsManager.MODE_ALLOWED,
Collections.emptyMap())); Collections.emptyMap()));
final List<AppOpsManager.OpEntry> restrictedOps = new ArrayList<>(); final List<AppOpsManager.OpEntry> restrictedOps = new ArrayList<>();
restrictedOps.add(new AppOpsManager.OpEntry( restrictedOps.add(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_IGNORED, new AppOpsManager.OpEntry(
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
AppOpsManager.MODE_IGNORED,
Collections.emptyMap())); Collections.emptyMap()));
mAllowedPackageOps = new AppOpsManager.PackageOps( mAllowedPackageOps =
ALLOWED_PACKAGE_NAME, ALLOWED_UID, allowOps); new AppOpsManager.PackageOps(ALLOWED_PACKAGE_NAME, ALLOWED_UID, allowOps);
mRestrictedPackageOps = new AppOpsManager.PackageOps( mRestrictedPackageOps =
new AppOpsManager.PackageOps(
RESTRICTED_PACKAGE_NAME, RESTRICTED_UID, restrictedOps); RESTRICTED_PACKAGE_NAME, RESTRICTED_UID, restrictedOps);
mOtherUserPackageOps = new AppOpsManager.PackageOps( mOtherUserPackageOps =
new AppOpsManager.PackageOps(
RESTRICTED_PACKAGE_NAME, OTHER_USER_UID, restrictedOps); RESTRICTED_PACKAGE_NAME, OTHER_USER_UID, restrictedOps);
mContext = spy(ApplicationProvider.getApplicationContext()); mContext = spy(ApplicationProvider.getApplicationContext());
@@ -109,8 +111,8 @@ public class RestrictAppPreferenceControllerTest {
mPreferenceScreen = spy(new PreferenceScreen(mContext, null)); mPreferenceScreen = spy(new PreferenceScreen(mContext, null));
when(mPreferenceScreen.getPreferenceManager()).thenReturn(mock(PreferenceManager.class)); when(mPreferenceScreen.getPreferenceManager()).thenReturn(mock(PreferenceManager.class));
when(mPreferenceScreen.getContext()).thenReturn(mContext); when(mPreferenceScreen.getContext()).thenReturn(mContext);
when(mPreferenceScreen.findPreference( when(mPreferenceScreen.findPreference(RestrictAppPreferenceController.KEY_RESTRICT_APP))
RestrictAppPreferenceController.KEY_RESTRICT_APP)).thenReturn(mPreference); .thenReturn(mPreference);
final List<UserHandle> userHandles = new ArrayList<>(); final List<UserHandle> userHandles = new ArrayList<>();
userHandles.add(new UserHandle(0)); userHandles.add(new UserHandle(0));
@@ -122,8 +124,8 @@ public class RestrictAppPreferenceControllerTest {
mPackageOpsList.add(mRestrictedPackageOps); mPackageOpsList.add(mRestrictedPackageOps);
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class)); doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController( final RestrictAppPreferenceController controller =
mFragment); new RestrictAppPreferenceController(mFragment);
controller.displayPreference(mPreferenceScreen); controller.displayPreference(mPreferenceScreen);
controller.updateState(mPreference); controller.updateState(mPreference);
@@ -138,8 +140,8 @@ public class RestrictAppPreferenceControllerTest {
mPackageOpsList.add(mOtherUserPackageOps); mPackageOpsList.add(mOtherUserPackageOps);
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class)); doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController( final RestrictAppPreferenceController controller =
mFragment); new RestrictAppPreferenceController(mFragment);
controller.displayPreference(mPreferenceScreen); controller.displayPreference(mPreferenceScreen);
controller.updateState(mPreference); controller.updateState(mPreference);
@@ -154,13 +156,14 @@ public class RestrictAppPreferenceControllerTest {
mPackageOpsList.add(mOtherUserPackageOps); mPackageOpsList.add(mOtherUserPackageOps);
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class)); doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController( final RestrictAppPreferenceController controller =
mFragment); new RestrictAppPreferenceController(mFragment);
controller.displayPreference(mPreferenceScreen); controller.displayPreference(mPreferenceScreen);
controller.updateState(mPreference); controller.updateState(mPreference);
assertThat(mPreference.getSummary()).isEqualTo("Limiting battery usage for 1 app"); assertThat(mPreference.getSummary()).isEqualTo("Limiting battery usage for 1 app");
assertThat(controller.mAppInfos).containsExactly( assertThat(controller.mAppInfos)
.containsExactly(
new AppInfo.Builder() new AppInfo.Builder()
.setUid(RESTRICTED_UID) .setUid(RESTRICTED_UID)
.setPackageName(RESTRICTED_PACKAGE_NAME) .setPackageName(RESTRICTED_PACKAGE_NAME)
@@ -172,8 +175,8 @@ public class RestrictAppPreferenceControllerTest {
mPackageOpsList.add(mAllowedPackageOps); mPackageOpsList.add(mAllowedPackageOps);
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class)); doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController( final RestrictAppPreferenceController controller =
mFragment); new RestrictAppPreferenceController(mFragment);
controller.displayPreference(mPreferenceScreen); controller.displayPreference(mPreferenceScreen);
controller.updateState(mPreference); controller.updateState(mPreference);
@@ -185,8 +188,8 @@ public class RestrictAppPreferenceControllerTest {
public void handlePreferenceTreeClick_startFragment() { public void handlePreferenceTreeClick_startFragment() {
final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class); final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController( final RestrictAppPreferenceController controller =
mFragment); new RestrictAppPreferenceController(mFragment);
controller.handlePreferenceTreeClick(mPreference); controller.handlePreferenceTreeClick(mPreference);
verify(mContext).startActivity(intent.capture()); verify(mContext).startActivity(intent.capture());

View File

@@ -72,17 +72,11 @@ public class RestrictedAppDetailsTest {
private static final int UID = UserHandle.getUid(USER_ID, 234); private static final int UID = UserHandle.getUid(USER_ID, 234);
private static final String APP_NAME = "app"; private static final String APP_NAME = "app";
@Mock private PackageManager mPackageManager;
@Mock @Mock private ApplicationInfo mApplicationInfo;
private PackageManager mPackageManager; @Mock private IconDrawableFactory mIconDrawableFactory;
@Mock @Mock private InstrumentedPreferenceFragment mFragment;
private ApplicationInfo mApplicationInfo; @Mock private BatteryDatabaseManager mBatteryDatabaseManager;
@Mock
private IconDrawableFactory mIconDrawableFactory;
@Mock
private InstrumentedPreferenceFragment mFragment;
@Mock
private BatteryDatabaseManager mBatteryDatabaseManager;
private PreferenceManager mPreferenceManager; private PreferenceManager mPreferenceManager;
private RestrictedAppDetails mRestrictedAppDetails; private RestrictedAppDetails mRestrictedAppDetails;
private Context mContext; private Context mContext;
@@ -96,10 +90,7 @@ public class RestrictedAppDetailsTest {
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mRestrictedAppDetails = spy(new RestrictedAppDetails()); mRestrictedAppDetails = spy(new RestrictedAppDetails());
mAppInfo = new AppInfo.Builder() mAppInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME).setUid(UID).build();
.setPackageName(PACKAGE_NAME)
.setUid(UID)
.build();
mPreferenceManager = new PreferenceManager(mContext); mPreferenceManager = new PreferenceManager(mContext);
@@ -113,8 +104,9 @@ public class RestrictedAppDetailsTest {
mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext)); mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext));
mRestrictedAppDetails.mBatteryUtils = spy(new BatteryUtils(mContext)); mRestrictedAppDetails.mBatteryUtils = spy(new BatteryUtils(mContext));
mRestrictedAppDetails.mBatteryDatabaseManager = mBatteryDatabaseManager; mRestrictedAppDetails.mBatteryDatabaseManager = mBatteryDatabaseManager;
doReturn(mPreferenceManager).when( doReturn(mPreferenceManager)
mRestrictedAppDetails.mRestrictedAppListGroup).getPreferenceManager(); .when(mRestrictedAppDetails.mRestrictedAppListGroup)
.getPreferenceManager();
mCheckBoxPreference = new CheckBoxPreference(mContext); mCheckBoxPreference = new CheckBoxPreference(mContext);
mCheckBoxPreference.setKey(mRestrictedAppDetails.getKeyFromAppInfo(mAppInfo)); mCheckBoxPreference.setKey(mRestrictedAppDetails.getKeyFromAppInfo(mAppInfo));
@@ -122,14 +114,17 @@ public class RestrictedAppDetailsTest {
@Test @Test
public void refreshUi_displayPreference() throws Exception { public void refreshUi_displayPreference() throws Exception {
doReturn(mApplicationInfo).when(mPackageManager) doReturn(mApplicationInfo)
.when(mPackageManager)
.getApplicationInfoAsUser(PACKAGE_NAME, 0, USER_ID); .getApplicationInfoAsUser(PACKAGE_NAME, 0, USER_ID);
doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo); doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo);
doReturn(true).when(mRestrictedAppDetails.mBatteryUtils).isForceAppStandbyEnabled(UID, doReturn(true)
PACKAGE_NAME); .when(mRestrictedAppDetails.mBatteryUtils)
.isForceAppStandbyEnabled(UID, PACKAGE_NAME);
final SparseLongArray timestampArray = new SparseLongArray(); final SparseLongArray timestampArray = new SparseLongArray();
timestampArray.put(UID, System.currentTimeMillis() - TimeUnit.HOURS.toMillis(5)); timestampArray.put(UID, System.currentTimeMillis() - TimeUnit.HOURS.toMillis(5));
doReturn(timestampArray).when(mBatteryDatabaseManager) doReturn(timestampArray)
.when(mBatteryDatabaseManager)
.queryActionTime(AnomalyDatabaseHelper.ActionType.RESTRICTION); .queryActionTime(AnomalyDatabaseHelper.ActionType.RESTRICTION);
mRestrictedAppDetails.refreshUi(); mRestrictedAppDetails.refreshUi();
@@ -145,30 +140,32 @@ public class RestrictedAppDetailsTest {
@Test @Test
public void startRestrictedAppDetails_startWithCorrectData() { public void startRestrictedAppDetails_startWithCorrectData() {
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class); final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
doAnswer(invocation -> { doAnswer(
invocation -> {
// Get the intent in which it has the app info bundle // Get the intent in which it has the app info bundle
mIntent = captor.getValue(); mIntent = captor.getValue();
return true; return true;
}).when(mContext).startActivity(captor.capture()); })
.when(mContext)
.startActivity(captor.capture());
RestrictedAppDetails.startRestrictedAppDetails(mFragment, RestrictedAppDetails.startRestrictedAppDetails(mFragment, mRestrictedAppDetails.mAppInfos);
mRestrictedAppDetails.mAppInfos);
final Bundle bundle = mIntent.getBundleExtra( final Bundle bundle =
SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS); mIntent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
// Verify the bundle has the correct info // Verify the bundle has the correct info
final List<AppInfo> appInfos = bundle.getParcelableArrayList( final List<AppInfo> appInfos =
RestrictedAppDetails.EXTRA_APP_INFO_LIST); bundle.getParcelableArrayList(RestrictedAppDetails.EXTRA_APP_INFO_LIST);
assertThat(appInfos).containsExactly(mAppInfo); assertThat(appInfos).containsExactly(mAppInfo);
} }
@Test @Test
public void createDialogFragment_toRestrict_createRestrictDialog() { public void createDialogFragment_toRestrict_createRestrictDialog() {
final BatteryTipDialogFragment dialogFragment = mRestrictedAppDetails.createDialogFragment( final BatteryTipDialogFragment dialogFragment =
mAppInfo, true); mRestrictedAppDetails.createDialogFragment(mAppInfo, true);
FragmentController.setupFragment(dialogFragment, FragmentActivity.class, FragmentController.setupFragment(
0 /* containerViewId */, null /* bundle */); dialogFragment, FragmentActivity.class, 0 /* containerViewId */, null /* bundle */);
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog); ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
@@ -177,11 +174,11 @@ public class RestrictedAppDetailsTest {
@Test @Test
public void createDialogFragment_toUnrestrict_createUnrestrictDialog() { public void createDialogFragment_toUnrestrict_createUnrestrictDialog() {
final BatteryTipDialogFragment dialogFragment = mRestrictedAppDetails.createDialogFragment( final BatteryTipDialogFragment dialogFragment =
mAppInfo, false); mRestrictedAppDetails.createDialogFragment(mAppInfo, false);
FragmentController.setupFragment(dialogFragment, FragmentActivity.class, FragmentController.setupFragment(
0 /* containerViewId */, null /* bundle */); dialogFragment, FragmentActivity.class, 0 /* containerViewId */, null /* bundle */);
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog); ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
@@ -190,8 +187,8 @@ public class RestrictedAppDetailsTest {
@Test @Test
public void onBatteryTipHandled_restrict_setChecked() { public void onBatteryTipHandled_restrict_setChecked() {
final RestrictAppTip restrictAppTip = new RestrictAppTip(BatteryTip.StateType.NEW, final RestrictAppTip restrictAppTip =
mAppInfo); new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference); mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference);
mRestrictedAppDetails.onBatteryTipHandled(restrictAppTip); mRestrictedAppDetails.onBatteryTipHandled(restrictAppTip);
@@ -201,8 +198,8 @@ public class RestrictedAppDetailsTest {
@Test @Test
public void onBatteryTipHandled_unrestrict_setUnchecked() { public void onBatteryTipHandled_unrestrict_setUnchecked() {
final UnrestrictAppTip unrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, final UnrestrictAppTip unrestrictAppTip =
mAppInfo); new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference); mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference);
mRestrictedAppDetails.onBatteryTipHandled(unrestrictAppTip); mRestrictedAppDetails.onBatteryTipHandled(unrestrictAppTip);

View File

@@ -54,7 +54,8 @@ public class SmartBatteryPreferenceControllerTest {
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
doReturn(mock(DevicePolicyManager.class)).when(mContext) doReturn(mock(DevicePolicyManager.class))
.when(mContext)
.getSystemService(Context.DEVICE_POLICY_SERVICE); .getSystemService(Context.DEVICE_POLICY_SERVICE);
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
@@ -99,26 +100,26 @@ public class SmartBatteryPreferenceControllerTest {
public void testGetAvailabilityStatus_smartBatterySupported_returnAvailable() { public void testGetAvailabilityStatus_smartBatterySupported_returnAvailable() {
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported(); doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus())
BasePreferenceController.AVAILABLE); .isEqualTo(BasePreferenceController.AVAILABLE);
} }
@Test @Test
public void testGetAvailabilityStatus_smartBatteryUnSupported_returnDisabled() { public void testGetAvailabilityStatus_smartBatteryUnSupported_returnDisabled() {
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported(); doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
assertThat(mController.getAvailabilityStatus()).isEqualTo( assertThat(mController.getAvailabilityStatus())
BasePreferenceController.UNSUPPORTED_ON_DEVICE); .isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
} }
private void putSmartBatteryValue(int value) { private void putSmartBatteryValue(int value) {
Settings.Global.putInt(mContentResolver, Settings.Global.putInt(
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, value); mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, value);
} }
private int getSmartBatteryValue() { private int getSmartBatteryValue() {
return Settings.Global.getInt(mContentResolver, return Settings.Global.getInt(
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, ON); mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, ON);
} }
@Test @Test

View File

@@ -50,12 +50,9 @@ public class TopLevelBatteryPreferenceControllerTest {
private TopLevelBatteryPreferenceController mController; private TopLevelBatteryPreferenceController mController;
private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider; private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
@Mock @Mock private UsbPort mUsbPort;
private UsbPort mUsbPort; @Mock private UsbManager mUsbManager;
@Mock @Mock private UsbPortStatus mUsbPortStatus;
private UsbManager mUsbManager;
@Mock
private UsbPortStatus mUsbPortStatus;
@Before @Before
public void setUp() { public void setUp() {
@@ -125,8 +122,7 @@ public class TopLevelBatteryPreferenceControllerTest {
info.discharging = false; info.discharging = false;
info.chargeLabel = "5% - charging"; info.chargeLabel = "5% - charging";
assertThat(mController.getDashboardLabel(mContext, info, true)) assertThat(mController.getDashboardLabel(mContext, info, true)).isEqualTo(info.chargeLabel);
.isEqualTo(info.chargeLabel);
} }
@Test @Test
@@ -136,7 +132,8 @@ public class TopLevelBatteryPreferenceControllerTest {
BatteryInfo info = new BatteryInfo(); BatteryInfo info = new BatteryInfo();
assertThat(mController.getDashboardLabel(mContext, info, true)) assertThat(mController.getDashboardLabel(mContext, info, true))
.isEqualTo(mContext.getString( .isEqualTo(
mContext.getString(
com.android.settingslib.R.string.battery_info_status_not_charging)); com.android.settingslib.R.string.battery_info_status_not_charging));
} }
@@ -147,8 +144,7 @@ public class TopLevelBatteryPreferenceControllerTest {
info.batteryStatus = BatteryManager.BATTERY_STATUS_NOT_CHARGING; info.batteryStatus = BatteryManager.BATTERY_STATUS_NOT_CHARGING;
info.statusLabel = "expected returned label"; info.statusLabel = "expected returned label";
assertThat(mController.getDashboardLabel(mContext, info, true)) assertThat(mController.getDashboardLabel(mContext, info, true)).isEqualTo(info.statusLabel);
.isEqualTo(info.statusLabel);
} }
@Test @Test

View File

@@ -88,8 +88,8 @@ public class UnrestrictedPreferenceControllerTest {
public void testUpdateState_isSystemOrDefaultAppAndUnrestrictedStates_prefChecked() { public void testUpdateState_isSystemOrDefaultAppAndUnrestrictedStates_prefChecked() {
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true); when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_UNRESTRICTED); .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -100,8 +100,8 @@ public class UnrestrictedPreferenceControllerTest {
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() { public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false); when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true); when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_OPTIMIZED); .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -112,8 +112,8 @@ public class UnrestrictedPreferenceControllerTest {
@Test @Test
public void testUpdateState_isUnrestrictedStates_prefChecked() { public void testUpdateState_isUnrestrictedStates_prefChecked() {
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true); when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_UNRESTRICTED); .thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -124,8 +124,8 @@ public class UnrestrictedPreferenceControllerTest {
@Test @Test
public void testUpdateState_prefUnchecked() { public void testUpdateState_prefUnchecked() {
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true); when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn( when(mBatteryOptimizeUtils.getAppOptimizationMode())
BatteryOptimizeUtils.MODE_OPTIMIZED); .thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
mController.updateState(mPreference); mController.updateState(mPreference);

View File

@@ -47,10 +47,8 @@ public class BatterySaverButtonPreferenceControllerTest {
private Context mContext; private Context mContext;
private MainSwitchPreference mPreference; private MainSwitchPreference mPreference;
@Mock @Mock private PowerManager mPowerManager;
private PowerManager mPowerManager; @Mock private PreferenceScreen mPreferenceScreen;
@Mock
private PreferenceScreen mPreferenceScreen;
@Before @Before
public void setUp() { public void setUp() {

View File

@@ -59,10 +59,12 @@ public class BatterySaverSchedulePreferenceControllerTest {
@Test @Test
public void testPreference_lowPowerLevelZero_percentageMode_summaryNoSchedule() { public void testPreference_lowPowerLevelZero_percentageMode_summaryNoSchedule() {
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0); mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); mContext.getContentResolver(),
Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
mController.updateState(mPreference); mController.updateState(mPreference);
@@ -71,10 +73,14 @@ public class BatterySaverSchedulePreferenceControllerTest {
@Test @Test
public void testPreference_lowPowerLevelNonZero_percentageMode_summaryPercentage() { public void testPreference_lowPowerLevelNonZero_percentageMode_summaryPercentage() {
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, TRIGGER_LEVEL); mContext.getContentResolver(),
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); TRIGGER_LEVEL);
Settings.Global.putInt(
mContext.getContentResolver(),
Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
mController.updateState(mPreference); mController.updateState(mPreference);

View File

@@ -34,8 +34,7 @@ public class BatterySaverScheduleSeekBarControllerTest {
private Context mContext; private Context mContext;
private ContentResolver mResolver; private ContentResolver mResolver;
private BatterySaverScheduleSeekBarController mController; private BatterySaverScheduleSeekBarController mController;
@Mock @Mock private PreferenceScreen mScreen;
private PreferenceScreen mScreen;
@Before @Before
public void setUp() { public void setUp() {
@@ -83,7 +82,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
@Test @Test
public void updateSeekBar_routineMode_hasCorrectProperties() { public void updateSeekBar_routineMode_hasCorrectProperties() {
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE, Settings.Global.putInt(
mResolver,
Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC); PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
mController.updateSeekBar(); mController.updateSeekBar();
@@ -95,7 +96,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
@Test @Test
public void updateSeekBar_percentageMode_hasCorrectProperties() { public void updateSeekBar_percentageMode_hasCorrectProperties() {
final CharSequence expectedTitle = "10%"; final CharSequence expectedTitle = "10%";
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE, Settings.Global.putInt(
mResolver,
Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
setTriggerLevel(10); setTriggerLevel(10);
@@ -108,7 +111,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
@Test @Test
public void updateSeekBar_noneMode_hasCorrectProperties() { public void updateSeekBar_noneMode_hasCorrectProperties() {
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE, Settings.Global.putInt(
mResolver,
Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
setTriggerLevel(0); setTriggerLevel(0);
@@ -120,7 +125,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
@Test @Test
public void addToScreen_addsToEnd() { public void addToScreen_addsToEnd() {
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE, Settings.Global.putInt(
mResolver,
Global.AUTOMATIC_POWER_SAVE_MODE,
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE); PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
setTriggerLevel(15); setTriggerLevel(15);

View File

@@ -1,6 +1,7 @@
package com.android.settings.fuelgauge.batterysaver; package com.android.settings.fuelgauge.batterysaver;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -90,18 +91,25 @@ public final class BatterySaverScheduleSettingsTest {
} }
private void setSchedule(int scheduleType, int schedulePercentage) { private void setSchedule(int scheduleType, int schedulePercentage) {
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
Settings.Global.AUTOMATIC_POWER_SAVE_MODE, scheduleType); mContext.getContentResolver(),
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, schedulePercentage); scheduleType);
Settings.Global.putInt(
mContext.getContentResolver(),
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
schedulePercentage);
} }
private void verifySchedule(String scheduleTypeKey, int schedulePercentage) { private void verifySchedule(String scheduleTypeKey, int schedulePercentage) {
waitAWhile(); waitAWhile();
verify(mMetricsFeatureProvider).action(SettingsEnums.FUELGAUGE_BATTERY_SAVER, verify(mMetricsFeatureProvider)
.action(
SettingsEnums.FUELGAUGE_BATTERY_SAVER,
SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE, SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE, SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
scheduleTypeKey, schedulePercentage); scheduleTypeKey,
schedulePercentage);
} }
private void waitAWhile() { private void waitAWhile() {

View File

@@ -34,13 +34,13 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = { @Config(
shadows = {
com.android.settings.testutils.shadow.ShadowFragment.class, com.android.settings.testutils.shadow.ShadowFragment.class,
}) })
public class BatterySaverSettingsTest { public class BatterySaverSettingsTest {
BatterySaverSettings mFragment; BatterySaverSettings mFragment;
@Mock @Mock PreferenceScreen mScreen;
PreferenceScreen mScreen;
@Before @Before
public void setUp() { public void setUp() {
@@ -50,7 +50,6 @@ public class BatterySaverSettingsTest {
doReturn(mScreen).when(mFragment).getPreferenceScreen(); doReturn(mScreen).when(mFragment).getPreferenceScreen();
} }
@Test @Test
public void setupFooter_linkAddedWhenAppropriate() { public void setupFooter_linkAddedWhenAppropriate() {
doReturn("").when(mFragment).getText(anyInt()); doReturn("").when(mFragment).getText(anyInt());

View File

@@ -63,16 +63,15 @@ public class AnomalyCleanupJobServiceTest {
private Context mContext; private Context mContext;
private JobScheduler mJobScheduler; private JobScheduler mJobScheduler;
@Mock @Mock private JobParameters mParams;
private JobParameters mParams;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mJobScheduler = spy(new JobSchedulerImpl(mContext, mJobScheduler =
IJobScheduler.Stub.asInterface(new Binder()))); spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler); when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
} }
@@ -108,22 +107,28 @@ public class AnomalyCleanupJobServiceTest {
@Ignore @Ignore
public void onStartJob_cleanUpDataBefore30days() { public void onStartJob_cleanUpDataBefore30days() {
final BatteryDatabaseManager databaseManager = BatteryDatabaseManager.getInstance(mContext); final BatteryDatabaseManager databaseManager = BatteryDatabaseManager.getInstance(mContext);
final AnomalyCleanupJobService service = spy(Robolectric.setupService( final AnomalyCleanupJobService service =
AnomalyCleanupJobService.class)); spy(Robolectric.setupService(AnomalyCleanupJobService.class));
doNothing().when(service).jobFinished(any(), anyBoolean()); doNothing().when(service).jobFinished(any(), anyBoolean());
// Insert two records, one is current and the other one is 31 days before // Insert two records, one is current and the other one is 31 days before
databaseManager.insertAnomaly(UID, PACKAGE_NAME, ANOMALY_TYPE, databaseManager.insertAnomaly(
AnomalyDatabaseHelper.State.NEW, TIMESTAMP_NOW); UID, PACKAGE_NAME, ANOMALY_TYPE, AnomalyDatabaseHelper.State.NEW, TIMESTAMP_NOW);
databaseManager.insertAnomaly(UID, PACKAGE_NAME_OLD, ANOMALY_TYPE, databaseManager.insertAnomaly(
AnomalyDatabaseHelper.State.NEW, TIMESTAMP_31_DAYS_BEFORE); UID,
PACKAGE_NAME_OLD,
ANOMALY_TYPE,
AnomalyDatabaseHelper.State.NEW,
TIMESTAMP_31_DAYS_BEFORE);
service.onStartJob(mParams); service.onStartJob(mParams);
// In database, it only contains the current record // In database, it only contains the current record
final List<AppInfo> appInfos = databaseManager.queryAllAnomalies(0, final List<AppInfo> appInfos =
AnomalyDatabaseHelper.State.NEW); databaseManager.queryAllAnomalies(0, AnomalyDatabaseHelper.State.NEW);
assertThat(appInfos).containsExactly(new AppInfo.Builder() assertThat(appInfos)
.containsExactly(
new AppInfo.Builder()
.setUid(UID) .setUid(UID)
.setPackageName(PACKAGE_NAME) .setPackageName(PACKAGE_NAME)
.addAnomalyType(ANOMALY_TYPE) .addAnomalyType(ANOMALY_TYPE)

View File

@@ -57,8 +57,7 @@ public class AnomalyConfigJobServiceTest {
private static final int ANOMALY_CONFIG_VERSION = 1; private static final int ANOMALY_CONFIG_VERSION = 1;
private static final String ANOMALY_CONFIG = "X64s"; private static final String ANOMALY_CONFIG = "X64s";
@Mock @Mock private StatsManager mStatsManager;
private StatsManager mStatsManager;
private Context mContext; private Context mContext;
private JobScheduler mJobScheduler; private JobScheduler mJobScheduler;
@@ -69,14 +68,16 @@ public class AnomalyConfigJobServiceTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mJobScheduler = spy(new JobSchedulerImpl(mContext, mJobScheduler =
IJobScheduler.Stub.asInterface(new Binder()))); spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler); when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
mJobService = spy(new AnomalyConfigJobService()); mJobService = spy(new AnomalyConfigJobService());
doReturn(application.getSharedPreferences(AnomalyConfigJobService.PREF_DB, doReturn(
Context.MODE_PRIVATE)).when(mJobService).getSharedPreferences(anyString(), application.getSharedPreferences(
anyInt()); AnomalyConfigJobService.PREF_DB, Context.MODE_PRIVATE))
.when(mJobService)
.getSharedPreferences(anyString(), anyInt());
doReturn(application.getContentResolver()).when(mJobService).getContentResolver(); doReturn(application.getContentResolver()).when(mJobService).getContentResolver();
} }
@@ -106,10 +107,12 @@ public class AnomalyConfigJobServiceTest {
@Test @Test
public void checkAnomalyConfig_newConfigExist_removeOldConfig() public void checkAnomalyConfig_newConfigExist_removeOldConfig()
throws StatsManager.StatsUnavailableException { throws StatsManager.StatsUnavailableException {
Settings.Global.putInt(application.getContentResolver(), Settings.Global.putInt(
Settings.Global.ANOMALY_CONFIG_VERSION, ANOMALY_CONFIG_VERSION); application.getContentResolver(),
Settings.Global.putString(application.getContentResolver(), Settings.Global.ANOMALY_CONFIG, Settings.Global.ANOMALY_CONFIG_VERSION,
ANOMALY_CONFIG); ANOMALY_CONFIG_VERSION);
Settings.Global.putString(
application.getContentResolver(), Settings.Global.ANOMALY_CONFIG, ANOMALY_CONFIG);
mJobService.checkAnomalyConfig(mStatsManager); mJobService.checkAnomalyConfig(mStatsManager);
@@ -119,10 +122,12 @@ public class AnomalyConfigJobServiceTest {
@Test @Test
public void checkAnomalyConfig_newConfigExist_uploadNewConfig() public void checkAnomalyConfig_newConfigExist_uploadNewConfig()
throws StatsManager.StatsUnavailableException { throws StatsManager.StatsUnavailableException {
Settings.Global.putInt(application.getContentResolver(), Settings.Global.putInt(
Settings.Global.ANOMALY_CONFIG_VERSION, ANOMALY_CONFIG_VERSION); application.getContentResolver(),
Settings.Global.putString(application.getContentResolver(), Settings.Global.ANOMALY_CONFIG, Settings.Global.ANOMALY_CONFIG_VERSION,
ANOMALY_CONFIG); ANOMALY_CONFIG_VERSION);
Settings.Global.putString(
application.getContentResolver(), Settings.Global.ANOMALY_CONFIG, ANOMALY_CONFIG);
mJobService.checkAnomalyConfig(mStatsManager); mJobService.checkAnomalyConfig(mStatsManager);

View File

@@ -86,20 +86,13 @@ public class AnomalyDetectionJobServiceTest {
"anomaly_type=6,auto_restriction=false"; "anomaly_type=6,auto_restriction=false";
private static final int ANOMALY_TYPE = 6; private static final int ANOMALY_TYPE = 6;
private static final long VERSION_CODE = 15; private static final long VERSION_CODE = 15;
@Mock @Mock private UserManager mUserManager;
private UserManager mUserManager; @Mock private BatteryDatabaseManager mBatteryDatabaseManager;
@Mock @Mock private BatteryUtils mBatteryUtils;
private BatteryDatabaseManager mBatteryDatabaseManager; @Mock private PowerAllowlistBackend mPowerAllowlistBackend;
@Mock @Mock private StatsDimensionsValue mStatsDimensionsValue;
private BatteryUtils mBatteryUtils; @Mock private JobParameters mJobParameters;
@Mock @Mock private JobWorkItem mJobWorkItem;
private PowerAllowlistBackend mPowerAllowlistBackend;
@Mock
private StatsDimensionsValue mStatsDimensionsValue;
@Mock
private JobParameters mJobParameters;
@Mock
private JobWorkItem mJobWorkItem;
private BatteryTipPolicy mPolicy; private BatteryTipPolicy mPolicy;
private Bundle mBundle; private Bundle mBundle;
@@ -113,8 +106,8 @@ public class AnomalyDetectionJobServiceTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mJobScheduler = spy(new JobSchedulerImpl(mContext, mJobScheduler =
IJobScheduler.Stub.asInterface(new Binder()))); spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler); when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
mPolicy = new BatteryTipPolicy(mContext); mPolicy = new BatteryTipPolicy(mContext);
@@ -146,17 +139,24 @@ public class AnomalyDetectionJobServiceTest {
@Test @Test
public void saveAnomalyToDatabase_systemAllowlisted_doNotSave() { public void saveAnomalyToDatabase_systemAllowlisted_doNotSave() {
doReturn(UID).when(mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); doReturn(UID).when(mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
doReturn(true).when(mPowerAllowlistBackend) doReturn(true)
.when(mPowerAllowlistBackend)
.isAllowlisted(any(String[].class), any(Integer.class)); .isAllowlisted(any(String[].class), any(Integer.class));
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mAnomalyDetectionJobService.saveAnomalyToDatabase(
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, mContext,
mPowerAllowlistBackend, mContext.getContentResolver(), mUserManager,
mBatteryDatabaseManager,
mBatteryUtils,
mPolicy,
mPowerAllowlistBackend,
mContext.getContentResolver(),
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.powerUsageFeatureProvider,
mFeatureFactory.metricsFeatureProvider, mBundle); mFeatureFactory.metricsFeatureProvider,
mBundle);
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(), verify(mBatteryDatabaseManager, never())
anyInt(), anyLong()); .insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
} }
@Test @Test
@@ -166,19 +166,28 @@ public class AnomalyDetectionJobServiceTest {
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies); mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt()); doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE); doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
doReturn(Process.FIRST_APPLICATION_UID).when( doReturn(Process.FIRST_APPLICATION_UID)
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); .when(mAnomalyDetectionJobService)
.extractUidFromStatsDimensionsValue(any());
doReturn(true).when(mBatteryUtils).shouldHideAnomaly(any(), anyInt(), any()); doReturn(true).when(mBatteryUtils).shouldHideAnomaly(any(), anyInt(), any());
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mAnomalyDetectionJobService.saveAnomalyToDatabase(
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, mContext,
mPowerAllowlistBackend, mContext.getContentResolver(), mUserManager,
mBatteryDatabaseManager,
mBatteryUtils,
mPolicy,
mPowerAllowlistBackend,
mContext.getContentResolver(),
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.powerUsageFeatureProvider,
mFeatureFactory.metricsFeatureProvider, mBundle); mFeatureFactory.metricsFeatureProvider,
mBundle);
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(), verify(mBatteryDatabaseManager, never())
anyInt(), anyLong()); .insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN, verify(mFeatureFactory.metricsFeatureProvider)
.action(
SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_ANOMALY_IGNORED, MetricsProto.MetricsEvent.ACTION_ANOMALY_IGNORED,
SettingsEnums.PAGE_UNKNOWN, SettingsEnums.PAGE_UNKNOWN,
SYSTEM_PACKAGE + "/" + VERSION_CODE, SYSTEM_PACKAGE + "/" + VERSION_CODE,
@@ -187,32 +196,46 @@ public class AnomalyDetectionJobServiceTest {
@Test @Test
public void saveAnomalyToDatabase_systemUid_doNotSave() { public void saveAnomalyToDatabase_systemUid_doNotSave() {
doReturn(Process.SYSTEM_UID).when( doReturn(Process.SYSTEM_UID)
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); .when(mAnomalyDetectionJobService)
.extractUidFromStatsDimensionsValue(any());
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mAnomalyDetectionJobService.saveAnomalyToDatabase(
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, mContext,
mPowerAllowlistBackend, mContext.getContentResolver(), mUserManager,
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider, mBatteryDatabaseManager,
mBatteryUtils,
mPolicy,
mPowerAllowlistBackend,
mContext.getContentResolver(),
mFeatureFactory.powerUsageFeatureProvider,
mFeatureFactory.metricsFeatureProvider,
mBundle); mBundle);
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(), verify(mBatteryDatabaseManager, never())
anyInt(), anyLong()); .insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
} }
@Test @Test
public void saveAnomalyToDatabase_uidNull_doNotSave() { public void saveAnomalyToDatabase_uidNull_doNotSave() {
doReturn(AnomalyDetectionJobService.UID_NULL).when( doReturn(AnomalyDetectionJobService.UID_NULL)
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); .when(mAnomalyDetectionJobService)
.extractUidFromStatsDimensionsValue(any());
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mAnomalyDetectionJobService.saveAnomalyToDatabase(
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, mContext,
mPowerAllowlistBackend, mContext.getContentResolver(), mUserManager,
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider, mBatteryDatabaseManager,
mBatteryUtils,
mPolicy,
mPowerAllowlistBackend,
mContext.getContentResolver(),
mFeatureFactory.powerUsageFeatureProvider,
mFeatureFactory.metricsFeatureProvider,
mBundle); mBundle);
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(), verify(mBatteryDatabaseManager, never())
anyInt(), anyLong()); .insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
} }
@Test @Test
@@ -222,18 +245,32 @@ public class AnomalyDetectionJobServiceTest {
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies); mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt()); doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE); doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
doReturn(Process.FIRST_APPLICATION_UID).when( doReturn(Process.FIRST_APPLICATION_UID)
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); .when(mAnomalyDetectionJobService)
.extractUidFromStatsDimensionsValue(any());
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mAnomalyDetectionJobService.saveAnomalyToDatabase(
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, mContext,
mPowerAllowlistBackend, mContext.getContentResolver(), mUserManager,
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider, mBatteryDatabaseManager,
mBatteryUtils,
mPolicy,
mPowerAllowlistBackend,
mContext.getContentResolver(),
mFeatureFactory.powerUsageFeatureProvider,
mFeatureFactory.metricsFeatureProvider,
mBundle); mBundle);
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6), verify(mBatteryDatabaseManager)
eq(AnomalyDatabaseHelper.State.AUTO_HANDLED), anyLong()); .insertAnomaly(
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN, anyInt(),
anyString(),
eq(6),
eq(AnomalyDatabaseHelper.State.AUTO_HANDLED),
anyLong());
verify(mFeatureFactory.metricsFeatureProvider)
.action(
SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED, MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
SettingsEnums.PAGE_UNKNOWN, SettingsEnums.PAGE_UNKNOWN,
SYSTEM_PACKAGE + "/" + VERSION_CODE, SYSTEM_PACKAGE + "/" + VERSION_CODE,
@@ -247,18 +284,32 @@ public class AnomalyDetectionJobServiceTest {
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies); mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt()); doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE); doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
doReturn(Process.FIRST_APPLICATION_UID).when( doReturn(Process.FIRST_APPLICATION_UID)
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any()); .when(mAnomalyDetectionJobService)
.extractUidFromStatsDimensionsValue(any());
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext, mAnomalyDetectionJobService.saveAnomalyToDatabase(
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy, mContext,
mPowerAllowlistBackend, mContext.getContentResolver(), mUserManager,
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider, mBatteryDatabaseManager,
mBatteryUtils,
mPolicy,
mPowerAllowlistBackend,
mContext.getContentResolver(),
mFeatureFactory.powerUsageFeatureProvider,
mFeatureFactory.metricsFeatureProvider,
mBundle); mBundle);
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6), verify(mBatteryDatabaseManager)
eq(AnomalyDatabaseHelper.State.NEW), anyLong()); .insertAnomaly(
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN, anyInt(),
anyString(),
eq(6),
eq(AnomalyDatabaseHelper.State.NEW),
anyLong());
verify(mFeatureFactory.metricsFeatureProvider)
.action(
SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED, MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
SettingsEnums.PAGE_UNKNOWN, SettingsEnums.PAGE_UNKNOWN,
SYSTEM_PACKAGE + "/" + VERSION_CODE, SYSTEM_PACKAGE + "/" + VERSION_CODE,
@@ -280,8 +331,8 @@ public class AnomalyDetectionJobServiceTest {
statsDimensionsValues.add(intValue); statsDimensionsValues.add(intValue);
when(tupleValue.getTupleValueList()).thenReturn(statsDimensionsValues); when(tupleValue.getTupleValueList()).thenReturn(statsDimensionsValues);
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue( assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(tupleValue))
tupleValue)).isEqualTo(UID); .isEqualTo(UID);
} }
@Test @Test
@@ -292,8 +343,8 @@ public class AnomalyDetectionJobServiceTest {
when(floatValue.getField()).thenReturn(AnomalyDetectionJobService.STATSD_UID_FILED); when(floatValue.getField()).thenReturn(AnomalyDetectionJobService.STATSD_UID_FILED);
when(floatValue.getFloatValue()).thenReturn(0f); when(floatValue.getFloatValue()).thenReturn(0f);
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue( assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(floatValue))
floatValue)).isEqualTo(AnomalyDetectionJobService.UID_NULL); .isEqualTo(AnomalyDetectionJobService.UID_NULL);
} }
@Test @Test

View File

@@ -18,7 +18,6 @@ package com.android.settings.fuelgauge.batterytip;
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.spy;
import android.content.Context; import android.content.Context;
@@ -39,7 +38,6 @@ import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat; import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
import com.android.settings.testutils.shadow.ShadowUtils; import com.android.settings.testutils.shadow.ShadowUtils;
import com.android.settingslib.fuelgauge.EstimateKt;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -98,7 +96,8 @@ public class BatteryTipDialogFragmentTest {
mPackageManager.setApplicationIcon(PACKAGE_NAME, new ColorDrawable()); mPackageManager.setApplicationIcon(PACKAGE_NAME, new ColorDrawable());
List<AppInfo> highUsageTips = new ArrayList<>(); List<AppInfo> highUsageTips = new ArrayList<>();
mAppInfo = new AppInfo.Builder() mAppInfo =
new AppInfo.Builder()
.setScreenOnTimeMs(SCREEN_TIME_MS) .setScreenOnTimeMs(SCREEN_TIME_MS)
.setPackageName(PACKAGE_NAME) .setPackageName(PACKAGE_NAME)
.build(); .build();
@@ -107,11 +106,11 @@ public class BatteryTipDialogFragmentTest {
final List<AppInfo> restrictApps = new ArrayList<>(); final List<AppInfo> restrictApps = new ArrayList<>();
restrictApps.add(mAppInfo); restrictApps.add(mAppInfo);
mRestrictedOneAppTip = new RestrictAppTip(BatteryTip.StateType.NEW, mRestrictedOneAppTip =
new ArrayList<>(restrictApps)); new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>(restrictApps));
restrictApps.add(mAppInfo); restrictApps.add(mAppInfo);
mRestrictTwoAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW, mRestrictTwoAppsTip =
new ArrayList<>(restrictApps)); new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>(restrictApps));
mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo); mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
mDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */); mDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */);
@@ -128,24 +127,30 @@ public class BatteryTipDialogFragmentTest {
mDialogFragment = BatteryTipDialogFragment.newInstance(mHighUsageTip, METRICS_KEY); mDialogFragment = BatteryTipDialogFragment.newInstance(mHighUsageTip, METRICS_KEY);
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class, FragmentController.setupFragment(
0 /* containerViewId */, null /* bundle */); mDialogFragment,
FragmentActivity.class,
0 /* containerViewId */,
null /* bundle */);
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable(); Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog); ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
assertThat(shadowDialog.getMessage()).isEqualTo( assertThat(shadowDialog.getMessage())
mContext.getString(R.string.battery_tip_dialog_message, 1)); .isEqualTo(mContext.getString(R.string.battery_tip_dialog_message, 1));
} }
@Test @Test
public void testOnCreateDialog_restrictOneAppTip_fireRestrictOneAppDialog() { public void testOnCreateDialog_restrictOneAppTip_fireRestrictOneAppDialog() {
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictedOneAppTip, METRICS_KEY); mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictedOneAppTip, METRICS_KEY);
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class, FragmentController.setupFragment(
0 /* containerViewId */, null /* bundle */); mDialogFragment,
FragmentActivity.class,
0 /* containerViewId */,
null /* bundle */);
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog); ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
@@ -163,9 +168,11 @@ public class BatteryTipDialogFragmentTest {
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictTwoAppsTip, METRICS_KEY); mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictTwoAppsTip, METRICS_KEY);
FragmentController.setupFragment(
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class, mDialogFragment,
0 /* containerViewId */, null /* bundle */); FragmentActivity.class,
0 /* containerViewId */,
null /* bundle */);
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable(); Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
@@ -189,13 +196,16 @@ public class BatteryTipDialogFragmentTest {
for (int i = 0; i < 6; i++) { for (int i = 0; i < 6; i++) {
appInfos.add(mAppInfo); appInfos.add(mAppInfo);
} }
final RestrictAppTip restrictSixAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW, final RestrictAppTip restrictSixAppsTip =
appInfos); new RestrictAppTip(BatteryTip.StateType.NEW, appInfos);
mDialogFragment = BatteryTipDialogFragment.newInstance(restrictSixAppsTip, METRICS_KEY); mDialogFragment = BatteryTipDialogFragment.newInstance(restrictSixAppsTip, METRICS_KEY);
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class, FragmentController.setupFragment(
0 /* containerViewId */, null /* bundle */); mDialogFragment,
FragmentActivity.class,
0 /* containerViewId */,
null /* bundle */);
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable(); Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
@@ -215,8 +225,11 @@ public class BatteryTipDialogFragmentTest {
mDialogFragment = BatteryTipDialogFragment.newInstance(mUnrestrictAppTip, METRICS_KEY); mDialogFragment = BatteryTipDialogFragment.newInstance(mUnrestrictAppTip, METRICS_KEY);
ShadowUtils.setApplicationLabel(PACKAGE_NAME, DISPLAY_NAME); ShadowUtils.setApplicationLabel(PACKAGE_NAME, DISPLAY_NAME);
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class, FragmentController.setupFragment(
0 /* containerViewId */, null /* bundle */); mDialogFragment,
FragmentActivity.class,
0 /* containerViewId */,
null /* bundle */);
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog(); final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog); ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);

View File

@@ -54,17 +54,16 @@ public class BatteryTipLoaderTest {
BatteryTip.TipType.BATTERY_DEFENDER, BatteryTip.TipType.BATTERY_DEFENDER,
BatteryTip.TipType.DOCK_DEFENDER, BatteryTip.TipType.DOCK_DEFENDER,
BatteryTip.TipType.INCOMPATIBLE_CHARGER, BatteryTip.TipType.INCOMPATIBLE_CHARGER,
BatteryTip.TipType.HIGH_DEVICE_USAGE}; BatteryTip.TipType.HIGH_DEVICE_USAGE
};
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private BatteryUsageStats mBatteryUsageStats; private BatteryUsageStats mBatteryUsageStats;
@Mock
private PowerManager mPowerManager; @Mock private PowerManager mPowerManager;
@Mock @Mock private Intent mIntent;
private Intent mIntent; @Mock private BatteryUtils mBatteryUtils;
@Mock @Mock private BatteryInfo mBatteryInfo;
private BatteryUtils mBatteryUtils;
@Mock
private BatteryInfo mBatteryInfo;
private Context mContext; private Context mContext;
private BatteryTipLoader mBatteryTipLoader; private BatteryTipLoader mBatteryTipLoader;

View File

@@ -15,8 +15,7 @@
*/ */
package com.android.settings.fuelgauge.batterytip; package com.android.settings.fuelgauge.batterytip;
import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType.SMART_BATTERY_MANAGER;
.SMART_BATTERY_MANAGER;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
@@ -31,8 +30,6 @@ import android.text.format.DateUtils;
import androidx.preference.PreferenceScreen; import androidx.preference.PreferenceScreen;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.SettingsActivity; import com.android.settings.SettingsActivity;
import com.android.settings.core.BasePreferenceController; import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.core.InstrumentedPreferenceFragment;
@@ -58,16 +55,11 @@ public class BatteryTipPreferenceControllerTest {
private static final String KEY_TIP = "key_battery_tip"; private static final String KEY_TIP = "key_battery_tip";
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS; private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
@Mock @Mock private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener;
private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener; @Mock private PreferenceScreen mPreferenceScreen;
@Mock @Mock private BatteryTip mBatteryTip;
private PreferenceScreen mPreferenceScreen; @Mock private SettingsActivity mSettingsActivity;
@Mock @Mock private InstrumentedPreferenceFragment mFragment;
private BatteryTip mBatteryTip;
@Mock
private SettingsActivity mSettingsActivity;
@Mock
private InstrumentedPreferenceFragment mFragment;
private Context mContext; private Context mContext;
private CardPreference mCardPreference; private CardPreference mCardPreference;
@@ -147,13 +139,13 @@ public class BatteryTipPreferenceControllerTest {
@Test @Test
public void getAvailabilityStatus_returnAvailableUnsearchable() { public void getAvailabilityStatus_returnAvailableUnsearchable() {
assertThat(mBatteryTipPreferenceController.getAvailabilityStatus()).isEqualTo( assertThat(mBatteryTipPreferenceController.getAvailabilityStatus())
BasePreferenceController.AVAILABLE_UNSEARCHABLE); .isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
} }
private BatteryTipPreferenceController buildBatteryTipPreferenceController() { private BatteryTipPreferenceController buildBatteryTipPreferenceController() {
final BatteryTipPreferenceController controller = new BatteryTipPreferenceController( final BatteryTipPreferenceController controller =
mContext, KEY_PREF); new BatteryTipPreferenceController(mContext, KEY_PREF);
controller.setActivity(mSettingsActivity); controller.setActivity(mSettingsActivity);
controller.setFragment(mFragment); controller.setFragment(mFragment);
controller.setBatteryTipListener(mBatteryTipListener); controller.setBatteryTipListener(mBatteryTipListener);

View File

@@ -45,10 +45,8 @@ import java.util.ArrayList;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BatteryTipUtilsTest { public class BatteryTipUtilsTest {
@Mock @Mock private SettingsActivity mSettingsActivity;
private SettingsActivity mSettingsActivity; @Mock private InstrumentedPreferenceFragment mFragment;
@Mock
private InstrumentedPreferenceFragment mFragment;
private RestrictAppTip mRestrictAppTip; private RestrictAppTip mRestrictAppTip;
private LowBatteryTip mLowBatteryTip; private LowBatteryTip mLowBatteryTip;
private BatteryDefenderTip mBatteryDefenderTip; private BatteryDefenderTip mBatteryDefenderTip;
@@ -61,42 +59,49 @@ public class BatteryTipUtilsTest {
when(mSettingsActivity.getApplicationContext()).thenReturn(RuntimeEnvironment.application); when(mSettingsActivity.getApplicationContext()).thenReturn(RuntimeEnvironment.application);
when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application); when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application);
mRestrictAppTip = spy(new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>())); mRestrictAppTip = spy(new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>()));
mLowBatteryTip = spy( mLowBatteryTip =
new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */)); spy(new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */));
mBatteryDefenderTip = spy(new BatteryDefenderTip(BatteryTip.StateType.NEW, mBatteryDefenderTip =
false /* isPluggedIn */)); spy(new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */));
} }
@Test @Test
public void testGetActionForBatteryTip_typeRestrictStateNew_returnActionRestrict() { public void testGetActionForBatteryTip_typeRestrictStateNew_returnActionRestrict() {
when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.NEW); when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.NEW);
assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity, assertThat(
mFragment)).isInstanceOf(RestrictAppAction.class); BatteryTipUtils.getActionForBatteryTip(
mRestrictAppTip, mSettingsActivity, mFragment))
.isInstanceOf(RestrictAppAction.class);
} }
@Test @Test
public void testGetActionForBatteryTip_typeRestrictStateHandled_returnActionOpen() { public void testGetActionForBatteryTip_typeRestrictStateHandled_returnActionOpen() {
when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.HANDLED); when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.HANDLED);
assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity, assertThat(
mFragment)).isInstanceOf(OpenRestrictAppFragmentAction.class); BatteryTipUtils.getActionForBatteryTip(
mRestrictAppTip, mSettingsActivity, mFragment))
.isInstanceOf(OpenRestrictAppFragmentAction.class);
} }
@Test @Test
public void testGetActionForBatteryTip_typeLowBatteryStateNew_returnActionOpen() { public void testGetActionForBatteryTip_typeLowBatteryStateNew_returnActionOpen() {
when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.NEW); when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.NEW);
assertThat(BatteryTipUtils.getActionForBatteryTip(mLowBatteryTip, mSettingsActivity, assertThat(
mFragment)).isInstanceOf(OpenBatterySaverAction.class); BatteryTipUtils.getActionForBatteryTip(
mLowBatteryTip, mSettingsActivity, mFragment))
.isInstanceOf(OpenBatterySaverAction.class);
} }
@Test @Test
public void public void testGetActionForBatteryTip_typeBatteryDefenderStateNew_returnNullAction() {
testGetActionForBatteryTip_typeBatteryDefenderStateNew_returnNullAction() {
when(mBatteryDefenderTip.getState()).thenReturn(BatteryTip.StateType.NEW); when(mBatteryDefenderTip.getState()).thenReturn(BatteryTip.StateType.NEW);
assertThat(BatteryTipUtils.getActionForBatteryTip(mBatteryDefenderTip, mSettingsActivity, assertThat(
mFragment)).isNull(); BatteryTipUtils.getActionForBatteryTip(
mBatteryDefenderTip, mSettingsActivity, mFragment))
.isNull();
} }
} }

View File

@@ -24,9 +24,9 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import java.time.Duration; import java.time.Duration;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class HighUsageDataParserTest { public class HighUsageDataParserTest {

View File

@@ -39,10 +39,10 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class OpenRestrictAppFragmentActionTest { public class OpenRestrictAppFragmentActionTest {
@@ -53,10 +53,8 @@ public class OpenRestrictAppFragmentActionTest {
private static final int ANOMALY_BT = 1; private static final int ANOMALY_BT = 1;
private static final int METRICS_KEY = 1; private static final int METRICS_KEY = 1;
@Mock @Mock private InstrumentedPreferenceFragment mFragment;
private InstrumentedPreferenceFragment mFragment; @Mock private BatteryDatabaseManager mBatteryDatabaseManager;
@Mock
private BatteryDatabaseManager mBatteryDatabaseManager;
private OpenRestrictAppFragmentAction mAction; private OpenRestrictAppFragmentAction mAction;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
private Context mContext; private Context mContext;
@@ -67,19 +65,22 @@ public class OpenRestrictAppFragmentActionTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = ApplicationProvider.getApplicationContext(); mContext = ApplicationProvider.getApplicationContext();
mAppInfos = new ArrayList<>(); mAppInfos = new ArrayList<>();
mAppInfos.add(new AppInfo.Builder() mAppInfos.add(
new AppInfo.Builder()
.setPackageName(PACKAGE_NAME_1) .setPackageName(PACKAGE_NAME_1)
.addAnomalyType(ANOMALY_BT) .addAnomalyType(ANOMALY_BT)
.build()); .build());
mAppInfos.add(new AppInfo.Builder() mAppInfos.add(
new AppInfo.Builder()
.setPackageName(PACKAGE_NAME_2) .setPackageName(PACKAGE_NAME_2)
.addAnomalyType(ANOMALY_WAKEUP) .addAnomalyType(ANOMALY_WAKEUP)
.build()); .build());
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
when(mFragment.getContext()).thenReturn(mContext); when(mFragment.getContext()).thenReturn(mContext);
mAction = new OpenRestrictAppFragmentAction(mFragment, mAction =
new RestrictAppTip(BatteryTip.StateType.HANDLED, mAppInfos)); new OpenRestrictAppFragmentAction(
mFragment, new RestrictAppTip(BatteryTip.StateType.HANDLED, mAppInfos));
mAction.mBatteryDatabaseManager = mBatteryDatabaseManager; mAction.mBatteryDatabaseManager = mBatteryDatabaseManager;
} }
@@ -93,9 +94,12 @@ public class OpenRestrictAppFragmentActionTest {
public void testHandlePositiveAction() { public void testHandlePositiveAction() {
mAction.handlePositiveAction(METRICS_KEY); mAction.handlePositiveAction(METRICS_KEY);
verify(mFeatureFactory.metricsFeatureProvider).action(mContext, verify(mFeatureFactory.metricsFeatureProvider)
MetricsProto.MetricsEvent.ACTION_TIP_OPEN_APP_RESTRICTION_PAGE, METRICS_KEY); .action(
verify(mBatteryDatabaseManager).updateAnomalies(mAppInfos, mContext,
AnomalyDatabaseHelper.State.HANDLED); MetricsProto.MetricsEvent.ACTION_TIP_OPEN_APP_RESTRICTION_PAGE,
METRICS_KEY);
verify(mBatteryDatabaseManager)
.updateAnomalies(mAppInfos, AnomalyDatabaseHelper.State.HANDLED);
} }
} }

View File

@@ -52,8 +52,7 @@ public class RestrictAppActionTest {
private static final int ANOMALY_BT = 1; private static final int ANOMALY_BT = 1;
private static final int METRICS_KEY = 1; private static final int METRICS_KEY = 1;
@Mock @Mock private BatteryUtils mBatteryUtils;
private BatteryUtils mBatteryUtils;
private RestrictAppAction mRestrictAppAction; private RestrictAppAction mRestrictAppAction;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
@@ -62,11 +61,9 @@ public class RestrictAppActionTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
final List<AppInfo> mAppInfos = new ArrayList<>(); final List<AppInfo> mAppInfos = new ArrayList<>();
mAppInfos.add(new AppInfo.Builder() mAppInfos.add(new AppInfo.Builder().setUid(UID_1).setPackageName(PACKAGE_NAME_1).build());
.setUid(UID_1) mAppInfos.add(
.setPackageName(PACKAGE_NAME_1) new AppInfo.Builder()
.build());
mAppInfos.add(new AppInfo.Builder()
.setUid(UID_2) .setUid(UID_2)
.setPackageName(PACKAGE_NAME_2) .setPackageName(PACKAGE_NAME_2)
.addAnomalyType(ANOMALY_BT) .addAnomalyType(ANOMALY_BT)
@@ -74,7 +71,9 @@ public class RestrictAppActionTest {
.build()); .build());
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mRestrictAppAction = new RestrictAppAction(RuntimeEnvironment.application, mRestrictAppAction =
new RestrictAppAction(
RuntimeEnvironment.application,
new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfos)); new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfos));
mRestrictAppAction.mBatteryUtils = mBatteryUtils; mRestrictAppAction.mBatteryUtils = mBatteryUtils;
} }
@@ -89,17 +88,28 @@ public class RestrictAppActionTest {
public void testHandlePositiveAction() { public void testHandlePositiveAction() {
mRestrictAppAction.handlePositiveAction(METRICS_KEY); mRestrictAppAction.handlePositiveAction(METRICS_KEY);
verify(mBatteryUtils) verify(mBatteryUtils).setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_IGNORED);
.setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_IGNORED); verify(mBatteryUtils).setForceAppStandby(UID_2, PACKAGE_NAME_2, AppOpsManager.MODE_IGNORED);
verify(mBatteryUtils) verify(mFeatureFactory.metricsFeatureProvider)
.setForceAppStandby(UID_2, PACKAGE_NAME_2, AppOpsManager.MODE_IGNORED); .action(
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN, SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_1, 0); MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN, METRICS_KEY,
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_2, PACKAGE_NAME_1,
0);
verify(mFeatureFactory.metricsFeatureProvider)
.action(
SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
METRICS_KEY,
PACKAGE_NAME_2,
ANOMALY_WAKEUP); ANOMALY_WAKEUP);
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN, verify(mFeatureFactory.metricsFeatureProvider)
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_2, .action(
SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
METRICS_KEY,
PACKAGE_NAME_2,
ANOMALY_BT); ANOMALY_BT);
} }
} }

View File

@@ -44,8 +44,7 @@ public class UnrestrictAppActionTest {
private static final String PACKAGE_NAME_1 = "com.android.app1"; private static final String PACKAGE_NAME_1 = "com.android.app1";
private static final int METRICS_KEY = 1; private static final int METRICS_KEY = 1;
@Mock @Mock private BatteryUtils mBatteryUtils;
private BatteryUtils mBatteryUtils;
private UnrestrictAppAction mUnrestrictAppAction; private UnrestrictAppAction mUnrestrictAppAction;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
@@ -53,13 +52,13 @@ public class UnrestrictAppActionTest {
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
final AppInfo appInfo = new AppInfo.Builder() final AppInfo appInfo =
.setUid(UID_1) new AppInfo.Builder().setUid(UID_1).setPackageName(PACKAGE_NAME_1).build();
.setPackageName(PACKAGE_NAME_1)
.build();
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mUnrestrictAppAction = new UnrestrictAppAction(RuntimeEnvironment.application, mUnrestrictAppAction =
new UnrestrictAppAction(
RuntimeEnvironment.application,
new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo)); new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo));
mUnrestrictAppAction.mBatteryUtils = mBatteryUtils; mUnrestrictAppAction.mBatteryUtils = mBatteryUtils;
} }
@@ -73,9 +72,9 @@ public class UnrestrictAppActionTest {
public void testHandlePositiveAction() { public void testHandlePositiveAction() {
mUnrestrictAppAction.handlePositiveAction(METRICS_KEY); mUnrestrictAppAction.handlePositiveAction(METRICS_KEY);
verify(mBatteryUtils) verify(mBatteryUtils).setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_ALLOWED);
.setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_ALLOWED); verify(mFeatureFactory.metricsFeatureProvider)
verify(mFeatureFactory.metricsFeatureProvider).action( .action(
SettingsEnums.PAGE_UNKNOWN, SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP, MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP,
METRICS_KEY, METRICS_KEY,

View File

@@ -38,8 +38,7 @@ import org.robolectric.RobolectricTestRunner;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BatteryDefenderDetectorTest { public class BatteryDefenderDetectorTest {
@Mock @Mock private BatteryInfo mBatteryInfo;
private BatteryInfo mBatteryInfo;
private BatteryDefenderDetector mBatteryDefenderDetector; private BatteryDefenderDetector mBatteryDefenderDetector;
private Context mContext; private Context mContext;
@@ -53,8 +52,7 @@ public class BatteryDefenderDetectorTest {
mContext = ApplicationProvider.getApplicationContext(); mContext = ApplicationProvider.getApplicationContext();
mBatteryDefenderDetector = new BatteryDefenderDetector( mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, mContext);
mBatteryInfo, mContext);
mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
} }

View File

@@ -59,25 +59,35 @@ public class DockDefenderDetectorTest {
mBatteryInfo = new BatteryInfo(); mBatteryInfo = new BatteryInfo();
mBatteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_DOCK; mBatteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_DOCK;
mDockDefenderDetector = new DockDefenderDetector(mBatteryInfo, mContext); mDockDefenderDetector = new DockDefenderDetector(mBatteryInfo, mContext);
Intent intent = BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK, Intent intent =
50 /* level */, 100 /* scale */, BatteryManager.BATTERY_STATUS_CHARGING); BatteryTestUtils.getCustomBatteryIntent(
doReturn(intent).when(mContext).registerReceiver(eq(null), BatteryManager.BATTERY_PLUGGED_DOCK,
refEq(new IntentFilter(Intent.ACTION_BATTERY_CHANGED))); 50 /* level */,
100 /* scale */,
BatteryManager.BATTERY_STATUS_CHARGING);
doReturn(intent)
.when(mContext)
.registerReceiver(eq(null), refEq(new IntentFilter(Intent.ACTION_BATTERY_CHANGED)));
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0); mContext.getContentResolver(),
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
0);
mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
} }
@Test @Test
public void testDetect_dockDefenderTemporarilyBypassed() { public void testDetect_dockDefenderTemporarilyBypassed() {
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.putInt(
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 1); mContext.getContentResolver(),
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
1);
BatteryTip batteryTip = mDockDefenderDetector.detect(); BatteryTip batteryTip = mDockDefenderDetector.detect();
assertTrue(batteryTip instanceof DockDefenderTip); assertTrue(batteryTip instanceof DockDefenderTip);
assertEquals(((DockDefenderTip) batteryTip).getMode(), assertEquals(
((DockDefenderTip) batteryTip).getMode(),
BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED); BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED);
} }
@@ -89,8 +99,8 @@ public class DockDefenderDetectorTest {
BatteryTip batteryTip = mDockDefenderDetector.detect(); BatteryTip batteryTip = mDockDefenderDetector.detect();
assertTrue(batteryTip instanceof DockDefenderTip); assertTrue(batteryTip instanceof DockDefenderTip);
assertEquals(((DockDefenderTip) batteryTip).getMode(), assertEquals(
BatteryUtils.DockDefenderMode.ACTIVE); ((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.ACTIVE);
} }
@Test @Test
@@ -101,7 +111,8 @@ public class DockDefenderDetectorTest {
BatteryTip batteryTip = mDockDefenderDetector.detect(); BatteryTip batteryTip = mDockDefenderDetector.detect();
assertTrue(batteryTip instanceof DockDefenderTip); assertTrue(batteryTip instanceof DockDefenderTip);
assertEquals(((DockDefenderTip) batteryTip).getMode(), assertEquals(
((DockDefenderTip) batteryTip).getMode(),
BatteryUtils.DockDefenderMode.FUTURE_BYPASS); BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
} }
@@ -113,8 +124,8 @@ public class DockDefenderDetectorTest {
BatteryTip batteryTip = mDockDefenderDetector.detect(); BatteryTip batteryTip = mDockDefenderDetector.detect();
assertTrue(batteryTip instanceof DockDefenderTip); assertTrue(batteryTip instanceof DockDefenderTip);
assertEquals(((DockDefenderTip) batteryTip).getMode(), assertEquals(
BatteryUtils.DockDefenderMode.DISABLED); ((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
} }
@Test @Test
@@ -124,8 +135,8 @@ public class DockDefenderDetectorTest {
BatteryTip batteryTip = mDockDefenderDetector.detect(); BatteryTip batteryTip = mDockDefenderDetector.detect();
assertTrue(batteryTip instanceof DockDefenderTip); assertTrue(batteryTip instanceof DockDefenderTip);
assertEquals(((DockDefenderTip) batteryTip).getMode(), assertEquals(
BatteryUtils.DockDefenderMode.DISABLED); ((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
} }
@Test @Test
@@ -136,7 +147,7 @@ public class DockDefenderDetectorTest {
BatteryTip batteryTip = mDockDefenderDetector.detect(); BatteryTip batteryTip = mDockDefenderDetector.detect();
assertTrue(batteryTip instanceof DockDefenderTip); assertTrue(batteryTip instanceof DockDefenderTip);
assertEquals(((DockDefenderTip) batteryTip).getMode(), assertEquals(
BatteryUtils.DockDefenderMode.DISABLED); ((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
} }
} }

View File

@@ -62,18 +62,12 @@ public class HighUsageDetectorTest {
private static final double POWER_LOW = 10000; private static final double POWER_LOW = 10000;
private Context mContext; private Context mContext;
@Mock @Mock private UidBatteryConsumer mHighBatteryConsumer;
private UidBatteryConsumer mHighBatteryConsumer; @Mock private UidBatteryConsumer mLowBatteryConsumer;
@Mock @Mock private UidBatteryConsumer mSystemBatteryConsumer;
private UidBatteryConsumer mLowBatteryConsumer; @Mock private HighUsageDataParser mDataParser;
@Mock @Mock private BatteryUsageStats mBatteryUsageStats;
private UidBatteryConsumer mSystemBatteryConsumer; @Mock private BatteryStatsManager mBatteryStatsManager;
@Mock
private HighUsageDataParser mDataParser;
@Mock
private BatteryUsageStats mBatteryUsageStats;
@Mock
private BatteryStatsManager mBatteryStatsManager;
private AppInfo mHighAppInfo; private AppInfo mHighAppInfo;
private AppInfo mLowAppInfo; private AppInfo mLowAppInfo;
@@ -94,10 +88,16 @@ public class HighUsageDetectorTest {
when(mBatteryStatsManager.getBatteryUsageStats(any(BatteryUsageStatsQuery.class))) when(mBatteryStatsManager.getBatteryUsageStats(any(BatteryUsageStatsQuery.class)))
.thenReturn(mBatteryUsageStats); .thenReturn(mBatteryUsageStats);
mContext.sendStickyBroadcast(new Intent(Intent.ACTION_BATTERY_CHANGED) mContext.sendStickyBroadcast(
new Intent(Intent.ACTION_BATTERY_CHANGED)
.putExtra(BatteryManager.EXTRA_PLUGGED, 0)); .putExtra(BatteryManager.EXTRA_PLUGGED, 0));
mHighUsageDetector = spy(new HighUsageDetector(mContext, mPolicy, mBatteryUsageStats, mHighUsageDetector =
spy(
new HighUsageDetector(
mContext,
mPolicy,
mBatteryUsageStats,
mBatteryUtils.getBatteryInfo(TAG))); mBatteryUtils.getBatteryInfo(TAG)));
mHighUsageDetector.mBatteryUtils = mBatteryUtils; mHighUsageDetector.mBatteryUtils = mBatteryUtils;
mHighUsageDetector.mDataParser = mDataParser; mHighUsageDetector.mDataParser = mDataParser;
@@ -111,12 +111,8 @@ public class HighUsageDetectorTest {
when(mBatteryUsageStats.getDischargePercentage()).thenReturn(100); when(mBatteryUsageStats.getDischargePercentage()).thenReturn(100);
when(mBatteryUsageStats.getConsumedPower()).thenReturn(POWER_HIGH + POWER_LOW); when(mBatteryUsageStats.getConsumedPower()).thenReturn(POWER_HIGH + POWER_LOW);
mHighAppInfo = new AppInfo.Builder() mHighAppInfo = new AppInfo.Builder().setUid(UID_HIGH).build();
.setUid(UID_HIGH) mLowAppInfo = new AppInfo.Builder().setUid(UID_LOW).build();
.build();
mLowAppInfo = new AppInfo.Builder()
.setUid(UID_LOW)
.build();
ArrayList<UidBatteryConsumer> consumers = new ArrayList<>(); ArrayList<UidBatteryConsumer> consumers = new ArrayList<>();
consumers.add(mSystemBatteryConsumer); consumers.add(mSystemBatteryConsumer);

View File

@@ -40,8 +40,7 @@ import java.util.concurrent.TimeUnit;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class LowBatteryDetectorTest { public class LowBatteryDetectorTest {
@Mock @Mock private BatteryInfo mBatteryInfo;
private BatteryInfo mBatteryInfo;
private BatteryTipPolicy mPolicy; private BatteryTipPolicy mPolicy;
private LowBatteryDetector mLowBatteryDetector; private LowBatteryDetector mLowBatteryDetector;
private Context mContext; private Context mContext;
@@ -55,15 +54,16 @@ public class LowBatteryDetectorTest {
ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", true); ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", true);
mBatteryInfo.discharging = true; mBatteryInfo.discharging = true;
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, mLowBatteryDetector =
false /* isPowerSaveMode */); new LowBatteryDetector(
mContext, mPolicy, mBatteryInfo, false /* isPowerSaveMode */);
} }
@Test @Test
public void testDetect_disabledByPolicy_tipInvisible() { public void testDetect_disabledByPolicy_tipInvisible() {
ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", false); ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", false);
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, mLowBatteryDetector =
true /* isPowerSaveMode */); new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, true /* isPowerSaveMode */);
assertThat(mLowBatteryDetector.detect().isVisible()).isFalse(); assertThat(mLowBatteryDetector.detect().isVisible()).isFalse();
} }
@@ -84,8 +84,8 @@ public class LowBatteryDetectorTest {
@Test @Test
public void testDetect_batterySaverOn_tipInvisible() { public void testDetect_batterySaverOn_tipInvisible() {
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, mLowBatteryDetector =
true /* isPowerSaveMode */); new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, true /* isPowerSaveMode */);
assertThat(mLowBatteryDetector.detect().getState()) assertThat(mLowBatteryDetector.detect().getState())
.isEqualTo(BatteryTip.StateType.INVISIBLE); .isEqualTo(BatteryTip.StateType.INVISIBLE);

View File

@@ -22,7 +22,6 @@ import static org.mockito.Mockito.spy;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.os.PowerManager;
import android.provider.Settings; import android.provider.Settings;
import com.android.settings.fuelgauge.BatteryInfo; import com.android.settings.fuelgauge.BatteryInfo;
@@ -49,8 +48,7 @@ public class SmartBatteryDetectorTest {
private SmartBatteryDetector mSmartBatteryDetector; private SmartBatteryDetector mSmartBatteryDetector;
private BatteryTipPolicy mPolicy; private BatteryTipPolicy mPolicy;
@Mock @Mock private BatteryInfo mBatteryInfo;
private BatteryInfo mBatteryInfo;
@Before @Before
public void setUp() { public void setUp() {
@@ -59,8 +57,13 @@ public class SmartBatteryDetectorTest {
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mContentResolver = mContext.getContentResolver(); mContentResolver = mContext.getContentResolver();
mPolicy = spy(new BatteryTipPolicy(mContext)); mPolicy = spy(new BatteryTipPolicy(mContext));
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo, mSmartBatteryDetector =
mContentResolver, false /* isPowerSaveMode */); new SmartBatteryDetector(
mContext,
mPolicy,
mBatteryInfo,
mContentResolver,
false /* isPowerSaveMode */);
} }
@Test @Test
@@ -72,8 +75,8 @@ public class SmartBatteryDetectorTest {
@Test @Test
public void testDetect_smartBatteryOff_tipVisible() { public void testDetect_smartBatteryOff_tipVisible() {
Settings.Global.putInt(mContentResolver, Settings.Global.putInt(
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0); mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL; mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
assertThat(mSmartBatteryDetector.detect().isVisible()).isTrue(); assertThat(mSmartBatteryDetector.detect().isVisible()).isTrue();
@@ -81,30 +84,40 @@ public class SmartBatteryDetectorTest {
@Test @Test
public void testDetect_batterySaverOn_tipInvisible() { public void testDetect_batterySaverOn_tipInvisible() {
Settings.Global.putInt(mContentResolver, Settings.Global.putInt(
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0); mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL; mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo, mSmartBatteryDetector =
mContentResolver, true /* isPowerSaveMode */); new SmartBatteryDetector(
mContext,
mPolicy,
mBatteryInfo,
mContentResolver,
true /* isPowerSaveMode */);
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse(); assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
} }
@Test @Test
public void testDetect_unexpectedBatteryLevel_tipInvisible() { public void testDetect_unexpectedBatteryLevel_tipInvisible() {
Settings.Global.putInt(mContentResolver, Settings.Global.putInt(
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0); mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
mBatteryInfo.batteryLevel = UNEXPECTED_BATTERY_LEVEL; mBatteryInfo.batteryLevel = UNEXPECTED_BATTERY_LEVEL;
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo, mSmartBatteryDetector =
mContentResolver, true /* isPowerSaveMode */); new SmartBatteryDetector(
mContext,
mPolicy,
mBatteryInfo,
mContentResolver,
true /* isPowerSaveMode */);
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse(); assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
} }
@Test @Test
public void testDetect_smartBatteryOn_tipInvisible() { public void testDetect_smartBatteryOn_tipInvisible() {
Settings.Global.putInt(mContentResolver, Settings.Global.putInt(
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1); mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1);
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL; mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse(); assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();

View File

@@ -17,9 +17,7 @@ package com.android.settings.fuelgauge.batterytip.tips;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -63,8 +61,8 @@ public class BatteryDefenderTipTest {
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mBatteryDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW, mBatteryDefenderTip =
false /* isPluggedIn */); new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */);
when(mPreference.getContext()).thenReturn(mContext); when(mPreference.getContext()).thenReturn(mContext);
when(mCardPreference.getContext()).thenReturn(mContext); when(mCardPreference.getContext()).thenReturn(mContext);
@@ -93,8 +91,8 @@ public class BatteryDefenderTipTest {
mBatteryDefenderTip.updateState(mBatteryTip); mBatteryDefenderTip.updateState(mBatteryTip);
mBatteryDefenderTip.log(mContext, mMetricsFeatureProvider); mBatteryDefenderTip.log(mContext, mMetricsFeatureProvider);
verify(mMetricsFeatureProvider).action(mContext, verify(mMetricsFeatureProvider)
SettingsEnums.ACTION_BATTERY_DEFENDER_TIP, mBatteryTip.mState); .action(mContext, SettingsEnums.ACTION_BATTERY_DEFENDER_TIP, mBatteryTip.mState);
} }
@Test @Test
@@ -131,8 +129,8 @@ public class BatteryDefenderTipTest {
@Test @Test
public void updatePreference_whenCharging_setPrimaryButtonVisibleToBeTrue() { public void updatePreference_whenCharging_setPrimaryButtonVisibleToBeTrue() {
mBatteryDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW, mBatteryDefenderTip =
true /* isPluggedIn */); new BatteryDefenderTip(BatteryTip.StateType.NEW, true /* isPluggedIn */);
mBatteryDefenderTip.updatePreference(mCardPreference); mBatteryDefenderTip.updatePreference(mCardPreference);

View File

@@ -45,8 +45,7 @@ public class BatteryTipTest {
private static final String TITLE = "title"; private static final String TITLE = "title";
private static final String SUMMARY = "summary"; private static final String SUMMARY = "summary";
@DrawableRes @DrawableRes private static final int ICON_ID = R.drawable.ic_fingerprint;
private static final int ICON_ID = R.drawable.ic_fingerprint;
private Context mContext; private Context mContext;
private TestBatteryTip mBatteryTip; private TestBatteryTip mBatteryTip;
@@ -86,8 +85,10 @@ public class BatteryTipTest {
@Test @Test
public void updatePreference_resetLayoutState() { public void updatePreference_resetLayoutState() {
mContext.setTheme(R.style.Theme_Settings); mContext.setTheme(R.style.Theme_Settings);
PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests( PreferenceViewHolder holder =
View.inflate(mContext, R.layout.card_preference_layout, /* parent= */ null)); PreferenceViewHolder.createInstanceForTests(
View.inflate(
mContext, R.layout.card_preference_layout, /* parent= */ null));
CardPreference cardPreference = new CardPreference(mContext); CardPreference cardPreference = new CardPreference(mContext);
cardPreference.onBindViewHolder(holder); cardPreference.onBindViewHolder(holder);
cardPreference.setPrimaryButtonVisible(true); cardPreference.setPrimaryButtonVisible(true);
@@ -113,9 +114,7 @@ public class BatteryTipTest {
assertThat(mBatteryTip.toString()).isEqualTo("type=6 state=0"); assertThat(mBatteryTip.toString()).isEqualTo("type=6 state=0");
} }
/** /** Used to test the non abstract methods in {@link TestBatteryTip} */
* Used to test the non abstract methods in {@link TestBatteryTip}
*/
public static class TestBatteryTip extends BatteryTip { public static class TestBatteryTip extends BatteryTip {
TestBatteryTip() { TestBatteryTip() {
super(TipType.SUMMARY, StateType.NEW, true); super(TipType.SUMMARY, StateType.NEW, true);
@@ -150,7 +149,8 @@ public class BatteryTipTest {
// do nothing // do nothing
} }
public final Parcelable.Creator CREATOR = new Parcelable.Creator() { public final Parcelable.Creator CREATOR =
new Parcelable.Creator() {
public BatteryTip createFromParcel(Parcel in) { public BatteryTip createFromParcel(Parcel in) {
return new TestBatteryTip(in); return new TestBatteryTip(in);
} }

View File

@@ -54,10 +54,8 @@ public class DockDefenderTipTest {
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
private MetricsFeatureProvider mMetricsFeatureProvider; private MetricsFeatureProvider mMetricsFeatureProvider;
@Mock @Mock private Preference mPreference;
private Preference mPreference; @Mock private CardPreference mCardPreference;
@Mock
private CardPreference mCardPreference;
@Before @Before
public void setUp() { public void setUp() {
@@ -67,14 +65,18 @@ public class DockDefenderTipTest {
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider; mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
mDockDefenderTipFutureBypass = new DockDefenderTip(BatteryTip.StateType.NEW, mDockDefenderTipFutureBypass =
BatteryUtils.DockDefenderMode.FUTURE_BYPASS); new DockDefenderTip(
mDockDefenderTipActive = new DockDefenderTip(BatteryTip.StateType.NEW, BatteryTip.StateType.NEW, BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
BatteryUtils.DockDefenderMode.ACTIVE); mDockDefenderTipActive =
mDockDefenderTipTemporarilyBypassed = new DockDefenderTip(BatteryTip.StateType.NEW, new DockDefenderTip(BatteryTip.StateType.NEW, BatteryUtils.DockDefenderMode.ACTIVE);
mDockDefenderTipTemporarilyBypassed =
new DockDefenderTip(
BatteryTip.StateType.NEW,
BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED); BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED);
mDockDefenderTipDisabled = new DockDefenderTip(BatteryTip.StateType.INVISIBLE, mDockDefenderTipDisabled =
BatteryUtils.DockDefenderMode.DISABLED); new DockDefenderTip(
BatteryTip.StateType.INVISIBLE, BatteryUtils.DockDefenderMode.DISABLED);
doReturn(mContext).when(mPreference).getContext(); doReturn(mContext).when(mPreference).getContext();
doReturn(mContext).when(mCardPreference).getContext(); doReturn(mContext).when(mCardPreference).getContext();
@@ -82,22 +84,28 @@ public class DockDefenderTipTest {
@Test @Test
public void testGetTitle() { public void testGetTitle() {
assertThat(mDockDefenderTipFutureBypass.getTitle(mContext).toString()).isEqualTo( assertThat(mDockDefenderTipFutureBypass.getTitle(mContext).toString())
.isEqualTo(
mContext.getString(R.string.battery_tip_dock_defender_future_bypass_title)); mContext.getString(R.string.battery_tip_dock_defender_future_bypass_title));
assertThat(mDockDefenderTipActive.getTitle(mContext).toString()).isEqualTo( assertThat(mDockDefenderTipActive.getTitle(mContext).toString())
mContext.getString(R.string.battery_tip_dock_defender_active_title)); .isEqualTo(mContext.getString(R.string.battery_tip_dock_defender_active_title));
assertThat(mDockDefenderTipTemporarilyBypassed.getTitle(mContext).toString()).isEqualTo( assertThat(mDockDefenderTipTemporarilyBypassed.getTitle(mContext).toString())
mContext.getString(R.string.battery_tip_dock_defender_temporarily_bypassed_title)); .isEqualTo(
mContext.getString(
R.string.battery_tip_dock_defender_temporarily_bypassed_title));
assertThat(mDockDefenderTipDisabled.getTitle(mContext)).isNull(); assertThat(mDockDefenderTipDisabled.getTitle(mContext)).isNull();
} }
@Test @Test
public void testGetSummary() { public void testGetSummary() {
assertThat(mDockDefenderTipFutureBypass.getSummary(mContext).toString()).isEqualTo( assertThat(mDockDefenderTipFutureBypass.getSummary(mContext).toString())
mContext.getString(R.string.battery_tip_dock_defender_future_bypass_summary)); .isEqualTo(
assertThat(mDockDefenderTipActive.getSummary(mContext).toString()).isEqualTo( mContext.getString(
mContext.getString(R.string.battery_tip_dock_defender_active_summary)); R.string.battery_tip_dock_defender_future_bypass_summary));
assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString()).isEqualTo( assertThat(mDockDefenderTipActive.getSummary(mContext).toString())
.isEqualTo(mContext.getString(R.string.battery_tip_dock_defender_active_summary));
assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString())
.isEqualTo(
mContext.getString( mContext.getString(
R.string.battery_tip_dock_defender_temporarily_bypassed_summary)); R.string.battery_tip_dock_defender_temporarily_bypassed_summary));
assertThat(mDockDefenderTipDisabled.getSummary(mContext)).isNull(); assertThat(mDockDefenderTipDisabled.getSummary(mContext)).isNull();
@@ -105,45 +113,48 @@ public class DockDefenderTipTest {
@Test @Test
public void testGetIconId_dockDefenderActive_getProtectedIcon() { public void testGetIconId_dockDefenderActive_getProtectedIcon() {
assertThat(mDockDefenderTipActive.getIconId()).isEqualTo( assertThat(mDockDefenderTipActive.getIconId())
R.drawable.ic_battery_status_protected_24dp); .isEqualTo(R.drawable.ic_battery_status_protected_24dp);
} }
@Test @Test
public void testGetIconId_dockDefenderNotActive_getUntriggeredIcon() { public void testGetIconId_dockDefenderNotActive_getUntriggeredIcon() {
assertThat(mDockDefenderTipFutureBypass.getIconId()).isEqualTo( assertThat(mDockDefenderTipFutureBypass.getIconId())
R.drawable.ic_battery_dock_defender_untriggered_24dp); .isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
assertThat(mDockDefenderTipTemporarilyBypassed.getIconId()).isEqualTo( assertThat(mDockDefenderTipTemporarilyBypassed.getIconId())
R.drawable.ic_battery_dock_defender_untriggered_24dp); .isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
assertThat(mDockDefenderTipDisabled.getIconId()).isEqualTo( assertThat(mDockDefenderTipDisabled.getIconId())
R.drawable.ic_battery_dock_defender_untriggered_24dp); .isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
} }
@Test @Test
public void testUpdateState() { public void testUpdateState() {
mDockDefenderTipTemporarilyBypassed.updateState(mDockDefenderTipDisabled); mDockDefenderTipTemporarilyBypassed.updateState(mDockDefenderTipDisabled);
assertThat(mDockDefenderTipTemporarilyBypassed.getState()).isEqualTo( assertThat(mDockDefenderTipTemporarilyBypassed.getState())
BatteryTip.StateType.INVISIBLE); .isEqualTo(BatteryTip.StateType.INVISIBLE);
assertThat(mDockDefenderTipTemporarilyBypassed.getMode()).isEqualTo( assertThat(mDockDefenderTipTemporarilyBypassed.getMode())
BatteryUtils.DockDefenderMode.DISABLED); .isEqualTo(BatteryUtils.DockDefenderMode.DISABLED);
} }
@Test @Test
public void testLog() { public void testLog() {
mDockDefenderTipActive.log(mContext, mMetricsFeatureProvider); mDockDefenderTipActive.log(mContext, mMetricsFeatureProvider);
verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.ACTION_DOCK_DEFENDER_TIP, verify(mMetricsFeatureProvider)
.action(
mContext,
SettingsEnums.ACTION_DOCK_DEFENDER_TIP,
mDockDefenderTipActive.getState()); mDockDefenderTipActive.getState());
} }
@Test @Test
public void testUpdatePreference_dockDefenderTipFutureBypass() { public void testUpdatePreference_dockDefenderTipFutureBypass() {
mDockDefenderTipFutureBypass.updatePreference(mCardPreference); mDockDefenderTipFutureBypass.updatePreference(mCardPreference);
verify(mCardPreference).setPrimaryButtonVisible(true); verify(mCardPreference).setPrimaryButtonVisible(true);
verify(mCardPreference).setPrimaryButtonText( verify(mCardPreference)
.setPrimaryButtonText(
mContext.getString(R.string.battery_tip_charge_to_full_button)); mContext.getString(R.string.battery_tip_charge_to_full_button));
verifySecondaryButton(); verifySecondaryButton();
} }
@@ -153,7 +164,8 @@ public class DockDefenderTipTest {
mDockDefenderTipActive.updatePreference(mCardPreference); mDockDefenderTipActive.updatePreference(mCardPreference);
verify(mCardPreference).setPrimaryButtonVisible(true); verify(mCardPreference).setPrimaryButtonVisible(true);
verify(mCardPreference).setPrimaryButtonText( verify(mCardPreference)
.setPrimaryButtonText(
mContext.getString(R.string.battery_tip_charge_to_full_button)); mContext.getString(R.string.battery_tip_charge_to_full_button));
verifySecondaryButton(); verifySecondaryButton();
} }
@@ -170,8 +182,10 @@ public class DockDefenderTipTest {
private void verifySecondaryButton() { private void verifySecondaryButton() {
verify(mCardPreference).setSecondaryButtonText(mContext.getString(R.string.learn_more)); verify(mCardPreference).setSecondaryButtonText(mContext.getString(R.string.learn_more));
verify(mCardPreference).setSecondaryButtonVisible(true); verify(mCardPreference).setSecondaryButtonVisible(true);
verify(mCardPreference).setSecondaryButtonContentDescription(mContext.getString( final String expectedContent =
R.string.battery_tip_limited_temporarily_sec_button_content_description)); mContext.getString(
R.string.battery_tip_limited_temporarily_sec_button_content_description);
verify(mCardPreference).setSecondaryButtonContentDescription(expectedContent);
} }
@Test @Test
@@ -182,9 +196,11 @@ public class DockDefenderTipTest {
} }
private String getLastErrorLog() { private String getLastErrorLog() {
return ShadowLog.getLogsForTag(DockDefenderTip.class.getSimpleName()).stream().filter( return ShadowLog.getLogsForTag(DockDefenderTip.class.getSimpleName()).stream()
log -> log.type == Log.ERROR).reduce((first, second) -> second).orElse( .filter(log -> log.type == Log.ERROR)
createErrorLog("No Error Log")).msg; .reduce((first, second) -> second)
.orElse(createErrorLog("No Error Log"))
.msg;
} }
private ShadowLog.LogItem createErrorLog(String msg) { private ShadowLog.LogItem createErrorLog(String msg) {

View File

@@ -45,8 +45,7 @@ public class HighUsageTipTest {
private static final long SCREEN_TIME = 30 * DateUtils.MINUTE_IN_MILLIS; private static final long SCREEN_TIME = 30 * DateUtils.MINUTE_IN_MILLIS;
private static final long LAST_FULL_CHARGE_TIME = 20 * DateUtils.MINUTE_IN_MILLIS; private static final long LAST_FULL_CHARGE_TIME = 20 * DateUtils.MINUTE_IN_MILLIS;
@Mock @Mock private MetricsFeatureProvider mMetricsFeatureProvider;
private MetricsFeatureProvider mMetricsFeatureProvider;
private Context mContext; private Context mContext;
private HighUsageTip mBatteryTip; private HighUsageTip mBatteryTip;
private List<AppInfo> mUsageAppList; private List<AppInfo> mUsageAppList;
@@ -57,7 +56,8 @@ public class HighUsageTipTest {
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mUsageAppList = new ArrayList<>(); mUsageAppList = new ArrayList<>();
mUsageAppList.add(new AppInfo.Builder() mUsageAppList.add(
new AppInfo.Builder()
.setPackageName(PACKAGE_NAME) .setPackageName(PACKAGE_NAME)
.setScreenOnTimeMs(SCREEN_TIME) .setScreenOnTimeMs(SCREEN_TIME)
.build()); .build());
@@ -86,18 +86,24 @@ public class HighUsageTipTest {
@Test @Test
public void toString_containsAppData() { public void toString_containsAppData() {
assertThat(mBatteryTip.toString()).isEqualTo( assertThat(mBatteryTip.toString())
"type=2 state=0 { packageName=com.android.app,anomalyTypes={},screenTime=1800000 " .isEqualTo(
+ "}"); "type=2 state=0 {"
+ " packageName=com.android.app,anomalyTypes={},screenTime=1800000 }");
} }
@Test @Test
public void testLog_logAppInfo() { public void testLog_logAppInfo() {
mBatteryTip.log(mContext, mMetricsFeatureProvider); mBatteryTip.log(mContext, mMetricsFeatureProvider);
verify(mMetricsFeatureProvider).action(mContext, verify(mMetricsFeatureProvider)
MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP, BatteryTip.StateType.NEW); .action(
mContext,
MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP,
BatteryTip.StateType.NEW);
verify(mMetricsFeatureProvider).action(mContext, verify(mMetricsFeatureProvider)
.action(
mContext,
MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP_LIST, MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP_LIST,
PACKAGE_NAME); PACKAGE_NAME);
} }

View File

@@ -17,16 +17,11 @@ package com.android.settings.fuelgauge.batterytip.tips;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.util.Log; import android.util.Log;
import androidx.preference.Preference; import androidx.preference.Preference;
@@ -72,20 +67,19 @@ public final class IncompatibleChargerTipTest {
@Test @Test
public void getTitle_showTitle() { public void getTitle_showTitle() {
assertThat(mIncompatibleChargerTip.getTitle(mContext)).isEqualTo( assertThat(mIncompatibleChargerTip.getTitle(mContext))
mContext.getString(R.string.battery_tip_incompatible_charging_title)); .isEqualTo(mContext.getString(R.string.battery_tip_incompatible_charging_title));
} }
@Test @Test
public void getSummary_showSummary() { public void getSummary_showSummary() {
assertThat(mIncompatibleChargerTip.getSummary(mContext)).isEqualTo( assertThat(mIncompatibleChargerTip.getSummary(mContext))
mContext.getString(R.string.battery_tip_incompatible_charging_message)); .isEqualTo(mContext.getString(R.string.battery_tip_incompatible_charging_message));
} }
@Test @Test
public void getIcon_showIcon() { public void getIcon_showIcon() {
assertThat(mIncompatibleChargerTip.getIconId()) assertThat(mIncompatibleChargerTip.getIconId()).isEqualTo(R.drawable.ic_battery_charger);
.isEqualTo(R.drawable.ic_battery_charger);
} }
@Test @Test
@@ -93,8 +87,11 @@ public final class IncompatibleChargerTipTest {
mIncompatibleChargerTip.updateState(mBatteryTip); mIncompatibleChargerTip.updateState(mBatteryTip);
mIncompatibleChargerTip.log(mContext, mMetricsFeatureProvider); mIncompatibleChargerTip.log(mContext, mMetricsFeatureProvider);
verify(mMetricsFeatureProvider).action(mContext, verify(mMetricsFeatureProvider)
SettingsEnums.ACTION_INCOMPATIBLE_CHARGING_TIP, mBatteryTip.mState); .action(
mContext,
SettingsEnums.ACTION_INCOMPATIBLE_CHARGING_TIP,
mBatteryTip.mState);
} }
@Test @Test

View File

@@ -37,8 +37,7 @@ import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class LowBatteryTipTest { public class LowBatteryTipTest {
@Mock @Mock private MetricsFeatureProvider mMetricsFeatureProvider;
private MetricsFeatureProvider mMetricsFeatureProvider;
private Context mContext; private Context mContext;
private LowBatteryTip mLowBatteryTip; private LowBatteryTip mLowBatteryTip;
@@ -58,25 +57,25 @@ public class LowBatteryTipTest {
final LowBatteryTip parcelTip = new LowBatteryTip(parcel); final LowBatteryTip parcelTip = new LowBatteryTip(parcel);
assertThat(parcelTip.isPowerSaveModeOn()).isFalse(); assertThat(parcelTip.isPowerSaveModeOn()).isFalse();
assertThat(parcelTip.getSummary(mContext)).isEqualTo( assertThat(parcelTip.getSummary(mContext))
mContext.getString(R.string.battery_tip_low_battery_summary)); .isEqualTo(mContext.getString(R.string.battery_tip_low_battery_summary));
} }
@Test @Test
public void updateState_stateNew_showExpectedInformation() { public void updateState_stateNew_showExpectedInformation() {
mLowBatteryTip.mState = BatteryTip.StateType.NEW; mLowBatteryTip.mState = BatteryTip.StateType.NEW;
assertThat(mLowBatteryTip.getTitle(mContext)).isEqualTo( assertThat(mLowBatteryTip.getTitle(mContext))
mContext.getString(R.string.battery_tip_low_battery_title)); .isEqualTo(mContext.getString(R.string.battery_tip_low_battery_title));
assertThat(mLowBatteryTip.getSummary(mContext)).isEqualTo( assertThat(mLowBatteryTip.getSummary(mContext))
mContext.getString(R.string.battery_tip_low_battery_summary)); .isEqualTo(mContext.getString(R.string.battery_tip_low_battery_summary));
assertThat(mLowBatteryTip.getIconId()).isEqualTo(R.drawable.ic_battery_saver_accent_24dp); assertThat(mLowBatteryTip.getIconId()).isEqualTo(R.drawable.ic_battery_saver_accent_24dp);
} }
@Test @Test
public void updateState_powerSaveModeOn_notShowTipItem() { public void updateState_powerSaveModeOn_notShowTipItem() {
final LowBatteryTip tip = new LowBatteryTip( final LowBatteryTip tip =
BatteryTip.StateType.NEW, true /* powerSaveModeOn */); new LowBatteryTip(BatteryTip.StateType.NEW, true /* powerSaveModeOn */);
tip.updateState(tip); tip.updateState(tip);
@@ -87,7 +86,10 @@ public class LowBatteryTipTest {
public void log_lowBatteryActionWithCorrectState() { public void log_lowBatteryActionWithCorrectState() {
mLowBatteryTip.log(mContext, mMetricsFeatureProvider); mLowBatteryTip.log(mContext, mMetricsFeatureProvider);
verify(mMetricsFeatureProvider).action(mContext, verify(mMetricsFeatureProvider)
MetricsProto.MetricsEvent.ACTION_LOW_BATTERY_TIP, BatteryTip.StateType.NEW); .action(
mContext,
MetricsProto.MetricsEvent.ACTION_LOW_BATTERY_TIP,
BatteryTip.StateType.NEW);
} }
} }

View File

@@ -65,12 +65,9 @@ public class RestrictAppTipTest {
private List<AppInfo> mUsageAppList; private List<AppInfo> mUsageAppList;
private AppInfo mAppInfo; private AppInfo mAppInfo;
private AppInfo mUninstallAppInfo; private AppInfo mUninstallAppInfo;
@Mock @Mock private ApplicationInfo mApplicationInfo;
private ApplicationInfo mApplicationInfo; @Mock private PackageManager mPackageManager;
@Mock @Mock private MetricsFeatureProvider mMetricsFeatureProvider;
private PackageManager mPackageManager;
@Mock
private MetricsFeatureProvider mMetricsFeatureProvider;
@Before @Before
public void setUp() throws Exception { public void setUp() throws Exception {
@@ -79,19 +76,26 @@ public class RestrictAppTipTest {
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
doReturn(mContext).when(mContext).getApplicationContext(); doReturn(mContext).when(mContext).getApplicationContext();
doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME, doReturn(mApplicationInfo)
.when(mPackageManager)
.getApplicationInfo(
PACKAGE_NAME,
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER); PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
doThrow(new PackageManager.NameNotFoundException()).when(mPackageManager) doThrow(new PackageManager.NameNotFoundException())
.getApplicationInfo(UNINSTALL_PACKAGE_NAME, .when(mPackageManager)
.getApplicationInfo(
UNINSTALL_PACKAGE_NAME,
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER); PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
doReturn(DISPLAY_NAME).when(mApplicationInfo).loadLabel(mPackageManager); doReturn(DISPLAY_NAME).when(mApplicationInfo).loadLabel(mPackageManager);
mAppInfo = new AppInfo.Builder() mAppInfo =
new AppInfo.Builder()
.setPackageName(PACKAGE_NAME) .setPackageName(PACKAGE_NAME)
.addAnomalyType(ANOMALY_WAKEUP) .addAnomalyType(ANOMALY_WAKEUP)
.addAnomalyType(ANOMALY_WAKELOCK) .addAnomalyType(ANOMALY_WAKELOCK)
.build(); .build();
mUninstallAppInfo = new AppInfo.Builder() mUninstallAppInfo =
new AppInfo.Builder()
.setPackageName(UNINSTALL_PACKAGE_NAME) .setPackageName(UNINSTALL_PACKAGE_NAME)
.addAnomalyType(ANOMALY_WAKEUP) .addAnomalyType(ANOMALY_WAKEUP)
.build(); .build();
@@ -99,8 +103,8 @@ public class RestrictAppTipTest {
mUsageAppList.add(mAppInfo); mUsageAppList.add(mAppInfo);
mNewBatteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, mUsageAppList); mNewBatteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, mUsageAppList);
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList); mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
mInvisibleBatteryTip = new RestrictAppTip(BatteryTip.StateType.INVISIBLE, mInvisibleBatteryTip =
new ArrayList<>()); new RestrictAppTip(BatteryTip.StateType.INVISIBLE, new ArrayList<>());
} }
@After @After
@@ -149,8 +153,9 @@ public class RestrictAppTipTest {
@Test @Test
public void getSummary_oneAppHandled_showHandledSummary() { public void getSummary_oneAppHandled_showHandledSummary() {
assertThat(mHandledBatteryTip.getSummary(mContext).toString()) assertThat(mHandledBatteryTip.getSummary(mContext).toString())
.isEqualTo(StringUtil.getIcuPluralsString(mContext, 1, .isEqualTo(
R.string.battery_tip_restrict_handled_summary)); StringUtil.getIcuPluralsString(
mContext, 1, R.string.battery_tip_restrict_handled_summary));
} }
@Test @Test
@@ -158,8 +163,9 @@ public class RestrictAppTipTest {
mUsageAppList.add(new AppInfo.Builder().build()); mUsageAppList.add(new AppInfo.Builder().build());
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList); mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
assertThat(mHandledBatteryTip.getSummary(mContext)) assertThat(mHandledBatteryTip.getSummary(mContext))
.isEqualTo(StringUtil.getIcuPluralsString(mContext, 2, .isEqualTo(
R.string.battery_tip_restrict_handled_summary)); StringUtil.getIcuPluralsString(
mContext, 2, R.string.battery_tip_restrict_handled_summary));
} }
@Test @Test
@@ -217,22 +223,31 @@ public class RestrictAppTipTest {
@Test @Test
public void toString_containsAppData() { public void toString_containsAppData() {
assertThat(mNewBatteryTip.toString()).isEqualTo( assertThat(mNewBatteryTip.toString())
"type=1 state=0 { packageName=com.android.app,anomalyTypes={0, 1},screenTime=0 }"); .isEqualTo(
"type=1 state=0 { packageName=com.android.app,anomalyTypes={0,"
+ " 1},screenTime=0 }");
} }
@Test @Test
public void testLog_stateNew_logAppInfo() { public void testLog_stateNew_logAppInfo() {
mNewBatteryTip.log(mContext, mMetricsFeatureProvider); mNewBatteryTip.log(mContext, mMetricsFeatureProvider);
verify(mMetricsFeatureProvider).action(mContext, verify(mMetricsFeatureProvider)
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, BatteryTip.StateType.NEW); .action(
verify(mMetricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN, mContext,
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP,
BatteryTip.StateType.NEW);
verify(mMetricsFeatureProvider)
.action(
SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST, MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST,
SettingsEnums.PAGE_UNKNOWN, SettingsEnums.PAGE_UNKNOWN,
PACKAGE_NAME, PACKAGE_NAME,
ANOMALY_WAKEUP); ANOMALY_WAKEUP);
verify(mMetricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN, verify(mMetricsFeatureProvider)
.action(
SettingsEnums.PAGE_UNKNOWN,
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST, MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST,
SettingsEnums.PAGE_UNKNOWN, SettingsEnums.PAGE_UNKNOWN,
PACKAGE_NAME, PACKAGE_NAME,
@@ -243,9 +258,12 @@ public class RestrictAppTipTest {
public void testLog_stateHandled_doNotLogAppInfo() { public void testLog_stateHandled_doNotLogAppInfo() {
mHandledBatteryTip.log(mContext, mMetricsFeatureProvider); mHandledBatteryTip.log(mContext, mMetricsFeatureProvider);
verify(mMetricsFeatureProvider).action(mContext, verify(mMetricsFeatureProvider)
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, BatteryTip.StateType.HANDLED); .action(
verify(mMetricsFeatureProvider, never()).action( mContext,
anyInt(), anyInt(), anyInt(), anyString(), anyInt()); MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP,
BatteryTip.StateType.HANDLED);
verify(mMetricsFeatureProvider, never())
.action(anyInt(), anyInt(), anyInt(), anyString(), anyInt());
} }
} }

View File

@@ -33,8 +33,7 @@ import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class SmartBatteryTipTest { public class SmartBatteryTipTest {
@Mock @Mock private MetricsFeatureProvider mMetricsFeatureProvider;
private MetricsFeatureProvider mMetricsFeatureProvider;
private Context mContext; private Context mContext;
private SmartBatteryTip mSmartBatteryTip; private SmartBatteryTip mSmartBatteryTip;
@@ -50,7 +49,10 @@ public class SmartBatteryTipTest {
public void testLog() { public void testLog() {
mSmartBatteryTip.log(mContext, mMetricsFeatureProvider); mSmartBatteryTip.log(mContext, mMetricsFeatureProvider);
verify(mMetricsFeatureProvider).action(mContext, verify(mMetricsFeatureProvider)
MetricsProto.MetricsEvent.ACTION_SMART_BATTERY_TIP, BatteryTip.StateType.NEW); .action(
mContext,
MetricsProto.MetricsEvent.ACTION_SMART_BATTERY_TIP,
BatteryTip.StateType.NEW);
} }
} }

View File

@@ -45,19 +45,18 @@ public class AnomalyEventWrapperTest {
@Test @Test
public void getDismissRecordKey_returnExpectedResult() { public void getDismissRecordKey_returnExpectedResult() {
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext, mAnomalyEventWrapper =
BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent()); new AnomalyEventWrapper(
assertThat(mAnomalyEventWrapper.getDismissRecordKey()) mContext, BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
.isEqualTo("KEY_BRIGHTNESS"); assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_BRIGHTNESS");
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext, mAnomalyEventWrapper =
BatteryTestUtils.createScreenTimeoutAnomalyEvent()); new AnomalyEventWrapper(
assertThat(mAnomalyEventWrapper.getDismissRecordKey()) mContext, BatteryTestUtils.createScreenTimeoutAnomalyEvent());
.isEqualTo("KEY_SCREEN_TIMEOUT"); assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_SCREEN_TIMEOUT");
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext, mAnomalyEventWrapper =
BatteryTestUtils.createAppAnomalyEvent()); new AnomalyEventWrapper(mContext, BatteryTestUtils.createAppAnomalyEvent());
assertThat(mAnomalyEventWrapper.getDismissRecordKey()) assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_APP_1");
.isEqualTo("KEY_APP_1");
} }
} }

View File

@@ -66,22 +66,14 @@ import java.util.TimeZone;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public final class BatteryChartPreferenceControllerTest { public final class BatteryChartPreferenceControllerTest {
@Mock @Mock private Intent mIntent;
private Intent mIntent; @Mock private UserManager mUserManager;
@Mock @Mock private SettingsActivity mSettingsActivity;
private UserManager mUserManager; @Mock private TextView mChartSummaryTextView;
@Mock @Mock private BatteryChartView mDailyChartView;
private SettingsActivity mSettingsActivity; @Mock private BatteryChartView mHourlyChartView;
@Mock @Mock private ViewPropertyAnimator mViewPropertyAnimator;
private TextView mChartSummaryTextView; @Mock private LinearLayout.LayoutParams mLayoutParams;
@Mock
private BatteryChartView mDailyChartView;
@Mock
private BatteryChartView mHourlyChartView;
@Mock
private ViewPropertyAnimator mViewPropertyAnimator;
@Mock
private LinearLayout.LayoutParams mLayoutParams;
private Context mContext; private Context mContext;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
@@ -97,9 +89,7 @@ public final class BatteryChartPreferenceControllerTest {
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
doReturn(mContext).when(mContext).getApplicationContext(); doReturn(mContext).when(mContext).getApplicationContext();
doReturn(mUserManager) doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
.when(mContext)
.getSystemService(UserManager.class);
doReturn(true).when(mUserManager).isUserUnlocked(anyInt()); doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
doReturn(new int[] {0}).when(mUserManager).getProfileIdsWithDisabled(anyInt()); doReturn(new int[] {0}).when(mUserManager).getProfileIdsWithDisabled(anyInt());
final Resources resources = spy(mContext.getResources()); final Resources resources = spy(mContext.getResources());
@@ -156,9 +146,12 @@ public final class BatteryChartPreferenceControllerTest {
verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE); verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE);
// Ignore fast refresh ui from the data processor callback. // Ignore fast refresh ui from the data processor callback.
verify(mHourlyChartView, atLeast(0)).setViewModel(null); verify(mHourlyChartView, atLeast(0)).setViewModel(null);
verify(mHourlyChartView, atLeastOnce()).setViewModel(new BatteryChartViewModel( verify(mHourlyChartView, atLeastOnce())
.setViewModel(
new BatteryChartViewModel(
List.of(100, 99, 97, 95, 66), List.of(100, 99, 97, 95, 66),
List.of(1619247660000L /* 7:01 AM */, List.of(
1619247660000L /* 7:01 AM */,
1619251200000L /* 8 AM */, 1619251200000L /* 8 AM */,
1619258400000L /* 10 AM */, 1619258400000L /* 10 AM */,
1619265600000L /* 12 PM */, 1619265600000L /* 12 PM */,
@@ -173,10 +166,12 @@ public final class BatteryChartPreferenceControllerTest {
reset(mHourlyChartView); reset(mHourlyChartView);
setupHourlyChartViewAnimationMock(); setupHourlyChartViewAnimationMock();
BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel( BatteryChartViewModel expectedDailyViewModel =
new BatteryChartViewModel(
List.of(100, 83, 59, 66), List.of(100, 83, 59, 66),
// "Sat", "Sun", "Mon", "Mon" // "Sat", "Sun", "Mon", "Mon"
List.of(1619247660000L /* Sat */, List.of(
1619247660000L /* Sat */,
1619308800000L /* Sun */, 1619308800000L /* Sun */,
1619395200000L /* Mon */, 1619395200000L /* Mon */,
1619460120000L /* Mon */), 1619460120000L /* Mon */),
@@ -202,9 +197,12 @@ public final class BatteryChartPreferenceControllerTest {
expectedDailyViewModel.setSelectedIndex(0); expectedDailyViewModel.setSelectedIndex(0);
verify(mDailyChartView).setViewModel(expectedDailyViewModel); verify(mDailyChartView).setViewModel(expectedDailyViewModel);
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel( verify(mHourlyChartView)
.setViewModel(
new BatteryChartViewModel(
List.of(100, 99, 97, 95, 93, 91, 89, 87, 85, 83), List.of(100, 99, 97, 95, 93, 91, 89, 87, 85, 83),
List.of(1619247660000L /* 7:01 AM */, List.of(
1619247660000L /* 7:01 AM */,
1619251200000L /* 8 AM */, 1619251200000L /* 8 AM */,
1619258400000L /* 10 AM */, 1619258400000L /* 10 AM */,
1619265600000L /* 12 PM */, 1619265600000L /* 12 PM */,
@@ -228,9 +226,11 @@ public final class BatteryChartPreferenceControllerTest {
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f); verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
expectedDailyViewModel.setSelectedIndex(1); expectedDailyViewModel.setSelectedIndex(1);
verify(mDailyChartView).setViewModel(expectedDailyViewModel); verify(mDailyChartView).setViewModel(expectedDailyViewModel);
BatteryChartViewModel expectedHourlyViewModel = new BatteryChartViewModel( BatteryChartViewModel expectedHourlyViewModel =
new BatteryChartViewModel(
List.of(83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59), List.of(83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59),
List.of(1619308800000L /* 12 AM */, List.of(
1619308800000L /* 12 AM */,
1619316000000L /* 2 AM */, 1619316000000L /* 2 AM */,
1619323200000L /* 4 AM */, 1619323200000L /* 4 AM */,
1619330400000L /* 6 AM */, 1619330400000L /* 6 AM */,
@@ -259,9 +259,12 @@ public final class BatteryChartPreferenceControllerTest {
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f); verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
expectedDailyViewModel.setSelectedIndex(2); expectedDailyViewModel.setSelectedIndex(2);
verify(mDailyChartView).setViewModel(expectedDailyViewModel); verify(mDailyChartView).setViewModel(expectedDailyViewModel);
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel( verify(mHourlyChartView)
.setViewModel(
new BatteryChartViewModel(
List.of(59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 66), List.of(59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 66),
List.of(1619395200000L /* 12 AM */, List.of(
1619395200000L /* 12 AM */,
1619402400000L /* 2 AM */, 1619402400000L /* 2 AM */,
1619409600000L /* 4 AM */, 1619409600000L /* 4 AM */,
1619416800000L /* 6 AM */, 1619416800000L /* 6 AM */,
@@ -274,7 +277,6 @@ public final class BatteryChartPreferenceControllerTest {
1619460120000L /* now (6:02 PM) */), 1619460120000L /* now (6:02 PM) */),
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS, BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
mBatteryChartPreferenceController.mHourlyChartLabelTextGenerator)); mBatteryChartPreferenceController.mHourlyChartLabelTextGenerator));
} }
@Test @Test
@@ -408,8 +410,8 @@ public final class BatteryChartPreferenceControllerTest {
mBatteryChartPreferenceController.mDailyChartIndex = 0; mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 2; mBatteryChartPreferenceController.mHourlyChartIndex = 2;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo( assertThat(mBatteryChartPreferenceController.getSlotInformation())
"10 AM - 12 PM"); .isEqualTo("10 AM - 12 PM");
} }
@Test @Test
@@ -418,8 +420,8 @@ public final class BatteryChartPreferenceControllerTest {
mBatteryChartPreferenceController.mDailyChartIndex = 1; mBatteryChartPreferenceController.mDailyChartIndex = 1;
mBatteryChartPreferenceController.mHourlyChartIndex = 8; mBatteryChartPreferenceController.mHourlyChartIndex = 8;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo( assertThat(mBatteryChartPreferenceController.getSlotInformation())
"Sunday 4 PM - 6 PM"); .isEqualTo("Sunday 4 PM - 6 PM");
} }
@Test @Test
@@ -428,8 +430,8 @@ public final class BatteryChartPreferenceControllerTest {
mBatteryChartPreferenceController.mDailyChartIndex = 0; mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 0; mBatteryChartPreferenceController.mHourlyChartIndex = 0;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo( assertThat(mBatteryChartPreferenceController.getSlotInformation())
"7:01 AM - 8 AM"); .isEqualTo("7:01 AM - 8 AM");
} }
@Test @Test
@@ -438,8 +440,7 @@ public final class BatteryChartPreferenceControllerTest {
mBatteryChartPreferenceController.mDailyChartIndex = 0; mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 3; mBatteryChartPreferenceController.mHourlyChartIndex = 3;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo( assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("12 PM - now");
"12 PM - now");
} }
@Test @Test
@@ -448,8 +449,8 @@ public final class BatteryChartPreferenceControllerTest {
mBatteryChartPreferenceController.mDailyChartIndex = 0; mBatteryChartPreferenceController.mDailyChartIndex = 0;
mBatteryChartPreferenceController.mHourlyChartIndex = 0; mBatteryChartPreferenceController.mHourlyChartIndex = 0;
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo( assertThat(mBatteryChartPreferenceController.getSlotInformation())
"7:01 AM - now"); .isEqualTo("7:01 AM - now");
} }
@Test @Test

View File

@@ -45,8 +45,7 @@ public final class BatteryChartViewTest {
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
private PowerUsageFeatureProvider mPowerUsageFeatureProvider; private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
@Mock @Mock private View mMockView;
private View mMockView;
@Before @Before
public void setUp() { public void setUp() {
@@ -54,17 +53,19 @@ public final class BatteryChartViewTest {
mFeatureFactory = FakeFeatureFactory.setupForTest(); mFeatureFactory = FakeFeatureFactory.setupForTest();
mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider; mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
mContext.getResources().getConfiguration().setLocales( mContext.getResources().getConfiguration().setLocales(new LocaleList(new Locale("en_US")));
new LocaleList(new Locale("en_US")));
mBatteryChartView = new BatteryChartView(mContext); mBatteryChartView = new BatteryChartView(mContext);
} }
@Test @Test
public void onClick_invokesCallback() { public void onClick_invokesCallback() {
final int originalSelectedIndex = 2; final int originalSelectedIndex = 2;
BatteryChartViewModel batteryChartViewModel = new BatteryChartViewModel( BatteryChartViewModel batteryChartViewModel =
List.of(90, 80, 70, 60), List.of(0L, 0L, 0L, 0L), new BatteryChartViewModel(
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS, null); List.of(90, 80, 70, 60),
List.of(0L, 0L, 0L, 0L),
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
null);
batteryChartViewModel.setSelectedIndex(originalSelectedIndex); batteryChartViewModel.setSelectedIndex(originalSelectedIndex);
mBatteryChartView.setViewModel(batteryChartViewModel); mBatteryChartView.setViewModel(batteryChartViewModel);
for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) { for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) {

View File

@@ -149,16 +149,12 @@ public class BatteryDiffDataTest {
createBatteryDiffEntry(mContext, /* consumePower= */ 28.5, /* key= */ "APP_1")); createBatteryDiffEntry(mContext, /* consumePower= */ 28.5, /* key= */ "APP_1"));
batteryDiffEntries.add( batteryDiffEntries.add(
createBatteryDiffEntry( createBatteryDiffEntry(
mContext, mContext, /* consumePower= */ 20, BatteryDiffEntry.UNINSTALLED_APPS_KEY));
/* consumePower= */ 20,
BatteryDiffEntry.UNINSTALLED_APPS_KEY));
batteryDiffEntries.add( batteryDiffEntries.add(
createBatteryDiffEntry(mContext, /* consumePower= */ 3, /* key= */ "APP_2")); createBatteryDiffEntry(mContext, /* consumePower= */ 3, /* key= */ "APP_2"));
batteryDiffEntries.add( batteryDiffEntries.add(
createBatteryDiffEntry( createBatteryDiffEntry(
mContext, mContext, /* consumePower= */ 28.5, BatteryDiffEntry.SYSTEM_APPS_KEY));
/* consumePower= */ 28.5,
BatteryDiffEntry.SYSTEM_APPS_KEY));
batteryDiffEntries.add( batteryDiffEntries.add(
createBatteryDiffEntry(mContext, /* consumePower= */ 20, /* key= */ "APP_3")); createBatteryDiffEntry(mContext, /* consumePower= */ 20, /* key= */ "APP_3"));

View File

@@ -64,7 +64,6 @@ public final class BatteryDiffEntryTest {
private static final String UNINSTALLED_PACKAGE_NAME = "com.android.testing.uninstalled"; private static final String UNINSTALLED_PACKAGE_NAME = "com.android.testing.uninstalled";
private static final String UID_ZERO_PACKAGE_NAME = "com.android.testing.uid.zero"; private static final String UID_ZERO_PACKAGE_NAME = "com.android.testing.uid.zero";
private Context mContext; private Context mContext;
@Mock private ApplicationInfo mMockAppInfo; @Mock private ApplicationInfo mMockAppInfo;
@@ -451,7 +450,6 @@ public final class BatteryDiffEntryTest {
assertThat(entry.isUninstalledEntry()).isFalse(); assertThat(entry.isUninstalledEntry()).isFalse();
assertThat(BatteryDiffEntry.sPackageNameAndUidCache.containsKey(PACKAGE_NAME)).isTrue(); assertThat(BatteryDiffEntry.sPackageNameAndUidCache.containsKey(PACKAGE_NAME)).isTrue();
assertThat(BatteryDiffEntry.sPackageNameAndUidCache.get(PACKAGE_NAME)).isEqualTo(UID); assertThat(BatteryDiffEntry.sPackageNameAndUidCache.get(PACKAGE_NAME)).isEqualTo(UID);
} }
@Test @Test

View File

@@ -61,18 +61,15 @@ public class BatteryEntryTest {
private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen"; private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen";
private static final String ANDROID_PACKAGE = "android"; private static final String ANDROID_PACKAGE = "android";
@Rule @Rule public MockitoRule mocks = MockitoJUnit.rule();
public MockitoRule mocks = MockitoJUnit.rule();
@Mock(answer = Answers.RETURNS_DEEP_STUBS) @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private Context mMockContext; private Context mMockContext;
private Context mContext; private Context mContext;
@Mock @Mock private PackageManager mMockPackageManager;
private PackageManager mMockPackageManager; @Mock private UserManager mMockUserManager;
@Mock @Mock private UidBatteryConsumer mUidBatteryConsumer;
private UserManager mMockUserManager;
@Mock
private UidBatteryConsumer mUidBatteryConsumer;
@Before @Before
public void stubContextToReturnMockPackageManager() { public void stubContextToReturnMockPackageManager() {
@@ -83,23 +80,27 @@ public class BatteryEntryTest {
@Before @Before
public void stubPackageManagerToReturnAppPackageAndName() throws NameNotFoundException { public void stubPackageManagerToReturnAppPackageAndName() throws NameNotFoundException {
when(mMockPackageManager.getApplicationInfo(anyString(), eq(0) /* no flags */)) when(mMockPackageManager.getApplicationInfo(anyString(), eq(0) /* no flags */))
.thenAnswer(invocation -> { .thenAnswer(
invocation -> {
ApplicationInfo info = new ApplicationInfo(); ApplicationInfo info = new ApplicationInfo();
info.packageName = invocation.getArgument(0); info.packageName = invocation.getArgument(0);
return info; return info;
}); });
when(mMockPackageManager.getApplicationLabel(any(ApplicationInfo.class))) when(mMockPackageManager.getApplicationLabel(any(ApplicationInfo.class)))
.thenAnswer(invocation -> LABEL_PREFIX .thenAnswer(
+ ((ApplicationInfo) invocation.getArgument(0)).packageName); invocation ->
LABEL_PREFIX
+ ((ApplicationInfo) invocation.getArgument(0))
.packageName);
} }
private BatteryEntry createBatteryEntryForApp(String[] packages, String packageName, private BatteryEntry createBatteryEntryForApp(
String highDrainPackage) { String[] packages, String packageName, String highDrainPackage) {
UidBatteryConsumer consumer = mock(UidBatteryConsumer.class); UidBatteryConsumer consumer = mock(UidBatteryConsumer.class);
when(consumer.getUid()).thenReturn(APP_UID); when(consumer.getUid()).thenReturn(APP_UID);
when(consumer.getPackageWithHighestDrain()).thenReturn(highDrainPackage); when(consumer.getPackageWithHighestDrain()).thenReturn(highDrainPackage);
return new BatteryEntry(mMockContext, mMockUserManager, return new BatteryEntry(
consumer, false, APP_UID, packages, packageName); mMockContext, mMockUserManager, consumer, false, APP_UID, packages, packageName);
} }
private BatteryEntry createAggregateBatteryEntry(int powerComponentId) { private BatteryEntry createAggregateBatteryEntry(int powerComponentId) {
@@ -122,14 +123,13 @@ public class BatteryEntryTest {
private BatteryEntry createUserBatteryConsumer(int userId) { private BatteryEntry createUserBatteryConsumer(int userId) {
UserBatteryConsumer consumer = mock(UserBatteryConsumer.class); UserBatteryConsumer consumer = mock(UserBatteryConsumer.class);
when(consumer.getUserId()).thenReturn(userId); when(consumer.getUserId()).thenReturn(userId);
return new BatteryEntry(mMockContext, mMockUserManager, return new BatteryEntry(mMockContext, mMockUserManager, consumer, false, 0, null, null);
consumer, false, 0, null, null);
} }
@Test @Test
public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception { public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception {
BatteryEntry entry = createBatteryEntryForApp(null, APP_DEFAULT_PACKAGE_NAME, BatteryEntry entry =
HIGH_DRAIN_PACKAGE); createBatteryEntryForApp(null, APP_DEFAULT_PACKAGE_NAME, HIGH_DRAIN_PACKAGE);
assertThat(entry.getDefaultPackageName()).isEqualTo(APP_DEFAULT_PACKAGE_NAME); assertThat(entry.getDefaultPackageName()).isEqualTo(APP_DEFAULT_PACKAGE_NAME);
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + APP_DEFAULT_PACKAGE_NAME); assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + APP_DEFAULT_PACKAGE_NAME);
@@ -157,8 +157,10 @@ public class BatteryEntryTest {
@Test @Test
public void batteryEntryForApp_shouldSetHighestDrainPackage_whenMultiplePackagesFoundForUid() { public void batteryEntryForApp_shouldSetHighestDrainPackage_whenMultiplePackagesFoundForUid() {
BatteryEntry entry = createBatteryEntryForApp( BatteryEntry entry =
new String[]{APP_DEFAULT_PACKAGE_NAME, "package2", "package3"}, null, createBatteryEntryForApp(
new String[] {APP_DEFAULT_PACKAGE_NAME, "package2", "package3"},
null,
HIGH_DRAIN_PACKAGE); HIGH_DRAIN_PACKAGE);
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + HIGH_DRAIN_PACKAGE); assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + HIGH_DRAIN_PACKAGE);
@@ -166,7 +168,9 @@ public class BatteryEntryTest {
@Test @Test
public void batteryEntryForAOD_containCorrectInfo() { public void batteryEntryForAOD_containCorrectInfo() {
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, final BatteryEntry entry =
new BatteryEntry(
RuntimeEnvironment.application,
BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
/* devicePowerMah= */ 200, /* devicePowerMah= */ 200,
/* usageDurationMs= */ 1000, /* usageDurationMs= */ 1000,
@@ -178,7 +182,9 @@ public class BatteryEntryTest {
@Test @Test
public void batteryEntryForCustomComponent_containCorrectInfo() { public void batteryEntryForCustomComponent_containCorrectInfo() {
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, final BatteryEntry entry =
new BatteryEntry(
RuntimeEnvironment.application,
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42, BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42,
/* powerComponentName= */ "ABC", /* powerComponentName= */ "ABC",
/* devicePowerMah= */ 200); /* devicePowerMah= */ 200);
@@ -192,15 +198,24 @@ public class BatteryEntryTest {
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND)) when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND))
.thenReturn(100L); .thenReturn(100L);
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, final BatteryEntry entry =
mMockUserManager, mUidBatteryConsumer, false, 0, null, null); new BatteryEntry(
RuntimeEnvironment.application,
mMockUserManager,
mUidBatteryConsumer,
false,
0,
null,
null);
assertThat(entry.getTimeInForegroundMs()).isEqualTo(100L); assertThat(entry.getTimeInForegroundMs()).isEqualTo(100L);
} }
@Test @Test
public void getTimeInForegroundMs_aggregateBatteryConsumer() { public void getTimeInForegroundMs_aggregateBatteryConsumer() {
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, final BatteryEntry entry =
new BatteryEntry(
RuntimeEnvironment.application,
BatteryConsumer.POWER_COMPONENT_BLUETOOTH, BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
/* devicePowerMah= */ 10, /* devicePowerMah= */ 10,
/* usageDurationMs= */ 100, /* usageDurationMs= */ 100,
@@ -214,15 +229,24 @@ public class BatteryEntryTest {
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND)) when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
.thenReturn(100L); .thenReturn(100L);
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, final BatteryEntry entry =
mMockUserManager, mUidBatteryConsumer, false, 0, null, null); new BatteryEntry(
RuntimeEnvironment.application,
mMockUserManager,
mUidBatteryConsumer,
false,
0,
null,
null);
assertThat(entry.getTimeInBackgroundMs()).isEqualTo(100L); assertThat(entry.getTimeInBackgroundMs()).isEqualTo(100L);
} }
@Test @Test
public void getTimeInBackgroundMs_systemConsumer() { public void getTimeInBackgroundMs_systemConsumer() {
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, final BatteryEntry entry =
new BatteryEntry(
RuntimeEnvironment.application,
BatteryConsumer.POWER_COMPONENT_BLUETOOTH, BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
/* devicePowerMah= */ 100, /* devicePowerMah= */ 100,
/* usageDurationMs= */ 1000, /* usageDurationMs= */ 1000,
@@ -241,15 +265,16 @@ public class BatteryEntryTest {
@Test @Test
public void getKey_AggregateBatteryConsumer_returnComponentId() { public void getKey_AggregateBatteryConsumer_returnComponentId() {
final BatteryEntry entry = createAggregateBatteryEntry( final BatteryEntry entry =
BatteryConsumer.POWER_COMPONENT_BLUETOOTH); createAggregateBatteryEntry(BatteryConsumer.POWER_COMPONENT_BLUETOOTH);
final String key = entry.getKey(); final String key = entry.getKey();
assertThat(key).isEqualTo("S|2"); assertThat(key).isEqualTo("S|2");
} }
@Test @Test
public void getKey_CustomAggregateBatteryConsumer_returnComponentId() { public void getKey_CustomAggregateBatteryConsumer_returnComponentId() {
final BatteryEntry entry = createCustomAggregateBatteryEntry( final BatteryEntry entry =
createCustomAggregateBatteryEntry(
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42); BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42);
final String key = entry.getKey(); final String key = entry.getKey();
assertThat(key).isEqualTo("S|1042"); assertThat(key).isEqualTo("S|1042");
@@ -269,19 +294,18 @@ public class BatteryEntryTest {
doReturn(mMockUserManager).when(mContext).getSystemService(UserManager.class); doReturn(mMockUserManager).when(mContext).getSystemService(UserManager.class);
doReturn(null).when(mMockUserManager).getUserInfo(userId); doReturn(null).when(mMockUserManager).getUserInfo(userId);
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId( final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId(mContext, userId);
mContext, userId); assertThat(nameAndIcon.mName)
assertThat(nameAndIcon.mName).isEqualTo(getString( .isEqualTo(getString(R.string.running_process_item_removed_user_label));
R.string.running_process_item_removed_user_label));
assertThat(nameAndIcon.mIcon).isNull(); assertThat(nameAndIcon.mIcon).isNull();
} }
@Test @Test
public void getNameAndIconFromUid_rerturnExpectedName() { public void getNameAndIconFromUid_rerturnExpectedName() {
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid( final NameAndIcon nameAndIcon =
mContext, /* name */ null, /* uid */ 0); BatteryEntry.getNameAndIconFromUid(mContext, /* name */ null, /* uid */ 0);
assertThat(nameAndIcon.mName).isEqualTo( assertThat(nameAndIcon.mName)
getString(com.android.settingslib.R.string.process_kernel_label)); .isEqualTo(getString(com.android.settingslib.R.string.process_kernel_label));
assertNameAndIcon("mediaserver", R.string.process_mediaserver_label); assertNameAndIcon("mediaserver", R.string.process_mediaserver_label);
assertNameAndIcon("dex2oat32", R.string.process_dex2oat_label); assertNameAndIcon("dex2oat32", R.string.process_dex2oat_label);
@@ -291,7 +315,8 @@ public class BatteryEntryTest {
@Test @Test
public void getNameAndIconFromUid_tetheringUid_rerturnExpectedName() { public void getNameAndIconFromUid_tetheringUid_rerturnExpectedName() {
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid( final NameAndIcon nameAndIcon =
BatteryEntry.getNameAndIconFromUid(
mContext, /* name */ null, /* uid */ BatteryUtils.UID_TETHERING); mContext, /* name */ null, /* uid */ BatteryUtils.UID_TETHERING);
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_network_tethering)); assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_network_tethering));
@@ -299,7 +324,8 @@ public class BatteryEntryTest {
@Test @Test
public void getNameAndIconFromUid_removedAppsUid_rerturnExpectedName() { public void getNameAndIconFromUid_removedAppsUid_rerturnExpectedName() {
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid( final NameAndIcon nameAndIcon =
BatteryEntry.getNameAndIconFromUid(
mContext, /* name */ null, /* uid */ BatteryUtils.UID_REMOVED_APPS); mContext, /* name */ null, /* uid */ BatteryUtils.UID_REMOVED_APPS);
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_removed_apps)); assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_removed_apps));
@@ -307,47 +333,57 @@ public class BatteryEntryTest {
@Test @Test
public void getNameAndIconFromPowerComponent_rerturnExpectedNameAndIcon() { public void getNameAndIconFromPowerComponent_rerturnExpectedNameAndIcon() {
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_SCREEN, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_SCREEN,
R.string.power_screen, R.string.power_screen,
R.drawable.ic_settings_display); R.drawable.ic_settings_display);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_CPU, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_CPU,
R.string.power_cpu, R.string.power_cpu,
R.drawable.ic_settings_cpu); R.drawable.ic_settings_cpu);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_BLUETOOTH, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
R.string.power_bluetooth, R.string.power_bluetooth,
R.drawable.ic_settings_bluetooth); R.drawable.ic_settings_bluetooth);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_CAMERA, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_CAMERA,
R.string.power_camera, R.string.power_camera,
R.drawable.ic_settings_camera); R.drawable.ic_settings_camera);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
R.string.power_flashlight, R.string.power_flashlight,
R.drawable.ic_settings_flashlight); R.drawable.ic_settings_flashlight);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
R.string.power_cell, R.string.power_cell,
R.drawable.ic_settings_cellular); R.drawable.ic_settings_cellular);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_GNSS, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_GNSS,
R.string.power_gps, R.string.power_gps,
R.drawable.ic_settings_gps); R.drawable.ic_settings_gps);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_WIFI, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_WIFI,
R.string.power_wifi, R.string.power_wifi,
R.drawable.ic_settings_wireless_no_theme); R.drawable.ic_settings_wireless_no_theme);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_PHONE, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_PHONE,
R.string.power_phone, R.string.power_phone,
R.drawable.ic_settings_voice_calls); R.drawable.ic_settings_voice_calls);
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, assertNameAndIcon(
BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
R.string.ambient_display_screen_title, R.string.ambient_display_screen_title,
R.drawable.ic_settings_aod); R.drawable.ic_settings_aod);
} }
private void assertNameAndIcon(String name, int stringId) { private void assertNameAndIcon(String name, int stringId) {
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid( final NameAndIcon nameAndIcon =
mContext, name, /* uid */ 1000); BatteryEntry.getNameAndIconFromUid(mContext, name, /* uid */ 1000);
assertThat(nameAndIcon.mName).isEqualTo(getString(stringId)); assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
} }
private void assertNameAndIcon(int powerComponentId, int stringId, int iconId) { private void assertNameAndIcon(int powerComponentId, int stringId, int iconId) {
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromPowerComponent( final NameAndIcon nameAndIcon =
mContext, powerComponentId); BatteryEntry.getNameAndIconFromPowerComponent(mContext, powerComponentId);
assertThat(nameAndIcon.mName).isEqualTo(getString(stringId)); assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
assertThat(nameAndIcon.mIconId).isEqualTo(iconId); assertThat(nameAndIcon.mIconId).isEqualTo(iconId);
} }

View File

@@ -41,10 +41,8 @@ import java.util.TimeZone;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public final class BatteryHistEntryTest { public final class BatteryHistEntryTest {
@Mock @Mock private BatteryEntry mMockBatteryEntry;
private BatteryEntry mMockBatteryEntry; @Mock private BatteryUsageStats mBatteryUsageStats;
@Mock
private BatteryUsageStats mBatteryUsageStats;
@Before @Before
public void setUp() { public void setUp() {
@@ -115,8 +113,8 @@ public final class BatteryHistEntryTest {
@Test @Test
public void testGetKey_consumerUidType_returnExpectedString() { public void testGetKey_consumerUidType_returnExpectedString() {
final ContentValues values = getContentValuesWithType( final ContentValues values =
ConvertUtils.CONSUMER_TYPE_UID_BATTERY); getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
values.put(BatteryHistEntry.KEY_UID, 3); values.put(BatteryHistEntry.KEY_UID, 3);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values); final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
@@ -125,8 +123,8 @@ public final class BatteryHistEntryTest {
@Test @Test
public void testGetKey_consumerUserType_returnExpectedString() { public void testGetKey_consumerUserType_returnExpectedString() {
final ContentValues values = getContentValuesWithType( final ContentValues values =
ConvertUtils.CONSUMER_TYPE_USER_BATTERY); getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
values.put(BatteryHistEntry.KEY_USER_ID, 2); values.put(BatteryHistEntry.KEY_USER_ID, 2);
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values); final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
@@ -135,14 +133,12 @@ public final class BatteryHistEntryTest {
@Test @Test
public void testGetKey_consumerSystemType_returnExpectedString() { public void testGetKey_consumerSystemType_returnExpectedString() {
final ContentValues values = getContentValuesWithType( final ContentValues values =
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
final BatteryInformation batteryInformation = final BatteryInformation batteryInformation =
BatteryInformation BatteryInformation.newBuilder().setDrainType(1).build();
.newBuilder() values.put(
.setDrainType(1) BatteryHistEntry.KEY_BATTERY_INFORMATION,
.build();
values.put(BatteryHistEntry.KEY_BATTERY_INFORMATION,
ConvertUtils.convertBatteryInformationToString(batteryInformation)); ConvertUtils.convertBatteryInformationToString(batteryInformation));
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values); final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
@@ -151,32 +147,51 @@ public final class BatteryHistEntryTest {
@Test @Test
public void testIsAppEntry_returnExpectedResult() { public void testIsAppEntry_returnExpectedResult() {
assertThat(isUidConsumer( assertThat(
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isFalse(); isUidConsumer(
assertThat(isUidConsumer( createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isFalse(); .mConsumerType))
assertThat(isUidConsumer( .isFalse();
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isTrue(); assertThat(
isUidConsumer(
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
.isFalse();
assertThat(isUidConsumer(createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
.isTrue();
} }
@Test @Test
public void testIsUserEntry_returnExpectedResult() { public void testIsUserEntry_returnExpectedResult() {
assertThat(isUserConsumer( assertThat(
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isFalse(); isUserConsumer(
assertThat(isUserConsumer( createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isTrue(); .mConsumerType))
assertThat(isUserConsumer( .isFalse();
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isFalse(); assertThat(
isUserConsumer(
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
.isTrue();
assertThat(
isUserConsumer(
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
.isFalse();
} }
@Test @Test
public void testIsSystemEntry_returnExpectedResult() { public void testIsSystemEntry_returnExpectedResult() {
assertThat(isSystemConsumer( assertThat(
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isTrue(); isSystemConsumer(
assertThat(isSystemConsumer( createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isFalse(); .mConsumerType))
assertThat(isSystemConsumer( .isTrue();
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isFalse(); assertThat(
isSystemConsumer(
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
.isFalse();
assertThat(
isSystemConsumer(
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
.isFalse();
} }
@Test @Test
@@ -185,7 +200,8 @@ public final class BatteryHistEntryTest {
final long upperTimestamp = 300L; final long upperTimestamp = 300L;
final long lowerTimestamp = 100L; final long lowerTimestamp = 100L;
final double ratio = 0.5; final double ratio = 0.5;
final BatteryHistEntry lowerHistEntry = createBatteryHistEntry( final BatteryHistEntry lowerHistEntry =
createBatteryHistEntry(
/* bootTimestamp= */ 1000L, /* bootTimestamp= */ 1000L,
lowerTimestamp, lowerTimestamp,
/* totalPower= */ 50, /* totalPower= */ 50,
@@ -197,7 +213,8 @@ public final class BatteryHistEntryTest {
/* foregroundUsageTimeInMs= */ 100, /* foregroundUsageTimeInMs= */ 100,
/* backgroundUsageTimeInMs= */ 200, /* backgroundUsageTimeInMs= */ 200,
/* batteryLevel= */ 90); /* batteryLevel= */ 90);
final BatteryHistEntry upperHistEntry = createBatteryHistEntry( final BatteryHistEntry upperHistEntry =
createBatteryHistEntry(
/* bootTimestamp= */ 1200L, /* bootTimestamp= */ 1200L,
upperTimestamp, upperTimestamp,
/* totalPower= */ 80, /* totalPower= */ 80,
@@ -212,14 +229,12 @@ public final class BatteryHistEntryTest {
final BatteryHistEntry newEntry = final BatteryHistEntry newEntry =
BatteryHistEntry.interpolate( BatteryHistEntry.interpolate(
slotTimestamp, slotTimestamp, upperTimestamp, ratio, lowerHistEntry, upperHistEntry);
upperTimestamp,
ratio,
lowerHistEntry,
upperHistEntry);
assertBatteryHistEntry( assertBatteryHistEntry(
newEntry, 3, upperHistEntry.mPercentOfTotal, newEntry,
3,
upperHistEntry.mPercentOfTotal,
/* bootTimestamp= */ 1200 - 100, /* bootTimestamp= */ 1200 - 100,
/* timestamp= */ slotTimestamp, /* timestamp= */ slotTimestamp,
/* totalPower= */ 50 + 0.5 * (80 - 50), /* totalPower= */ 50 + 0.5 * (80 - 50),
@@ -238,7 +253,8 @@ public final class BatteryHistEntryTest {
final long slotTimestamp = 200L; final long slotTimestamp = 200L;
final long upperTimestamp = 300L; final long upperTimestamp = 300L;
final double ratio = 0.5; final double ratio = 0.5;
final BatteryHistEntry upperHistEntry = createBatteryHistEntry( final BatteryHistEntry upperHistEntry =
createBatteryHistEntry(
/* bootTimestamp= */ 1200L, /* bootTimestamp= */ 1200L,
upperTimestamp, upperTimestamp,
/* totalPower= */ 80, /* totalPower= */ 80,
@@ -260,7 +276,9 @@ public final class BatteryHistEntryTest {
upperHistEntry); upperHistEntry);
assertBatteryHistEntry( assertBatteryHistEntry(
newEntry, 3, upperHistEntry.mPercentOfTotal, newEntry,
3,
upperHistEntry.mPercentOfTotal,
/* bootTimestamp= */ 1200 - 100, /* bootTimestamp= */ 1200 - 100,
/* timestamp= */ slotTimestamp, /* timestamp= */ slotTimestamp,
/* totalPower= */ 0.5 * 80, /* totalPower= */ 0.5 * 80,
@@ -280,15 +298,16 @@ public final class BatteryHistEntryTest {
private static ContentValues getContentValuesWithType(int consumerType) { private static ContentValues getContentValuesWithType(int consumerType) {
final ContentValues values = new ContentValues(); final ContentValues values = new ContentValues();
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf(consumerType));
Integer.valueOf(consumerType));
return values; return values;
} }
private void assertBatteryHistEntry( private void assertBatteryHistEntry(
BatteryHistEntry entry, int drainType, double percentOfTotal) { BatteryHistEntry entry, int drainType, double percentOfTotal) {
assertBatteryHistEntry( assertBatteryHistEntry(
entry, drainType, percentOfTotal, entry,
drainType,
percentOfTotal,
/* bootTimestamp= */ 101L, /* bootTimestamp= */ 101L,
/* timestamp= */ 10001L, /* timestamp= */ 10001L,
/* totalPower= */ 5.1, /* totalPower= */ 5.1,
@@ -321,8 +340,7 @@ public final class BatteryHistEntryTest {
assertThat(entry.mUid).isEqualTo(1001); assertThat(entry.mUid).isEqualTo(1001);
assertThat(entry.mUserId).isEqualTo(UserHandle.getUserId(1001)); assertThat(entry.mUserId).isEqualTo(UserHandle.getUserId(1001));
assertThat(entry.mAppLabel).isEqualTo("Settings"); assertThat(entry.mAppLabel).isEqualTo("Settings");
assertThat(entry.mPackageName) assertThat(entry.mPackageName).isEqualTo("com.google.android.settings.battery");
.isEqualTo("com.google.android.settings.battery");
assertThat(entry.mIsHidden).isTrue(); assertThat(entry.mIsHidden).isTrue();
assertThat(entry.mBootTimestamp).isEqualTo(bootTimestamp); assertThat(entry.mBootTimestamp).isEqualTo(bootTimestamp);
assertThat(entry.mTimestamp).isEqualTo(timestamp); assertThat(entry.mTimestamp).isEqualTo(timestamp);
@@ -338,13 +356,10 @@ public final class BatteryHistEntryTest {
assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs); assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs); assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
assertThat(entry.mDrainType).isEqualTo(drainType); assertThat(entry.mDrainType).isEqualTo(drainType);
assertThat(entry.mConsumerType) assertThat(entry.mConsumerType).isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
assertThat(entry.mBatteryLevel).isEqualTo(batteryLevel); assertThat(entry.mBatteryLevel).isEqualTo(batteryLevel);
assertThat(entry.mBatteryStatus) assertThat(entry.mBatteryStatus).isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL); assertThat(entry.mBatteryHealth).isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
assertThat(entry.mBatteryHealth)
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
} }
private BatteryHistEntry createBatteryHistEntry( private BatteryHistEntry createBatteryHistEntry(
@@ -359,24 +374,24 @@ public final class BatteryHistEntryTest {
long foregroundUsageTimeInMs, long foregroundUsageTimeInMs,
long backgroundUsageTimeInMs, long backgroundUsageTimeInMs,
int batteryLevel) { int batteryLevel) {
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
BatteryHistEntry.KEY_UID, BatteryHistEntry.KEY_UID,
BatteryHistEntry.KEY_USER_ID, BatteryHistEntry.KEY_USER_ID,
BatteryHistEntry.KEY_PACKAGE_NAME, BatteryHistEntry.KEY_PACKAGE_NAME,
BatteryHistEntry.KEY_TIMESTAMP, BatteryHistEntry.KEY_TIMESTAMP,
BatteryHistEntry.KEY_CONSUMER_TYPE, BatteryHistEntry.KEY_CONSUMER_TYPE,
BatteryHistEntry.KEY_BATTERY_INFORMATION}); BatteryHistEntry.KEY_BATTERY_INFORMATION
});
DeviceBatteryState deviceBatteryState = DeviceBatteryState deviceBatteryState =
DeviceBatteryState DeviceBatteryState.newBuilder()
.newBuilder()
.setBatteryLevel(batteryLevel) .setBatteryLevel(batteryLevel)
.setBatteryStatus(BatteryManager.BATTERY_STATUS_FULL) .setBatteryStatus(BatteryManager.BATTERY_STATUS_FULL)
.setBatteryHealth(BatteryManager.BATTERY_HEALTH_COLD) .setBatteryHealth(BatteryManager.BATTERY_HEALTH_COLD)
.build(); .build();
BatteryInformation batteryInformation = BatteryInformation batteryInformation =
BatteryInformation BatteryInformation.newBuilder()
.newBuilder()
.setDeviceBatteryState(deviceBatteryState) .setDeviceBatteryState(deviceBatteryState)
.setIsHidden(true) .setIsHidden(true)
.setBootTimestamp(bootTimestamp) .setBootTimestamp(bootTimestamp)
@@ -400,7 +415,8 @@ public final class BatteryHistEntryTest {
"com.google.android.settings.battery", "com.google.android.settings.battery",
Long.valueOf(timestamp), Long.valueOf(timestamp),
Integer.valueOf(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY), Integer.valueOf(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY),
ConvertUtils.convertBatteryInformationToString(batteryInformation)}); ConvertUtils.convertBatteryInformationToString(batteryInformation)
});
cursor.moveToFirst(); cursor.moveToFirst();
return new BatteryHistEntry(cursor); return new BatteryHistEntry(cursor);
} }

View File

@@ -38,14 +38,10 @@ import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BatteryHistoryPreferenceTest { public class BatteryHistoryPreferenceTest {
@Mock @Mock private PreferenceViewHolder mViewHolder;
private PreferenceViewHolder mViewHolder; @Mock private TextView mTextView;
@Mock @Mock private BatteryChartView mDailyChartView;
private TextView mTextView; @Mock private BatteryChartView mHourlyChartView;
@Mock
private BatteryChartView mDailyChartView;
@Mock
private BatteryChartView mHourlyChartView;
private BatteryHistoryPreference mBatteryHistoryPreference; private BatteryHistoryPreference mBatteryHistoryPreference;
@Before @Before

View File

@@ -42,12 +42,14 @@ public class BatteryLevelDataTest {
@Test @Test
public void getDailyTimestamps_allDataInOneHour_returnExpectedList() { public void getDailyTimestamps_allDataInOneHour_returnExpectedList() {
// Timezone GMT+8 // Timezone GMT+8
final List<Long> timestamps = List.of( final List<Long> timestamps =
List.of(
1640970006000L, // 2022-01-01 01:00:06 1640970006000L, // 2022-01-01 01:00:06
1640973608000L // 2022-01-01 01:00:08 1640973608000L // 2022-01-01 01:00:08
); );
final List<Long> expectedTimestamps = List.of( final List<Long> expectedTimestamps =
List.of(
1640970006000L, // 2022-01-01 01:00:06 1640970006000L, // 2022-01-01 01:00:06
1640973608000L // 2022-01-01 01:00:08 1640973608000L // 2022-01-01 01:00:08
); );
@@ -57,13 +59,15 @@ public class BatteryLevelDataTest {
@Test @Test
public void getDailyTimestamps_OneHourDataPerDay_returnExpectedList() { public void getDailyTimestamps_OneHourDataPerDay_returnExpectedList() {
// Timezone GMT+8 // Timezone GMT+8
final List<Long> timestamps = List.of( final List<Long> timestamps =
List.of(
1641049200000L, // 2022-01-01 23:00:00 1641049200000L, // 2022-01-01 23:00:00
1641052800000L, // 2022-01-02 00:00:00 1641052800000L, // 2022-01-02 00:00:00
1641056400000L // 2022-01-02 01:00:00 1641056400000L // 2022-01-02 01:00:00
); );
final List<Long> expectedTimestamps = List.of( final List<Long> expectedTimestamps =
List.of(
1641049200000L, // 2022-01-01 23:00:00 1641049200000L, // 2022-01-01 23:00:00
1641052800000L, // 2022-01-02 00:00:00 1641052800000L, // 2022-01-02 00:00:00
1641056400000L // 2022-01-02 01:00:00 1641056400000L // 2022-01-02 01:00:00
@@ -74,7 +78,8 @@ public class BatteryLevelDataTest {
@Test @Test
public void getDailyTimestamps_OneDayData_returnExpectedList() { public void getDailyTimestamps_OneDayData_returnExpectedList() {
// Timezone GMT+8 // Timezone GMT+8
final List<Long> timestamps = List.of( final List<Long> timestamps =
List.of(
1640966400000L, // 2022-01-01 00:00:00 1640966400000L, // 2022-01-01 00:00:00
1640970000000L, // 2022-01-01 01:00:00 1640970000000L, // 2022-01-01 01:00:00
1640973600000L, // 2022-01-01 02:00:00 1640973600000L, // 2022-01-01 02:00:00
@@ -82,7 +87,8 @@ public class BatteryLevelDataTest {
1640980800000L // 2022-01-01 04:00:00 1640980800000L // 2022-01-01 04:00:00
); );
final List<Long> expectedTimestamps = List.of( final List<Long> expectedTimestamps =
List.of(
1640966400000L, // 2022-01-01 00:00:00 1640966400000L, // 2022-01-01 00:00:00
1640980800000L // 2022-01-01 04:00:00 1640980800000L // 2022-01-01 04:00:00
); );
@@ -92,14 +98,16 @@ public class BatteryLevelDataTest {
@Test @Test
public void getDailyTimestamps_MultipleDaysData_returnExpectedList() { public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
// Timezone GMT+8 // Timezone GMT+8
final List<Long> timestamps = List.of( final List<Long> timestamps =
List.of(
1641045600000L, // 2022-01-01 22:00:00 1641045600000L, // 2022-01-01 22:00:00
1641060000000L, // 2022-01-02 02:00:00 1641060000000L, // 2022-01-02 02:00:00
1641160800000L, // 2022-01-03 06:00:00 1641160800000L, // 2022-01-03 06:00:00
1641232800000L // 2022-01-04 02:00:00 1641232800000L // 2022-01-04 02:00:00
); );
final List<Long> expectedTimestamps = List.of( final List<Long> expectedTimestamps =
List.of(
1641045600000L, // 2022-01-01 22:00:00 1641045600000L, // 2022-01-01 22:00:00
1641052800000L, // 2022-01-02 00:00:00 1641052800000L, // 2022-01-02 00:00:00
1641139200000L, // 2022-01-03 00:00:00 1641139200000L, // 2022-01-03 00:00:00
@@ -112,14 +120,16 @@ public class BatteryLevelDataTest {
@Test @Test
public void getDailyTimestamps_FirstDayOneHourData_returnExpectedList() { public void getDailyTimestamps_FirstDayOneHourData_returnExpectedList() {
// Timezone GMT+8 // Timezone GMT+8
final List<Long> timestamps = List.of( final List<Long> timestamps =
List.of(
1641049200000L, // 2022-01-01 23:00:00 1641049200000L, // 2022-01-01 23:00:00
1641060000000L, // 2022-01-02 02:00:00 1641060000000L, // 2022-01-02 02:00:00
1641160800000L, // 2022-01-03 06:00:00 1641160800000L, // 2022-01-03 06:00:00
1641254400000L // 2022-01-04 08:00:00 1641254400000L // 2022-01-04 08:00:00
); );
final List<Long> expectedTimestamps = List.of( final List<Long> expectedTimestamps =
List.of(
1641049200000L, // 2022-01-01 23:00:00 1641049200000L, // 2022-01-01 23:00:00
1641052800000L, // 2022-01-02 00:00:00 1641052800000L, // 2022-01-02 00:00:00
1641139200000L, // 2022-01-03 00:00:00 1641139200000L, // 2022-01-03 00:00:00
@@ -132,14 +142,16 @@ public class BatteryLevelDataTest {
@Test @Test
public void getDailyTimestamps_LastDayNoData_returnExpectedList() { public void getDailyTimestamps_LastDayNoData_returnExpectedList() {
// Timezone GMT+8 // Timezone GMT+8
final List<Long> timestamps = List.of( final List<Long> timestamps =
List.of(
1640988000000L, // 2022-01-01 06:00:00 1640988000000L, // 2022-01-01 06:00:00
1641060000000L, // 2022-01-02 02:00:00 1641060000000L, // 2022-01-02 02:00:00
1641160800000L, // 2022-01-03 06:00:00 1641160800000L, // 2022-01-03 06:00:00
1641225600000L // 2022-01-04 00:00:00 1641225600000L // 2022-01-04 00:00:00
); );
final List<Long> expectedTimestamps = List.of( final List<Long> expectedTimestamps =
List.of(
1640988000000L, // 2022-01-01 06:00:00 1640988000000L, // 2022-01-01 06:00:00
1641052800000L, // 2022-01-02 00:00:00 1641052800000L, // 2022-01-02 00:00:00
1641139200000L, // 2022-01-03 00:00:00 1641139200000L, // 2022-01-03 00:00:00
@@ -151,14 +163,16 @@ public class BatteryLevelDataTest {
@Test @Test
public void getDailyTimestamps_LastDayOneHourData_returnExpectedList() { public void getDailyTimestamps_LastDayOneHourData_returnExpectedList() {
// Timezone GMT+8 // Timezone GMT+8
final List<Long> timestamps = List.of( final List<Long> timestamps =
List.of(
1640988000000L, // 2022-01-01 06:00:00 1640988000000L, // 2022-01-01 06:00:00
1641060000000L, // 2022-01-02 02:00:00 1641060000000L, // 2022-01-02 02:00:00
1641160800000L, // 2022-01-03 06:00:00 1641160800000L, // 2022-01-03 06:00:00
1641229200000L // 2022-01-04 01:00:00 1641229200000L // 2022-01-04 01:00:00
); );
final List<Long> expectedTimestamps = List.of( final List<Long> expectedTimestamps =
List.of(
1640988000000L, // 2022-01-01 06:00:00 1640988000000L, // 2022-01-01 06:00:00
1641052800000L, // 2022-01-02 00:00:00 1641052800000L, // 2022-01-02 00:00:00
1641139200000L, // 2022-01-03 00:00:00 1641139200000L, // 2022-01-03 00:00:00
@@ -172,21 +186,26 @@ public class BatteryLevelDataTest {
public void combine_normalFlow_returnExpectedResult() { public void combine_normalFlow_returnExpectedResult() {
final BatteryLevelData batteryLevelData = final BatteryLevelData batteryLevelData =
new BatteryLevelData(Map.of(1691596800000L, 90, 1691604000000L, 80)); new BatteryLevelData(Map.of(1691596800000L, 90, 1691604000000L, 80));
final List<BatteryEvent> batteryLevelRecordEvents = List.of( final List<BatteryEvent> batteryLevelRecordEvents =
BatteryEvent.newBuilder().setTimestamp(1691586000166L).setBatteryLevel(100) List.of(
.setType(BatteryEventType.FULL_CHARGED).build(), BatteryEvent.newBuilder()
BatteryEvent.newBuilder().setTimestamp(1691589600000L).setBatteryLevel(98) .setTimestamp(1691586000166L)
.setType(BatteryEventType.EVEN_HOUR).build()); .setBatteryLevel(100)
.setType(BatteryEventType.FULL_CHARGED)
.build(),
BatteryEvent.newBuilder()
.setTimestamp(1691589600000L)
.setBatteryLevel(98)
.setType(BatteryEventType.EVEN_HOUR)
.build());
BatteryLevelData result = BatteryLevelData result =
BatteryLevelData.combine(batteryLevelData, batteryLevelRecordEvents); BatteryLevelData.combine(batteryLevelData, batteryLevelRecordEvents);
assertThat(result.getDailyBatteryLevels().getTimestamps()) assertThat(result.getDailyBatteryLevels().getTimestamps())
.isEqualTo(List.of(1691586000166L, 1691596800000L, 1691604000000L)); .isEqualTo(List.of(1691586000166L, 1691596800000L, 1691604000000L));
assertThat(result.getDailyBatteryLevels().getLevels()) assertThat(result.getDailyBatteryLevels().getLevels()).isEqualTo(List.of(100, 90, 80));
.isEqualTo(List.of(100, 90, 80)); assertThat(result.getHourlyBatteryLevelsPerDay()).hasSize(2);
assertThat(result.getHourlyBatteryLevelsPerDay())
.hasSize(2);
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps()) assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps())
.isEqualTo(List.of(1691586000166L, 1691589600000L, 1691596800000L)); .isEqualTo(List.of(1691586000166L, 1691589600000L, 1691596800000L));
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels()) assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels())
@@ -199,17 +218,22 @@ public class BatteryLevelDataTest {
@Test @Test
public void combine_existingBatteryLevelDataIsNull_returnExpectedResult() { public void combine_existingBatteryLevelDataIsNull_returnExpectedResult() {
final List<BatteryEvent> batteryLevelRecordEvents = List.of( final List<BatteryEvent> batteryLevelRecordEvents =
BatteryEvent.newBuilder().setTimestamp(1691586000166L).setBatteryLevel(100) List.of(
.setType(BatteryEventType.FULL_CHARGED).build(), BatteryEvent.newBuilder()
BatteryEvent.newBuilder().setTimestamp(1691589600000L).setBatteryLevel(98) .setTimestamp(1691586000166L)
.setType(BatteryEventType.EVEN_HOUR).build()); .setBatteryLevel(100)
.setType(BatteryEventType.FULL_CHARGED)
.build(),
BatteryEvent.newBuilder()
.setTimestamp(1691589600000L)
.setBatteryLevel(98)
.setType(BatteryEventType.EVEN_HOUR)
.build());
BatteryLevelData result = BatteryLevelData result = BatteryLevelData.combine(null, batteryLevelRecordEvents);
BatteryLevelData.combine(null, batteryLevelRecordEvents);
assertThat(result.getHourlyBatteryLevelsPerDay()) assertThat(result.getHourlyBatteryLevelsPerDay()).hasSize(1);
.hasSize(1);
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps()) assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps())
.isEqualTo(List.of(1691586000166L, 1691589600000L)); .isEqualTo(List.of(1691586000166L, 1691589600000L));
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels()) assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels())
@@ -219,23 +243,29 @@ public class BatteryLevelDataTest {
@Test @Test
public void getIndexByTimestamps_returnExpectedResult() { public void getIndexByTimestamps_returnExpectedResult() {
final BatteryLevelData batteryLevelData = final BatteryLevelData batteryLevelData =
new BatteryLevelData(Map.of( new BatteryLevelData(
Map.of(
1694354400000L, 1, // 2023-09-10 22:00:00 1694354400000L, 1, // 2023-09-10 22:00:00
1694361600000L, 2, // 2023-09-11 00:00:00 1694361600000L, 2, // 2023-09-11 00:00:00
1694368800000L, 3)); // 2023-09-11 02:00:00 1694368800000L, 3)); // 2023-09-11 02:00:00
final PowerAnomalyEvent event = BatteryTestUtils.createAppAnomalyEvent(); final PowerAnomalyEvent event = BatteryTestUtils.createAppAnomalyEvent();
assertThat(batteryLevelData.getIndexByTimestamps(0L, 0L)) assertThat(batteryLevelData.getIndexByTimestamps(0L, 0L))
.isEqualTo(Pair.create(BatteryChartViewModel.SELECTED_INDEX_INVALID, .isEqualTo(
Pair.create(
BatteryChartViewModel.SELECTED_INDEX_INVALID,
BatteryChartViewModel.SELECTED_INDEX_INVALID)); BatteryChartViewModel.SELECTED_INDEX_INVALID));
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L + 1L)) assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L + 1L))
.isEqualTo(Pair.create(BatteryChartViewModel.SELECTED_INDEX_INVALID, .isEqualTo(
Pair.create(
BatteryChartViewModel.SELECTED_INDEX_INVALID,
BatteryChartViewModel.SELECTED_INDEX_INVALID)); BatteryChartViewModel.SELECTED_INDEX_INVALID));
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L, 1694368800000L)) assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L, 1694368800000L))
.isEqualTo(Pair.create(1, 0)); .isEqualTo(Pair.create(1, 0));
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L - 1L)) assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L - 1L))
.isEqualTo(Pair.create(1, 0)); .isEqualTo(Pair.create(1, 0));
assertThat(batteryLevelData.getIndexByTimestamps( assertThat(
batteryLevelData.getIndexByTimestamps(
event.getWarningItemInfo().getStartTimestamp(), event.getWarningItemInfo().getStartTimestamp(),
event.getWarningItemInfo().getEndTimestamp())) event.getWarningItemInfo().getEndTimestamp()))
.isEqualTo(Pair.create(1, 0)); .isEqualTo(Pair.create(1, 0));

View File

@@ -61,12 +61,9 @@ public final class BatteryTipsCardPreferenceTest {
private BatteryTipsController mBatteryTipsController; private BatteryTipsController mBatteryTipsController;
private BatteryChartPreferenceController mBatteryChartPreferenceController; private BatteryChartPreferenceController mBatteryChartPreferenceController;
@Mock @Mock private View mFakeView;
private View mFakeView; @Mock private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
@Mock @Mock private BatteryDiffEntry mFakeEntry;
private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
@Mock
private BatteryDiffEntry mFakeEntry;
@Before @Before
public void setUp() { public void setUp() {
@@ -85,7 +82,10 @@ public final class BatteryTipsCardPreferenceTest {
mPowerUsageAdvanced.mBatteryTipsController = mBatteryTipsController; mPowerUsageAdvanced.mBatteryTipsController = mBatteryTipsController;
mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController; mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController;
mPowerUsageAdvanced.mBatteryUsageBreakdownController = mBatteryUsageBreakdownController; mPowerUsageAdvanced.mBatteryUsageBreakdownController = mBatteryUsageBreakdownController;
mPowerUsageAdvanced.mBatteryLevelData = Optional.of(new BatteryLevelData(Map.of( mPowerUsageAdvanced.mBatteryLevelData =
Optional.of(
new BatteryLevelData(
Map.of(
1694354400000L, 1, // 2023-09-10 22:00:00 1694354400000L, 1, // 2023-09-10 22:00:00
1694361600000L, 2, // 2023-09-11 00:00:00 1694361600000L, 2, // 2023-09-11 00:00:00
1694368800000L, 3))); // 2023-09-11 02:00:00 1694368800000L, 3))); // 2023-09-11 02:00:00
@@ -94,8 +94,8 @@ public final class BatteryTipsCardPreferenceTest {
@Test @Test
public void constructor_returnExpectedResult() { public void constructor_returnExpectedResult() {
assertThat(mBatteryTipsCardPreference.getLayoutResource()).isEqualTo( assertThat(mBatteryTipsCardPreference.getLayoutResource())
R.layout.battery_tips_card); .isEqualTo(R.layout.battery_tips_card);
} }
@Test @Test
@@ -118,10 +118,13 @@ public final class BatteryTipsCardPreferenceTest {
.isEqualTo(DisplaySettings.class.getName()); .isEqualTo(DisplaySettings.class.getName());
assertThat(intent.getIntExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, -1)) assertThat(intent.getIntExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, -1))
.isEqualTo(SettingsEnums.DISPLAY); .isEqualTo(SettingsEnums.DISPLAY);
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly"); .action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "BrightnessAnomaly"); .action(
mContext,
SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT,
"BrightnessAnomaly");
} }
@Test @Test
@@ -140,10 +143,16 @@ public final class BatteryTipsCardPreferenceTest {
assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext)).hasSize(1); assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext)).hasSize(1);
assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext)) assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext))
.contains(PowerAnomalyKey.KEY_SCREEN_TIMEOUT.name()); .contains(PowerAnomalyKey.KEY_SCREEN_TIMEOUT.name());
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly"); .action(
verify(mFeatureFactory.metricsFeatureProvider).action( mContext,
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "ScreenTimeoutAnomaly"); SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
"ScreenTimeoutAnomaly");
verify(mFeatureFactory.metricsFeatureProvider)
.action(
mContext,
SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS,
"ScreenTimeoutAnomaly");
} }
@Test @Test
@@ -159,13 +168,12 @@ public final class BatteryTipsCardPreferenceTest {
assertThat(mBatteryTipsCardPreference.isVisible()).isFalse(); assertThat(mBatteryTipsCardPreference.isVisible()).isFalse();
verify(mContext, never()).startActivity(any(Intent.class)); verify(mContext, never()).startActivity(any(Intent.class));
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate( verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
eq(1), eq(0));
verify(mBatteryChartPreferenceController).selectHighlightSlotIndex(); verify(mBatteryChartPreferenceController).selectHighlightSlotIndex();
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly"); .action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "AppAnomaly"); .action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "AppAnomaly");
} }
@Test @Test
@@ -180,12 +188,11 @@ public final class BatteryTipsCardPreferenceTest {
assertThat(mBatteryTipsCardPreference.isVisible()).isFalse(); assertThat(mBatteryTipsCardPreference.isVisible()).isFalse();
verify(mContext, never()).startActivity(any(Intent.class)); verify(mContext, never()).startActivity(any(Intent.class));
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate( verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
eq(1), eq(0));
verify(mBatteryChartPreferenceController, never()).selectHighlightSlotIndex(); verify(mBatteryChartPreferenceController, never()).selectHighlightSlotIndex();
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly"); .action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "AppAnomaly"); .action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "AppAnomaly");
} }
} }

View File

@@ -48,8 +48,7 @@ public final class BatteryTipsControllerTest {
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
private BatteryTipsController mBatteryTipsController; private BatteryTipsController mBatteryTipsController;
@Mock @Mock private BatteryTipsCardPreference mBatteryTipsCardPreference;
private BatteryTipsCardPreference mBatteryTipsCardPreference;
@Before @Before
public void setUp() { public void setUp() {
@@ -82,17 +81,17 @@ public final class BatteryTipsControllerTest {
new AnomalyEventWrapper(mContext, event), false); new AnomalyEventWrapper(mContext, event), false);
// Check pre-defined string // Check pre-defined string
verify(mBatteryTipsCardPreference).setTitle( verify(mBatteryTipsCardPreference)
"Turn on adaptive brightness to extend battery life"); .setTitle("Turn on adaptive brightness to extend battery life");
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb); verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId( verify(mBatteryTipsCardPreference)
R.color.color_accent_selector); .setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings"); verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it"); verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
// Check proto info // Check proto info
verify(mBatteryTipsCardPreference).setVisible(true); verify(mBatteryTipsCardPreference).setVisible(true);
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly"); .action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
} }
@Test @Test
@@ -105,20 +104,24 @@ public final class BatteryTipsControllerTest {
verify(mBatteryTipsCardPreference).setTitle("Reduce screen timeout to extend battery life"); verify(mBatteryTipsCardPreference).setTitle("Reduce screen timeout to extend battery life");
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb); verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId( verify(mBatteryTipsCardPreference)
R.color.color_accent_selector); .setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings"); verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it"); verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
verify(mBatteryTipsCardPreference).setVisible(true); verify(mBatteryTipsCardPreference).setVisible(true);
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly"); .action(
mContext,
SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
"ScreenTimeoutAnomaly");
} }
@Test @Test
public void handleBatteryTipsCardUpdated_screenTimeoutAnomalyHasTitle_showAnomaly() { public void handleBatteryTipsCardUpdated_screenTimeoutAnomalyHasTitle_showAnomaly() {
PowerAnomalyEvent event = BatteryTestUtils.createScreenTimeoutAnomalyEvent(); PowerAnomalyEvent event = BatteryTestUtils.createScreenTimeoutAnomalyEvent();
String testTitle = "TestTitle"; String testTitle = "TestTitle";
event = event.toBuilder() event =
event.toBuilder()
.setWarningBannerInfo( .setWarningBannerInfo(
event.getWarningBannerInfo().toBuilder() event.getWarningBannerInfo().toBuilder()
.setTitleString(testTitle) .setTitleString(testTitle)
@@ -131,13 +134,16 @@ public final class BatteryTipsControllerTest {
verify(mBatteryTipsCardPreference).setTitle(testTitle); verify(mBatteryTipsCardPreference).setTitle(testTitle);
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb); verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId( verify(mBatteryTipsCardPreference)
R.color.color_accent_selector); .setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings"); verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it"); verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
verify(mBatteryTipsCardPreference).setVisible(true); verify(mBatteryTipsCardPreference).setVisible(true);
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly"); .action(
mContext,
SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
"ScreenTimeoutAnomaly");
} }
@Test @Test
@@ -146,20 +152,18 @@ public final class BatteryTipsControllerTest {
when(mFeatureFactory.powerUsageFeatureProvider.isBatteryTipsEnabled()).thenReturn(true); when(mFeatureFactory.powerUsageFeatureProvider.isBatteryTipsEnabled()).thenReturn(true);
AnomalyEventWrapper eventWrapper = new AnomalyEventWrapper(mContext, event); AnomalyEventWrapper eventWrapper = new AnomalyEventWrapper(mContext, event);
eventWrapper.setRelatedBatteryDiffEntry( eventWrapper.setRelatedBatteryDiffEntry(new BatteryDiffEntry(mContext, "", "Chrome", 0));
new BatteryDiffEntry(mContext, "", "Chrome", 0));
mBatteryTipsController.handleBatteryTipsCardUpdated(eventWrapper, false); mBatteryTipsController.handleBatteryTipsCardUpdated(eventWrapper, false);
verify(mBatteryTipsCardPreference).setTitle( verify(mBatteryTipsCardPreference).setTitle("Chrome used more battery than usual");
"Chrome used more battery than usual"); verify(mBatteryTipsCardPreference)
verify(mBatteryTipsCardPreference).setIconResourceId( .setIconResourceId(R.drawable.ic_battery_tips_warning_icon);
R.drawable.ic_battery_tips_warning_icon); verify(mBatteryTipsCardPreference)
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId( .setMainButtonStrokeColorResourceId(R.color.color_battery_anomaly_yellow_selector);
R.color.color_battery_anomaly_yellow_selector);
verify(mBatteryTipsCardPreference).setMainButtonLabel("Check"); verify(mBatteryTipsCardPreference).setMainButtonLabel("Check");
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it"); verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
verify(mBatteryTipsCardPreference).setVisible(true); verify(mBatteryTipsCardPreference).setVisible(true);
verify(mFeatureFactory.metricsFeatureProvider).action( verify(mFeatureFactory.metricsFeatureProvider)
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly"); .action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
} }
} }

View File

@@ -58,18 +58,12 @@ public final class BatteryUsageBreakdownControllerTest {
private static final String PREF_KEY2 = "pref_key2"; private static final String PREF_KEY2 = "pref_key2";
private static final String PREF_SUMMARY = "fake preference summary"; private static final String PREF_SUMMARY = "fake preference summary";
@Mock @Mock private InstrumentedPreferenceFragment mFragment;
private InstrumentedPreferenceFragment mFragment; @Mock private SettingsActivity mSettingsActivity;
@Mock @Mock private PreferenceGroup mAppListPreferenceGroup;
private SettingsActivity mSettingsActivity; @Mock private Drawable mDrawable;
@Mock @Mock private BatteryHistEntry mBatteryHistEntry;
private PreferenceGroup mAppListPreferenceGroup; @Mock private AnomalyAppItemPreference mAnomalyAppItemPreference;
@Mock
private Drawable mDrawable;
@Mock
private BatteryHistEntry mBatteryHistEntry;
@Mock
private AnomalyAppItemPreference mAnomalyAppItemPreference;
private Context mContext; private Context mContext;
private FakeFeatureFactory mFeatureFactory; private FakeFeatureFactory mFeatureFactory;
@@ -94,7 +88,8 @@ public final class BatteryUsageBreakdownControllerTest {
.getHideApplicationSet(); .getHideApplicationSet();
mBatteryUsageBreakdownController = createController(); mBatteryUsageBreakdownController = createController();
mBatteryUsageBreakdownController.mAppListPreferenceGroup = mAppListPreferenceGroup; mBatteryUsageBreakdownController.mAppListPreferenceGroup = mAppListPreferenceGroup;
mBatteryDiffEntry = new BatteryDiffEntry( mBatteryDiffEntry =
new BatteryDiffEntry(
mContext, mContext,
/* uid= */ 0L, /* uid= */ 0L,
/* userId= */ 0L, /* userId= */ 0L,
@@ -114,10 +109,18 @@ public final class BatteryUsageBreakdownControllerTest {
/* cachedUsageConsumePower= */ 0); /* cachedUsageConsumePower= */ 0);
mBatteryDiffEntry = spy(mBatteryDiffEntry); mBatteryDiffEntry = spy(mBatteryDiffEntry);
mBatteryUsageBreakdownController.mBatteryDiffData = mBatteryUsageBreakdownController.mBatteryDiffData =
new BatteryDiffData(mContext, /* startTimestamp= */ 0L, /* endTimestamp= */ 0L, new BatteryDiffData(
/* startBatteryLevel= */ 0, /* endBatteryLevel= */ 0, mContext,
/* screenOnTime= */ 0L, Arrays.asList(mBatteryDiffEntry), Arrays.asList(), /* startTimestamp= */ 0L,
Set.of(), Set.of(), /* isAccumulated= */ false); /* endTimestamp= */ 0L,
/* startBatteryLevel= */ 0,
/* endBatteryLevel= */ 0,
/* screenOnTime= */ 0L,
Arrays.asList(mBatteryDiffEntry),
Arrays.asList(),
Set.of(),
Set.of(),
/* isAccumulated= */ false);
BatteryDiffEntry.clearCache(); BatteryDiffEntry.clearCache();
// Adds fake testing data. // Adds fake testing data.
BatteryDiffEntry.sResourceCache.put( BatteryDiffEntry.sResourceCache.put(
@@ -129,8 +132,7 @@ public final class BatteryUsageBreakdownControllerTest {
@Test @Test
public void onDestroy_clearPreferenceCacheAndPreferenceGroupRemoveAll() { public void onDestroy_clearPreferenceCacheAndPreferenceGroupRemoveAll() {
// Ensures the testing environment is correct. // Ensures the testing environment is correct.
mBatteryUsageBreakdownController.mPreferenceCache.put( mBatteryUsageBreakdownController.mPreferenceCache.put(PREF_KEY, mAnomalyAppItemPreference);
PREF_KEY, mAnomalyAppItemPreference);
assertThat(mBatteryUsageBreakdownController.mPreferenceCache).hasSize(1); assertThat(mBatteryUsageBreakdownController.mPreferenceCache).hasSize(1);
mBatteryUsageBreakdownController.onDestroy(); mBatteryUsageBreakdownController.onDestroy();
@@ -158,8 +160,8 @@ public final class BatteryUsageBreakdownControllerTest {
// Verifies the preference cache. // Verifies the preference cache.
final PowerGaugePreference pref = final PowerGaugePreference pref =
(PowerGaugePreference) mBatteryUsageBreakdownController.mPreferenceCache (PowerGaugePreference)
.get(PREF_KEY); mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY);
assertThat(pref).isNotNull(); assertThat(pref).isNotNull();
// Verifies the added preference configuration. // Verifies the added preference configuration.
verify(mAppListPreferenceGroup).addPreference(pref); verify(mAppListPreferenceGroup).addPreference(pref);
@@ -218,8 +220,10 @@ public final class BatteryUsageBreakdownControllerTest {
@Test @Test
public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() { public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
assertThat(mBatteryUsageBreakdownController assertThat(
.handlePreferenceTreeClick(mAppListPreferenceGroup)).isFalse(); mBatteryUsageBreakdownController.handlePreferenceTreeClick(
mAppListPreferenceGroup))
.isFalse();
verify(mMetricsFeatureProvider, never()) verify(mMetricsFeatureProvider, never())
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM); .action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM);
@@ -232,8 +236,10 @@ public final class BatteryUsageBreakdownControllerTest {
mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY; mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry(); doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
assertThat(mBatteryUsageBreakdownController.handlePreferenceTreeClick( assertThat(
mAnomalyAppItemPreference)).isTrue(); mBatteryUsageBreakdownController.handlePreferenceTreeClick(
mAnomalyAppItemPreference))
.isTrue();
verify(mMetricsFeatureProvider) verify(mMetricsFeatureProvider)
.action( .action(
SettingsEnums.OPEN_BATTERY_USAGE, SettingsEnums.OPEN_BATTERY_USAGE,
@@ -248,8 +254,10 @@ public final class BatteryUsageBreakdownControllerTest {
mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_UID_BATTERY; mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_UID_BATTERY;
doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry(); doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
assertThat(mBatteryUsageBreakdownController.handlePreferenceTreeClick( assertThat(
mAnomalyAppItemPreference)).isTrue(); mBatteryUsageBreakdownController.handlePreferenceTreeClick(
mAnomalyAppItemPreference))
.isTrue();
verify(mMetricsFeatureProvider) verify(mMetricsFeatureProvider)
.action( .action(
SettingsEnums.OPEN_BATTERY_USAGE, SettingsEnums.OPEN_BATTERY_USAGE,
@@ -262,7 +270,8 @@ public final class BatteryUsageBreakdownControllerTest {
@Test @Test
public void setPreferencePercent_lessThanThreshold_expectedFormat() { public void setPreferencePercent_lessThanThreshold_expectedFormat() {
final PowerGaugePreference pref = new PowerGaugePreference(mContext); final PowerGaugePreference pref = new PowerGaugePreference(mContext);
final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry( final BatteryDiffEntry batteryDiffEntry =
createBatteryDiffEntry(
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
@@ -279,7 +288,8 @@ public final class BatteryUsageBreakdownControllerTest {
@Test @Test
public void setPreferencePercent_greaterThanThreshold_expectedFormat() { public void setPreferencePercent_greaterThanThreshold_expectedFormat() {
final PowerGaugePreference pref = new PowerGaugePreference(mContext); final PowerGaugePreference pref = new PowerGaugePreference(mContext);
final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry( final BatteryDiffEntry batteryDiffEntry =
createBatteryDiffEntry(
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
@@ -299,7 +309,8 @@ public final class BatteryUsageBreakdownControllerTest {
pref.setSummary(PREF_SUMMARY); pref.setSummary(PREF_SUMMARY);
mBatteryUsageBreakdownController.setPreferenceSummary( mBatteryUsageBreakdownController.setPreferenceSummary(
pref, createBatteryDiffEntry( pref,
createBatteryDiffEntry(
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
@@ -313,7 +324,8 @@ public final class BatteryUsageBreakdownControllerTest {
pref.setSummary(PREF_SUMMARY); pref.setSummary(PREF_SUMMARY);
mBatteryUsageBreakdownController.setPreferenceSummary( mBatteryUsageBreakdownController.setPreferenceSummary(
pref, createBatteryDiffEntry( pref,
createBatteryDiffEntry(
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1, /* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
@@ -327,7 +339,8 @@ public final class BatteryUsageBreakdownControllerTest {
pref.setSummary(PREF_SUMMARY); pref.setSummary(PREF_SUMMARY);
mBatteryUsageBreakdownController.setPreferenceSummary( mBatteryUsageBreakdownController.setPreferenceSummary(
pref, createBatteryDiffEntry( pref,
createBatteryDiffEntry(
/* isSystem= */ true, /* isSystem= */ true,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS * 2, /* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS * 2,
@@ -341,7 +354,8 @@ public final class BatteryUsageBreakdownControllerTest {
pref.setSummary(PREF_SUMMARY); pref.setSummary(PREF_SUMMARY);
mBatteryUsageBreakdownController.setPreferenceSummary( mBatteryUsageBreakdownController.setPreferenceSummary(
pref, createBatteryDiffEntry( pref,
createBatteryDiffEntry(
/* isSystem= */ false, /* isSystem= */ false,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
@@ -355,7 +369,8 @@ public final class BatteryUsageBreakdownControllerTest {
pref.setSummary(PREF_SUMMARY); pref.setSummary(PREF_SUMMARY);
mBatteryUsageBreakdownController.setPreferenceSummary( mBatteryUsageBreakdownController.setPreferenceSummary(
pref, createBatteryDiffEntry( pref,
createBatteryDiffEntry(
/* isSystem= */ false, /* isSystem= */ false,
/* screenOnTimeInMs= */ 0, /* screenOnTimeInMs= */ 0,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
@@ -369,7 +384,8 @@ public final class BatteryUsageBreakdownControllerTest {
pref.setSummary(PREF_SUMMARY); pref.setSummary(PREF_SUMMARY);
mBatteryUsageBreakdownController.setPreferenceSummary( mBatteryUsageBreakdownController.setPreferenceSummary(
pref, createBatteryDiffEntry( pref,
createBatteryDiffEntry(
/* isSystem= */ false, /* isSystem= */ false,
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS, /* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS,
/* foregroundUsageTimeInMs= */ 0, /* foregroundUsageTimeInMs= */ 0,
@@ -383,20 +399,27 @@ public final class BatteryUsageBreakdownControllerTest {
pref.setSummary(PREF_SUMMARY); pref.setSummary(PREF_SUMMARY);
mBatteryUsageBreakdownController.setPreferenceSummary( mBatteryUsageBreakdownController.setPreferenceSummary(
pref, createBatteryDiffEntry( pref,
createBatteryDiffEntry(
/* isSystem= */ false, /* isSystem= */ false,
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1, /* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1, /* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
/* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1)); /* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1));
assertThat(pref.getSummary().toString()).isEqualTo( assertThat(pref.getSummary().toString())
"Screen time: less than a min\nBackground: less than a min"); .isEqualTo("Screen time: less than a min\nBackground: less than a min");
} }
private BatteryDiffEntry createBatteryDiffEntry(boolean isSystem, long screenOnTimeInMs, private BatteryDiffEntry createBatteryDiffEntry(
long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) { boolean isSystem,
long screenOnTimeInMs,
long foregroundUsageTimeInMs,
long backgroundUsageTimeInMs) {
final ContentValues contentValues = new ContentValues(); final ContentValues contentValues = new ContentValues();
contentValues.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf( contentValues.put(
isSystem ? ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY BatteryHistEntry.KEY_CONSUMER_TYPE,
Integer.valueOf(
isSystem
? ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY
: ConvertUtils.CONSUMER_TYPE_UID_BATTERY)); : ConvertUtils.CONSUMER_TYPE_UID_BATTERY));
contentValues.put(BatteryHistEntry.KEY_USER_ID, Integer.valueOf(1001)); contentValues.put(BatteryHistEntry.KEY_USER_ID, Integer.valueOf(1001));
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(contentValues); final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(contentValues);

View File

@@ -48,8 +48,7 @@ public final class BatteryUsageBroadcastReceiverTest {
private BatteryUsageBroadcastReceiver mBatteryUsageBroadcastReceiver; private BatteryUsageBroadcastReceiver mBatteryUsageBroadcastReceiver;
private FakeFeatureFactory mFakeFeatureFactory; private FakeFeatureFactory mFakeFeatureFactory;
@Mock @Mock private PackageManager mPackageManager;
private PackageManager mPackageManager;
@Before @Before
public void setUp() { public void setUp() {
@@ -72,8 +71,8 @@ public final class BatteryUsageBroadcastReceiverTest {
public void onReceive_workProfile_doNothing() { public void onReceive_workProfile_doNothing() {
BatteryTestUtils.setWorkProfile(mContext); BatteryTestUtils.setWorkProfile(mContext);
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING)); mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
} }
@@ -85,10 +84,11 @@ public final class BatteryUsageBroadcastReceiverTest {
when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting()) when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting())
.thenReturn(true); .thenReturn(true);
doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN)) doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN))
.when(mContext).registerReceiver(any(), any()); .when(mContext)
.registerReceiver(any(), any());
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED)); mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED); assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
@@ -102,13 +102,14 @@ public final class BatteryUsageBroadcastReceiverTest {
.thenReturn(true); .thenReturn(true);
// Make sure isCharged returns true. // Make sure isCharged returns true.
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_FULL)) doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_FULL))
.when(mContext).registerReceiver(any(), any()); .when(mContext)
.registerReceiver(any(), any());
// Make sure broadcast will be sent with delay. // Make sure broadcast will be sent with delay.
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot = BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS; SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS;
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED)); mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED); assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
@@ -122,12 +123,13 @@ public final class BatteryUsageBroadcastReceiverTest {
.thenReturn(true); .thenReturn(true);
// Make sure isCharged returns true. // Make sure isCharged returns true.
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN)) doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
.when(mContext).registerReceiver(any(), any()); .when(mContext)
.registerReceiver(any(), any());
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot = BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS; SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED)); mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED); assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
@@ -141,12 +143,13 @@ public final class BatteryUsageBroadcastReceiverTest {
.thenReturn(true); .thenReturn(true);
// Make sure isCharged returns true. // Make sure isCharged returns true.
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN)) doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
.when(mContext).registerReceiver(any(), any()); .when(mContext)
.registerReceiver(any(), any());
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot = BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS; SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED)); mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED); assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
@@ -159,10 +162,11 @@ public final class BatteryUsageBroadcastReceiverTest {
when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting()) when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting())
.thenReturn(false); .thenReturn(false);
doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN)) doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN))
.when(mContext).registerReceiver(any(), any()); .when(mContext)
.registerReceiver(any(), any());
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING)); mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING); assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
@@ -176,13 +180,14 @@ public final class BatteryUsageBroadcastReceiverTest {
.thenReturn(false); .thenReturn(false);
// Make sure isCharged returns true. // Make sure isCharged returns true.
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_FULL)) doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_FULL))
.when(mContext).registerReceiver(any(), any()); .when(mContext)
.registerReceiver(any(), any());
// Make sure broadcast will be sent with delay. // Make sure broadcast will be sent with delay.
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot = BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS; SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS;
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING)); mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING); assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
@@ -196,12 +201,13 @@ public final class BatteryUsageBroadcastReceiverTest {
.thenReturn(false); .thenReturn(false);
// Make sure isCharged returns true. // Make sure isCharged returns true.
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN)) doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
.when(mContext).registerReceiver(any(), any()); .when(mContext)
.registerReceiver(any(), any());
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot = BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS; SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING)); mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING); assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
@@ -215,12 +221,13 @@ public final class BatteryUsageBroadcastReceiverTest {
.thenReturn(false); .thenReturn(false);
// Make sure isCharged returns true. // Make sure isCharged returns true.
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN)) doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
.when(mContext).registerReceiver(any(), any()); .when(mContext)
.registerReceiver(any(), any());
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot = BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS; SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING)); mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue(); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING); assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
@@ -234,12 +241,12 @@ public final class BatteryUsageBroadcastReceiverTest {
/*packageName*/ "com.android.testing_package", Boolean.valueOf(true)); /*packageName*/ "com.android.testing_package", Boolean.valueOf(true));
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty(); assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
mContext,
new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA)); new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA));
assertThat(BatteryDiffEntry.sValidForRestriction).isEmpty(); assertThat(BatteryDiffEntry.sValidForRestriction).isEmpty();
assertSharedPreferences( assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
} }
@Test @Test
@@ -250,12 +257,12 @@ public final class BatteryUsageBroadcastReceiverTest {
/*packageName*/ "com.android.testing_package", Boolean.valueOf(true)); /*packageName*/ "com.android.testing_package", Boolean.valueOf(true));
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty(); assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
mBatteryUsageBroadcastReceiver.onReceive(mContext, mBatteryUsageBroadcastReceiver.onReceive(
mContext,
new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA)); new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA));
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty(); assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
assertSharedPreferences( assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
} }
private static Intent getBatteryIntent(int level, int status) { private static Intent getBatteryIntent(int level, int status) {
@@ -267,7 +274,6 @@ public final class BatteryUsageBroadcastReceiverTest {
} }
private void assertSharedPreferences(String preferenceKey) { private void assertSharedPreferences(String preferenceKey) {
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey)) assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey)).isTrue();
.isTrue();
} }
} }

View File

@@ -95,7 +95,10 @@ public final class BatteryUsageContentProviderTest {
IllegalArgumentException.class, IllegalArgumentException.class,
() -> () ->
mProvider.query( mProvider.query(
uri, /*strings=*/ null, /*s=*/ null, /*strings1=*/ null, uri,
/* strings= */ null,
/* s= */ null,
/* strings1= */ null,
/* s1= */ null)); /* s1= */ null));
assertThrows( assertThrows(
IllegalArgumentException.class, IllegalArgumentException.class,
@@ -116,7 +119,10 @@ public final class BatteryUsageContentProviderTest {
IllegalArgumentException.class, IllegalArgumentException.class,
() -> () ->
mProvider.query( mProvider.query(
uri, /*strings=*/ null, /*s=*/ null, /*strings1=*/ null, uri,
/* strings= */ null,
/* s= */ null,
/* strings1= */ null,
/* s1= */ null)); /* s1= */ null));
assertThrows( assertThrows(
IllegalArgumentException.class, IllegalArgumentException.class,
@@ -128,7 +134,8 @@ public final class BatteryUsageContentProviderTest {
mProvider.onCreate(); mProvider.onCreate();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L); values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
values.put(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE, values.put(
BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
BatteryEventType.FULL_CHARGED.getNumber()); BatteryEventType.FULL_CHARGED.getNumber());
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 100); values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 100);
mProvider.insert(DatabaseUtils.BATTERY_EVENT_URI, values); mProvider.insert(DatabaseUtils.BATTERY_EVENT_URI, values);
@@ -263,15 +270,13 @@ public final class BatteryUsageContentProviderTest {
public void insert_batteryState_returnsExpectedResult() { public void insert_batteryState_returnsExpectedResult() {
mProvider.onCreate(); mProvider.onCreate();
final DeviceBatteryState deviceBatteryState = final DeviceBatteryState deviceBatteryState =
DeviceBatteryState DeviceBatteryState.newBuilder()
.newBuilder()
.setBatteryLevel(51) .setBatteryLevel(51)
.setBatteryStatus(2) .setBatteryStatus(2)
.setBatteryHealth(3) .setBatteryHealth(3)
.build(); .build();
final BatteryInformation batteryInformation = final BatteryInformation batteryInformation =
BatteryInformation BatteryInformation.newBuilder()
.newBuilder()
.setDeviceBatteryState(deviceBatteryState) .setDeviceBatteryState(deviceBatteryState)
.setAppLabel("Settings") .setAppLabel("Settings")
.setIsHidden(true) .setIsHidden(true)
@@ -318,17 +323,13 @@ public final class BatteryUsageContentProviderTest {
public void insert_partialFieldsContentValues_returnsExpectedResult() { public void insert_partialFieldsContentValues_returnsExpectedResult() {
mProvider.onCreate(); mProvider.onCreate();
final DeviceBatteryState deviceBatteryState = final DeviceBatteryState deviceBatteryState =
DeviceBatteryState DeviceBatteryState.newBuilder()
.newBuilder()
.setBatteryLevel(52) .setBatteryLevel(52)
.setBatteryStatus(3) .setBatteryStatus(3)
.setBatteryHealth(2) .setBatteryHealth(2)
.build(); .build();
final BatteryInformation batteryInformation = final BatteryInformation batteryInformation =
BatteryInformation BatteryInformation.newBuilder().setDeviceBatteryState(deviceBatteryState).build();
.newBuilder()
.setDeviceBatteryState(deviceBatteryState)
.build();
final String expectedBatteryInformationString = final String expectedBatteryInformationString =
ConvertUtils.convertBatteryInformationToString(batteryInformation); ConvertUtils.convertBatteryInformationToString(batteryInformation);
final ContentValues values = new ContentValues(); final ContentValues values = new ContentValues();
@@ -381,7 +382,8 @@ public final class BatteryUsageContentProviderTest {
mProvider.onCreate(); mProvider.onCreate();
ContentValues values = new ContentValues(); ContentValues values = new ContentValues();
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L); values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
values.put(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE, values.put(
BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
BatteryEventType.POWER_CONNECTED.getNumber()); BatteryEventType.POWER_CONNECTED.getNumber());
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 66); values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 66);
@@ -393,23 +395,25 @@ public final class BatteryUsageContentProviderTest {
BatteryStateDatabase.getInstance(mContext).batteryEventDao().getAll(); BatteryStateDatabase.getInstance(mContext).batteryEventDao().getAll();
assertThat(entities).hasSize(1); assertThat(entities).hasSize(1);
assertThat(entities.get(0).timestamp).isEqualTo(10001L); assertThat(entities.get(0).timestamp).isEqualTo(10001L);
assertThat(entities.get(0).batteryEventType).isEqualTo( assertThat(entities.get(0).batteryEventType)
BatteryEventType.POWER_CONNECTED.getNumber()); .isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
assertThat(entities.get(0).batteryLevel).isEqualTo(66); assertThat(entities.get(0).batteryLevel).isEqualTo(66);
final Cursor cursor1 = getCursorOfBatteryEvents( final Cursor cursor1 =
0L, List.of(BatteryEventType.POWER_CONNECTED.getNumber())); getCursorOfBatteryEvents(0L, List.of(BatteryEventType.POWER_CONNECTED.getNumber()));
assertThat(cursor1.getCount()).isEqualTo(1); assertThat(cursor1.getCount()).isEqualTo(1);
cursor1.moveToFirst(); cursor1.moveToFirst();
assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryEventEntity.KEY_TIMESTAMP))) assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryEventEntity.KEY_TIMESTAMP)))
.isEqualTo(10001L); .isEqualTo(10001L);
assertThat( assertThat(
cursor1.getInt(cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))) cursor1.getInt(
cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)))
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber()); .isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
assertThat(cursor1.getInt(cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_LEVEL))) assertThat(cursor1.getInt(cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_LEVEL)))
.isEqualTo(66); .isEqualTo(66);
final Cursor cursor2 = getCursorOfBatteryEvents( final Cursor cursor2 =
getCursorOfBatteryEvents(
0L, List.of(BatteryEventType.POWER_DISCONNECTED.getNumber())); 0L, List.of(BatteryEventType.POWER_DISCONNECTED.getNumber()));
assertThat(cursor2.getCount()).isEqualTo(0); assertThat(cursor2.getCount()).isEqualTo(0);
} }
@@ -435,8 +439,11 @@ public final class BatteryUsageContentProviderTest {
cursor1.moveToFirst(); cursor1.moveToFirst();
assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryUsageSlotEntity.KEY_TIMESTAMP))) assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryUsageSlotEntity.KEY_TIMESTAMP)))
.isEqualTo(10001L); .isEqualTo(10001L);
assertThat(cursor1.getString(cursor1.getColumnIndex( assertThat(
BatteryUsageSlotEntity.KEY_BATTERY_USAGE_SLOT))).isEqualTo("TEST_STRING"); cursor1.getString(
cursor1.getColumnIndex(
BatteryUsageSlotEntity.KEY_BATTERY_USAGE_SLOT)))
.isEqualTo("TEST_STRING");
final Cursor cursor2 = getCursorOfBatteryUsageSlots(10002L); final Cursor cursor2 = getCursorOfBatteryUsageSlots(10002L);
assertThat(cursor2.getCount()).isEqualTo(0); assertThat(cursor2.getCount()).isEqualTo(0);
@@ -455,13 +462,13 @@ public final class BatteryUsageContentProviderTest {
UnsupportedOperationException.class, UnsupportedOperationException.class,
() -> () ->
mProvider.update( mProvider.update(
/*uri=*/ null, /*contentValues=*/ null, /*s=*/ null, /* uri= */ null,
/* contentValues= */ null,
/* s= */ null,
/* strings= */ null)); /* strings= */ null));
} }
private Cursor insertBatteryState( private Cursor insertBatteryState(Duration currentTime, String queryTimestamp)
Duration currentTime,
String queryTimestamp)
throws Exception { throws Exception {
mProvider.onCreate(); mProvider.onCreate();
final FakeClock fakeClock = new FakeClock(); final FakeClock fakeClock = new FakeClock();
@@ -470,20 +477,17 @@ public final class BatteryUsageContentProviderTest {
final long currentTimestamp = currentTime.toMillis(); final long currentTimestamp = currentTime.toMillis();
// Inserts some valid testing data. // Inserts some valid testing data.
BatteryTestUtils.insertDataToBatteryStateTable( BatteryTestUtils.insertDataToBatteryStateTable(
mContext, currentTimestamp - 6, PACKAGE_NAME1, mContext, currentTimestamp - 6, PACKAGE_NAME1, /* isFullChargeStart= */ true);
/*isFullChargeStart=*/ true);
BatteryTestUtils.insertDataToBatteryStateTable( BatteryTestUtils.insertDataToBatteryStateTable(
mContext, currentTimestamp - 2, PACKAGE_NAME2); mContext, currentTimestamp - 2, PACKAGE_NAME2);
BatteryTestUtils.insertDataToBatteryStateTable( BatteryTestUtils.insertDataToBatteryStateTable(mContext, currentTimestamp, PACKAGE_NAME3);
mContext, currentTimestamp, PACKAGE_NAME3);
final Uri batteryStateQueryContentUri = final Uri batteryStateQueryContentUri =
new Uri.Builder() new Uri.Builder()
.scheme(ContentResolver.SCHEME_CONTENT) .scheme(ContentResolver.SCHEME_CONTENT)
.authority(DatabaseUtils.AUTHORITY) .authority(DatabaseUtils.AUTHORITY)
.appendPath(DatabaseUtils.BATTERY_STATE_TABLE) .appendPath(DatabaseUtils.BATTERY_STATE_TABLE)
.appendQueryParameter( .appendQueryParameter(DatabaseUtils.QUERY_KEY_TIMESTAMP, queryTimestamp)
DatabaseUtils.QUERY_KEY_TIMESTAMP, queryTimestamp)
.build(); .build();
final Cursor cursor = query(batteryStateQueryContentUri); final Cursor cursor = query(batteryStateQueryContentUri);
@@ -532,15 +536,15 @@ public final class BatteryUsageContentProviderTest {
.scheme(ContentResolver.SCHEME_CONTENT) .scheme(ContentResolver.SCHEME_CONTENT)
.authority(DatabaseUtils.AUTHORITY) .authority(DatabaseUtils.AUTHORITY)
.appendPath(DatabaseUtils.APP_USAGE_LATEST_TIMESTAMP_PATH) .appendPath(DatabaseUtils.APP_USAGE_LATEST_TIMESTAMP_PATH)
.appendQueryParameter( .appendQueryParameter(DatabaseUtils.QUERY_KEY_USERID, Long.toString(userId))
DatabaseUtils.QUERY_KEY_USERID, Long.toString(userId))
.build(); .build();
return query(appUsageLatestTimestampQueryContentUri); return query(appUsageLatestTimestampQueryContentUri);
} }
private Cursor getCursorOfAppUsage(final List<Long> userIds, final long queryTimestamp) { private Cursor getCursorOfAppUsage(final List<Long> userIds, final long queryTimestamp) {
final String queryUserIdString = userIds.stream() final String queryUserIdString =
userIds.stream()
.map(userId -> String.valueOf(userId)) .map(userId -> String.valueOf(userId))
.collect(Collectors.joining(",")); .collect(Collectors.joining(","));
final Uri appUsageEventUri = final Uri appUsageEventUri =
@@ -558,7 +562,8 @@ public final class BatteryUsageContentProviderTest {
private Cursor getCursorOfBatteryEvents( private Cursor getCursorOfBatteryEvents(
final long queryTimestamp, final List<Integer> batteryEventTypes) { final long queryTimestamp, final List<Integer> batteryEventTypes) {
final String batteryEventTypesString = batteryEventTypes.stream() final String batteryEventTypesString =
batteryEventTypes.stream()
.map(type -> String.valueOf(type)) .map(type -> String.valueOf(type))
.collect(Collectors.joining(",")); .collect(Collectors.joining(","));
final Uri batteryEventUri = final Uri batteryEventUri =

View File

@@ -52,28 +52,22 @@ import java.util.List;
public final class BatteryUsageDataLoaderTest { public final class BatteryUsageDataLoaderTest {
private Context mContext; private Context mContext;
@Mock @Mock private ContentResolver mMockContentResolver;
private ContentResolver mMockContentResolver; @Mock private BatteryStatsManager mBatteryStatsManager;
@Mock @Mock private PackageManager mPackageManager;
private BatteryStatsManager mBatteryStatsManager; @Mock private UserManager mUserManager;
@Mock @Mock private BatteryUsageStats mBatteryUsageStats;
private PackageManager mPackageManager; @Mock private BatteryEntry mMockBatteryEntry;
@Mock @Captor private ArgumentCaptor<BatteryUsageStatsQuery> mStatsQueryCaptor;
private UserManager mUserManager;
@Mock
private BatteryUsageStats mBatteryUsageStats;
@Mock
private BatteryEntry mMockBatteryEntry;
@Captor
private ArgumentCaptor<BatteryUsageStatsQuery> mStatsQueryCaptor;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
doReturn(mContext).when(mContext).getApplicationContext(); doReturn(mContext).when(mContext).getApplicationContext();
doReturn(mBatteryStatsManager).when(mContext).getSystemService( doReturn(mBatteryStatsManager)
Context.BATTERY_STATS_SERVICE); .when(mContext)
.getSystemService(Context.BATTERY_STATS_SERVICE);
doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
doReturn(mMockContentResolver).when(mContext).getContentResolver(); doReturn(mMockContentResolver).when(mContext).getContentResolver();
@@ -91,8 +85,7 @@ public final class BatteryUsageDataLoaderTest {
BatteryUsageDataLoader.loadBatteryStatsData(mContext, /* isFullChargeStart= */ false); BatteryUsageDataLoader.loadBatteryStatsData(mContext, /* isFullChargeStart= */ false);
final int queryFlags = mStatsQueryCaptor.getValue().getFlags(); final int queryFlags = mStatsQueryCaptor.getValue().getFlags();
assertThat(queryFlags assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
.isNotEqualTo(0); .isNotEqualTo(0);
verify(mMockContentResolver).insert(any(), any()); verify(mMockContentResolver).insert(any(), any());
} }

View File

@@ -39,25 +39,23 @@ import org.robolectric.RuntimeEnvironment;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class BatteryUsageStatsLoaderTest { public class BatteryUsageStatsLoaderTest {
private Context mContext; private Context mContext;
@Mock @Mock private BatteryStatsManager mBatteryStatsManager;
private BatteryStatsManager mBatteryStatsManager; @Mock private BatteryUsageStats mBatteryUsageStats;
@Mock @Captor private ArgumentCaptor<BatteryUsageStatsQuery> mUsageStatsQueryCaptor;
private BatteryUsageStats mBatteryUsageStats;
@Captor
private ArgumentCaptor<BatteryUsageStatsQuery> mUsageStatsQueryCaptor;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = spy(RuntimeEnvironment.application); mContext = spy(RuntimeEnvironment.application);
doReturn(mBatteryStatsManager).when(mContext).getSystemService( doReturn(mBatteryStatsManager)
Context.BATTERY_STATS_SERVICE); .when(mContext)
.getSystemService(Context.BATTERY_STATS_SERVICE);
} }
@Test @Test
public void testLoadInBackground_loadWithoutHistory() { public void testLoadInBackground_loadWithoutHistory() {
BatteryUsageStatsLoader loader = new BatteryUsageStatsLoader( BatteryUsageStatsLoader loader =
mContext, /* includeBatteryHistory */ false); new BatteryUsageStatsLoader(mContext, /* includeBatteryHistory */ false);
when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture())) when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture()))
.thenReturn(mBatteryUsageStats); .thenReturn(mBatteryUsageStats);
@@ -65,14 +63,14 @@ public class BatteryUsageStatsLoaderTest {
loader.loadInBackground(); loader.loadInBackground();
final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags(); final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags();
assertThat(queryFlags assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY).isEqualTo(0); .isEqualTo(0);
} }
@Test @Test
public void testLoadInBackground_loadWithHistory() { public void testLoadInBackground_loadWithHistory() {
BatteryUsageStatsLoader loader = new BatteryUsageStatsLoader( BatteryUsageStatsLoader loader =
mContext, /* includeBatteryHistory */ true); new BatteryUsageStatsLoader(mContext, /* includeBatteryHistory */ true);
when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture())) when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture()))
.thenReturn(mBatteryUsageStats); .thenReturn(mBatteryUsageStats);
@@ -80,7 +78,7 @@ public class BatteryUsageStatsLoaderTest {
loader.loadInBackground(); loader.loadInBackground();
final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags(); final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags();
assertThat(queryFlags assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY).isNotEqualTo(0); .isNotEqualTo(0);
} }
} }

View File

@@ -88,7 +88,8 @@ public final class BootBroadcastReceiverTest {
final SharedPreferences sharedPreferences = DatabaseUtils.getSharedPreferences(mContext); final SharedPreferences sharedPreferences = DatabaseUtils.getSharedPreferences(mContext);
sharedPreferences sharedPreferences
.edit() .edit()
.putInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, .putInt(
DatabaseUtils.KEY_LAST_USAGE_SOURCE,
UsageStatsManager.USAGE_SOURCE_CURRENT_ACTIVITY) UsageStatsManager.USAGE_SOURCE_CURRENT_ACTIVITY)
.apply(); .apply();
@@ -96,8 +97,7 @@ public final class BootBroadcastReceiverTest {
assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNotNull(); assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNotNull();
assertThat( assertThat(
DatabaseUtils DatabaseUtils.getSharedPreferences(mContext)
.getSharedPreferences(mContext)
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE)) .contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
.isFalse(); .isFalse();
} }
@@ -142,11 +142,10 @@ public final class BootBroadcastReceiverTest {
public void invokeJobRecheck_broadcastsIntent() { public void invokeJobRecheck_broadcastsIntent() {
BootBroadcastReceiver.invokeJobRecheck(mContext); BootBroadcastReceiver.invokeJobRecheck(mContext);
final List<Intent> intents = final List<Intent> intents = Shadows.shadowOf((Application) mContext).getBroadcastIntents();
Shadows.shadowOf((Application) mContext).getBroadcastIntents();
assertThat(intents).hasSize(1); assertThat(intents).hasSize(1);
assertThat(intents.get(0).getAction()).isEqualTo( assertThat(intents.get(0).getAction())
BootBroadcastReceiver.ACTION_PERIODIC_JOB_RECHECK); .isEqualTo(BootBroadcastReceiver.ACTION_PERIODIC_JOB_RECHECK);
} }
private void clearSharedPreferences() { private void clearSharedPreferences() {

View File

@@ -61,14 +61,10 @@ public final class ConvertUtilsTest {
private Context mContext; private Context mContext;
@Mock @Mock private PackageManager mMockPackageManager;
private PackageManager mMockPackageManager; @Mock private BatteryUsageStats mBatteryUsageStats;
@Mock @Mock private BatteryEntry mMockBatteryEntry;
private BatteryUsageStats mBatteryUsageStats; @Mock private IUsageStatsManager mUsageStatsManager;
@Mock
private BatteryEntry mMockBatteryEntry;
@Mock
private IUsageStatsManager mUsageStatsManager;
@Before @Before
public void setUp() { public void setUp() {
@@ -150,8 +146,8 @@ public final class ConvertUtilsTest {
when(mMockBatteryEntry.getUid()).thenReturn(-1); when(mMockBatteryEntry.getUid()).thenReturn(-1);
when(mMockBatteryEntry.getLabel()).thenReturn("CPU"); when(mMockBatteryEntry.getLabel()).thenReturn("CPU");
when(mMockBatteryEntry.getDefaultPackageName()).thenReturn(null); when(mMockBatteryEntry.getDefaultPackageName()).thenReturn(null);
when(mMockBatteryEntry.getPowerComponentId()).thenReturn( when(mMockBatteryEntry.getPowerComponentId())
BatteryConsumer.POWER_COMPONENT_CPU); .thenReturn(BatteryConsumer.POWER_COMPONENT_CPU);
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1); when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1); when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
when(mMockBatteryEntry.getConsumedPowerInForeground()).thenReturn(1.2); when(mMockBatteryEntry.getConsumedPowerInForeground()).thenReturn(1.2);
@@ -200,8 +196,8 @@ public final class ConvertUtilsTest {
assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3); assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3);
assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L); assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L);
assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L); assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L);
assertThat(batteryInformation.getDrainType()).isEqualTo( assertThat(batteryInformation.getDrainType())
BatteryConsumer.POWER_COMPONENT_CPU); .isEqualTo(BatteryConsumer.POWER_COMPONENT_CPU);
assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12); assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12);
assertThat(deviceBatteryState.getBatteryStatus()) assertThat(deviceBatteryState.getBatteryStatus())
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL); .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
@@ -234,8 +230,7 @@ public final class ConvertUtilsTest {
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL); .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
assertThat(deviceBatteryState.getBatteryHealth()) assertThat(deviceBatteryState.getBatteryHealth())
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD); .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP)) assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP)).isEqualTo(10001L);
.isEqualTo(10001L);
assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME)) assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME))
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME); .isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
} }
@@ -273,11 +268,10 @@ public final class ConvertUtilsTest {
.setType(BatteryEventType.POWER_CONNECTED) .setType(BatteryEventType.POWER_CONNECTED)
.setBatteryLevel(66) .setBatteryLevel(66)
.build(); .build();
final ContentValues values = final ContentValues values = ConvertUtils.convertBatteryEventToContentValues(batteryEvent);
ConvertUtils.convertBatteryEventToContentValues(batteryEvent);
assertThat(values.getAsLong(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L); assertThat(values.getAsLong(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L);
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)).isEqualTo( assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))
BatteryEventType.POWER_CONNECTED.getNumber()); .isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66); assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66);
} }
@@ -302,8 +296,7 @@ public final class ConvertUtilsTest {
final int expectedType = 3; final int expectedType = 3;
when(mMockBatteryEntry.getUid()).thenReturn(1001); when(mMockBatteryEntry.getUid()).thenReturn(1001);
when(mMockBatteryEntry.getLabel()).thenReturn("Settings"); when(mMockBatteryEntry.getLabel()).thenReturn("Settings");
when(mMockBatteryEntry.getDefaultPackageName()) when(mMockBatteryEntry.getDefaultPackageName()).thenReturn("com.android.settings.battery");
.thenReturn("com.android.settings.battery");
when(mMockBatteryEntry.isHidden()).thenReturn(true); when(mMockBatteryEntry.isHidden()).thenReturn(true);
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1); when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1); when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
@@ -319,23 +312,16 @@ public final class ConvertUtilsTest {
.thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
final BatteryHistEntry batteryHistEntry = final BatteryHistEntry batteryHistEntry =
ConvertUtils.convertToBatteryHistEntry( ConvertUtils.convertToBatteryHistEntry(mMockBatteryEntry, mBatteryUsageStats);
mMockBatteryEntry,
mBatteryUsageStats);
assertThat(batteryHistEntry.mUid).isEqualTo(1001L); assertThat(batteryHistEntry.mUid).isEqualTo(1001L);
assertThat(batteryHistEntry.mUserId) assertThat(batteryHistEntry.mUserId).isEqualTo(UserHandle.getUserId(1001));
.isEqualTo(UserHandle.getUserId(1001)); assertThat(batteryHistEntry.mAppLabel).isEqualTo("Settings");
assertThat(batteryHistEntry.mAppLabel) assertThat(batteryHistEntry.mPackageName).isEqualTo("com.android.settings.battery");
.isEqualTo("Settings");
assertThat(batteryHistEntry.mPackageName)
.isEqualTo("com.android.settings.battery");
assertThat(batteryHistEntry.mIsHidden).isTrue(); assertThat(batteryHistEntry.mIsHidden).isTrue();
assertThat(batteryHistEntry.mBootTimestamp) assertThat(batteryHistEntry.mBootTimestamp).isEqualTo(0L);
.isEqualTo(0L);
assertThat(batteryHistEntry.mTimestamp).isEqualTo(0L); assertThat(batteryHistEntry.mTimestamp).isEqualTo(0L);
assertThat(batteryHistEntry.mZoneId) assertThat(batteryHistEntry.mZoneId).isEqualTo(TimeZone.getDefault().getID());
.isEqualTo(TimeZone.getDefault().getID());
assertThat(batteryHistEntry.mTotalPower).isEqualTo(5.1); assertThat(batteryHistEntry.mTotalPower).isEqualTo(5.1);
assertThat(batteryHistEntry.mConsumePower).isEqualTo(1.1); assertThat(batteryHistEntry.mConsumePower).isEqualTo(1.1);
assertThat(batteryHistEntry.mForegroundUsageConsumePower).isEqualTo(1.2); assertThat(batteryHistEntry.mForegroundUsageConsumePower).isEqualTo(1.2);
@@ -343,10 +329,8 @@ public final class ConvertUtilsTest {
assertThat(batteryHistEntry.mBackgroundUsageConsumePower).isEqualTo(1.4); assertThat(batteryHistEntry.mBackgroundUsageConsumePower).isEqualTo(1.4);
assertThat(batteryHistEntry.mCachedUsageConsumePower).isEqualTo(1.5); assertThat(batteryHistEntry.mCachedUsageConsumePower).isEqualTo(1.5);
assertThat(batteryHistEntry.mPercentOfTotal).isEqualTo(0.3); assertThat(batteryHistEntry.mPercentOfTotal).isEqualTo(0.3);
assertThat(batteryHistEntry.mForegroundUsageTimeInMs) assertThat(batteryHistEntry.mForegroundUsageTimeInMs).isEqualTo(1234L);
.isEqualTo(1234L); assertThat(batteryHistEntry.mBackgroundUsageTimeInMs).isEqualTo(5689L);
assertThat(batteryHistEntry.mBackgroundUsageTimeInMs)
.isEqualTo(5689L);
assertThat(batteryHistEntry.mDrainType).isEqualTo(expectedType); assertThat(batteryHistEntry.mDrainType).isEqualTo(expectedType);
assertThat(batteryHistEntry.mConsumerType) assertThat(batteryHistEntry.mConsumerType)
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); .isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
@@ -359,20 +343,15 @@ public final class ConvertUtilsTest {
public void convertToBatteryHistEntry_nullBatteryEntry_returnsExpectedResult() { public void convertToBatteryHistEntry_nullBatteryEntry_returnsExpectedResult() {
final BatteryHistEntry batteryHistEntry = final BatteryHistEntry batteryHistEntry =
ConvertUtils.convertToBatteryHistEntry( ConvertUtils.convertToBatteryHistEntry(
/*entry=*/ null, /* entry= */ null, /* batteryUsageStats= */ null);
/*batteryUsageStats=*/ null);
assertThat(batteryHistEntry.mBootTimestamp) assertThat(batteryHistEntry.mBootTimestamp).isEqualTo(0L);
.isEqualTo(0L); assertThat(batteryHistEntry.mTimestamp).isEqualTo(0);
assertThat(batteryHistEntry.mTimestamp) assertThat(batteryHistEntry.mZoneId).isEqualTo(TimeZone.getDefault().getID());
.isEqualTo(0);
assertThat(batteryHistEntry.mZoneId)
.isEqualTo(TimeZone.getDefault().getID());
assertThat(batteryHistEntry.mBatteryLevel).isEqualTo(0); assertThat(batteryHistEntry.mBatteryLevel).isEqualTo(0);
assertThat(batteryHistEntry.mBatteryStatus).isEqualTo(0); assertThat(batteryHistEntry.mBatteryStatus).isEqualTo(0);
assertThat(batteryHistEntry.mBatteryHealth).isEqualTo(0); assertThat(batteryHistEntry.mBatteryHealth).isEqualTo(0);
assertThat(batteryHistEntry.mPackageName) assertThat(batteryHistEntry.mPackageName).isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
} }
@Test @Test
@@ -387,8 +366,8 @@ public final class ConvertUtilsTest {
when(mMockPackageManager.getPackageUidAsUser(any(), anyInt())).thenReturn(1001); when(mMockPackageManager.getPackageUidAsUser(any(), anyInt())).thenReturn(1001);
final long userId = 2; final long userId = 2;
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent( final AppUsageEvent appUsageEvent =
mContext, mUsageStatsManager, event, userId); ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId);
assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L); assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED); assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED);
assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1"); assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
@@ -449,7 +428,8 @@ public final class ConvertUtilsTest {
@Test @Test
public void convertToAppUsageEvent_returnExpectedResult() { public void convertToAppUsageEvent_returnExpectedResult() {
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
AppUsageEventEntity.KEY_UID, AppUsageEventEntity.KEY_UID,
AppUsageEventEntity.KEY_USER_ID, AppUsageEventEntity.KEY_USER_ID,
@@ -457,7 +437,8 @@ public final class ConvertUtilsTest {
AppUsageEventEntity.KEY_TIMESTAMP, AppUsageEventEntity.KEY_TIMESTAMP,
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE, AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE,
AppUsageEventEntity.KEY_TASK_ROOT_PACKAGE_NAME, AppUsageEventEntity.KEY_TASK_ROOT_PACKAGE_NAME,
AppUsageEventEntity.KEY_INSTANCE_ID}); AppUsageEventEntity.KEY_INSTANCE_ID
});
cursor.addRow( cursor.addRow(
new Object[] { new Object[] {
101L, 101L,
@@ -466,7 +447,8 @@ public final class ConvertUtilsTest {
10001L, 10001L,
AppUsageEventType.DEVICE_SHUTDOWN.getNumber(), AppUsageEventType.DEVICE_SHUTDOWN.getNumber(),
"com.android.settings2", "com.android.settings2",
100001L}); 100001L
});
cursor.moveToFirst(); cursor.moveToFirst();
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor); final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor);
@@ -482,20 +464,23 @@ public final class ConvertUtilsTest {
@Test @Test
public void convertToAppUsageEvent_emptyInstanceIdAndRootName_returnExpectedResult() { public void convertToAppUsageEvent_emptyInstanceIdAndRootName_returnExpectedResult() {
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
AppUsageEventEntity.KEY_UID, AppUsageEventEntity.KEY_UID,
AppUsageEventEntity.KEY_USER_ID, AppUsageEventEntity.KEY_USER_ID,
AppUsageEventEntity.KEY_PACKAGE_NAME, AppUsageEventEntity.KEY_PACKAGE_NAME,
AppUsageEventEntity.KEY_TIMESTAMP, AppUsageEventEntity.KEY_TIMESTAMP,
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE}); AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE
});
cursor.addRow( cursor.addRow(
new Object[] { new Object[] {
101L, 101L,
1001L, 1001L,
"com.android.settings1", "com.android.settings1",
10001L, 10001L,
AppUsageEventType.DEVICE_SHUTDOWN.getNumber()}); AppUsageEventType.DEVICE_SHUTDOWN.getNumber()
});
cursor.moveToFirst(); cursor.moveToFirst();
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor); final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor);
@@ -511,8 +496,8 @@ public final class ConvertUtilsTest {
@Test @Test
public void convertToBatteryEvent_normalCase_returnsExpectedResult() { public void convertToBatteryEvent_normalCase_returnsExpectedResult() {
final BatteryEvent batteryEvent = ConvertUtils.convertToBatteryEvent( final BatteryEvent batteryEvent =
666L, BatteryEventType.POWER_DISCONNECTED, 88); ConvertUtils.convertToBatteryEvent(666L, BatteryEventType.POWER_DISCONNECTED, 88);
assertThat(batteryEvent.getTimestamp()).isEqualTo(666L); assertThat(batteryEvent.getTimestamp()).isEqualTo(666L);
assertThat(batteryEvent.getType()).isEqualTo(BatteryEventType.POWER_DISCONNECTED); assertThat(batteryEvent.getType()).isEqualTo(BatteryEventType.POWER_DISCONNECTED);
assertThat(batteryEvent.getBatteryLevel()).isEqualTo(88); assertThat(batteryEvent.getBatteryLevel()).isEqualTo(88);
@@ -520,8 +505,9 @@ public final class ConvertUtilsTest {
@Test @Test
public void convertToBatteryEventList_normalCase_returnsExpectedResult() { public void convertToBatteryEventList_normalCase_returnsExpectedResult() {
final BatteryLevelData batteryLevelData = new BatteryLevelData(Map.of( final BatteryLevelData batteryLevelData =
1691589600000L, 98, 1691596800000L, 90, 1691596812345L, 80)); new BatteryLevelData(
Map.of(1691589600000L, 98, 1691596800000L, 90, 1691596812345L, 80));
final List<BatteryEvent> batteryEventList = final List<BatteryEvent> batteryEventList =
ConvertUtils.convertToBatteryEventList(batteryLevelData); ConvertUtils.convertToBatteryEventList(batteryLevelData);
@@ -537,14 +523,20 @@ public final class ConvertUtilsTest {
@Test @Test
public void convertToBatteryUsageSlotList_normalCase_returnsExpectedResult() { public void convertToBatteryUsageSlotList_normalCase_returnsExpectedResult() {
BatteryDiffData batteryDiffData1 = new BatteryDiffData( BatteryDiffData batteryDiffData1 =
mContext, 11L, 12L, 13, 14, 15, List.of(), List.of(), Set.of(), Set.of(), false); new BatteryDiffData(
BatteryDiffData batteryDiffData2 = new BatteryDiffData( mContext, 11L, 12L, 13, 14, 15, List.of(), List.of(), Set.of(), Set.of(),
mContext, 21L, 22L, 23, 24, 25, List.of(), List.of(), Set.of(), Set.of(), false); false);
BatteryDiffData batteryDiffData3 = new BatteryDiffData( BatteryDiffData batteryDiffData2 =
mContext, 31L, 32L, 33, 34, 35, List.of(), List.of(), Set.of(), Set.of(), false); new BatteryDiffData(
final Map<Long, BatteryDiffData> batteryDiffDataMap = Map.of( mContext, 21L, 22L, 23, 24, 25, List.of(), List.of(), Set.of(), Set.of(),
11L, batteryDiffData1, 21L, batteryDiffData2, 31L, batteryDiffData3); false);
BatteryDiffData batteryDiffData3 =
new BatteryDiffData(
mContext, 31L, 32L, 33, 34, 35, List.of(), List.of(), Set.of(), Set.of(),
false);
final Map<Long, BatteryDiffData> batteryDiffDataMap =
Map.of(11L, batteryDiffData1, 21L, batteryDiffData2, 31L, batteryDiffData3);
final List<BatteryUsageSlot> batteryUsageSlotList = final List<BatteryUsageSlot> batteryUsageSlotList =
ConvertUtils.convertToBatteryUsageSlotList(batteryDiffDataMap); ConvertUtils.convertToBatteryUsageSlotList(batteryDiffDataMap);
@@ -556,8 +548,7 @@ public final class ConvertUtilsTest {
@Test @Test
public void getLocale_nullContext_returnDefaultLocale() { public void getLocale_nullContext_returnDefaultLocale() {
assertThat(ConvertUtils.getLocale(/*context=*/ null)) assertThat(ConvertUtils.getLocale(/* context= */ null)).isEqualTo(Locale.getDefault());
.isEqualTo(Locale.getDefault());
} }
@Test @Test
@@ -578,7 +569,8 @@ public final class ConvertUtilsTest {
final String packageName = "com.android.settings1"; final String packageName = "com.android.settings1";
final String taskRootPackageName = "com.android.settings2"; final String taskRootPackageName = "com.android.settings2";
assertThat(ConvertUtils.getEffectivePackageName( assertThat(
ConvertUtils.getEffectivePackageName(
mContext, mUsageStatsManager, packageName, taskRootPackageName)) mContext, mUsageStatsManager, packageName, taskRootPackageName))
.isEqualTo(packageName); .isEqualTo(packageName);
} }
@@ -588,7 +580,8 @@ public final class ConvertUtilsTest {
final String packageName = "com.android.settings1"; final String packageName = "com.android.settings1";
final String taskRootPackageName = "com.android.settings2"; final String taskRootPackageName = "com.android.settings2";
assertThat(ConvertUtils.getEffectivePackageName( assertThat(
ConvertUtils.getEffectivePackageName(
mContext, mUsageStatsManager, packageName, taskRootPackageName)) mContext, mUsageStatsManager, packageName, taskRootPackageName))
.isEqualTo(packageName); .isEqualTo(packageName);
} }
@@ -599,7 +592,8 @@ public final class ConvertUtilsTest {
final String packageName = "com.android.settings1"; final String packageName = "com.android.settings1";
final String taskRootPackageName = "com.android.settings2"; final String taskRootPackageName = "com.android.settings2";
assertThat(ConvertUtils.getEffectivePackageName( assertThat(
ConvertUtils.getEffectivePackageName(
mContext, mUsageStatsManager, packageName, taskRootPackageName)) mContext, mUsageStatsManager, packageName, taskRootPackageName))
.isEqualTo(taskRootPackageName); .isEqualTo(taskRootPackageName);
} }
@@ -609,11 +603,19 @@ public final class ConvertUtilsTest {
ConvertUtils.sUsageSource = USAGE_SOURCE_TASK_ROOT_ACTIVITY; ConvertUtils.sUsageSource = USAGE_SOURCE_TASK_ROOT_ACTIVITY;
final String packageName = "com.android.settings1"; final String packageName = "com.android.settings1";
assertThat(ConvertUtils.getEffectivePackageName( assertThat(
mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ null)) ConvertUtils.getEffectivePackageName(
mContext,
mUsageStatsManager,
packageName,
/* taskRootPackageName= */ null))
.isEqualTo(packageName); .isEqualTo(packageName);
assertThat(ConvertUtils.getEffectivePackageName( assertThat(
mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ "")) ConvertUtils.getEffectivePackageName(
mContext,
mUsageStatsManager,
packageName,
/* taskRootPackageName= */ ""))
.isEqualTo(packageName); .isEqualTo(packageName);
} }
} }

View File

@@ -70,18 +70,12 @@ public final class DataProcessManagerTest {
private Context mContext; private Context mContext;
private DataProcessManager mDataProcessManager; private DataProcessManager mDataProcessManager;
@Mock @Mock private IUsageStatsManager mUsageStatsManager;
private IUsageStatsManager mUsageStatsManager; @Mock private UserManager mUserManager;
@Mock @Mock private BatteryStatsManager mBatteryStatsManager;
private UserManager mUserManager; @Mock private BatteryUsageStats mBatteryUsageStats;
@Mock @Mock private Intent mIntent;
private BatteryStatsManager mBatteryStatsManager; @Captor private ArgumentCaptor<BatteryUsageStatsQuery> mBatteryUsageStatsQueryCaptor;
@Mock
private BatteryUsageStats mBatteryUsageStats;
@Mock
private Intent mIntent;
@Captor
private ArgumentCaptor<BatteryUsageStatsQuery> mBatteryUsageStatsQueryCaptor;
@Before @Before
public void setUp() { public void setUp() {
@@ -91,20 +85,24 @@ public final class DataProcessManagerTest {
DataProcessor.sTestSystemAppsPackageNames = Set.of(); DataProcessor.sTestSystemAppsPackageNames = Set.of();
DataProcessor.sUsageStatsManager = mUsageStatsManager; DataProcessor.sUsageStatsManager = mUsageStatsManager;
doReturn(mContext).when(mContext).getApplicationContext(); doReturn(mContext).when(mContext).getApplicationContext();
doReturn(mUserManager) doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
doReturn(mBatteryStatsManager)
.when(mContext) .when(mContext)
.getSystemService(UserManager.class); .getSystemService(Context.BATTERY_STATS_SERVICE);
doReturn(mBatteryStatsManager).when(mContext).getSystemService( doReturn(mBatteryUsageStats)
Context.BATTERY_STATS_SERVICE); .when(mBatteryStatsManager)
doReturn(mBatteryUsageStats).when( .getBatteryUsageStats(mBatteryUsageStatsQueryCaptor.capture());
mBatteryStatsManager).getBatteryUsageStats(mBatteryUsageStatsQueryCaptor.capture());
doReturn(mIntent).when(mContext).registerReceiver(any(), any()); doReturn(mIntent).when(mContext).registerReceiver(any(), any());
doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt()); doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt());
doReturn(66).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_LEVEL), anyInt()); doReturn(66).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_LEVEL), anyInt());
mDataProcessManager = new DataProcessManager( mDataProcessManager =
mContext, /*handler=*/ null, /*rawStartTimestamp=*/ 0L, new DataProcessManager(
/*lastFullChargeTimestamp=*/ 0L, /*callbackFunction=*/ null, mContext,
/* handler= */ null,
/* rawStartTimestamp= */ 0L,
/* lastFullChargeTimestamp= */ 0L,
/* callbackFunction= */ null,
/* hourlyBatteryLevelsPerDay= */ new ArrayList<>(), /* hourlyBatteryLevelsPerDay= */ new ArrayList<>(),
/* batteryHistoryMap= */ new HashMap<>()); /* batteryHistoryMap= */ new HashMap<>());
} }
@@ -126,11 +124,13 @@ public final class DataProcessManagerTest {
@Test @Test
@LooperMode(LooperMode.Mode.LEGACY) @LooperMode(LooperMode.Mode.LEGACY)
public void start_loadEmptyDatabaseAppUsageData() { public void start_loadEmptyDatabaseAppUsageData() {
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
AppUsageEventEntity.KEY_UID, AppUsageEventEntity.KEY_UID,
AppUsageEventEntity.KEY_PACKAGE_NAME, AppUsageEventEntity.KEY_PACKAGE_NAME,
AppUsageEventEntity.KEY_TIMESTAMP}); AppUsageEventEntity.KEY_TIMESTAMP
});
DatabaseUtils.sFakeSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
doReturn(true).when(mUserManager).isUserUnlocked(anyInt()); doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
@@ -182,7 +182,8 @@ public final class DataProcessManagerTest {
doReturn(new ArrayList<>()).when(mUserManager).getUserProfiles(); doReturn(new ArrayList<>()).when(mUserManager).getUserProfiles();
// Fake database usage data. // Fake database usage data.
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE, AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE,
AppUsageEventEntity.KEY_TIMESTAMP, AppUsageEventEntity.KEY_TIMESTAMP,
@@ -191,20 +192,42 @@ public final class DataProcessManagerTest {
AppUsageEventEntity.KEY_PACKAGE_NAME AppUsageEventEntity.KEY_PACKAGE_NAME
}); });
// Adds fake data into the cursor. // Adds fake data into the cursor.
cursor.addRow(new Object[] { cursor.addRow(
AppUsageEventType.ACTIVITY_RESUMED.getNumber(), /*timestamp=*/ 3, /*userId=*/ 1, new Object[] {
/*instanceId=*/ 2, packageName}); AppUsageEventType.ACTIVITY_RESUMED.getNumber(),
cursor.addRow(new Object[] { /* timestamp= */ 3,
AppUsageEventType.ACTIVITY_STOPPED.getNumber(), /*timestamp=*/ 4, /*userId=*/ 1, /* userId= */ 1,
/*instanceId=*/ 2, packageName}); /* instanceId= */ 2,
cursor.addRow(new Object[] { packageName
AppUsageEventType.ACTIVITY_RESUMED.getNumber(), /*timestamp=*/ 5, /*userId=*/ 1, });
/*instanceId=*/ 2, packageName}); cursor.addRow(
cursor.addRow(new Object[] { new Object[] {
AppUsageEventType.ACTIVITY_STOPPED.getNumber(), /*timestamp=*/ 6, /*userId=*/ 1, AppUsageEventType.ACTIVITY_STOPPED.getNumber(),
/*instanceId=*/ 2, packageName}); /* timestamp= */ 4,
DatabaseUtils.sFakeSupplier = new Supplier<>() { /* userId= */ 1,
/* instanceId= */ 2,
packageName
});
cursor.addRow(
new Object[] {
AppUsageEventType.ACTIVITY_RESUMED.getNumber(),
/* timestamp= */ 5,
/* userId= */ 1,
/* instanceId= */ 2,
packageName
});
cursor.addRow(
new Object[] {
AppUsageEventType.ACTIVITY_STOPPED.getNumber(),
/* timestamp= */ 6,
/* userId= */ 1,
/* instanceId= */ 2,
packageName
});
DatabaseUtils.sFakeSupplier =
new Supplier<>() {
private int mTimes = 0; private int mTimes = 0;
@Override @Override
public Cursor get() { public Cursor get() {
mTimes++; mTimes++;
@@ -212,10 +235,15 @@ public final class DataProcessManagerTest {
} }
}; };
final DataProcessManager dataProcessManager = new DataProcessManager( final DataProcessManager dataProcessManager =
mContext, /*handler=*/ null, /*rawStartTimestamp=*/ 2L, new DataProcessManager(
/*lastFullChargeTimestamp=*/ 1L, /*callbackFunction=*/ null, mContext,
hourlyBatteryLevelsPerDay, /*batteryHistoryMap=*/ new HashMap<>()); /* handler= */ null,
/* rawStartTimestamp= */ 2L,
/* lastFullChargeTimestamp= */ 1L,
/* callbackFunction= */ null,
hourlyBatteryLevelsPerDay,
/* batteryHistoryMap= */ new HashMap<>());
dataProcessManager.start(); dataProcessManager.start();
assertThat(dataProcessManager.getIsCurrentAppUsageLoaded()).isTrue(); assertThat(dataProcessManager.getIsCurrentAppUsageLoaded()).isTrue();
@@ -274,11 +302,13 @@ public final class DataProcessManagerTest {
.when(mUsageStatsManager) .when(mUsageStatsManager)
.queryEventsForUser(anyLong(), anyLong(), anyInt(), any()); .queryEventsForUser(anyLong(), anyLong(), anyInt(), any());
doReturn(false).when(mUserManager).isUserUnlocked(anyInt()); doReturn(false).when(mUserManager).isUserUnlocked(anyInt());
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
AppUsageEventEntity.KEY_UID, AppUsageEventEntity.KEY_UID,
AppUsageEventEntity.KEY_PACKAGE_NAME, AppUsageEventEntity.KEY_PACKAGE_NAME,
AppUsageEventEntity.KEY_TIMESTAMP}); AppUsageEventEntity.KEY_TIMESTAMP
});
// Adds fake data into the cursor. // Adds fake data into the cursor.
cursor.addRow(new Object[] {101L, "app name1", 1001L}); cursor.addRow(new Object[] {101L, "app name1", 1001L});
DatabaseUtils.sFakeSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
@@ -293,16 +323,20 @@ public final class DataProcessManagerTest {
@Test @Test
@LooperMode(LooperMode.Mode.LEGACY) @LooperMode(LooperMode.Mode.LEGACY)
public void getBatteryLevelData_emptyHistoryMap_returnNull() { public void getBatteryLevelData_emptyHistoryMap_returnNull() {
assertThat(DataProcessManager.getBatteryLevelData( assertThat(
DataProcessManager.getBatteryLevelData(
mContext, mContext,
/* handler= */ null, /* handler= */ null,
/* isFromPeriodJob= */ false, /* isFromPeriodJob= */ false,
/*asyncResponseDelegate=*/ null)).isNull(); /* asyncResponseDelegate= */ null))
assertThat(DataProcessManager.getBatteryLevelData( .isNull();
assertThat(
DataProcessManager.getBatteryLevelData(
mContext, mContext,
/* handler= */ null, /* handler= */ null,
/* isFromPeriodJob= */ true, /* isFromPeriodJob= */ true,
/*asyncResponseDelegate=*/ null)).isNull(); /* asyncResponseDelegate= */ null))
.isNull();
} }
@Test @Test
@@ -311,7 +345,8 @@ public final class DataProcessManagerTest {
final long[] timestamps = { final long[] timestamps = {
DateUtils.HOUR_IN_MILLIS * 2 - 300L, DateUtils.HOUR_IN_MILLIS * 2 - 300L,
DateUtils.HOUR_IN_MILLIS * 2 - 200L, DateUtils.HOUR_IN_MILLIS * 2 - 200L,
DateUtils.HOUR_IN_MILLIS * 2 - 100L}; DateUtils.HOUR_IN_MILLIS * 2 - 100L
};
final int[] levels = {100, 99, 98}; final int[] levels = {100, 99, 98};
DataProcessManager.sFakeBatteryHistoryMap = createHistoryMap(timestamps, levels); DataProcessManager.sFakeBatteryHistoryMap = createHistoryMap(timestamps, levels);
DataProcessor.sTestCurrentTimeMillis = timestamps[timestamps.length - 1]; DataProcessor.sTestCurrentTimeMillis = timestamps[timestamps.length - 1];
@@ -323,9 +358,8 @@ public final class DataProcessManagerTest {
/* isFromPeriodJob= */ false, /* isFromPeriodJob= */ false,
/* asyncResponseDelegate= */ null); /* asyncResponseDelegate= */ null);
final List<Long> expectedDailyTimestamps = List.of( final List<Long> expectedDailyTimestamps =
DateUtils.HOUR_IN_MILLIS * 2 - 300L, List.of(DateUtils.HOUR_IN_MILLIS * 2 - 300L, DateUtils.HOUR_IN_MILLIS * 2 - 100L);
DateUtils.HOUR_IN_MILLIS * 2 - 100L);
final List<Integer> expectedDailyLevels = List.of(100, 66); final List<Integer> expectedDailyLevels = List.of(100, 66);
final List<List<Long>> expectedHourlyTimestamps = List.of(expectedDailyTimestamps); final List<List<Long>> expectedHourlyTimestamps = List.of(expectedDailyTimestamps);
final List<List<Integer>> expectedHourlyLevels = List.of(expectedDailyLevels); final List<List<Integer>> expectedHourlyLevels = List.of(expectedDailyLevels);
@@ -352,7 +386,8 @@ public final class DataProcessManagerTest {
/* isFromPeriodJob= */ false, /* isFromPeriodJob= */ false,
/* asyncResponseDelegate= */ null); /* asyncResponseDelegate= */ null);
final List<Long> expectedDailyTimestamps = List.of( final List<Long> expectedDailyTimestamps =
List.of(
1640966400000L, // 2022-01-01 00:00:00 1640966400000L, // 2022-01-01 00:00:00
1640970000000L); // 2022-01-01 01:00:00 1640970000000L); // 2022-01-01 01:00:00
final List<Integer> expectedDailyLevels = List.of(100, 66); final List<Integer> expectedDailyLevels = List.of(100, 66);
@@ -400,16 +435,11 @@ public final class DataProcessManagerTest {
private static ContentValues getContentValuesWithBatteryLevel(final int level) { private static ContentValues getContentValuesWithBatteryLevel(final int level) {
final ContentValues values = new ContentValues(); final ContentValues values = new ContentValues();
final DeviceBatteryState deviceBatteryState = final DeviceBatteryState deviceBatteryState =
DeviceBatteryState DeviceBatteryState.newBuilder().setBatteryLevel(level).build();
.newBuilder()
.setBatteryLevel(level)
.build();
final BatteryInformation batteryInformation = final BatteryInformation batteryInformation =
BatteryInformation BatteryInformation.newBuilder().setDeviceBatteryState(deviceBatteryState).build();
.newBuilder() values.put(
.setDeviceBatteryState(deviceBatteryState) BatteryHistEntry.KEY_BATTERY_INFORMATION,
.build();
values.put(BatteryHistEntry.KEY_BATTERY_INFORMATION,
ConvertUtils.convertBatteryInformationToString(batteryInformation)); ConvertUtils.convertBatteryInformationToString(batteryInformation));
return values; return values;
} }

View File

@@ -117,9 +117,7 @@ public final class DatabaseUtilsTest {
.setType(AppUsageEventType.ACTIVITY_STOPPED) .setType(AppUsageEventType.ACTIVITY_STOPPED)
.build(); .build();
final AppUsageEvent appUsageEvent3 = final AppUsageEvent appUsageEvent3 =
AppUsageEvent.newBuilder() AppUsageEvent.newBuilder().setType(AppUsageEventType.DEVICE_SHUTDOWN).build();
.setType(AppUsageEventType.DEVICE_SHUTDOWN)
.build();
appUsageEventList.add(appUsageEvent1); appUsageEventList.add(appUsageEvent1);
appUsageEventList.add(appUsageEvent2); appUsageEventList.add(appUsageEvent2);
appUsageEventList.add(appUsageEvent3); appUsageEventList.add(appUsageEvent3);
@@ -135,10 +133,9 @@ public final class DatabaseUtilsTest {
// Verifies the inserted ContentValues into content provider. // Verifies the inserted ContentValues into content provider.
final ContentValues[] valuesArray = final ContentValues[] valuesArray =
new ContentValues[] {valuesList.get(0), valuesList.get(1)}; new ContentValues[] {valuesList.get(0), valuesList.get(1)};
verify(mMockContentResolver).bulkInsert( verify(mMockContentResolver).bulkInsert(DatabaseUtils.APP_USAGE_EVENT_URI, valuesArray);
DatabaseUtils.APP_USAGE_EVENT_URI, valuesArray); verify(mMockContentResolver)
verify(mMockContentResolver).notifyChange( .notifyChange(DatabaseUtils.APP_USAGE_EVENT_URI, /* observer= */ null);
DatabaseUtils.APP_USAGE_EVENT_URI, /*observer=*/ null);
} }
@Test @Test
@@ -161,12 +158,10 @@ public final class DatabaseUtilsTest {
final ContentValues contentValues = final ContentValues contentValues =
DatabaseUtils.sendBatteryEventData(mContext, batteryEvent); DatabaseUtils.sendBatteryEventData(mContext, batteryEvent);
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_TIMESTAMP)) assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L);
.isEqualTo(10001L);
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)) assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber()); .isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)) assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66);
.isEqualTo(66);
// Verifies the inserted ContentValues into content provider. // Verifies the inserted ContentValues into content provider.
verify(mMockContentResolver).insert(DatabaseUtils.BATTERY_EVENT_URI, contentValues); verify(mMockContentResolver).insert(DatabaseUtils.BATTERY_EVENT_URI, contentValues);
} }
@@ -176,8 +171,11 @@ public final class DatabaseUtilsTest {
doReturn(null).when(mContext).registerReceiver(any(), any()); doReturn(null).when(mContext).registerReceiver(any(), any());
assertThat( assertThat(
DatabaseUtils.sendBatteryEntryData( DatabaseUtils.sendBatteryEntryData(
mContext, System.currentTimeMillis(), /*batteryEntryList=*/ null, mContext,
mBatteryUsageStats, /*isFullChargeStart=*/ false)) System.currentTimeMillis(),
/* batteryEntryList= */ null,
mBatteryUsageStats,
/* isFullChargeStart= */ false))
.isNull(); .isNull();
} }
@@ -209,10 +207,9 @@ public final class DatabaseUtilsTest {
// Verifies the inserted ContentValues into content provider. // Verifies the inserted ContentValues into content provider.
final ContentValues[] valuesArray = final ContentValues[] valuesArray =
new ContentValues[] {valuesList.get(0), valuesList.get(1)}; new ContentValues[] {valuesList.get(0), valuesList.get(1)};
verify(mMockContentResolver).bulkInsert( verify(mMockContentResolver).bulkInsert(DatabaseUtils.BATTERY_CONTENT_URI, valuesArray);
DatabaseUtils.BATTERY_CONTENT_URI, valuesArray); verify(mMockContentResolver)
verify(mMockContentResolver).notifyChange( .notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
} }
@Test @Test
@@ -231,8 +228,8 @@ public final class DatabaseUtilsTest {
verifyFakeBatteryEntryContentValues(valuesList.get(0)); verifyFakeBatteryEntryContentValues(valuesList.get(0));
// Verifies the inserted ContentValues into content provider. // Verifies the inserted ContentValues into content provider.
verify(mMockContentResolver).insert(any(), any()); verify(mMockContentResolver).insert(any(), any());
verify(mMockContentResolver).notifyChange( verify(mMockContentResolver)
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null); .notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
} }
@Test @Test
@@ -251,8 +248,8 @@ public final class DatabaseUtilsTest {
verifyFakeBatteryEntryContentValues(valuesList.get(0)); verifyFakeBatteryEntryContentValues(valuesList.get(0));
// Verifies the inserted ContentValues into content provider. // Verifies the inserted ContentValues into content provider.
verify(mMockContentResolver).insert(any(), any()); verify(mMockContentResolver).insert(any(), any());
verify(mMockContentResolver).notifyChange( verify(mMockContentResolver)
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null); .notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
} }
@Test @Test
@@ -271,8 +268,8 @@ public final class DatabaseUtilsTest {
verifyFakeBatteryEntryContentValues(valuesList.get(0)); verifyFakeBatteryEntryContentValues(valuesList.get(0));
// Verifies the inserted ContentValues into content provider. // Verifies the inserted ContentValues into content provider.
verify(mMockContentResolver).insert(any(), any()); verify(mMockContentResolver).insert(any(), any());
verify(mMockContentResolver).notifyChange( verify(mMockContentResolver)
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null); .notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
} }
@Test @Test
@@ -282,16 +279,20 @@ public final class DatabaseUtilsTest {
DatabaseUtils.sFakeSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final long earliestTimestamp = 10001L; final long earliestTimestamp = 10001L;
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( assertThat(
mContext, /*userId=*/ 0, earliestTimestamp)).isEqualTo(earliestTimestamp); DatabaseUtils.getAppUsageStartTimestampOfUser(
mContext, /* userId= */ 0, earliestTimestamp))
.isEqualTo(earliestTimestamp);
} }
@Test @Test
public void getAppUsageStartTimestampOfUser_nullCursor_returnEarliestTimestamp() { public void getAppUsageStartTimestampOfUser_nullCursor_returnEarliestTimestamp() {
DatabaseUtils.sFakeSupplier = () -> null; DatabaseUtils.sFakeSupplier = () -> null;
final long earliestTimestamp = 10001L; final long earliestTimestamp = 10001L;
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( assertThat(
mContext, /*userId=*/ 0, earliestTimestamp)).isEqualTo(earliestTimestamp); DatabaseUtils.getAppUsageStartTimestampOfUser(
mContext, /* userId= */ 0, earliestTimestamp))
.isEqualTo(earliestTimestamp);
} }
@Test @Test
@@ -304,50 +305,62 @@ public final class DatabaseUtilsTest {
DatabaseUtils.sFakeSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final long earliestTimestamp1 = 1001L; final long earliestTimestamp1 = 1001L;
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( assertThat(
mContext, /*userId=*/ 0, earliestTimestamp1)).isEqualTo(returnedTimestamp + 1); DatabaseUtils.getAppUsageStartTimestampOfUser(
mContext, /* userId= */ 0, earliestTimestamp1))
.isEqualTo(returnedTimestamp + 1);
final long earliestTimestamp2 = 100001L; final long earliestTimestamp2 = 100001L;
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( assertThat(
mContext, /*userId=*/ 0, earliestTimestamp2)).isEqualTo(earliestTimestamp2); DatabaseUtils.getAppUsageStartTimestampOfUser(
mContext, /* userId= */ 0, earliestTimestamp2))
.isEqualTo(earliestTimestamp2);
} }
@Test @Test
public void getAppUsageEventForUsers_emptyCursorContent_returnEmptyMap() { public void getAppUsageEventForUsers_emptyCursorContent_returnEmptyMap() {
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
AppUsageEventEntity.KEY_UID, AppUsageEventEntity.KEY_UID,
AppUsageEventEntity.KEY_USER_ID, AppUsageEventEntity.KEY_USER_ID,
AppUsageEventEntity.KEY_PACKAGE_NAME, AppUsageEventEntity.KEY_PACKAGE_NAME,
AppUsageEventEntity.KEY_TIMESTAMP, AppUsageEventEntity.KEY_TIMESTAMP,
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE}); AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE
});
DatabaseUtils.sFakeSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
assertThat(DatabaseUtils.getAppUsageEventForUsers( assertThat(
DatabaseUtils.getAppUsageEventForUsers(
mContext, mContext,
/* calendar= */ null, /* calendar= */ null,
/* userIds= */ new ArrayList<>(), /* userIds= */ new ArrayList<>(),
/*startTimestampOfLevelData=*/ 0)).isEmpty(); /* startTimestampOfLevelData= */ 0))
.isEmpty();
} }
@Test @Test
public void getAppUsageEventForUsers_nullCursor_returnEmptyMap() { public void getAppUsageEventForUsers_nullCursor_returnEmptyMap() {
DatabaseUtils.sFakeSupplier = () -> null; DatabaseUtils.sFakeSupplier = () -> null;
assertThat(DatabaseUtils.getAppUsageEventForUsers( assertThat(
DatabaseUtils.getAppUsageEventForUsers(
mContext, mContext,
/* calendar= */ null, /* calendar= */ null,
/* userIds= */ new ArrayList<>(), /* userIds= */ new ArrayList<>(),
/*startTimestampOfLevelData=*/ 0)).isEmpty(); /* startTimestampOfLevelData= */ 0))
.isEmpty();
} }
@Test @Test
public void getAppUsageEventForUsers_returnExpectedMap() { public void getAppUsageEventForUsers_returnExpectedMap() {
final Long timestamp1 = 1001L; final Long timestamp1 = 1001L;
final Long timestamp2 = 1002L; final Long timestamp2 = 1002L;
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
AppUsageEventEntity.KEY_UID, AppUsageEventEntity.KEY_UID,
AppUsageEventEntity.KEY_PACKAGE_NAME, AppUsageEventEntity.KEY_PACKAGE_NAME,
AppUsageEventEntity.KEY_TIMESTAMP}); AppUsageEventEntity.KEY_TIMESTAMP
});
// Adds fake data into the cursor. // Adds fake data into the cursor.
cursor.addRow(new Object[] {101L, "app name1", timestamp1}); cursor.addRow(new Object[] {101L, "app name1", timestamp1});
cursor.addRow(new Object[] {101L, "app name2", timestamp2}); cursor.addRow(new Object[] {101L, "app name2", timestamp2});
@@ -355,7 +368,8 @@ public final class DatabaseUtilsTest {
cursor.addRow(new Object[] {101L, "app name4", timestamp2}); cursor.addRow(new Object[] {101L, "app name4", timestamp2});
DatabaseUtils.sFakeSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final List<AppUsageEvent> appUsageEventList = DatabaseUtils.getAppUsageEventForUsers( final List<AppUsageEvent> appUsageEventList =
DatabaseUtils.getAppUsageEventForUsers(
mContext, mContext,
/* calendar= */ null, /* calendar= */ null,
/* userIds= */ new ArrayList<>(), /* userIds= */ new ArrayList<>(),
@@ -369,11 +383,13 @@ public final class DatabaseUtilsTest {
@Test @Test
public void getHistoryMap_emptyCursorContent_returnEmptyMap() { public void getHistoryMap_emptyCursorContent_returnEmptyMap() {
final MatrixCursor cursor = new MatrixCursor( final MatrixCursor cursor =
new MatrixCursor(
new String[] { new String[] {
BatteryHistEntry.KEY_UID, BatteryHistEntry.KEY_UID,
BatteryHistEntry.KEY_USER_ID, BatteryHistEntry.KEY_USER_ID,
BatteryHistEntry.KEY_TIMESTAMP}); BatteryHistEntry.KEY_TIMESTAMP
});
DatabaseUtils.sFakeSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
assertThat(DatabaseUtils.getHistoryMapSinceQueryTimestamp(mContext, 0)).isEmpty(); assertThat(DatabaseUtils.getHistoryMapSinceQueryTimestamp(mContext, 0)).isEmpty();
@@ -391,14 +407,22 @@ public final class DatabaseUtilsTest {
final Long timestamp2 = Long.valueOf(1002L); final Long timestamp2 = Long.valueOf(1002L);
final MatrixCursor cursor = getMatrixCursor(); final MatrixCursor cursor = getMatrixCursor();
// Adds fake data into the cursor. // Adds fake data into the cursor.
cursor.addRow(new Object[] { cursor.addRow(
"app name1", timestamp1, 1, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, true}); new Object[] {
cursor.addRow(new Object[] { "app name1", timestamp1, 1, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, true
"app name2", timestamp2, 2, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false}); });
cursor.addRow(new Object[] { cursor.addRow(
"app name3", timestamp2, 3, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false}); new Object[] {
cursor.addRow(new Object[] { "app name2", timestamp2, 2, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false
"app name4", timestamp2, 4, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false}); });
cursor.addRow(
new Object[] {
"app name3", timestamp2, 3, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false
});
cursor.addRow(
new Object[] {
"app name4", timestamp2, 4, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false
});
DatabaseUtils.sFakeSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap = final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap =
@@ -421,8 +445,9 @@ public final class DatabaseUtilsTest {
public void getHistoryMap_withWorkProfile_returnExpectedMap() public void getHistoryMap_withWorkProfile_returnExpectedMap()
throws PackageManager.NameNotFoundException { throws PackageManager.NameNotFoundException {
doReturn("com.fake.package").when(mContext).getPackageName(); doReturn("com.fake.package").when(mContext).getPackageName();
doReturn(mMockContext).when(mContext).createPackageContextAsUser( doReturn(mMockContext)
"com.fake.package", /*flags=*/ 0, UserHandle.OWNER); .when(mContext)
.createPackageContextAsUser("com.fake.package", /* flags= */ 0, UserHandle.OWNER);
doReturn(UserHandle.CURRENT).when(mContext).getUser(); doReturn(UserHandle.CURRENT).when(mContext).getUser();
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
doReturn(true).when(mUserManager).isManagedProfile(); doReturn(true).when(mUserManager).isManagedProfile();
@@ -440,8 +465,7 @@ public final class DatabaseUtilsTest {
public void removeUsageSource_hasNoData() { public void removeUsageSource_hasNoData() {
DatabaseUtils.removeUsageSource(mContext); DatabaseUtils.removeUsageSource(mContext);
assertThat( assertThat(
DatabaseUtils DatabaseUtils.getSharedPreferences(mContext)
.getSharedPreferences(mContext)
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE)) .contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
.isFalse(); .isFalse();
} }
@@ -457,8 +481,7 @@ public final class DatabaseUtilsTest {
DatabaseUtils.removeUsageSource(mContext); DatabaseUtils.removeUsageSource(mContext);
assertThat( assertThat(
DatabaseUtils DatabaseUtils.getSharedPreferences(mContext)
.getSharedPreferences(mContext)
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE)) .contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
.isFalse(); .isFalse();
} }
@@ -482,9 +505,10 @@ public final class DatabaseUtilsTest {
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager)) assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY); .isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
assertThat( assertThat(
DatabaseUtils DatabaseUtils.getSharedPreferences(mContext)
.getSharedPreferences(mContext) .getInt(
.getInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_CURRENT_ACTIVITY)) DatabaseUtils.KEY_LAST_USAGE_SOURCE,
USAGE_SOURCE_CURRENT_ACTIVITY))
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY); .isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
} }
@@ -495,9 +519,10 @@ public final class DatabaseUtilsTest {
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager)) assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY); .isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
assertThat( assertThat(
DatabaseUtils DatabaseUtils.getSharedPreferences(mContext)
.getSharedPreferences(mContext) .getInt(
.getInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_CURRENT_ACTIVITY)) DatabaseUtils.KEY_LAST_USAGE_SOURCE,
USAGE_SOURCE_CURRENT_ACTIVITY))
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY); .isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
} }
@@ -506,20 +531,16 @@ public final class DatabaseUtilsTest {
final String preferenceKey = "test_preference_key"; final String preferenceKey = "test_preference_key";
DatabaseUtils.recordDateTime(mContext, preferenceKey); DatabaseUtils.recordDateTime(mContext, preferenceKey);
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey)) assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey)).isTrue();
.isTrue();
} }
@Test @Test
public void dump_dumpExpectedData() { public void dump_dumpExpectedData() {
DatabaseUtils.recordDateTime(mContext, DatabaseUtils.recordDateTime(mContext, Intent.ACTION_BATTERY_LEVEL_CHANGED);
Intent.ACTION_BATTERY_LEVEL_CHANGED); DatabaseUtils.recordDateTime(
DatabaseUtils.recordDateTime(mContext, mContext, BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING); DatabaseUtils.recordDateTime(mContext, DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME);
DatabaseUtils.recordDateTime(mContext, DatabaseUtils.recordDateTime(mContext, DatabaseUtils.KEY_LAST_UPLOAD_FULL_CHARGE_TIME);
DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME);
DatabaseUtils.recordDateTime(mContext,
DatabaseUtils.KEY_LAST_UPLOAD_FULL_CHARGE_TIME);
final StringWriter stringWriter = new StringWriter(); final StringWriter stringWriter = new StringWriter();
final PrintWriter printWriter = new PrintWriter(stringWriter); final PrintWriter printWriter = new PrintWriter(stringWriter);
@@ -570,8 +591,7 @@ public final class DatabaseUtilsTest {
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL); .isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
assertThat(deviceBatteryState.getBatteryHealth()) assertThat(deviceBatteryState.getBatteryHealth())
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD); .isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
assertThat(values.getAsString("packageName")) assertThat(values.getAsString("packageName")).isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
} }
private static Intent getBatteryIntent() { private static Intent getBatteryIntent() {
@@ -590,6 +610,7 @@ public final class DatabaseUtilsTest {
BatteryHistEntry.KEY_TIMESTAMP, BatteryHistEntry.KEY_TIMESTAMP,
BatteryHistEntry.KEY_UID, BatteryHistEntry.KEY_UID,
BatteryHistEntry.KEY_CONSUMER_TYPE, BatteryHistEntry.KEY_CONSUMER_TYPE,
BatteryHistEntry.KEY_IS_FULL_CHARGE_CYCLE_START}); BatteryHistEntry.KEY_IS_FULL_CHARGE_CYCLE_START
});
} }
} }

View File

@@ -71,12 +71,13 @@ public final class PeriodicJobManagerTest {
public void getTriggerAtMillis_withoutOffset_returnsExpectedResult() { public void getTriggerAtMillis_withoutOffset_returnsExpectedResult() {
long timeSlotUnit = PeriodicJobManager.DATA_FETCH_INTERVAL_MINUTE; long timeSlotUnit = PeriodicJobManager.DATA_FETCH_INTERVAL_MINUTE;
// Sets the current time. // Sets the current time.
Duration currentTimeDuration = Duration currentTimeDuration = Duration.ofMinutes(timeSlotUnit * 2);
Duration.ofMinutes(timeSlotUnit * 2);
FakeClock fakeClock = new FakeClock(); FakeClock fakeClock = new FakeClock();
fakeClock.setCurrentTime(currentTimeDuration); fakeClock.setCurrentTime(currentTimeDuration);
assertThat(PeriodicJobManager.getTriggerAtMillis(mContext, fakeClock, /*fromBoot=*/ false)) assertThat(
PeriodicJobManager.getTriggerAtMillis(
mContext, fakeClock, /* fromBoot= */ false))
.isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis()); .isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis());
} }
@@ -86,8 +87,7 @@ public final class PeriodicJobManagerTest {
// Sets the current time. // Sets the current time.
Duration currentTimeDuration = Duration.ofMinutes(timeSlotUnit * 2); Duration currentTimeDuration = Duration.ofMinutes(timeSlotUnit * 2);
FakeClock fakeClock = new FakeClock(); FakeClock fakeClock = new FakeClock();
fakeClock.setCurrentTime( fakeClock.setCurrentTime(currentTimeDuration.plusMinutes(1L).plusMillis(51L));
currentTimeDuration.plusMinutes(1L).plusMillis(51L));
assertThat(PeriodicJobManager.getTriggerAtMillis(mContext, fakeClock, /* fromBoot= */ true)) assertThat(PeriodicJobManager.getTriggerAtMillis(mContext, fakeClock, /* fromBoot= */ true))
.isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis()); .isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis());

View File

@@ -129,5 +129,4 @@ public final class PeriodicJobReceiverTest {
// Ensures the testing environment is correct. // Ensures the testing environment is correct.
assertThat(mDao.getAllAfter(0)).hasSize(3); assertThat(mDao.getAllAfter(0)).hasSize(3);
} }
} }

View File

@@ -53,8 +53,12 @@ public class PowerGaugePreferenceTest {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mRootView = LayoutInflater.from(mContext) mRootView =
.inflate(com.android.settingslib.widget.preference.app.R.layout.preference_app, null); LayoutInflater.from(mContext)
.inflate(
com.android.settingslib.widget.preference.app.R.layout
.preference_app,
null);
mWidgetView = mWidgetView =
LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null); LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null);
final LinearLayout widgetFrame = mRootView.findViewById(android.R.id.widget_frame); final LinearLayout widgetFrame = mRootView.findViewById(android.R.id.widget_frame);

View File

@@ -55,14 +55,10 @@ public final class PowerUsageAdvancedTest {
private Predicate<PowerAnomalyEvent> mCardFilterPredicate; private Predicate<PowerAnomalyEvent> mCardFilterPredicate;
private Predicate<PowerAnomalyEvent> mSlotFilterPredicate; private Predicate<PowerAnomalyEvent> mSlotFilterPredicate;
@Mock @Mock private BatteryTipsController mBatteryTipsController;
private BatteryTipsController mBatteryTipsController; @Mock private BatteryChartPreferenceController mBatteryChartPreferenceController;
@Mock @Mock private ScreenOnTimeController mScreenOnTimeController;
private BatteryChartPreferenceController mBatteryChartPreferenceController; @Mock private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
@Mock
private ScreenOnTimeController mScreenOnTimeController;
@Mock
private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
@Before @Before
public void setUp() { public void setUp() {
@@ -75,7 +71,10 @@ public final class PowerUsageAdvancedTest {
mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController; mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController;
mPowerUsageAdvanced.mScreenOnTimeController = mScreenOnTimeController; mPowerUsageAdvanced.mScreenOnTimeController = mScreenOnTimeController;
mPowerUsageAdvanced.mBatteryUsageBreakdownController = mBatteryUsageBreakdownController; mPowerUsageAdvanced.mBatteryUsageBreakdownController = mBatteryUsageBreakdownController;
mPowerUsageAdvanced.mBatteryLevelData = Optional.of(new BatteryLevelData(Map.of( mPowerUsageAdvanced.mBatteryLevelData =
Optional.of(
new BatteryLevelData(
Map.of(
1694354400000L, 1, // 2023-09-10 22:00:00 1694354400000L, 1, // 2023-09-10 22:00:00
1694361600000L, 2, // 2023-09-11 00:00:00 1694361600000L, 2, // 2023-09-11 00:00:00
1694368800000L, 3))); // 2023-09-11 02:00:00 1694368800000L, 3))); // 2023-09-11 02:00:00
@@ -86,15 +85,17 @@ public final class PowerUsageAdvancedTest {
@Test @Test
public void getFilterAnomalyEvent_withEmptyOrNullList_getNull() { public void getFilterAnomalyEvent_withEmptyOrNullList_getNull() {
prepareCardFilterPredicate(null); prepareCardFilterPredicate(null);
assertThat(PowerUsageAdvanced assertThat(PowerUsageAdvanced.getAnomalyEvent(null, mCardFilterPredicate)).isNull();
.getAnomalyEvent(null, mCardFilterPredicate)).isNull(); assertThat(PowerUsageAdvanced.getAnomalyEvent(null, mSlotFilterPredicate)).isNull();
assertThat(PowerUsageAdvanced assertThat(
.getAnomalyEvent(null, mSlotFilterPredicate)).isNull(); PowerUsageAdvanced.getAnomalyEvent(
assertThat(PowerUsageAdvanced.getAnomalyEvent( BatteryTestUtils.createEmptyPowerAnomalyEventList(),
BatteryTestUtils.createEmptyPowerAnomalyEventList(), mCardFilterPredicate)) mCardFilterPredicate))
.isNull(); .isNull();
assertThat(PowerUsageAdvanced.getAnomalyEvent( assertThat(
BatteryTestUtils.createEmptyPowerAnomalyEventList(), mSlotFilterPredicate)) PowerUsageAdvanced.getAnomalyEvent(
BatteryTestUtils.createEmptyPowerAnomalyEventList(),
mSlotFilterPredicate))
.isNull(); .isNull();
} }
@@ -104,12 +105,10 @@ public final class PowerUsageAdvancedTest {
BatteryTestUtils.createNonEmptyPowerAnomalyEventList(); BatteryTestUtils.createNonEmptyPowerAnomalyEventList();
final PowerAnomalyEvent slotEvent = final PowerAnomalyEvent slotEvent =
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
mSlotFilterPredicate);
prepareCardFilterPredicate(slotEvent); prepareCardFilterPredicate(slotEvent);
final PowerAnomalyEvent cardEvent = final PowerAnomalyEvent cardEvent =
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
mCardFilterPredicate);
assertThat(cardEvent).isEqualTo(BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent()); assertThat(cardEvent).isEqualTo(BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
assertThat(slotEvent).isNull(); assertThat(slotEvent).isNull();
@@ -123,12 +122,10 @@ public final class PowerUsageAdvancedTest {
DatabaseUtils.setDismissedPowerAnomalyKeys(mContext, PowerAnomalyKey.KEY_BRIGHTNESS.name()); DatabaseUtils.setDismissedPowerAnomalyKeys(mContext, PowerAnomalyKey.KEY_BRIGHTNESS.name());
final PowerAnomalyEvent slotEvent = final PowerAnomalyEvent slotEvent =
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
mSlotFilterPredicate);
prepareCardFilterPredicate(slotEvent); prepareCardFilterPredicate(slotEvent);
final PowerAnomalyEvent cardEvent = final PowerAnomalyEvent cardEvent =
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
mCardFilterPredicate);
assertThat(cardEvent).isEqualTo(BatteryTestUtils.createScreenTimeoutAnomalyEvent()); assertThat(cardEvent).isEqualTo(BatteryTestUtils.createScreenTimeoutAnomalyEvent());
assertThat(slotEvent).isNull(); assertThat(slotEvent).isNull();
@@ -144,12 +141,10 @@ public final class PowerUsageAdvancedTest {
} }
final PowerAnomalyEvent slotEvent = final PowerAnomalyEvent slotEvent =
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
mSlotFilterPredicate);
prepareCardFilterPredicate(slotEvent); prepareCardFilterPredicate(slotEvent);
final PowerAnomalyEvent cardEvent = final PowerAnomalyEvent cardEvent =
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
mCardFilterPredicate);
assertThat(cardEvent).isNull(); assertThat(cardEvent).isNull();
assertThat(slotEvent).isNull(); assertThat(slotEvent).isNull();
@@ -165,7 +160,8 @@ public final class PowerUsageAdvancedTest {
.isEqualTo(event.getEventId()); .isEqualTo(event.getEventId());
verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyConfirmListener(isNull()); verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyConfirmListener(isNull());
verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyRejectListener(isNull()); verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyRejectListener(isNull());
verify(mPowerUsageAdvanced.mBatteryChartPreferenceController).onHighlightSlotIndexUpdate( verify(mPowerUsageAdvanced.mBatteryChartPreferenceController)
.onHighlightSlotIndexUpdate(
eq(BatteryChartViewModel.SELECTED_INDEX_INVALID), eq(BatteryChartViewModel.SELECTED_INDEX_INVALID),
eq(BatteryChartViewModel.SELECTED_INDEX_INVALID)); eq(BatteryChartViewModel.SELECTED_INDEX_INVALID));
} }
@@ -180,10 +176,14 @@ public final class PowerUsageAdvancedTest {
.isEqualTo(event.getEventId()); .isEqualTo(event.getEventId());
verify(mBatteryTipsController).setOnAnomalyConfirmListener(isNull()); verify(mBatteryTipsController).setOnAnomalyConfirmListener(isNull());
verify(mBatteryTipsController).setOnAnomalyRejectListener(isNull()); verify(mBatteryTipsController).setOnAnomalyRejectListener(isNull());
assertThat(mPowerUsageAdvanced.mBatteryLevelData.get().getIndexByTimestamps( assertThat(
mPowerUsageAdvanced
.mBatteryLevelData
.get()
.getIndexByTimestamps(
event.getWarningItemInfo().getStartTimestamp(), event.getWarningItemInfo().getStartTimestamp(),
event.getWarningItemInfo().getEndTimestamp() event.getWarningItemInfo().getEndTimestamp()))
)).isEqualTo(Pair.create(1, 0)); .isEqualTo(Pair.create(1, 0));
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0)); verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
verify(mBatteryTipsController).setOnAnomalyConfirmListener(notNull()); verify(mBatteryTipsController).setOnAnomalyConfirmListener(notNull());
} }
@@ -192,8 +192,7 @@ public final class PowerUsageAdvancedTest {
public void onDisplayAnomalyEventUpdated_withSettingsCardAndAppsSlotEvent_showExpected() { public void onDisplayAnomalyEventUpdated_withSettingsCardAndAppsSlotEvent_showExpected() {
final PowerAnomalyEvent settingsEvent = final PowerAnomalyEvent settingsEvent =
BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent(); BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent();
final PowerAnomalyEvent appsEvent = final PowerAnomalyEvent appsEvent = BatteryTestUtils.createAppAnomalyEvent();
BatteryTestUtils.createAppAnomalyEvent();
mPowerUsageAdvanced.onDisplayAnomalyEventUpdated(settingsEvent, appsEvent); mPowerUsageAdvanced.onDisplayAnomalyEventUpdated(settingsEvent, appsEvent);
@@ -207,8 +206,9 @@ public final class PowerUsageAdvancedTest {
private void prepareCardFilterPredicate(PowerAnomalyEvent slotEvent) { private void prepareCardFilterPredicate(PowerAnomalyEvent slotEvent) {
final Set<String> dismissedPowerAnomalyKeys = final Set<String> dismissedPowerAnomalyKeys =
DatabaseUtils.getDismissedPowerAnomalyKeys(mContext); DatabaseUtils.getDismissedPowerAnomalyKeys(mContext);
mCardFilterPredicate = event -> !dismissedPowerAnomalyKeys.contains( mCardFilterPredicate =
event.getDismissRecordKey()) event ->
!dismissedPowerAnomalyKeys.contains(event.getDismissRecordKey())
&& (event.equals(slotEvent) || !event.hasWarningItemInfo()); && (event.equals(slotEvent) || !event.hasWarningItemInfo());
} }
} }

View File

@@ -52,10 +52,8 @@ import java.util.List;
@Config(shadows = ShadowDashboardFragment.class) @Config(shadows = ShadowDashboardFragment.class)
public class PowerUsageBaseTest { public class PowerUsageBaseTest {
@Mock @Mock private LoaderManager mLoaderManager;
private LoaderManager mLoaderManager; @Mock private Loader<BatteryUsageStats> mBatteryUsageStatsLoader;
@Mock
private Loader<BatteryUsageStats> mBatteryUsageStatsLoader;
private TestFragment mFragment; private TestFragment mFragment;
@Before @Before
@@ -77,16 +75,19 @@ public class PowerUsageBaseTest {
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS); bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
bundle.putBoolean(KEY_INCLUDE_HISTORY, false); bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
doReturn(mBatteryUsageStatsLoader).when(mLoaderManager).getLoader( doReturn(mBatteryUsageStatsLoader)
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
doReturn(false).when(mBatteryUsageStatsLoader).isReset(); doReturn(false).when(mBatteryUsageStatsLoader).isReset();
mFragment.restartBatteryStatsLoader( mFragment.restartBatteryStatsLoader(
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS); BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
verify(mLoaderManager) verify(mLoaderManager)
.restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER), .restartLoader(
refEq(bundle), any()); eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
refEq(bundle),
any());
} }
@Test @Test
@@ -94,16 +95,19 @@ public class PowerUsageBaseTest {
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS); bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
bundle.putBoolean(KEY_INCLUDE_HISTORY, false); bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
doReturn(mBatteryUsageStatsLoader).when(mLoaderManager).getLoader( doReturn(mBatteryUsageStatsLoader)
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
doReturn(true).when(mBatteryUsageStatsLoader).isReset(); doReturn(true).when(mBatteryUsageStatsLoader).isReset();
mFragment.restartBatteryStatsLoader( mFragment.restartBatteryStatsLoader(
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS); BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
verify(mLoaderManager) verify(mLoaderManager)
.initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER), .initLoader(
refEq(bundle), any()); eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
refEq(bundle),
any());
} }
@Test @Test
@@ -111,14 +115,18 @@ public class PowerUsageBaseTest {
final Bundle bundle = new Bundle(); final Bundle bundle = new Bundle();
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS); bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
bundle.putBoolean(KEY_INCLUDE_HISTORY, false); bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
doReturn(null).when(mLoaderManager).getLoader( doReturn(null)
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
mFragment.restartBatteryStatsLoader( mFragment.restartBatteryStatsLoader(
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS); BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER), verify(mLoaderManager)
refEq(bundle), any()); .initLoader(
eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
refEq(bundle),
any());
} }
private static class TestFragment extends PowerUsageBase { private static class TestFragment extends PowerUsageBase {

View File

@@ -70,7 +70,8 @@ import java.util.List;
// TODO: Improve this test class so that it starts up the real activity and fragment. // TODO: Improve this test class so that it starts up the real activity and fragment.
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
@Config(shadows = { @Config(
shadows = {
com.android.settings.testutils.shadow.ShadowFragment.class, com.android.settings.testutils.shadow.ShadowFragment.class,
}) })
public class PowerUsageSummaryTest { public class PowerUsageSummaryTest {
@@ -81,26 +82,16 @@ public class PowerUsageSummaryTest {
sAdditionalBatteryInfoIntent = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO"); sAdditionalBatteryInfoIntent = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
} }
@Mock @Mock private SettingsActivity mSettingsActivity;
private SettingsActivity mSettingsActivity; @Mock private LoaderManager mLoaderManager;
@Mock @Mock private Loader<BatteryTip> mBatteryTipLoader;
private LoaderManager mLoaderManager; @Mock private Loader<BatteryInfo> mBatteryInfoLoader;
@Mock @Mock private ContentResolver mContentResolver;
private Loader<BatteryTip> mBatteryTipLoader; @Mock private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
@Mock @Mock private VisibilityLoggerMixin mVisibilityLoggerMixin;
private Loader<BatteryInfo> mBatteryInfoLoader; @Mock private PreferenceScreen mPreferenceScreen;
@Mock @Mock private Preference mBatteryUsagePreference;
private ContentResolver mContentResolver; @Mock private Preference mHelpPreference;
@Mock
private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
@Mock
private VisibilityLoggerMixin mVisibilityLoggerMixin;
@Mock
private PreferenceScreen mPreferenceScreen;
@Mock
private Preference mBatteryUsagePreference;
@Mock
private Preference mHelpPreference;
private Context mRealContext; private Context mRealContext;
private TestFragment mFragment; private TestFragment mFragment;
@@ -120,8 +111,8 @@ public class PowerUsageSummaryTest {
.thenReturn(sAdditionalBatteryInfoIntent); .thenReturn(sAdditionalBatteryInfoIntent);
mFragment.mBatteryUtils = Mockito.spy(new BatteryUtils(mRealContext)); mFragment.mBatteryUtils = Mockito.spy(new BatteryUtils(mRealContext));
ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin); ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin);
ReflectionHelpers.setField(mFragment, "mBatteryBroadcastReceiver", ReflectionHelpers.setField(
mBatteryBroadcastReceiver); mFragment, "mBatteryBroadcastReceiver", mBatteryBroadcastReceiver);
doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen(); doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
when(mFragment.getContentResolver()).thenReturn(mContentResolver); when(mFragment.getContentResolver()).thenReturn(mContentResolver);
when(mFragment.findPreference(KEY_BATTERY_USAGE)).thenReturn(mBatteryUsagePreference); when(mFragment.findPreference(KEY_BATTERY_USAGE)).thenReturn(mBatteryUsagePreference);
@@ -158,41 +149,45 @@ public class PowerUsageSummaryTest {
@Test @Test
public void restartBatteryTipLoader() { public void restartBatteryTipLoader() {
// TODO: add policy logic here when BatteryTipPolicy is implemented // TODO: add policy logic here when BatteryTipPolicy is implemented
doReturn(mBatteryTipLoader).when(mLoaderManager).getLoader( doReturn(mBatteryTipLoader)
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
doReturn(false).when(mBatteryTipLoader).isReset(); doReturn(false).when(mBatteryTipLoader).isReset();
mFragment.restartBatteryTipLoader(); mFragment.restartBatteryTipLoader();
verify(mLoaderManager).restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), verify(mLoaderManager)
eq(Bundle.EMPTY), any()); .restartLoader(
eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
} }
@Test @Test
public void restartBatteryTipLoader_nullLoader_initLoader() { public void restartBatteryTipLoader_nullLoader_initLoader() {
doReturn(null).when(mLoaderManager).getLoader( doReturn(null)
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
mFragment.restartBatteryTipLoader(); mFragment.restartBatteryTipLoader();
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), verify(mLoaderManager)
eq(Bundle.EMPTY), any()); .initLoader(
eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
} }
@Test @Test
public void restartBatteryTipLoader_loaderReset_initLoader() { public void restartBatteryTipLoader_loaderReset_initLoader() {
doReturn(mBatteryTipLoader).when(mLoaderManager).getLoader( doReturn(mBatteryTipLoader)
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
doReturn(true).when(mBatteryTipLoader).isReset(); doReturn(true).when(mBatteryTipLoader).isReset();
mFragment.restartBatteryTipLoader(); mFragment.restartBatteryTipLoader();
verify(mLoaderManager)
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), .initLoader(
eq(Bundle.EMPTY), any()); eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
} }
@Test @Test
public void refreshUi_contextNull_doNothing() { public void refreshUi_contextNull_doNothing() {
doReturn(null).when(mFragment).getContext(); doReturn(null).when(mFragment).getContext();
@@ -256,8 +251,10 @@ public class PowerUsageSummaryTest {
public void onResume_registerContentObserver() { public void onResume_registerContentObserver() {
mFragment.onResume(); mFragment.onResume();
verify(mContentResolver).registerContentObserver( verify(mContentResolver)
Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME), .registerContentObserver(
Settings.Global.getUriFor(
Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
false, false,
mFragment.mSettingsObserver); mFragment.mSettingsObserver);
} }
@@ -266,8 +263,7 @@ public class PowerUsageSummaryTest {
public void onPause_unregisterContentObserver() { public void onPause_unregisterContentObserver() {
mFragment.onPause(); mFragment.onPause();
verify(mContentResolver).unregisterContentObserver( verify(mContentResolver).unregisterContentObserver(mFragment.mSettingsObserver);
mFragment.mSettingsObserver);
} }
@Test @Test
@@ -276,8 +272,10 @@ public class PowerUsageSummaryTest {
mFragment.restartBatteryInfoLoader(); mFragment.restartBatteryInfoLoader();
verify(mLoaderManager, never()).restartLoader( verify(mLoaderManager, never())
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER, Bundle.EMPTY, .restartLoader(
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER,
Bundle.EMPTY,
mFragment.mBatteryInfoLoaderCallbacks); mFragment.mBatteryInfoLoaderCallbacks);
} }
@@ -287,45 +285,59 @@ public class PowerUsageSummaryTest {
mFragment.restartBatteryInfoLoader(); mFragment.restartBatteryInfoLoader();
verify(mLoaderManager, never()).restartLoader( verify(mLoaderManager, never())
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER, Bundle.EMPTY, .restartLoader(
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER,
Bundle.EMPTY,
mFragment.mBatteryInfoLoaderCallbacks); mFragment.mBatteryInfoLoaderCallbacks);
} }
@Test @Test
public void restartBatteryInfoLoader() { public void restartBatteryInfoLoader() {
doReturn(mBatteryInfoLoader).when(mLoaderManager).getLoader( doReturn(mBatteryInfoLoader)
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
doReturn(false).when(mBatteryTipLoader).isReset(); doReturn(false).when(mBatteryTipLoader).isReset();
mFragment.restartBatteryInfoLoader(); mFragment.restartBatteryInfoLoader();
verify(mLoaderManager).restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER), verify(mLoaderManager)
eq(Bundle.EMPTY), any()); .restartLoader(
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
eq(Bundle.EMPTY),
any());
} }
@Test @Test
public void restartBatteryInfoLoader_nullLoader_initLoader() { public void restartBatteryInfoLoader_nullLoader_initLoader() {
doReturn(null).when(mLoaderManager).getLoader( doReturn(null)
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
mFragment.restartBatteryInfoLoader(); mFragment.restartBatteryInfoLoader();
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER), verify(mLoaderManager)
eq(Bundle.EMPTY), any()); .initLoader(
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
eq(Bundle.EMPTY),
any());
} }
@Test @Test
public void restartBatteryInfoLoader_loaderReset_initLoader() { public void restartBatteryInfoLoader_loaderReset_initLoader() {
mFragment.setIsBatteryPresent(true); mFragment.setIsBatteryPresent(true);
doReturn(mBatteryInfoLoader).when(mLoaderManager).getLoader( doReturn(mBatteryInfoLoader)
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER); .when(mLoaderManager)
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
doReturn(true).when(mBatteryInfoLoader).isReset(); doReturn(true).when(mBatteryInfoLoader).isReset();
mFragment.restartBatteryInfoLoader(); mFragment.restartBatteryInfoLoader();
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER), verify(mLoaderManager)
eq(Bundle.EMPTY), any()); .initLoader(
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
eq(Bundle.EMPTY),
any());
} }
private static class TestFragment extends PowerUsageSummary { private static class TestFragment extends PowerUsageSummary {
@@ -357,5 +369,4 @@ public class PowerUsageSummaryTest {
return mLoaderManager; return mLoaderManager;
} }
} }
} }

View File

@@ -46,10 +46,8 @@ public final class ScreenOnTimeControllerTest {
private Context mContext; private Context mContext;
private ScreenOnTimeController mScreenOnTimeController; private ScreenOnTimeController mScreenOnTimeController;
@Mock @Mock private PreferenceCategory mRootPreference;
private PreferenceCategory mRootPreference; @Mock private TextViewPreference mScreenOnTimeTextPreference;
@Mock
private TextViewPreference mScreenOnTimeTextPreference;
@Before @Before
public void setUp() { public void setUp() {

View File

@@ -42,8 +42,7 @@ public final class SpinnerPreferenceTest {
private Context mContext; private Context mContext;
private SpinnerPreference mSpinnerPreference; private SpinnerPreference mSpinnerPreference;
@Mock @Mock private Spinner mMockSpinner;
private Spinner mMockSpinner;
@Before @Before
public void setUp() { public void setUp() {

View File

@@ -46,8 +46,8 @@ public final class TextViewPreferenceTest {
@Test @Test
public void constructor_returnExpectedResult() { public void constructor_returnExpectedResult() {
assertThat(mTextViewPreference.getLayoutResource()).isEqualTo( assertThat(mTextViewPreference.getLayoutResource())
R.layout.preference_text_view); .isEqualTo(R.layout.preference_text_view);
} }
@Test @Test

View File

@@ -36,11 +36,9 @@ public class TimestampUtilsTest {
@Test @Test
public void getNextHourTimestamp_returnExpectedResult() { public void getNextHourTimestamp_returnExpectedResult() {
// 2021-02-28 06:00:00 => 2021-02-28 07:00:00 // 2021-02-28 06:00:00 => 2021-02-28 07:00:00
assertThat(TimestampUtils.getNextHourTimestamp(1614463200000L)) assertThat(TimestampUtils.getNextHourTimestamp(1614463200000L)).isEqualTo(1614466800000L);
.isEqualTo(1614466800000L);
// 2021-12-31 23:59:59 => 2022-01-01 00:00:00 // 2021-12-31 23:59:59 => 2022-01-01 00:00:00
assertThat(TimestampUtils.getNextHourTimestamp(16409663999999L)) assertThat(TimestampUtils.getNextHourTimestamp(16409663999999L)).isEqualTo(16409664000000L);
.isEqualTo(16409664000000L);
} }
@Test @Test
@@ -66,11 +64,9 @@ public class TimestampUtilsTest {
@Test @Test
public void getTimestampOfNextDay_returnExpectedResult() { public void getTimestampOfNextDay_returnExpectedResult() {
// 2021-02-28 06:00:00 => 2021-03-01 00:00:00 // 2021-02-28 06:00:00 => 2021-03-01 00:00:00
assertThat(TimestampUtils.getNextDayTimestamp(1614463200000L)) assertThat(TimestampUtils.getNextDayTimestamp(1614463200000L)).isEqualTo(1614528000000L);
.isEqualTo(1614528000000L);
// 2021-12-31 16:00:00 => 2022-01-01 00:00:00 // 2021-12-31 16:00:00 => 2022-01-01 00:00:00
assertThat(TimestampUtils.getNextDayTimestamp(1640937600000L)) assertThat(TimestampUtils.getNextDayTimestamp(1640937600000L)).isEqualTo(1640966400000L);
.isEqualTo(1640966400000L);
} }
@Test @Test

View File

@@ -35,8 +35,8 @@ public final class AppUsageEventEntityTest {
final int instanceId = 100001; final int instanceId = 100001;
final String taskRootPackageName = "com.android.settings2"; final String taskRootPackageName = "com.android.settings2";
AppUsageEventEntity entity = AppUsageEventEntity AppUsageEventEntity entity =
.newBuilder() AppUsageEventEntity.newBuilder()
.setUid(uid) .setUid(uid)
.setUserId(userId) .setUserId(userId)
.setTimestamp(timestamp) .setTimestamp(timestamp)

View File

@@ -60,15 +60,16 @@ public final class BatteryEventDaoTest {
BatteryStateDatabase.setBatteryStateDatabase(/* database= */ null); BatteryStateDatabase.setBatteryStateDatabase(/* database= */ null);
} }
@Test @Test
public void getLastFullChargeTimestamp_normalFlow_expectedBehavior() throws Exception { public void getLastFullChargeTimestamp_normalFlow_expectedBehavior() throws Exception {
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(TIMESTAMP1) .setTimestamp(TIMESTAMP1)
.setBatteryEventType(3) .setBatteryEventType(3)
.setBatteryLevel(100) .setBatteryLevel(100)
.build()); .build());
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(TIMESTAMP2) .setTimestamp(TIMESTAMP2)
.setBatteryEventType(4) .setBatteryEventType(4)
.setBatteryLevel(96) .setBatteryLevel(96)
@@ -83,7 +84,8 @@ public final class BatteryEventDaoTest {
@Test @Test
public void getLastFullChargeTimestamp_noLastFullChargeTime_returns0() throws Exception { public void getLastFullChargeTimestamp_noLastFullChargeTime_returns0() throws Exception {
mBatteryEventDao.clearAll(); mBatteryEventDao.clearAll();
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(TIMESTAMP2) .setTimestamp(TIMESTAMP2)
.setBatteryEventType(4) .setBatteryEventType(4)
.setBatteryLevel(96) .setBatteryLevel(96)
@@ -98,12 +100,14 @@ public final class BatteryEventDaoTest {
@Test @Test
public void getAllAfter_normalFlow_returnExpectedResult() { public void getAllAfter_normalFlow_returnExpectedResult() {
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(100L) .setTimestamp(100L)
.setBatteryEventType(1) .setBatteryEventType(1)
.setBatteryLevel(66) .setBatteryLevel(66)
.build()); .build());
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(200L) .setTimestamp(200L)
.setBatteryEventType(2) .setBatteryEventType(2)
.setBatteryLevel(88) .setBatteryLevel(88)
@@ -112,12 +116,9 @@ public final class BatteryEventDaoTest {
final Cursor cursor = mBatteryEventDao.getAllAfter(160L, List.of(1, 2)); final Cursor cursor = mBatteryEventDao.getAllAfter(160L, List.of(1, 2));
assertThat(cursor.getCount()).isEqualTo(1); assertThat(cursor.getCount()).isEqualTo(1);
cursor.moveToFirst(); cursor.moveToFirst();
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))) assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(200L);
.isEqualTo(200L); assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(2);
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))) assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(88);
.isEqualTo(2);
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
.isEqualTo(88);
mBatteryEventDao.clearAll(); mBatteryEventDao.clearAll();
assertThat(mBatteryEventDao.getAll()).isEmpty(); assertThat(mBatteryEventDao.getAll()).isEmpty();
@@ -125,12 +126,14 @@ public final class BatteryEventDaoTest {
@Test @Test
public void getAllAfter_filterBatteryTypes_returnExpectedResult() { public void getAllAfter_filterBatteryTypes_returnExpectedResult() {
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(100L) .setTimestamp(100L)
.setBatteryEventType(1) .setBatteryEventType(1)
.setBatteryLevel(66) .setBatteryLevel(66)
.build()); .build());
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(200L) .setTimestamp(200L)
.setBatteryEventType(2) .setBatteryEventType(2)
.setBatteryLevel(88) .setBatteryLevel(88)
@@ -139,12 +142,9 @@ public final class BatteryEventDaoTest {
final Cursor cursor = mBatteryEventDao.getAllAfter(0L, List.of(1)); final Cursor cursor = mBatteryEventDao.getAllAfter(0L, List.of(1));
assertThat(cursor.getCount()).isEqualTo(1); assertThat(cursor.getCount()).isEqualTo(1);
cursor.moveToFirst(); cursor.moveToFirst();
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))) assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(100L);
.isEqualTo(100L); assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(1);
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))) assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(66);
.isEqualTo(1);
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
.isEqualTo(66);
mBatteryEventDao.clearAll(); mBatteryEventDao.clearAll();
assertThat(mBatteryEventDao.getAll()).isEmpty(); assertThat(mBatteryEventDao.getAll()).isEmpty();
@@ -152,12 +152,14 @@ public final class BatteryEventDaoTest {
@Test @Test
public void getAllAfter_filterTimestamp_returnExpectedResult() { public void getAllAfter_filterTimestamp_returnExpectedResult() {
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(100L) .setTimestamp(100L)
.setBatteryEventType(1) .setBatteryEventType(1)
.setBatteryLevel(66) .setBatteryLevel(66)
.build()); .build());
mBatteryEventDao.insert(BatteryEventEntity.newBuilder() mBatteryEventDao.insert(
BatteryEventEntity.newBuilder()
.setTimestamp(200L) .setTimestamp(200L)
.setBatteryEventType(1) .setBatteryEventType(1)
.setBatteryLevel(88) .setBatteryLevel(88)
@@ -166,12 +168,9 @@ public final class BatteryEventDaoTest {
final Cursor cursor = mBatteryEventDao.getAllAfter(200L, List.of(1)); final Cursor cursor = mBatteryEventDao.getAllAfter(200L, List.of(1));
assertThat(cursor.getCount()).isEqualTo(1); assertThat(cursor.getCount()).isEqualTo(1);
cursor.moveToFirst(); cursor.moveToFirst();
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))) assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(200L);
.isEqualTo(200L); assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(1);
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))) assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(88);
.isEqualTo(1);
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
.isEqualTo(88);
mBatteryEventDao.clearAll(); mBatteryEventDao.clearAll();
assertThat(mBatteryEventDao.getAll()).isEmpty(); assertThat(mBatteryEventDao.getAll()).isEmpty();

View File

@@ -32,8 +32,8 @@ public final class BatteryEventEntityTest {
final int batteryEventType = 1; final int batteryEventType = 1;
final int batteryLevel = 66; final int batteryLevel = 66;
BatteryEventEntity entity = BatteryEventEntity BatteryEventEntity entity =
.newBuilder() BatteryEventEntity.newBuilder()
.setTimestamp(timestamp) .setTimestamp(timestamp)
.setBatteryEventType(batteryEventType) .setBatteryEventType(batteryEventType)
.setBatteryLevel(batteryLevel) .setBatteryLevel(batteryLevel)

View File

@@ -57,7 +57,10 @@ public final class BatteryStateDaoTest {
BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP3, PACKAGE_NAME3); BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP3, PACKAGE_NAME3);
BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP2, PACKAGE_NAME2); BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP2, PACKAGE_NAME2);
BatteryTestUtils.insertDataToBatteryStateTable( BatteryTestUtils.insertDataToBatteryStateTable(
mContext, TIMESTAMP1, PACKAGE_NAME1, /*multiple=*/ true, mContext,
TIMESTAMP1,
PACKAGE_NAME1,
/* multiple= */ true,
/* isFullChargeStart= */ true); /* isFullChargeStart= */ true);
} }
@@ -142,23 +145,19 @@ public final class BatteryStateDaoTest {
@Test @Test
public void getDistinctTimestampCount_normalFlow_returnsExpectedResult() { public void getDistinctTimestampCount_normalFlow_returnsExpectedResult() {
assertThat(mBatteryStateDao.getDistinctTimestampCount(/*timestamp=*/ 0)) assertThat(mBatteryStateDao.getDistinctTimestampCount(/* timestamp= */ 0)).isEqualTo(3);
.isEqualTo(3); assertThat(mBatteryStateDao.getDistinctTimestampCount(TIMESTAMP1)).isEqualTo(2);
assertThat(mBatteryStateDao.getDistinctTimestampCount(TIMESTAMP1))
.isEqualTo(2);
} }
@Test @Test
public void getDistinctTimestamps_normalFlow_returnsExpectedResult() { public void getDistinctTimestamps_normalFlow_returnsExpectedResult() {
final List<Long> timestamps = final List<Long> timestamps = mBatteryStateDao.getDistinctTimestamps(/* timestamp= */ 0);
mBatteryStateDao.getDistinctTimestamps(/*timestamp=*/ 0);
assertThat(timestamps).hasSize(3); assertThat(timestamps).hasSize(3);
assertThat(timestamps).containsExactly(TIMESTAMP1, TIMESTAMP2, TIMESTAMP3); assertThat(timestamps).containsExactly(TIMESTAMP1, TIMESTAMP2, TIMESTAMP3);
} }
private static void assertBatteryState( private static void assertBatteryState(BatteryState state, long timestamp, String packageName) {
BatteryState state, long timestamp, String packageName) {
assertThat(state.timestamp).isEqualTo(timestamp); assertThat(state.timestamp).isEqualTo(timestamp);
assertThat(state.packageName).isEqualTo(packageName); assertThat(state.packageName).isEqualTo(packageName);
} }

View File

@@ -41,15 +41,13 @@ public final class BatteryStateTest {
@Before @Before
public void setUp() { public void setUp() {
final DeviceBatteryState deviceBatteryState = final DeviceBatteryState deviceBatteryState =
DeviceBatteryState DeviceBatteryState.newBuilder()
.newBuilder()
.setBatteryLevel(BATTERY_LEVEL) .setBatteryLevel(BATTERY_LEVEL)
.setBatteryStatus(BATTERY_STATUS) .setBatteryStatus(BATTERY_STATUS)
.setBatteryHealth(BATTERY_HEALTH) .setBatteryHealth(BATTERY_HEALTH)
.build(); .build();
mBatteryInformation = mBatteryInformation =
BatteryInformation BatteryInformation.newBuilder()
.newBuilder()
.setDeviceBatteryState(deviceBatteryState) .setDeviceBatteryState(deviceBatteryState)
.setBootTimestamp(101L) .setBootTimestamp(101L)
.setIsHidden(true) .setIsHidden(true)
@@ -78,8 +76,8 @@ public final class BatteryStateTest {
assertThat(state.timestamp).isEqualTo(100001L); assertThat(state.timestamp).isEqualTo(100001L);
assertThat(state.consumerType).isEqualTo(2); assertThat(state.consumerType).isEqualTo(2);
assertThat(state.isFullChargeCycleStart).isTrue(); assertThat(state.isFullChargeCycleStart).isTrue();
assertThat(state.batteryInformation).isEqualTo( assertThat(state.batteryInformation)
ConvertUtils.convertBatteryInformationToString(mBatteryInformation)); .isEqualTo(ConvertUtils.convertBatteryInformationToString(mBatteryInformation));
} }
private static BatteryState create(BatteryInformation batteryInformation) { private static BatteryState create(BatteryInformation batteryInformation) {

View File

@@ -31,8 +31,8 @@ public final class BatteryUsageSlotEntityTest {
final long timestamp = 10001L; final long timestamp = 10001L;
final String batteryUsageSlotString = "batteryUsageSlotString"; final String batteryUsageSlotString = "batteryUsageSlotString";
BatteryUsageSlotEntity entity = BatteryUsageSlotEntity BatteryUsageSlotEntity entity =
.newBuilder() BatteryUsageSlotEntity.newBuilder()
.setTimestamp(timestamp) .setTimestamp(timestamp)
.setBatteryUsageSlot(batteryUsageSlotString) .setBatteryUsageSlot(batteryUsageSlotString)
.build(); .build();