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:
@@ -78,7 +78,8 @@ import org.robolectric.util.ReflectionHelpers;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {
|
||||
@Config(
|
||||
shadows = {
|
||||
ShadowEntityHeaderController.class,
|
||||
ShadowActivityManager.class,
|
||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||
@@ -99,30 +100,19 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private FragmentActivity mActivity;
|
||||
@Mock
|
||||
private EntityHeaderController mEntityHeaderController;
|
||||
@Mock
|
||||
private LayoutPreference mHeaderPreference;
|
||||
@Mock
|
||||
private ApplicationsState mState;
|
||||
@Mock
|
||||
private ApplicationsState.AppEntry mAppEntry;
|
||||
@Mock
|
||||
private Bundle mBundle;
|
||||
@Mock
|
||||
private BatteryEntry mBatteryEntry;
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private InstallSourceInfo mInstallSourceInfo;
|
||||
@Mock
|
||||
private AppOpsManager mAppOpsManager;
|
||||
@Mock
|
||||
private LoaderManager mLoaderManager;
|
||||
@Mock
|
||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
@Mock
|
||||
private BackupManager mBackupManager;
|
||||
|
||||
@Mock private EntityHeaderController mEntityHeaderController;
|
||||
@Mock private LayoutPreference mHeaderPreference;
|
||||
@Mock private ApplicationsState mState;
|
||||
@Mock private ApplicationsState.AppEntry mAppEntry;
|
||||
@Mock private Bundle mBundle;
|
||||
@Mock private BatteryEntry mBatteryEntry;
|
||||
@Mock 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 PrimarySwitchPreference mAllowBackgroundUsagePreference;
|
||||
@@ -149,19 +139,26 @@ public class AdvancedPowerUsageDetailTest {
|
||||
doReturn(mLoaderManager).when(mFragment).getLoaderManager();
|
||||
|
||||
ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setButtonActions(anyInt(), anyInt());
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setIcon(nullable(Drawable.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable(
|
||||
ApplicationsState.AppEntry.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setIcon(nullable(ApplicationsState.AppEntry.class));
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setLabel(nullable(String.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setLabel(nullable(String.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setLabel(nullable(ApplicationsState.AppEntry.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setSummary(nullable(String.class));
|
||||
|
||||
when(mBatteryEntry.getUid()).thenReturn(UID);
|
||||
@@ -184,13 +181,15 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||
|
||||
Answer<Void> callable = invocation -> {
|
||||
Answer<Void> callable =
|
||||
invocation -> {
|
||||
mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||
System.out.println("mBundle = " + mBundle);
|
||||
return null;
|
||||
};
|
||||
doAnswer(callable).when(mActivity).startActivityAsUser(captor.capture(),
|
||||
nullable(UserHandle.class));
|
||||
doAnswer(callable)
|
||||
.when(mActivity)
|
||||
.startActivityAsUser(captor.capture(), nullable(UserHandle.class));
|
||||
doAnswer(callable).when(mActivity).startActivity(captor.capture());
|
||||
|
||||
mAllowBackgroundUsagePreference = new PrimarySwitchPreference(mContext);
|
||||
@@ -219,7 +218,9 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
@Test
|
||||
public void initHeader_HasAppEntry_BuildByAppEntry() {
|
||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
||||
ReflectionHelpers.setStaticField(
|
||||
AppUtils.class,
|
||||
"sInstantAppDataProvider",
|
||||
new InstantAppDataProvider() {
|
||||
@Override
|
||||
public boolean isInstantApp(ApplicationInfo info) {
|
||||
@@ -236,7 +237,9 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
@Test
|
||||
public void initHeader_HasAppEntry_InstantApp() {
|
||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
||||
ReflectionHelpers.setStaticField(
|
||||
AppUtils.class,
|
||||
"sInstantAppDataProvider",
|
||||
new InstantAppDataProvider() {
|
||||
@Override
|
||||
public boolean isInstantApp(ApplicationInfo info) {
|
||||
@@ -253,16 +256,13 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
@Test
|
||||
public void startBatteryDetailPage_invalidToShowSummary_noFGBDData() {
|
||||
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
|
||||
mBatteryEntry, USAGE_PERCENT);
|
||||
AdvancedPowerUsageDetail.startBatteryDetailPage(
|
||||
mActivity, mFragment, mBatteryEntry, USAGE_PERCENT);
|
||||
|
||||
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
|
||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME))
|
||||
.isEqualTo(0);
|
||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME))
|
||||
.isEqualTo(0);
|
||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_SCREEN_ON_TIME))
|
||||
.isEqualTo(0);
|
||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo(0);
|
||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo(0);
|
||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_SCREEN_ON_TIME)).isEqualTo(0);
|
||||
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
|
||||
.isEqualTo(USAGE_PERCENT);
|
||||
}
|
||||
@@ -276,18 +276,22 @@ public class AdvancedPowerUsageDetailTest {
|
||||
|
||||
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))
|
||||
.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))
|
||||
.isEqualTo("0%");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName() throws
|
||||
PackageManager.NameNotFoundException {
|
||||
public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName()
|
||||
throws PackageManager.NameNotFoundException {
|
||||
doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
|
||||
|
||||
AdvancedPowerUsageDetail.startBatteryDetailPage(
|
||||
|
@@ -88,8 +88,8 @@ public class AllowBackgroundPreferenceControllerTest {
|
||||
public void testUpdateState_isSystemOrDefaultAppAndRestrictedStates_prefChecked() {
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_RESTRICTED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_RESTRICTED);
|
||||
|
||||
mController.updateState(mMainSwitchPreference);
|
||||
|
||||
@@ -101,8 +101,8 @@ public class AllowBackgroundPreferenceControllerTest {
|
||||
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
|
||||
mController.updateState(mMainSwitchPreference);
|
||||
|
||||
@@ -113,8 +113,8 @@ public class AllowBackgroundPreferenceControllerTest {
|
||||
@Test
|
||||
public void testUpdateState_isRestrictedStates_prefChecked() {
|
||||
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_RESTRICTED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_RESTRICTED);
|
||||
|
||||
mController.updateState(mMainSwitchPreference);
|
||||
|
||||
@@ -125,8 +125,8 @@ public class AllowBackgroundPreferenceControllerTest {
|
||||
@Test
|
||||
public void testUpdateState_prefUnchecked() {
|
||||
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
|
||||
mController.updateState(mMainSwitchPreference);
|
||||
|
||||
|
@@ -91,26 +91,25 @@ public class AutoRestrictionPreferenceControllerTest {
|
||||
public void testGetAvailabilityStatus_smartBatterySupported_returnDisabled() {
|
||||
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
||||
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAvailabilityStatus_smartBatteryUnSupported_returnAvailable() {
|
||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
||||
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.AVAILABLE);
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.AVAILABLE);
|
||||
}
|
||||
|
||||
private void putAutoRestrictionValue(int value) {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.APP_AUTO_RESTRICTION_ENABLED,
|
||||
value);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(), Settings.Global.APP_AUTO_RESTRICTION_ENABLED, value);
|
||||
}
|
||||
|
||||
private int getAutoRestrictionValue() {
|
||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
||||
Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON);
|
||||
return Settings.Global.getInt(
|
||||
mContext.getContentResolver(), Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON);
|
||||
}
|
||||
}
|
||||
|
@@ -94,30 +94,20 @@ public final class BatteryBackupHelperTest {
|
||||
private BatteryBackupHelper mBatteryBackupHelper;
|
||||
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
||||
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private BackupDataOutput mBackupDataOutput;
|
||||
@Mock
|
||||
private BackupDataInputStream mBackupDataInputStream;
|
||||
@Mock
|
||||
private IDeviceIdleController mDeviceController;
|
||||
@Mock
|
||||
private IPackageManager mIPackageManager;
|
||||
@Mock
|
||||
private AppOpsManager mAppOpsManager;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
@Mock
|
||||
private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
@Mock
|
||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
@Mock private PackageManager mPackageManager;
|
||||
@Mock private BackupDataOutput mBackupDataOutput;
|
||||
@Mock private BackupDataInputStream mBackupDataInputStream;
|
||||
@Mock private IDeviceIdleController mDeviceController;
|
||||
@Mock private IPackageManager mIPackageManager;
|
||||
@Mock private AppOpsManager mAppOpsManager;
|
||||
@Mock private UserManager mUserManager;
|
||||
@Mock private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mPowerUsageFeatureProvider =
|
||||
FakeFeatureFactory.setupForTest().powerUsageFeatureProvider;
|
||||
mPowerUsageFeatureProvider = FakeFeatureFactory.setupForTest().powerUsageFeatureProvider;
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mStringWriter = new StringWriter();
|
||||
mPrintWriter = new PrintWriter(mStringWriter);
|
||||
@@ -199,8 +189,7 @@ public final class BatteryBackupHelperTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void backupOptimizationMode_backupOptimizationModeAndIgnoreSystemApp()
|
||||
throws Exception {
|
||||
public void backupOptimizationMode_backupOptimizationModeAndIgnoreSystemApp() throws Exception {
|
||||
final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
|
||||
createTestingData(PACKAGE_NAME1, UID1, PACKAGE_NAME2, PACKAGE_NAME3);
|
||||
// Sets "com.android.testing.1" as system app.
|
||||
@@ -294,8 +283,7 @@ public final class BatteryBackupHelperTest {
|
||||
// Invoke the restoreEntity() method 2nd time.
|
||||
mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
|
||||
|
||||
assertThat(TestUtils.getScheduledLevel(mContext))
|
||||
.isEqualTo(invalidScheduledLevel);
|
||||
assertThat(TestUtils.getScheduledLevel(mContext)).isEqualTo(invalidScheduledLevel);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -313,9 +301,14 @@ public final class BatteryBackupHelperTest {
|
||||
@Test
|
||||
public void restoreOptimizationMode_invalidModeFormat_skipRestore() throws Exception {
|
||||
final String invalidNumberFormat = "google";
|
||||
final String packageModes =
|
||||
PACKAGE_NAME1 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER +
|
||||
PACKAGE_NAME2 + DELIMITER_MODE + invalidNumberFormat;
|
||||
final String package1Mode = PACKAGE_NAME1
|
||||
+ DELIMITER_MODE
|
||||
+ MODE_RESTRICTED
|
||||
+ DELIMITER;
|
||||
final String package2Mode = PACKAGE_NAME2
|
||||
+ DELIMITER_MODE
|
||||
+ invalidNumberFormat;
|
||||
final String packageModes = package1Mode + package2Mode;
|
||||
|
||||
mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
|
||||
TimeUnit.SECONDS.sleep(1);
|
||||
@@ -328,10 +321,19 @@ public final class BatteryBackupHelperTest {
|
||||
|
||||
@Test
|
||||
public void restoreOptimizationMode_restoreExpectedModes() throws Exception {
|
||||
final String packageModes =
|
||||
PACKAGE_NAME1 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER +
|
||||
PACKAGE_NAME2 + DELIMITER_MODE + MODE_UNRESTRICTED + DELIMITER +
|
||||
PACKAGE_NAME3 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER;
|
||||
final String package1Mode = PACKAGE_NAME1
|
||||
+ DELIMITER_MODE
|
||||
+ MODE_RESTRICTED
|
||||
+ 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());
|
||||
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_MANUFACTURER, Build.MANUFACTURER);
|
||||
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_FINGERPRINT, Build.FINGERPRINT);
|
||||
inOrder.verify(mBackupDataOutput, never()).writeEntityHeader(
|
||||
eq(BatteryBackupHelper.KEY_BUILD_METADATA_1), anyInt());
|
||||
inOrder.verify(mBackupDataOutput, never())
|
||||
.writeEntityHeader(eq(BatteryBackupHelper.KEY_BUILD_METADATA_1), anyInt());
|
||||
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_METADATA_2, deviceMetadata);
|
||||
}
|
||||
|
||||
private void mockUid(int uid, String packageName) throws Exception {
|
||||
doReturn(uid).when(mPackageManager)
|
||||
doReturn(uid)
|
||||
.when(mPackageManager)
|
||||
.getPackageUid(packageName, PackageManager.GET_META_DATA);
|
||||
}
|
||||
|
||||
@@ -384,8 +387,8 @@ public final class BatteryBackupHelperTest {
|
||||
final Set<String> expectedResultSet =
|
||||
Set.of(expectedResult.split(BatteryBackupHelper.DELIMITER));
|
||||
|
||||
verify(mBackupDataOutput).writeEntityHeader(
|
||||
BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
|
||||
verify(mBackupDataOutput)
|
||||
.writeEntityHeader(BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
|
||||
verify(mBackupDataOutput).writeEntityData(captor.capture(), eq(expectedBytes.length));
|
||||
final String actualResult = new String(captor.getValue());
|
||||
final Set<String> actualResultSet =
|
||||
@@ -393,8 +396,9 @@ public final class BatteryBackupHelperTest {
|
||||
assertThat(actualResultSet).isEqualTo(expectedResultSet);
|
||||
}
|
||||
|
||||
private void createTestingData(String packageName1, int uid1, String packageName2,
|
||||
String packageName3) throws Exception {
|
||||
private void createTestingData(
|
||||
String packageName1, int uid1, String packageName2, String packageName3)
|
||||
throws Exception {
|
||||
// Sets the getInstalledApplications() method for testing.
|
||||
final UserInfo userInfo =
|
||||
new UserInfo(/* userId= */ 0, /* userName= */ "google", /* flag= */ 0);
|
||||
@@ -413,8 +417,10 @@ public final class BatteryBackupHelperTest {
|
||||
applicationInfo3.uid = 3;
|
||||
applicationInfo3.packageName = packageName3;
|
||||
applicationInfo3.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
||||
doReturn(new ParceledListSlice<ApplicationInfo>(
|
||||
Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3)))
|
||||
doReturn(
|
||||
new ParceledListSlice<ApplicationInfo>(
|
||||
Arrays.asList(
|
||||
applicationInfo1, applicationInfo2, applicationInfo3)))
|
||||
.when(mIPackageManager)
|
||||
.getInstalledApplications(anyLong(), anyInt());
|
||||
// Sets the AppOpsManager for checkOpNoThrow() method.
|
||||
@@ -434,8 +440,8 @@ public final class BatteryBackupHelperTest {
|
||||
new ArraySet<>(Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3));
|
||||
}
|
||||
|
||||
private void verifyBackupData(
|
||||
InOrder inOrder, String dataKey, String dataContent) throws Exception {
|
||||
private void verifyBackupData(InOrder inOrder, String dataKey, String dataContent)
|
||||
throws Exception {
|
||||
final byte[] expectedBytes = dataContent.getBytes();
|
||||
inOrder.verify(mBackupDataOutput).writeEntityHeader(dataKey, expectedBytes.length);
|
||||
inOrder.verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length);
|
||||
|
@@ -54,8 +54,7 @@ public class BatteryBroadcastReceiverTest {
|
||||
private static final int BATTERY_INTENT_LEVEL = 80;
|
||||
private static final int BATTERY_INTENT_SCALE = 100;
|
||||
|
||||
@Mock
|
||||
private BatteryBroadcastReceiver.OnBatteryChangedListener mBatteryListener;
|
||||
@Mock private BatteryBroadcastReceiver.OnBatteryChangedListener mBatteryListener;
|
||||
private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
|
||||
private Context mContext;
|
||||
private Intent mChargingIntent;
|
||||
@@ -75,8 +74,8 @@ public class BatteryBroadcastReceiverTest {
|
||||
mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED);
|
||||
mChargingIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_INTENT_LEVEL);
|
||||
mChargingIntent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_INTENT_SCALE);
|
||||
mChargingIntent
|
||||
.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
|
||||
mChargingIntent.putExtra(
|
||||
BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -85,8 +84,10 @@ public class BatteryBroadcastReceiverTest {
|
||||
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
|
||||
.isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(
|
||||
Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false));
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryStatus)
|
||||
.isEqualTo(
|
||||
Utils.getBatteryStatus(
|
||||
mContext, mChargingIntent, /* compactStatus= */ false));
|
||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL);
|
||||
}
|
||||
|
||||
@@ -103,7 +104,8 @@ public class BatteryBroadcastReceiverTest {
|
||||
|
||||
@Test
|
||||
public void onReceive_chargingStatusChanged_dataUpdated() {
|
||||
mChargingIntent.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
mChargingIntent.putExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||
mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent);
|
||||
|
||||
@@ -123,8 +125,8 @@ public class BatteryBroadcastReceiverTest {
|
||||
|
||||
@Test
|
||||
public void onReceive_powerSaveModeChanged_listenerInvoked() {
|
||||
mBatteryBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
|
||||
mBatteryBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
|
||||
|
||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_SAVER);
|
||||
}
|
||||
@@ -150,16 +152,16 @@ public class BatteryBroadcastReceiverTest {
|
||||
|
||||
@Test
|
||||
public void onReceive_dockDefenderBypassed_listenerInvoked() {
|
||||
mBatteryBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(BatteryUtils.BYPASS_DOCK_DEFENDER_ACTION));
|
||||
mBatteryBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(BatteryUtils.BYPASS_DOCK_DEFENDER_ACTION));
|
||||
|
||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onReceive_usbPortComplianceChanged_listenerInvoked() {
|
||||
mBatteryBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(UsbManager.ACTION_USB_PORT_COMPLIANCE_CHANGED));
|
||||
mBatteryBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(UsbManager.ACTION_USB_PORT_COMPLIANCE_CHANGED));
|
||||
|
||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
|
||||
}
|
||||
@@ -173,8 +175,10 @@ public class BatteryBroadcastReceiverTest {
|
||||
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
|
||||
.isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(
|
||||
Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false));
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryStatus)
|
||||
.isEqualTo(
|
||||
Utils.getBatteryStatus(
|
||||
mContext, mChargingIntent, /* compactStatus= */ false));
|
||||
assertThat(mBatteryBroadcastReceiver.mBatteryHealth)
|
||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
||||
assertThat(mBatteryBroadcastReceiver.mChargingStatus)
|
||||
@@ -188,7 +192,8 @@ public class BatteryBroadcastReceiverTest {
|
||||
mBatteryBroadcastReceiver.register();
|
||||
|
||||
ArgumentCaptor<IntentFilter> captor = ArgumentCaptor.forClass(IntentFilter.class);
|
||||
verify(mContext).registerReceiver(
|
||||
verify(mContext)
|
||||
.registerReceiver(
|
||||
eq(mBatteryBroadcastReceiver),
|
||||
captor.capture(),
|
||||
eq(Context.RECEIVER_EXPORTED));
|
||||
|
@@ -68,22 +68,14 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
private static final String TIME_LEFT = "2h30min";
|
||||
private static final String BATTERY_STATUS = "Charging";
|
||||
|
||||
@Mock
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock
|
||||
private BatteryInfo mBatteryInfo;
|
||||
@Mock
|
||||
private EntityHeaderController mEntityHeaderController;
|
||||
@Mock
|
||||
private UsageProgressBarPreference mBatteryUsageProgressBarPref;
|
||||
@Mock
|
||||
private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
|
||||
@Mock
|
||||
private UsbPort mUsbPort;
|
||||
@Mock
|
||||
private UsbManager mUsbManager;
|
||||
@Mock
|
||||
private UsbPortStatus mUsbPortStatus;
|
||||
@Mock private PreferenceScreen mPreferenceScreen;
|
||||
@Mock private BatteryInfo mBatteryInfo;
|
||||
@Mock private EntityHeaderController mEntityHeaderController;
|
||||
@Mock private UsageProgressBarPreference mBatteryUsageProgressBarPref;
|
||||
@Mock private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
|
||||
@Mock private UsbPort mUsbPort;
|
||||
@Mock private UsbManager mUsbManager;
|
||||
@Mock private UsbPortStatus mUsbPortStatus;
|
||||
|
||||
private BatteryHeaderPreferenceController mController;
|
||||
private Context mContext;
|
||||
@@ -104,7 +96,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
mBatteryIntent.putExtra(BatteryManager.EXTRA_PLUGGED, 1);
|
||||
doReturn(mBatteryIntent).when(mContext).registerReceiver(any(), any());
|
||||
|
||||
doReturn(mBatteryUsageProgressBarPref).when(mPreferenceScreen)
|
||||
doReturn(mBatteryUsageProgressBarPref)
|
||||
.when(mPreferenceScreen)
|
||||
.findPreference(BatteryHeaderPreferenceController.KEY_BATTERY_HEADER);
|
||||
|
||||
mBatteryInfo.batteryLevel = BATTERY_LEVEL;
|
||||
@@ -235,8 +228,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
@Test
|
||||
public void updateHeaderByBatteryTips_lowBatteryTip_showLowBattery() {
|
||||
setChargingState(/* isDischarging */ true, /* updatedByStatusFeature */ false);
|
||||
BatteryTip lowBatteryTip = new LowBatteryTip(
|
||||
BatteryTip.StateType.NEW, /* powerSaveModeOn */false);
|
||||
BatteryTip lowBatteryTip =
|
||||
new LowBatteryTip(BatteryTip.StateType.NEW, /* powerSaveModeOn */ false);
|
||||
|
||||
mController.updateHeaderByBatteryTips(lowBatteryTip, mBatteryInfo);
|
||||
|
||||
@@ -265,8 +258,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void updateHeaderByBatteryTips_noBatteryInfo_noAction() {
|
||||
BatteryTip lowBatteryTip = new LowBatteryTip(
|
||||
BatteryTip.StateType.NEW, /* powerSaveModeOn */false);
|
||||
BatteryTip lowBatteryTip =
|
||||
new LowBatteryTip(BatteryTip.StateType.NEW, /* powerSaveModeOn */ false);
|
||||
|
||||
mController.updateHeaderByBatteryTips(lowBatteryTip, null);
|
||||
|
||||
@@ -288,7 +281,9 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
|
||||
mController.updateHeaderPreference(mBatteryInfo);
|
||||
|
||||
verify(mBatteryUsageProgressBarPref).setBottomSummary(mContext.getString(
|
||||
verify(mBatteryUsageProgressBarPref)
|
||||
.setBottomSummary(
|
||||
mContext.getString(
|
||||
com.android.settingslib.R.string.battery_info_status_not_charging));
|
||||
}
|
||||
|
||||
@@ -302,8 +297,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_returnAvailableUnsearchable() {
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -319,12 +314,13 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
public void displayPreference_init_showLoading() {
|
||||
mController.displayPreference(mPreferenceScreen);
|
||||
|
||||
verify(mBatteryUsageProgressBarPref).setBottomSummary(
|
||||
mContext.getString(R.string.settings_license_activity_loading));
|
||||
verify(mBatteryUsageProgressBarPref)
|
||||
.setBottomSummary(mContext.getString(R.string.settings_license_activity_loading));
|
||||
}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
@@ -333,7 +329,7 @@ public class BatteryHeaderPreferenceControllerTest {
|
||||
mBatteryInfo.statusLabel = BATTERY_STATUS;
|
||||
mBatteryInfo.discharging = isDischarging;
|
||||
|
||||
when(mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(
|
||||
mController, mBatteryInfo)).thenReturn(updatedByStatusFeature);
|
||||
when(mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(mController, mBatteryInfo))
|
||||
.thenReturn(updatedByStatusFeature);
|
||||
}
|
||||
}
|
||||
|
@@ -46,10 +46,8 @@ public class BatteryInfoLoaderTest {
|
||||
|
||||
private static final long TEST_TIME_REMAINING = 1000L;
|
||||
|
||||
@Mock
|
||||
private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
|
||||
private Context mContext;
|
||||
|
||||
|
@@ -72,11 +72,11 @@ public class BatteryInfoTest {
|
||||
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 long TEST_CHARGE_TIME_REMAINING = TimeUnit.MINUTES.toMicros(1);
|
||||
private static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED =
|
||||
"1 min left until full";
|
||||
private static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED = "1 min left until full";
|
||||
private static final String TEST_BATTERY_LEVEL_10 = "10%";
|
||||
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 */
|
||||
false, /* isBasedOnUsage */
|
||||
1000 /* averageDischargeTime */);
|
||||
@@ -85,8 +85,7 @@ public class BatteryInfoTest {
|
||||
private Intent mChargingBatteryBroadcast;
|
||||
private Context mContext;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -99,15 +98,20 @@ public class BatteryInfoTest {
|
||||
mChargingBatteryBroadcast = BatteryTestUtils.getChargingIntent();
|
||||
|
||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
|
||||
0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_hasStatusLabel() {
|
||||
doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getBatteryTimeRemainingMs();
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext,
|
||||
mDisChargingBatteryBroadcast, mBatteryUsageStats,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfoOld(
|
||||
mContext,
|
||||
mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
true /* shortString */);
|
||||
|
||||
@@ -117,8 +121,13 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_doNotShowChargingMethod_hasRemainingTime() {
|
||||
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */);
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfoOld(
|
||||
mContext,
|
||||
mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.chargeLabel.toString()).isEqualTo(STATUS_CHARGING_TIME);
|
||||
}
|
||||
@@ -126,8 +135,13 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_doNotShowChargingMethod_noRemainingTime() {
|
||||
doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */);
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfoOld(
|
||||
mContext,
|
||||
mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.chargeLabel.toString()).ignoringCase().isEqualTo(STATUS_CHARGING_NO_TIME);
|
||||
}
|
||||
@@ -135,9 +149,15 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_pluggedInUsingShortString_usesCorrectData() {
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
||||
.when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */);
|
||||
.when(mBatteryUsageStats)
|
||||
.getChargeTimeRemainingMs();
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfoOld(
|
||||
mContext,
|
||||
mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
true /* shortString */);
|
||||
|
||||
assertThat(info.discharging).isEqualTo(false);
|
||||
assertThat(info.chargeLabel.toString()).isEqualTo("50% - 1 min left until full");
|
||||
@@ -145,14 +165,26 @@ public class BatteryInfoTest {
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_basedOnUsageTrueMoreThanFifteenMinutes_usesCorrectString() {
|
||||
Estimate estimate = new Estimate(Duration.ofHours(4).toMillis(),
|
||||
Estimate estimate =
|
||||
new Estimate(
|
||||
Duration.ofHours(4).toMillis(),
|
||||
true /* isBasedOnUsage */,
|
||||
1000 /* averageDischargeTime */);
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
estimate,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info2 =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
estimate,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
true /* shortString */);
|
||||
|
||||
// Both long and short strings should not have extra text
|
||||
@@ -165,11 +197,18 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
@Ignore
|
||||
public void getBatteryInfo_MoreThanOneDay_suggestionLabelIsCorrectString() {
|
||||
Estimate estimate = new Estimate(Duration.ofDays(3).toMillis(),
|
||||
Estimate estimate =
|
||||
new Estimate(
|
||||
Duration.ofDays(3).toMillis(),
|
||||
true /* isBasedOnUsage */,
|
||||
1000 /* averageDischargeTime */);
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
estimate,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.suggestionLabel).doesNotContain(BATTERY_RUN_OUT_PREFIX);
|
||||
@@ -177,11 +216,21 @@ public class BatteryInfoTest {
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_basedOnUsageFalse_usesDefaultString() {
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info2 =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
true /* shortString */);
|
||||
|
||||
assertThat(info.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
|
||||
@@ -191,10 +240,16 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_charging_usesChargeTime() {
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
||||
.when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
.when(mBatteryUsageStats)
|
||||
.getChargeTimeRemainingMs();
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.remainingTimeUs).isEqualTo(TEST_CHARGE_TIME_REMAINING);
|
||||
@@ -206,8 +261,13 @@ public class BatteryInfoTest {
|
||||
public void testGetBatteryInfo_pluggedInWithFullBattery_onlyShowBatteryLevel() {
|
||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 100);
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.chargeLabel).isEqualTo("100%");
|
||||
@@ -215,14 +275,18 @@ public class BatteryInfoTest {
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_chargingWithDefender_updateChargeLabel() {
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING)
|
||||
.when(mBatteryUsageStats)
|
||||
.getChargeTimeRemainingMs();
|
||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
mChargingBatteryBroadcast.putExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.isBatteryDefender).isTrue();
|
||||
@@ -231,30 +295,32 @@ public class BatteryInfoTest {
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_getChargeTimeRemaining_updateSettingsGlobal() {
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING)
|
||||
.when(mBatteryUsageStats)
|
||||
.getChargeTimeRemainingMs();
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
|
||||
BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(
|
||||
TEST_CHARGE_TIME_REMAINING);
|
||||
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext))
|
||||
.isEqualTo(TEST_CHARGE_TIME_REMAINING);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetBatteryInfo_differentChargeTimeRemaining_updateSettingsGlobal() {
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING)
|
||||
.when(mBatteryUsageStats)
|
||||
.getChargeTimeRemainingMs();
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
final long newTimeToFull = 300L;
|
||||
doReturn(newTimeToFull)
|
||||
.when(mBatteryUsageStats)
|
||||
.getChargeTimeRemainingMs();
|
||||
doReturn(newTimeToFull).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
|
||||
BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
mChargingBatteryBroadcast,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(newTimeToFull);
|
||||
@@ -263,17 +329,26 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_dockDefenderActive_updateChargeString() {
|
||||
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
||||
.when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
.when(mBatteryUsageStats)
|
||||
.getChargeTimeRemainingMs();
|
||||
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||
Intent intent = BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
Intent intent =
|
||||
BatteryTestUtils.getCustomBatteryIntent(
|
||||
BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
50 /* level */,
|
||||
100 /* scale */,
|
||||
BatteryManager.BATTERY_STATUS_CHARGING)
|
||||
.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
.putExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, intent,
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
intent,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_PAUSED);
|
||||
@@ -282,17 +357,24 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_dockDefenderTemporarilyBypassed_updateChargeLabel() {
|
||||
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 1);
|
||||
mChargingBatteryBroadcast.putExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
|
||||
1);
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
|
||||
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
BatteryTestUtils.getCustomBatteryIntent(
|
||||
BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
50 /* level */,
|
||||
100 /* scale */,
|
||||
BatteryManager.BATTERY_STATUS_CHARGING),
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_TIME);
|
||||
@@ -301,15 +383,20 @@ public class BatteryInfoTest {
|
||||
@Test
|
||||
public void testGetBatteryInfo_dockDefenderFutureBypass_updateChargeLabel() {
|
||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
||||
BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
mChargingBatteryBroadcast.putExtra(
|
||||
BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
|
||||
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
BatteryTestUtils.getCustomBatteryIntent(
|
||||
BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
50 /* level */,
|
||||
100 /* scale */,
|
||||
BatteryManager.BATTERY_STATUS_CHARGING),
|
||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
||||
mBatteryUsageStats,
|
||||
MOCK_ESTIMATE,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false /* shortString */);
|
||||
|
||||
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.
|
||||
private void mockBatteryStatsHistory() {
|
||||
// Mock out new data every time iterateBatteryStatsHistory is called.
|
||||
doAnswer(invocation -> {
|
||||
BatteryStatsHistoryIterator iterator = mock(BatteryStatsHistoryIterator.class);
|
||||
when(iterator.next()).thenReturn(
|
||||
doAnswer(
|
||||
invocation -> {
|
||||
BatteryStatsHistoryIterator iterator =
|
||||
mock(BatteryStatsHistoryIterator.class);
|
||||
when(iterator.next())
|
||||
.thenReturn(
|
||||
makeHistoryIterm(1000, 99),
|
||||
makeHistoryIterm(1500, 98),
|
||||
makeHistoryIterm(2000, 97),
|
||||
null);
|
||||
return iterator;
|
||||
}).when(mBatteryUsageStats).iterateBatteryStatsHistory();
|
||||
})
|
||||
.when(mBatteryUsageStats)
|
||||
.iterateBatteryStatsHistory();
|
||||
}
|
||||
|
||||
private BatteryStats.HistoryItem makeHistoryIterm(long time, int batteryLevel) {
|
||||
@@ -373,7 +465,8 @@ public class BatteryInfoTest {
|
||||
pointsExpected.append(2000, 96);
|
||||
pointsExpected.append(2500, 95);
|
||||
pointsExpected.append(3000, 94);
|
||||
doReturn(pointsExpected).when(mFeatureFactory.powerUsageFeatureProvider)
|
||||
doReturn(pointsExpected)
|
||||
.when(mFeatureFactory.powerUsageFeatureProvider)
|
||||
.getEnhancedBatteryPredictionCurve(any(Context.class), anyLong());
|
||||
|
||||
info.bindHistory(view);
|
||||
@@ -390,14 +483,21 @@ public class BatteryInfoTest {
|
||||
} else {
|
||||
doReturn(0L).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||
}
|
||||
Estimate batteryEstimate = new Estimate(
|
||||
Estimate batteryEstimate =
|
||||
new Estimate(
|
||||
estimate ? 1000 : 0,
|
||||
false /* isBasedOnUsage */,
|
||||
1000 /* averageDischargeTime */);
|
||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
|
||||
BatteryInfo info =
|
||||
BatteryInfo.getBatteryInfo(
|
||||
mContext,
|
||||
charging ? mChargingBatteryBroadcast : mDisChargingBatteryBroadcast,
|
||||
mBatteryUsageStats, batteryEstimate, SystemClock.elapsedRealtime() * 1000, false);
|
||||
doReturn(enhanced).when(mFeatureFactory.powerUsageFeatureProvider)
|
||||
mBatteryUsageStats,
|
||||
batteryEstimate,
|
||||
SystemClock.elapsedRealtime() * 1000,
|
||||
false);
|
||||
doReturn(enhanced)
|
||||
.when(mFeatureFactory.powerUsageFeatureProvider)
|
||||
.isEnhancedBatteryPredictionEnabled(mContext);
|
||||
return info;
|
||||
}
|
||||
|
@@ -39,12 +39,9 @@ public class BatteryMeterViewTest {
|
||||
private static final int BATTERY_CRITICAL_LEVEL = 15;
|
||||
private static final int BATTERY_LOW_LEVEL = 3;
|
||||
|
||||
@Mock
|
||||
private ColorFilter mErrorColorFilter;
|
||||
@Mock
|
||||
private ColorFilter mAccentColorFilter;
|
||||
@Mock
|
||||
private ColorFilter mForegroundColorFilter;
|
||||
@Mock private ColorFilter mErrorColorFilter;
|
||||
@Mock private ColorFilter mAccentColorFilter;
|
||||
@Mock private ColorFilter mForegroundColorFilter;
|
||||
private Context mContext;
|
||||
private BatteryMeterView mBatteryMeterView;
|
||||
private BatteryMeterView.BatteryMeterDrawable mDrawable;
|
||||
|
@@ -57,8 +57,7 @@ public final class BatteryOptimizeLogUtilsTest {
|
||||
BatteryOptimizeLogUtils.writeLog(mContext, Action.APPLY, "pkg1", "logs");
|
||||
BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
|
||||
|
||||
assertThat(mTestStringWriter.toString()).contains(
|
||||
"pkg1\taction:APPLY\tevent:logs");
|
||||
assertThat(mTestStringWriter.toString()).contains("pkg1\taction:APPLY\tevent:logs");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -98,8 +98,7 @@ public class BatteryOptimizeUtilsTest {
|
||||
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||
|
||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.isEqualTo(MODE_RESTRICTED);
|
||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_RESTRICTED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -108,8 +107,7 @@ public class BatteryOptimizeUtilsTest {
|
||||
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||
|
||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.isEqualTo(MODE_UNRESTRICTED);
|
||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_UNRESTRICTED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -118,8 +116,7 @@ public class BatteryOptimizeUtilsTest {
|
||||
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||
|
||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.isEqualTo(MODE_OPTIMIZED);
|
||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_OPTIMIZED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -168,7 +165,6 @@ public class BatteryOptimizeUtilsTest {
|
||||
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||
|
||||
|
||||
mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED, Action.UNKNOWN);
|
||||
TimeUnit.SECONDS.sleep(1);
|
||||
|
||||
@@ -205,7 +201,8 @@ public class BatteryOptimizeUtilsTest {
|
||||
|
||||
@Test
|
||||
public void testGetInstalledApplications_returnEmptyArray() {
|
||||
assertTrue(BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager)
|
||||
assertTrue(
|
||||
BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager)
|
||||
.isEmpty());
|
||||
}
|
||||
|
||||
@@ -242,8 +239,13 @@ public class BatteryOptimizeUtilsTest {
|
||||
applicationInfo4.enabled = true;
|
||||
applicationInfo4.uid = 4;
|
||||
applicationInfo4.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
|
||||
doReturn(new ParceledListSlice<ApplicationInfo>(
|
||||
Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3, applicationInfo4)))
|
||||
doReturn(
|
||||
new ParceledListSlice<ApplicationInfo>(
|
||||
Arrays.asList(
|
||||
applicationInfo1,
|
||||
applicationInfo2,
|
||||
applicationInfo3,
|
||||
applicationInfo4)))
|
||||
.when(mMockIPackageManager)
|
||||
.getInstalledApplications(anyLong(), anyInt());
|
||||
|
||||
@@ -260,7 +262,8 @@ public class BatteryOptimizeUtilsTest {
|
||||
@Test
|
||||
public void testResetAppOptimizationMode_Optimized_verifyAction() throws Exception {
|
||||
runTestForResetWithMode(
|
||||
AppOpsManager.MODE_ALLOWED, /* allowListed */ false,
|
||||
AppOpsManager.MODE_ALLOWED, /* allowListed */
|
||||
false,
|
||||
/* isSystemOrDefaultApp */ false);
|
||||
|
||||
verifyNoInteractions(mMockBatteryUtils);
|
||||
@@ -274,7 +277,8 @@ public class BatteryOptimizeUtilsTest {
|
||||
@Test
|
||||
public void testResetAppOptimizationMode_SystemOrDefault_verifyAction() throws Exception {
|
||||
runTestForResetWithMode(
|
||||
AppOpsManager.MODE_ALLOWED, /* allowListed */ true,
|
||||
AppOpsManager.MODE_ALLOWED, /* allowListed */
|
||||
true,
|
||||
/* isSystemOrDefaultApp */ true);
|
||||
|
||||
verifyNoInteractions(mMockBatteryUtils);
|
||||
@@ -289,7 +293,8 @@ public class BatteryOptimizeUtilsTest {
|
||||
@Test
|
||||
public void testResetAppOptimizationMode_Restricted_verifyAction() throws Exception {
|
||||
runTestForResetWithMode(
|
||||
AppOpsManager.MODE_IGNORED, /* allowListed */ false,
|
||||
AppOpsManager.MODE_IGNORED, /* allowListed */
|
||||
false,
|
||||
/* isSystemOrDefaultApp */ false);
|
||||
|
||||
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
||||
@@ -298,7 +303,8 @@ public class BatteryOptimizeUtilsTest {
|
||||
@Test
|
||||
public void testResetAppOptimizationMode_Unrestricted_verifyAction() throws Exception {
|
||||
runTestForResetWithMode(
|
||||
AppOpsManager.MODE_ALLOWED, /* allowListed */ true,
|
||||
AppOpsManager.MODE_ALLOWED, /* allowListed */
|
||||
true,
|
||||
/* isSystemOrDefaultApp */ false);
|
||||
|
||||
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
||||
@@ -314,26 +320,22 @@ public class BatteryOptimizeUtilsTest {
|
||||
applicationInfo.uid = UID;
|
||||
applicationInfo.packageName = PACKAGE_NAME;
|
||||
applicationInfo.enabled = true;
|
||||
doReturn(new ParceledListSlice<ApplicationInfo>(
|
||||
Arrays.asList(applicationInfo)))
|
||||
doReturn(new ParceledListSlice<ApplicationInfo>(Arrays.asList(applicationInfo)))
|
||||
.when(mMockIPackageManager)
|
||||
.getInstalledApplications(anyLong(), anyInt());
|
||||
|
||||
doReturn(appStandbyMode)
|
||||
.when(mMockAppOpsManager)
|
||||
.checkOpNoThrow(anyInt(), anyInt(), anyString());
|
||||
doReturn(allowListed)
|
||||
.when(mMockBackend)
|
||||
.isAllowlisted(anyString(), anyInt());
|
||||
doReturn(isSystemOrDefaultApp)
|
||||
.when(mMockBackend)
|
||||
.isSysAllowlisted(anyString());
|
||||
doReturn(isSystemOrDefaultApp)
|
||||
.when(mMockBackend)
|
||||
.isDefaultActiveApp(anyString(), anyInt());
|
||||
doReturn(allowListed).when(mMockBackend).isAllowlisted(anyString(), anyInt());
|
||||
doReturn(isSystemOrDefaultApp).when(mMockBackend).isSysAllowlisted(anyString());
|
||||
doReturn(isSystemOrDefaultApp).when(mMockBackend).isDefaultActiveApp(anyString(), anyInt());
|
||||
|
||||
BatteryOptimizeUtils.resetAppOptimizationMode(
|
||||
mContext, mMockIPackageManager, mMockAppOpsManager, mMockBackend,
|
||||
mContext,
|
||||
mMockIPackageManager,
|
||||
mMockAppOpsManager,
|
||||
mMockBackend,
|
||||
mMockBatteryUtils);
|
||||
TimeUnit.SECONDS.sleep(1);
|
||||
}
|
||||
|
@@ -21,11 +21,9 @@ import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
import android.util.Pair;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
|
||||
@@ -41,10 +39,8 @@ import org.robolectric.util.ReflectionHelpers;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class BatterySaverControllerTest {
|
||||
|
||||
@Mock
|
||||
private Preference mBatterySaverPref;
|
||||
@Mock
|
||||
private PowerManager mPowerManager;
|
||||
@Mock private Preference mBatterySaverPref;
|
||||
@Mock private PowerManager mPowerManager;
|
||||
|
||||
private BatterySaverController mBatterySaverController;
|
||||
private Context mContext;
|
||||
@@ -58,8 +54,8 @@ public class BatterySaverControllerTest {
|
||||
ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
|
||||
ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
|
||||
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -84,8 +80,8 @@ public class BatterySaverControllerTest {
|
||||
@Test
|
||||
public void getSummary_batterySaverOffButScheduled_showSummaryScheduled() {
|
||||
when(mPowerManager.isPowerSaveMode()).thenReturn(false);
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 15);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 15);
|
||||
|
||||
assertThat(mBatterySaverController.getSummary()).isEqualTo("Will turn on at 15%");
|
||||
}
|
||||
@@ -93,8 +89,8 @@ public class BatterySaverControllerTest {
|
||||
@Test
|
||||
public void getSummary_batterySaverOffButScheduledZeroPercent_showSummaryOff() {
|
||||
when(mPowerManager.isPowerSaveMode()).thenReturn(false);
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||
|
||||
assertThat(mBatterySaverController.getSummary()).isEqualTo("Off");
|
||||
}
|
||||
@@ -107,8 +103,8 @@ public class BatterySaverControllerTest {
|
||||
Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
|
||||
|
||||
assertThat(mBatterySaverController.getSummary()).
|
||||
isEqualTo("Will turn on based on your routine");
|
||||
assertThat(mBatterySaverController.getSummary())
|
||||
.isEqualTo("Will turn on based on your routine");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -32,10 +32,8 @@ import org.robolectric.RobolectricTestRunner;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class BatterySaverReceiverTest {
|
||||
|
||||
@Mock
|
||||
private BatterySaverReceiver.BatterySaverListener mBatterySaverListener;
|
||||
@Mock
|
||||
private Context mContext;
|
||||
@Mock private BatterySaverReceiver.BatterySaverListener mBatterySaverListener;
|
||||
@Mock private Context mContext;
|
||||
private BatterySaverReceiver mBatterySaverReceiver;
|
||||
|
||||
@Before
|
||||
|
@@ -56,18 +56,15 @@ import java.util.Arrays;
|
||||
@Config(shadows = {BatterySettingsMigrateCheckerTest.ShadowUserHandle.class})
|
||||
public final class BatterySettingsMigrateCheckerTest {
|
||||
|
||||
private static final Intent BOOT_COMPLETED_INTENT =
|
||||
new Intent(Intent.ACTION_BOOT_COMPLETED);
|
||||
private static final Intent BOOT_COMPLETED_INTENT = new Intent(Intent.ACTION_BOOT_COMPLETED);
|
||||
private static final int UID = 2003;
|
||||
private static final String PACKAGE_NAME = "com.android.test.app";
|
||||
|
||||
private Context mContext;
|
||||
private BatterySettingsMigrateChecker mBatterySettingsMigrateChecker;
|
||||
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
@Mock private PackageManager mPackageManager;
|
||||
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
@@ -76,7 +73,8 @@ public final class BatterySettingsMigrateCheckerTest {
|
||||
BatteryUtils.getInstance(mContext).reset();
|
||||
doReturn(mContext).when(mContext).getApplicationContext();
|
||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||
doReturn(UID).when(mPackageManager)
|
||||
doReturn(UID)
|
||||
.when(mPackageManager)
|
||||
.getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
||||
BatterySettingsMigrateChecker.sBatteryOptimizeUtils = mBatteryOptimizeUtils;
|
||||
mBatterySettingsMigrateChecker = new BatterySettingsMigrateChecker();
|
||||
@@ -150,45 +148,42 @@ public final class BatterySettingsMigrateCheckerTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyBatteryOptimizeModeApps_inAllowList_resetOptimizationMode()
|
||||
throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils)
|
||||
public void verifyBatteryOptimizeModeApps_inAllowList_resetOptimizationMode() throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED)
|
||||
.when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||
mContext,
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
Arrays.asList(PACKAGE_NAME));
|
||||
mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, Arrays.asList(PACKAGE_NAME));
|
||||
|
||||
final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
|
||||
inOrder.verify(mBatteryOptimizeUtils).getAppOptimizationMode();
|
||||
inOrder.verify(mBatteryOptimizeUtils).setAppUsageState(
|
||||
inOrder.verify(mBatteryOptimizeUtils)
|
||||
.setAppUsageState(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
BatteryOptimizeHistoricalLogEntry.Action.FORCE_RESET);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyBatteryOptimizeModeApps_optimizedMode_noAction() throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_OPTIMIZED).when(mBatteryOptimizeUtils)
|
||||
doReturn(BatteryOptimizeUtils.MODE_OPTIMIZED)
|
||||
.when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||
mContext,
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
Arrays.asList(PACKAGE_NAME));
|
||||
mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, Arrays.asList(PACKAGE_NAME));
|
||||
|
||||
verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void verifyBatteryOptimizeModeApps_notInAllowList_noAction() throws Exception {
|
||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils)
|
||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED)
|
||||
.when(mBatteryOptimizeUtils)
|
||||
.getAppOptimizationMode();
|
||||
|
||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||
mContext,
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||
new ArrayList<String>());
|
||||
mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, new ArrayList<String>());
|
||||
|
||||
verifyNoInteractions(mBatteryOptimizeUtils);
|
||||
}
|
||||
|
@@ -106,32 +106,22 @@ public class BatteryUtilsTest {
|
||||
private static final String INFO_EXCESSIVE = "anomaly_type=4,auto_restriction=false";
|
||||
private static final String INFO_WAKELOCK = "anomaly_type=1,auto_restriction=false";
|
||||
|
||||
@Mock
|
||||
private BatteryStats.Uid mUid;
|
||||
@Mock
|
||||
private BatteryStats.Timer mTimer;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock
|
||||
private BatteryConsumer mAggregateBatteryConsumer;
|
||||
@Mock
|
||||
private BatteryInfo mBatteryInfo;
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private AppOpsManager mAppOpsManager;
|
||||
@Mock
|
||||
private ApplicationInfo mApplicationInfo;
|
||||
@Mock private BatteryStats.Uid mUid;
|
||||
@Mock private BatteryStats.Timer mTimer;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock private BatteryConsumer mAggregateBatteryConsumer;
|
||||
@Mock private BatteryInfo mBatteryInfo;
|
||||
@Mock private PackageManager mPackageManager;
|
||||
@Mock private AppOpsManager mAppOpsManager;
|
||||
@Mock private ApplicationInfo mApplicationInfo;
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock
|
||||
private ApplicationInfo mHighApplicationInfo;
|
||||
@Mock
|
||||
private ApplicationInfo mLowApplicationInfo;
|
||||
@Mock
|
||||
private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
@Mock
|
||||
private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||
|
||||
@Mock private ApplicationInfo mHighApplicationInfo;
|
||||
@Mock private ApplicationInfo mLowApplicationInfo;
|
||||
@Mock private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
@Mock private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||
private AnomalyInfo mAnomalyInfo;
|
||||
private BatteryUtils mBatteryUtils;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
@@ -145,16 +135,21 @@ public class BatteryUtilsTest {
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mProvider = mFeatureFactory.powerUsageFeatureProvider;
|
||||
|
||||
doReturn(TIME_STATE_TOP).when(mUid).getProcessStateTime(eq(PROCESS_STATE_TOP), anyLong(),
|
||||
anyInt());
|
||||
doReturn(TIME_STATE_FOREGROUND_SERVICE).when(mUid).getProcessStateTime(
|
||||
eq(PROCESS_STATE_FOREGROUND_SERVICE), anyLong(), anyInt());
|
||||
doReturn(TIME_STATE_TOP_SLEEPING).when(mUid).getProcessStateTime(
|
||||
eq(PROCESS_STATE_TOP_SLEEPING), 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());
|
||||
doReturn(TIME_STATE_TOP)
|
||||
.when(mUid)
|
||||
.getProcessStateTime(eq(PROCESS_STATE_TOP), anyLong(), anyInt());
|
||||
doReturn(TIME_STATE_FOREGROUND_SERVICE)
|
||||
.when(mUid)
|
||||
.getProcessStateTime(eq(PROCESS_STATE_FOREGROUND_SERVICE), anyLong(), anyInt());
|
||||
doReturn(TIME_STATE_TOP_SLEEPING)
|
||||
.when(mUid)
|
||||
.getProcessStateTime(eq(PROCESS_STATE_TOP_SLEEPING), 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()))
|
||||
.thenReturn(mHighApplicationInfo);
|
||||
@@ -166,11 +161,13 @@ public class BatteryUtilsTest {
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||
doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
|
||||
doReturn(mBatteryStatsManager).when(mContext)
|
||||
doReturn(mBatteryStatsManager)
|
||||
.when(mContext)
|
||||
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
||||
mBatteryUtils = spy(new BatteryUtils(mContext));
|
||||
mBatteryUtils.mPowerUsageFeatureProvider = mProvider;
|
||||
doReturn(0L).when(mBatteryUtils)
|
||||
doReturn(0L)
|
||||
.when(mBatteryUtils)
|
||||
.getForegroundServiceTotalTimeUs(any(BatteryStats.Uid.class), anyLong());
|
||||
mAnomalyInfo = new AnomalyInfo(INFO_WAKELOCK);
|
||||
|
||||
@@ -180,54 +177,62 @@ public class BatteryUtilsTest {
|
||||
|
||||
@Test
|
||||
public void testGetProcessTimeMs_typeForeground_timeCorrect() {
|
||||
doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils)
|
||||
doReturn(TIME_STATE_FOREGROUND + 500)
|
||||
.when(mBatteryUtils)
|
||||
.getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
|
||||
|
||||
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.FOREGROUND, mUid,
|
||||
BatteryStats.STATS_SINCE_CHARGED);
|
||||
final long time =
|
||||
mBatteryUtils.getProcessTimeMs(
|
||||
BatteryUtils.StatusType.FOREGROUND, mUid, BatteryStats.STATS_SINCE_CHARGED);
|
||||
|
||||
assertThat(time).isEqualTo(TIME_EXPECTED_FOREGROUND);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProcessTimeMs_typeBackground_timeCorrect() {
|
||||
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.BACKGROUND, mUid,
|
||||
BatteryStats.STATS_SINCE_CHARGED);
|
||||
final long time =
|
||||
mBatteryUtils.getProcessTimeMs(
|
||||
BatteryUtils.StatusType.BACKGROUND, mUid, BatteryStats.STATS_SINCE_CHARGED);
|
||||
|
||||
assertThat(time).isEqualTo(TIME_EXPECTED_BACKGROUND);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProcessTimeMs_typeAll_timeCorrect() {
|
||||
doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils)
|
||||
doReturn(TIME_STATE_FOREGROUND + 500)
|
||||
.when(mBatteryUtils)
|
||||
.getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
|
||||
|
||||
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, mUid,
|
||||
BatteryStats.STATS_SINCE_CHARGED);
|
||||
final long time =
|
||||
mBatteryUtils.getProcessTimeMs(
|
||||
BatteryUtils.StatusType.ALL, mUid, BatteryStats.STATS_SINCE_CHARGED);
|
||||
|
||||
assertThat(time).isEqualTo(TIME_EXPECTED_ALL);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetProcessTimeMs_uidNull_returnZero() {
|
||||
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, null,
|
||||
BatteryStats.STATS_SINCE_CHARGED);
|
||||
final long time =
|
||||
mBatteryUtils.getProcessTimeMs(
|
||||
BatteryUtils.StatusType.ALL, null, BatteryStats.STATS_SINCE_CHARGED);
|
||||
|
||||
assertThat(time).isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCalculateBatteryPercent() {
|
||||
assertThat(mBatteryUtils.calculateBatteryPercent(BATTERY_SYSTEM_USAGE, TOTAL_BATTERY_USAGE,
|
||||
DISCHARGE_AMOUNT))
|
||||
.isWithin(PRECISION).of(PERCENT_SYSTEM_USAGE);
|
||||
assertThat(
|
||||
mBatteryUtils.calculateBatteryPercent(
|
||||
BATTERY_SYSTEM_USAGE, TOTAL_BATTERY_USAGE, DISCHARGE_AMOUNT))
|
||||
.isWithin(PRECISION)
|
||||
.of(PERCENT_SYSTEM_USAGE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCalculateLastFullChargeTime() {
|
||||
final long currentTimeMs = System.currentTimeMillis();
|
||||
when(mBatteryUsageStats.getStatsStartTimestamp()).thenReturn(
|
||||
currentTimeMs - TIME_SINCE_LAST_FULL_CHARGE_MS);
|
||||
when(mBatteryUsageStats.getStatsStartTimestamp())
|
||||
.thenReturn(currentTimeMs - TIME_SINCE_LAST_FULL_CHARGE_MS);
|
||||
|
||||
assertThat(mBatteryUtils.calculateLastFullChargeTime(mBatteryUsageStats, currentTimeMs))
|
||||
.isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_MS);
|
||||
@@ -237,46 +242,51 @@ public class BatteryUtilsTest {
|
||||
public void testGetForegroundActivityTotalTimeMs_returnMilliseconds() {
|
||||
final long rawRealtimeUs = SystemClock.elapsedRealtime() * 1000;
|
||||
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);
|
||||
|
||||
assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs)).isEqualTo(
|
||||
TIME_SINCE_LAST_FULL_CHARGE_US);
|
||||
assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs))
|
||||
.isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_US);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTargetSdkVersion_packageExist_returnSdk() throws
|
||||
PackageManager.NameNotFoundException {
|
||||
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME,
|
||||
PackageManager.GET_META_DATA);
|
||||
public void testGetTargetSdkVersion_packageExist_returnSdk()
|
||||
throws PackageManager.NameNotFoundException {
|
||||
doReturn(mApplicationInfo)
|
||||
.when(mPackageManager)
|
||||
.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
||||
mApplicationInfo.targetSdkVersion = SDK_VERSION;
|
||||
|
||||
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME)).isEqualTo(SDK_VERSION);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetTargetSdkVersion_packageNotExist_returnSdkNull() throws
|
||||
PackageManager.NameNotFoundException {
|
||||
doThrow(new PackageManager.NameNotFoundException()).when(
|
||||
mPackageManager).getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
||||
public void testGetTargetSdkVersion_packageNotExist_returnSdkNull()
|
||||
throws PackageManager.NameNotFoundException {
|
||||
doThrow(new PackageManager.NameNotFoundException())
|
||||
.when(mPackageManager)
|
||||
.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
||||
|
||||
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME)).isEqualTo(
|
||||
BatteryUtils.SDK_NULL);
|
||||
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME))
|
||||
.isEqualTo(BatteryUtils.SDK_NULL);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBackgroundRestrictionOn_restrictionOn_returnTrue() {
|
||||
doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager).checkOpNoThrow(
|
||||
AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
|
||||
doReturn(AppOpsManager.MODE_IGNORED)
|
||||
.when(mAppOpsManager)
|
||||
.checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
|
||||
|
||||
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID,
|
||||
PACKAGE_NAME)).isTrue();
|
||||
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, PACKAGE_NAME))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBackgroundRestrictionOn_restrictionOff_returnFalse() {
|
||||
doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).checkOpNoThrow(
|
||||
AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
|
||||
doReturn(AppOpsManager.MODE_ALLOWED)
|
||||
.when(mAppOpsManager)
|
||||
.checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
|
||||
|
||||
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, PACKAGE_NAME))
|
||||
.isFalse();
|
||||
@@ -294,8 +304,8 @@ public class BatteryUtilsTest {
|
||||
|
||||
@Test
|
||||
public void testIsPreOApp_containPreOApp_ReturnTrue() {
|
||||
assertThat(
|
||||
mBatteryUtils.isPreOApp(new String[]{HIGH_SDK_PACKAGE, LOW_SDK_PACKAGE})).isTrue();
|
||||
assertThat(mBatteryUtils.isPreOApp(new String[] {HIGH_SDK_PACKAGE, LOW_SDK_PACKAGE}))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -309,9 +319,17 @@ public class BatteryUtilsTest {
|
||||
mBatteryUtils.setForceAppStandby(UID, LOW_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
||||
|
||||
// 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);
|
||||
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);
|
||||
}
|
||||
|
||||
@@ -321,18 +339,27 @@ public class BatteryUtilsTest {
|
||||
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
|
||||
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID,
|
||||
HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
||||
verify(mAppOpsManager, never())
|
||||
.setMode(
|
||||
AppOpsManager.OP_RUN_IN_BACKGROUND,
|
||||
UID,
|
||||
HIGH_SDK_PACKAGE,
|
||||
AppOpsManager.MODE_IGNORED);
|
||||
// Restrict OP_RUN_ANY_IN_BACKGROUND
|
||||
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||
HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
||||
verify(mAppOpsManager)
|
||||
.setMode(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||
UID,
|
||||
HIGH_SDK_PACKAGE,
|
||||
AppOpsManager.MODE_IGNORED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetForceAppStandby_restrictApp_recordTime() {
|
||||
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
||||
|
||||
verify(mBatteryDatabaseManager).insertAction(
|
||||
verify(mBatteryDatabaseManager)
|
||||
.insertAction(
|
||||
eq(AnomalyDatabaseHelper.ActionType.RESTRICTION), eq(UID),
|
||||
eq(HIGH_SDK_PACKAGE), anyLong());
|
||||
}
|
||||
@@ -341,22 +368,24 @@ public class BatteryUtilsTest {
|
||||
public void testSetForceAppStandby_unrestrictApp_deleteTime() {
|
||||
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_ALLOWED);
|
||||
|
||||
verify(mBatteryDatabaseManager).deleteAction(AnomalyDatabaseHelper.ActionType.RESTRICTION,
|
||||
UID, HIGH_SDK_PACKAGE);
|
||||
verify(mBatteryDatabaseManager)
|
||||
.deleteAction(AnomalyDatabaseHelper.ActionType.RESTRICTION, UID, HIGH_SDK_PACKAGE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsForceAppStandbyEnabled_enabled_returnTrue() {
|
||||
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_IGNORED);
|
||||
when(mAppOpsManager.checkOpNoThrow(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
|
||||
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||
|
||||
assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsForceAppStandbyEnabled_disabled_returnFalse() {
|
||||
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||
when(mAppOpsManager.checkOpNoThrow(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
|
||||
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||
|
||||
assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isFalse();
|
||||
}
|
||||
@@ -372,8 +401,8 @@ public class BatteryUtilsTest {
|
||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
|
||||
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
||||
mAnomalyInfo)).isTrue();
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -382,35 +411,38 @@ public class BatteryUtilsTest {
|
||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
|
||||
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
||||
mAnomalyInfo)).isTrue();
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideAnomaly_systemUid_returnTrue() {
|
||||
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,
|
||||
mAnomalyInfo)).isTrue();
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, systemUid, mAnomalyInfo))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideAnomaly_AppInDozeList_returnTrue() {
|
||||
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);
|
||||
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
||||
mAnomalyInfo)).isTrue();
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testShouldHideAnomaly_normalApp_returnFalse() {
|
||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
||||
mAnomalyInfo)).isFalse();
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -418,8 +450,8 @@ public class BatteryUtilsTest {
|
||||
doReturn(new String[] {LOW_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||
mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
|
||||
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
||||
mAnomalyInfo)).isFalse();
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -427,19 +459,24 @@ public class BatteryUtilsTest {
|
||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||
mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
|
||||
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
||||
mAnomalyInfo)).isTrue();
|
||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void clearForceAppStandby_appRestricted_clearAndReturnTrue() {
|
||||
when(mBatteryUtils.getPackageUid(HIGH_SDK_PACKAGE)).thenReturn(UID);
|
||||
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||
HIGH_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_IGNORED);
|
||||
when(mAppOpsManager.checkOpNoThrow(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, HIGH_SDK_PACKAGE))
|
||||
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||
|
||||
assertThat(mBatteryUtils.clearForceAppStandby(HIGH_SDK_PACKAGE)).isTrue();
|
||||
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||
HIGH_SDK_PACKAGE, AppOpsManager.MODE_ALLOWED);
|
||||
verify(mAppOpsManager)
|
||||
.setMode(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||
UID,
|
||||
HIGH_SDK_PACKAGE,
|
||||
AppOpsManager.MODE_ALLOWED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -447,27 +484,36 @@ public class BatteryUtilsTest {
|
||||
when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(BatteryUtils.UID_NULL);
|
||||
|
||||
assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse();
|
||||
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
|
||||
verify(mAppOpsManager, never())
|
||||
.setMode(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||
UID,
|
||||
PACKAGE_NAME,
|
||||
AppOpsManager.MODE_ALLOWED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void clearForceAppStandby_appUnrestricted_returnFalse() {
|
||||
when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(UID);
|
||||
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||
when(mAppOpsManager.checkOpNoThrow(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
|
||||
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||
|
||||
assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse();
|
||||
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
||||
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
|
||||
verify(mAppOpsManager, never())
|
||||
.setMode(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||
UID,
|
||||
PACKAGE_NAME,
|
||||
AppOpsManager.MODE_ALLOWED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getBatteryInfo_providerNull_shouldNotCrash() {
|
||||
when(mProvider.isEnhancedBatteryPredictionEnabled(mContext)).thenReturn(true);
|
||||
when(mProvider.getEnhancedBatteryPrediction(mContext)).thenReturn(null);
|
||||
when(mContext.registerReceiver(nullable(BroadcastReceiver.class),
|
||||
any(IntentFilter.class))).thenReturn(new Intent());
|
||||
when(mContext.registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class)))
|
||||
.thenReturn(new Intent());
|
||||
|
||||
// Should not crash
|
||||
assertThat(mBatteryUtils.getBatteryInfo(TAG)).isNotNull();
|
||||
|
@@ -51,10 +51,8 @@ public class HighPowerDetailTest {
|
||||
private HighPowerDetail mFragment;
|
||||
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
@Mock
|
||||
private BatteryUtils mBatteryUtils;
|
||||
@Mock private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
@Mock private BatteryUtils mBatteryUtils;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -73,13 +71,19 @@ public class HighPowerDetailTest {
|
||||
public void logSpecialPermissionChange() {
|
||||
// Deny means app is allowlisted to opt out of power save restrictions
|
||||
HighPowerDetail.logSpecialPermissionChange(true, "app", RuntimeEnvironment.application);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
|
||||
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_DENY), eq("app"));
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.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
|
||||
HighPowerDetail.logSpecialPermissionChange(false, "app", RuntimeEnvironment.application);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
|
||||
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW), eq("app"));
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
any(Context.class),
|
||||
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW),
|
||||
eq("app"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -87,15 +91,17 @@ public class HighPowerDetailTest {
|
||||
mFragment.mIsEnabled = true;
|
||||
when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE, TEST_UID)).thenReturn(false);
|
||||
mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
|
||||
verify(mBatteryUtils).setForceAppStandby(TEST_UID, TEST_PACKAGE,
|
||||
AppOpsManager.MODE_ALLOWED);
|
||||
verify(mBatteryUtils)
|
||||
.setForceAppStandby(TEST_UID, TEST_PACKAGE, AppOpsManager.MODE_ALLOWED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_defaultActivePackage_returnUnavailable() {
|
||||
doReturn(true).when(mPowerAllowlistBackend).isDefaultActiveApp(TEST_PACKAGE, TEST_UID);
|
||||
|
||||
assertThat(HighPowerDetail.getSummary(mContext, mPowerAllowlistBackend, TEST_PACKAGE,
|
||||
TEST_UID)).isEqualTo(mContext.getString(R.string.high_power_system));
|
||||
assertThat(
|
||||
HighPowerDetail.getSummary(
|
||||
mContext, mPowerAllowlistBackend, TEST_PACKAGE, TEST_UID))
|
||||
.isEqualTo(mContext.getString(R.string.high_power_system));
|
||||
}
|
||||
}
|
||||
|
@@ -76,8 +76,8 @@ public class OptimizedPreferenceControllerTest {
|
||||
public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() {
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -98,8 +98,8 @@ public class OptimizedPreferenceControllerTest {
|
||||
@Test
|
||||
public void testUpdateState_isOptimizedStates_prefChecked() {
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
|
@@ -72,7 +72,8 @@ import org.robolectric.annotation.Config;
|
||||
import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {
|
||||
@Config(
|
||||
shadows = {
|
||||
ShadowEntityHeaderController.class,
|
||||
ShadowActivityManager.class,
|
||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||
@@ -96,30 +97,19 @@ public class PowerBackgroundUsageDetailTest {
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private FragmentActivity mActivity;
|
||||
@Mock
|
||||
private EntityHeaderController mEntityHeaderController;
|
||||
@Mock
|
||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
@Mock
|
||||
private LayoutPreference mHeaderPreference;
|
||||
@Mock
|
||||
private ApplicationsState mState;
|
||||
@Mock
|
||||
private Bundle mBundle;
|
||||
@Mock
|
||||
private LoaderManager mLoaderManager;
|
||||
@Mock
|
||||
private ApplicationsState.AppEntry mAppEntry;
|
||||
@Mock
|
||||
private BatteryEntry mBatteryEntry;
|
||||
@Mock
|
||||
private BackupManager mBackupManager;
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private AppOpsManager mAppOpsManager;
|
||||
@Mock
|
||||
private Switch mMockSwitch;
|
||||
|
||||
@Mock private EntityHeaderController mEntityHeaderController;
|
||||
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||
@Mock private LayoutPreference mHeaderPreference;
|
||||
@Mock private ApplicationsState mState;
|
||||
@Mock private Bundle mBundle;
|
||||
@Mock private LoaderManager mLoaderManager;
|
||||
@Mock 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
|
||||
public void setUp() {
|
||||
@@ -137,19 +127,26 @@ public class PowerBackgroundUsageDetailTest {
|
||||
doReturn(mLoaderManager).when(mFragment).getLoaderManager();
|
||||
|
||||
ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setButtonActions(anyInt(), anyInt());
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setIcon(nullable(Drawable.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable(
|
||||
ApplicationsState.AppEntry.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setIcon(nullable(ApplicationsState.AppEntry.class));
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setLabel(nullable(String.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setLabel(nullable(String.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setLabel(nullable(ApplicationsState.AppEntry.class));
|
||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
||||
doReturn(mEntityHeaderController)
|
||||
.when(mEntityHeaderController)
|
||||
.setSummary(nullable(String.class));
|
||||
|
||||
when(mBatteryEntry.getUid()).thenReturn(UID);
|
||||
@@ -169,13 +166,15 @@ public class PowerBackgroundUsageDetailTest {
|
||||
|
||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||
|
||||
Answer<Void> callable = invocation -> {
|
||||
Answer<Void> callable =
|
||||
invocation -> {
|
||||
mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||
System.out.println("mBundle = " + mBundle);
|
||||
return null;
|
||||
};
|
||||
doAnswer(callable).when(mActivity).startActivityAsUser(captor.capture(),
|
||||
nullable(UserHandle.class));
|
||||
doAnswer(callable)
|
||||
.when(mActivity)
|
||||
.startActivityAsUser(captor.capture(), nullable(UserHandle.class));
|
||||
doAnswer(callable).when(mActivity).startActivity(captor.capture());
|
||||
|
||||
mFooterPreference = spy(new FooterPreference(mContext));
|
||||
@@ -207,7 +206,9 @@ public class PowerBackgroundUsageDetailTest {
|
||||
|
||||
@Test
|
||||
public void initHeader_HasAppEntry_BuildByAppEntry() {
|
||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
||||
ReflectionHelpers.setStaticField(
|
||||
AppUtils.class,
|
||||
"sInstantAppDataProvider",
|
||||
new InstantAppDataProvider() {
|
||||
@Override
|
||||
public boolean isInstantApp(ApplicationInfo info) {
|
||||
@@ -224,7 +225,9 @@ public class PowerBackgroundUsageDetailTest {
|
||||
|
||||
@Test
|
||||
public void initHeader_HasAppEntry_InstantApp() {
|
||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
||||
ReflectionHelpers.setStaticField(
|
||||
AppUtils.class,
|
||||
"sInstantAppDataProvider",
|
||||
new InstantAppDataProvider() {
|
||||
@Override
|
||||
public boolean isInstantApp(ApplicationInfo info) {
|
||||
|
@@ -46,8 +46,8 @@ public class PowerUsageFeatureProviderImplTest {
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
|
||||
@Mock private PackageManager mPackageManager;
|
||||
private PowerUsageFeatureProviderImpl mPowerFeatureProvider;
|
||||
|
||||
@Before
|
||||
@@ -117,16 +117,18 @@ public class PowerUsageFeatureProviderImplTest {
|
||||
|
||||
@Test
|
||||
public void testIsSmartBatterySupported_smartBatterySupported_returnTrue() {
|
||||
when(mContext.getResources().getBoolean(
|
||||
com.android.internal.R.bool.config_smart_battery_available)).thenReturn(true);
|
||||
when(mContext.getResources()
|
||||
.getBoolean(com.android.internal.R.bool.config_smart_battery_available))
|
||||
.thenReturn(true);
|
||||
|
||||
assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsSmartBatterySupported_smartBatteryNotSupported_returnFalse() {
|
||||
when(mContext.getResources().getBoolean(
|
||||
com.android.internal.R.bool.config_smart_battery_available)).thenReturn(false);
|
||||
when(mContext.getResources()
|
||||
.getBoolean(com.android.internal.R.bool.config_smart_battery_available))
|
||||
.thenReturn(false);
|
||||
|
||||
assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isFalse();
|
||||
}
|
||||
|
@@ -46,12 +46,9 @@ public final class PowerUsageTimeControllerTest {
|
||||
private Context mContext;
|
||||
private PowerUsageTimeController mPowerUsageTimeController;
|
||||
|
||||
@Mock
|
||||
private PreferenceCategory mPowerUsageTimeCategory;
|
||||
@Mock
|
||||
private PowerUsageTimePreference mScreenTimePreference;
|
||||
@Mock
|
||||
private PowerUsageTimePreference mBackgroundTimePreference;
|
||||
@Mock private PreferenceCategory mPowerUsageTimeCategory;
|
||||
@Mock private PowerUsageTimePreference mScreenTimePreference;
|
||||
@Mock private PowerUsageTimePreference mBackgroundTimePreference;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -67,18 +64,24 @@ public final class PowerUsageTimeControllerTest {
|
||||
|
||||
@Test
|
||||
public void handleScreenTimeUpdated_noInfo_prefInvisible() {
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(/*slotTime=*/ null,
|
||||
/*screenOnTimeInMs=*/ 0, /*backgroundTimeInMs=*/ 0,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
/* slotTime= */ null,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* backgroundTimeInMs= */ 0,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyAllPreferencesVisible(false);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleScreenTimeUpdated_onlySlotTime_prefInvisible() {
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
/*screenOnTimeInMs=*/ 0, /*backgroundTimeInMs=*/ 0,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* backgroundTimeInMs= */ 0,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyAllPreferencesVisible(false);
|
||||
}
|
||||
@@ -88,9 +91,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeAMinute = 60000;
|
||||
final long backgroundTimeZero = 0;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeAMinute, backgroundTimeZero,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeAMinute,
|
||||
backgroundTimeZero,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyOnePreferenceInvisible(mBackgroundTimePreference);
|
||||
verify(mScreenTimePreference).setTimeTitle("Screen time");
|
||||
@@ -103,9 +109,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeZero = 0;
|
||||
final long backgroundTimeTwoMinutes = 120000;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeZero, backgroundTimeTwoMinutes,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeZero,
|
||||
backgroundTimeTwoMinutes,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyOnePreferenceInvisible(mScreenTimePreference);
|
||||
verify(mBackgroundTimePreference).setTimeTitle("Background time");
|
||||
@@ -118,9 +127,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeAMinute = 60000;
|
||||
final long backgroundTimeTwoMinutes = 120000;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeAMinute, backgroundTimeTwoMinutes,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeAMinute,
|
||||
backgroundTimeTwoMinutes,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyAllPreferencesVisible(true);
|
||||
verify(mScreenTimePreference).setTimeTitle("Screen time");
|
||||
@@ -137,9 +149,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long backgroundTimeTwoMinutes = 120000;
|
||||
final long screenOnTimeAMinute = 60000;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(/*slotTime=*/ null,
|
||||
screenOnTimeAMinute, backgroundTimeTwoMinutes,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
/* slotTime= */ null,
|
||||
screenOnTimeAMinute,
|
||||
backgroundTimeTwoMinutes,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyAllPreferencesVisible(true);
|
||||
verify(mPowerUsageTimeCategory).setTitle("App usage since last full charge");
|
||||
@@ -150,9 +165,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeAMinute = 60000;
|
||||
final long backgroundTimeLessThanAMinute = 59999;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeAMinute, backgroundTimeLessThanAMinute,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeAMinute,
|
||||
backgroundTimeLessThanAMinute,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyAllPreferencesVisible(true);
|
||||
verify(mScreenTimePreference).setTimeSummary("1 min");
|
||||
@@ -164,9 +182,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeLessThanAMinute = 59999;
|
||||
final long backgroundTimeTwoMinutes = 120000;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeLessThanAMinute, backgroundTimeTwoMinutes,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeLessThanAMinute,
|
||||
backgroundTimeTwoMinutes,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyAllPreferencesVisible(true);
|
||||
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
||||
@@ -178,9 +199,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeLessThanAMinute = 59999;
|
||||
final long backgroundTimeLessThanAMinute = 59999;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeLessThanAMinute, backgroundTimeLessThanAMinute,
|
||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeLessThanAMinute,
|
||||
backgroundTimeLessThanAMinute,
|
||||
/* anomalyHintPrefKey= */ null,
|
||||
/* anomalyHintText= */ null);
|
||||
|
||||
verifyAllPreferencesVisible(true);
|
||||
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
||||
@@ -192,9 +216,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeAMinute = 60000;
|
||||
final long backgroundTimeTwoMinutes = 120000;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeAMinute, backgroundTimeTwoMinutes,
|
||||
KEY_SCREEN_ON_TIME_PREF, TEST_ANOMALY_HINT_TEXT);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeAMinute,
|
||||
backgroundTimeTwoMinutes,
|
||||
KEY_SCREEN_ON_TIME_PREF,
|
||||
TEST_ANOMALY_HINT_TEXT);
|
||||
|
||||
verifyAllPreferencesVisible(true);
|
||||
verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT);
|
||||
@@ -206,9 +233,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeAMinute = 60000;
|
||||
final long backgroundTimeTwoMinutes = 120000;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeAMinute, backgroundTimeTwoMinutes,
|
||||
KEY_BACKGROUND_TIME_PREF, TEST_ANOMALY_HINT_TEXT);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeAMinute,
|
||||
backgroundTimeTwoMinutes,
|
||||
KEY_BACKGROUND_TIME_PREF,
|
||||
TEST_ANOMALY_HINT_TEXT);
|
||||
|
||||
verifyAllPreferencesVisible(true);
|
||||
verify(mScreenTimePreference, never()).setAnomalyHint(anyString());
|
||||
@@ -220,9 +250,12 @@ public final class PowerUsageTimeControllerTest {
|
||||
final long screenOnTimeZero = 0;
|
||||
final long backgroundTimeTwoMinutes = 120000;
|
||||
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
||||
screenOnTimeZero, backgroundTimeTwoMinutes,
|
||||
KEY_SCREEN_ON_TIME_PREF, TEST_ANOMALY_HINT_TEXT);
|
||||
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||
SLOT_TIME,
|
||||
screenOnTimeZero,
|
||||
backgroundTimeTwoMinutes,
|
||||
KEY_SCREEN_ON_TIME_PREF,
|
||||
TEST_ANOMALY_HINT_TEXT);
|
||||
|
||||
verifyAllPreferencesVisible(true);
|
||||
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
||||
|
@@ -33,7 +33,6 @@ import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.util.Pair;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
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 int OTHER_USER_UID = UserHandle.PER_USER_RANGE + RESTRICTED_UID;
|
||||
|
||||
@Mock
|
||||
private AppOpsManager mAppOpsManager;
|
||||
@Mock
|
||||
private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
@Mock private AppOpsManager mAppOpsManager;
|
||||
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock private UserManager mUserManager;
|
||||
|
||||
private AppOpsManager.PackageOps mRestrictedPackageOps;
|
||||
private AppOpsManager.PackageOps mAllowedPackageOps;
|
||||
@@ -84,18 +80,24 @@ public class RestrictAppPreferenceControllerTest {
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
final List<AppOpsManager.OpEntry> allowOps = new ArrayList<>();
|
||||
allowOps.add(new AppOpsManager.OpEntry(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_ALLOWED,
|
||||
allowOps.add(
|
||||
new AppOpsManager.OpEntry(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||
AppOpsManager.MODE_ALLOWED,
|
||||
Collections.emptyMap()));
|
||||
final List<AppOpsManager.OpEntry> restrictedOps = new ArrayList<>();
|
||||
restrictedOps.add(new AppOpsManager.OpEntry(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_IGNORED,
|
||||
restrictedOps.add(
|
||||
new AppOpsManager.OpEntry(
|
||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||
AppOpsManager.MODE_IGNORED,
|
||||
Collections.emptyMap()));
|
||||
mAllowedPackageOps = new AppOpsManager.PackageOps(
|
||||
ALLOWED_PACKAGE_NAME, ALLOWED_UID, allowOps);
|
||||
mRestrictedPackageOps = new AppOpsManager.PackageOps(
|
||||
mAllowedPackageOps =
|
||||
new AppOpsManager.PackageOps(ALLOWED_PACKAGE_NAME, ALLOWED_UID, allowOps);
|
||||
mRestrictedPackageOps =
|
||||
new AppOpsManager.PackageOps(
|
||||
RESTRICTED_PACKAGE_NAME, RESTRICTED_UID, restrictedOps);
|
||||
mOtherUserPackageOps = new AppOpsManager.PackageOps(
|
||||
mOtherUserPackageOps =
|
||||
new AppOpsManager.PackageOps(
|
||||
RESTRICTED_PACKAGE_NAME, OTHER_USER_UID, restrictedOps);
|
||||
|
||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||
@@ -109,8 +111,8 @@ public class RestrictAppPreferenceControllerTest {
|
||||
mPreferenceScreen = spy(new PreferenceScreen(mContext, null));
|
||||
when(mPreferenceScreen.getPreferenceManager()).thenReturn(mock(PreferenceManager.class));
|
||||
when(mPreferenceScreen.getContext()).thenReturn(mContext);
|
||||
when(mPreferenceScreen.findPreference(
|
||||
RestrictAppPreferenceController.KEY_RESTRICT_APP)).thenReturn(mPreference);
|
||||
when(mPreferenceScreen.findPreference(RestrictAppPreferenceController.KEY_RESTRICT_APP))
|
||||
.thenReturn(mPreference);
|
||||
|
||||
final List<UserHandle> userHandles = new ArrayList<>();
|
||||
userHandles.add(new UserHandle(0));
|
||||
@@ -122,8 +124,8 @@ public class RestrictAppPreferenceControllerTest {
|
||||
mPackageOpsList.add(mRestrictedPackageOps);
|
||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
||||
|
||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
||||
mFragment);
|
||||
final RestrictAppPreferenceController controller =
|
||||
new RestrictAppPreferenceController(mFragment);
|
||||
controller.displayPreference(mPreferenceScreen);
|
||||
controller.updateState(mPreference);
|
||||
|
||||
@@ -138,8 +140,8 @@ public class RestrictAppPreferenceControllerTest {
|
||||
mPackageOpsList.add(mOtherUserPackageOps);
|
||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
||||
|
||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
||||
mFragment);
|
||||
final RestrictAppPreferenceController controller =
|
||||
new RestrictAppPreferenceController(mFragment);
|
||||
controller.displayPreference(mPreferenceScreen);
|
||||
controller.updateState(mPreference);
|
||||
|
||||
@@ -154,13 +156,14 @@ public class RestrictAppPreferenceControllerTest {
|
||||
mPackageOpsList.add(mOtherUserPackageOps);
|
||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
||||
|
||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
||||
mFragment);
|
||||
final RestrictAppPreferenceController controller =
|
||||
new RestrictAppPreferenceController(mFragment);
|
||||
controller.displayPreference(mPreferenceScreen);
|
||||
controller.updateState(mPreference);
|
||||
|
||||
assertThat(mPreference.getSummary()).isEqualTo("Limiting battery usage for 1 app");
|
||||
assertThat(controller.mAppInfos).containsExactly(
|
||||
assertThat(controller.mAppInfos)
|
||||
.containsExactly(
|
||||
new AppInfo.Builder()
|
||||
.setUid(RESTRICTED_UID)
|
||||
.setPackageName(RESTRICTED_PACKAGE_NAME)
|
||||
@@ -172,8 +175,8 @@ public class RestrictAppPreferenceControllerTest {
|
||||
mPackageOpsList.add(mAllowedPackageOps);
|
||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
||||
|
||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
||||
mFragment);
|
||||
final RestrictAppPreferenceController controller =
|
||||
new RestrictAppPreferenceController(mFragment);
|
||||
controller.displayPreference(mPreferenceScreen);
|
||||
controller.updateState(mPreference);
|
||||
|
||||
@@ -185,8 +188,8 @@ public class RestrictAppPreferenceControllerTest {
|
||||
public void handlePreferenceTreeClick_startFragment() {
|
||||
final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
|
||||
|
||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
||||
mFragment);
|
||||
final RestrictAppPreferenceController controller =
|
||||
new RestrictAppPreferenceController(mFragment);
|
||||
controller.handlePreferenceTreeClick(mPreference);
|
||||
|
||||
verify(mContext).startActivity(intent.capture());
|
||||
|
@@ -72,17 +72,11 @@ public class RestrictedAppDetailsTest {
|
||||
private static final int UID = UserHandle.getUid(USER_ID, 234);
|
||||
private static final String APP_NAME = "app";
|
||||
|
||||
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private ApplicationInfo mApplicationInfo;
|
||||
@Mock
|
||||
private IconDrawableFactory mIconDrawableFactory;
|
||||
@Mock
|
||||
private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock
|
||||
private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||
@Mock private PackageManager mPackageManager;
|
||||
@Mock private ApplicationInfo mApplicationInfo;
|
||||
@Mock private IconDrawableFactory mIconDrawableFactory;
|
||||
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||
private PreferenceManager mPreferenceManager;
|
||||
private RestrictedAppDetails mRestrictedAppDetails;
|
||||
private Context mContext;
|
||||
@@ -96,10 +90,7 @@ public class RestrictedAppDetailsTest {
|
||||
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mRestrictedAppDetails = spy(new RestrictedAppDetails());
|
||||
mAppInfo = new AppInfo.Builder()
|
||||
.setPackageName(PACKAGE_NAME)
|
||||
.setUid(UID)
|
||||
.build();
|
||||
mAppInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME).setUid(UID).build();
|
||||
|
||||
mPreferenceManager = new PreferenceManager(mContext);
|
||||
|
||||
@@ -113,8 +104,9 @@ public class RestrictedAppDetailsTest {
|
||||
mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext));
|
||||
mRestrictedAppDetails.mBatteryUtils = spy(new BatteryUtils(mContext));
|
||||
mRestrictedAppDetails.mBatteryDatabaseManager = mBatteryDatabaseManager;
|
||||
doReturn(mPreferenceManager).when(
|
||||
mRestrictedAppDetails.mRestrictedAppListGroup).getPreferenceManager();
|
||||
doReturn(mPreferenceManager)
|
||||
.when(mRestrictedAppDetails.mRestrictedAppListGroup)
|
||||
.getPreferenceManager();
|
||||
|
||||
mCheckBoxPreference = new CheckBoxPreference(mContext);
|
||||
mCheckBoxPreference.setKey(mRestrictedAppDetails.getKeyFromAppInfo(mAppInfo));
|
||||
@@ -122,14 +114,17 @@ public class RestrictedAppDetailsTest {
|
||||
|
||||
@Test
|
||||
public void refreshUi_displayPreference() throws Exception {
|
||||
doReturn(mApplicationInfo).when(mPackageManager)
|
||||
doReturn(mApplicationInfo)
|
||||
.when(mPackageManager)
|
||||
.getApplicationInfoAsUser(PACKAGE_NAME, 0, USER_ID);
|
||||
doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo);
|
||||
doReturn(true).when(mRestrictedAppDetails.mBatteryUtils).isForceAppStandbyEnabled(UID,
|
||||
PACKAGE_NAME);
|
||||
doReturn(true)
|
||||
.when(mRestrictedAppDetails.mBatteryUtils)
|
||||
.isForceAppStandbyEnabled(UID, PACKAGE_NAME);
|
||||
final SparseLongArray timestampArray = new SparseLongArray();
|
||||
timestampArray.put(UID, System.currentTimeMillis() - TimeUnit.HOURS.toMillis(5));
|
||||
doReturn(timestampArray).when(mBatteryDatabaseManager)
|
||||
doReturn(timestampArray)
|
||||
.when(mBatteryDatabaseManager)
|
||||
.queryActionTime(AnomalyDatabaseHelper.ActionType.RESTRICTION);
|
||||
|
||||
mRestrictedAppDetails.refreshUi();
|
||||
@@ -145,30 +140,32 @@ public class RestrictedAppDetailsTest {
|
||||
@Test
|
||||
public void startRestrictedAppDetails_startWithCorrectData() {
|
||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||
doAnswer(invocation -> {
|
||||
doAnswer(
|
||||
invocation -> {
|
||||
// Get the intent in which it has the app info bundle
|
||||
mIntent = captor.getValue();
|
||||
return true;
|
||||
}).when(mContext).startActivity(captor.capture());
|
||||
})
|
||||
.when(mContext)
|
||||
.startActivity(captor.capture());
|
||||
|
||||
RestrictedAppDetails.startRestrictedAppDetails(mFragment,
|
||||
mRestrictedAppDetails.mAppInfos);
|
||||
RestrictedAppDetails.startRestrictedAppDetails(mFragment, mRestrictedAppDetails.mAppInfos);
|
||||
|
||||
final Bundle bundle = mIntent.getBundleExtra(
|
||||
SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||
final Bundle bundle =
|
||||
mIntent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||
// Verify the bundle has the correct info
|
||||
final List<AppInfo> appInfos = bundle.getParcelableArrayList(
|
||||
RestrictedAppDetails.EXTRA_APP_INFO_LIST);
|
||||
final List<AppInfo> appInfos =
|
||||
bundle.getParcelableArrayList(RestrictedAppDetails.EXTRA_APP_INFO_LIST);
|
||||
assertThat(appInfos).containsExactly(mAppInfo);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createDialogFragment_toRestrict_createRestrictDialog() {
|
||||
final BatteryTipDialogFragment dialogFragment = mRestrictedAppDetails.createDialogFragment(
|
||||
mAppInfo, true);
|
||||
final BatteryTipDialogFragment dialogFragment =
|
||||
mRestrictedAppDetails.createDialogFragment(mAppInfo, true);
|
||||
|
||||
FragmentController.setupFragment(dialogFragment, FragmentActivity.class,
|
||||
0 /* containerViewId */, null /* bundle */);
|
||||
FragmentController.setupFragment(
|
||||
dialogFragment, FragmentActivity.class, 0 /* containerViewId */, null /* bundle */);
|
||||
|
||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
@@ -177,11 +174,11 @@ public class RestrictedAppDetailsTest {
|
||||
|
||||
@Test
|
||||
public void createDialogFragment_toUnrestrict_createUnrestrictDialog() {
|
||||
final BatteryTipDialogFragment dialogFragment = mRestrictedAppDetails.createDialogFragment(
|
||||
mAppInfo, false);
|
||||
final BatteryTipDialogFragment dialogFragment =
|
||||
mRestrictedAppDetails.createDialogFragment(mAppInfo, false);
|
||||
|
||||
FragmentController.setupFragment(dialogFragment, FragmentActivity.class,
|
||||
0 /* containerViewId */, null /* bundle */);
|
||||
FragmentController.setupFragment(
|
||||
dialogFragment, FragmentActivity.class, 0 /* containerViewId */, null /* bundle */);
|
||||
|
||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
@@ -190,8 +187,8 @@ public class RestrictedAppDetailsTest {
|
||||
|
||||
@Test
|
||||
public void onBatteryTipHandled_restrict_setChecked() {
|
||||
final RestrictAppTip restrictAppTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
||||
mAppInfo);
|
||||
final RestrictAppTip restrictAppTip =
|
||||
new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
|
||||
mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference);
|
||||
|
||||
mRestrictedAppDetails.onBatteryTipHandled(restrictAppTip);
|
||||
@@ -201,8 +198,8 @@ public class RestrictedAppDetailsTest {
|
||||
|
||||
@Test
|
||||
public void onBatteryTipHandled_unrestrict_setUnchecked() {
|
||||
final UnrestrictAppTip unrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW,
|
||||
mAppInfo);
|
||||
final UnrestrictAppTip unrestrictAppTip =
|
||||
new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
|
||||
mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference);
|
||||
|
||||
mRestrictedAppDetails.onBatteryTipHandled(unrestrictAppTip);
|
||||
|
@@ -54,7 +54,8 @@ public class SmartBatteryPreferenceControllerTest {
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
doReturn(mock(DevicePolicyManager.class)).when(mContext)
|
||||
doReturn(mock(DevicePolicyManager.class))
|
||||
.when(mContext)
|
||||
.getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
@@ -99,26 +100,26 @@ public class SmartBatteryPreferenceControllerTest {
|
||||
public void testGetAvailabilityStatus_smartBatterySupported_returnAvailable() {
|
||||
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
||||
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.AVAILABLE);
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.AVAILABLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetAvailabilityStatus_smartBatteryUnSupported_returnDisabled() {
|
||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
||||
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||
assertThat(mController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||
}
|
||||
|
||||
private void putSmartBatteryValue(int value) {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, value);
|
||||
Settings.Global.putInt(
|
||||
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, value);
|
||||
}
|
||||
|
||||
private int getSmartBatteryValue() {
|
||||
return Settings.Global.getInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, ON);
|
||||
return Settings.Global.getInt(
|
||||
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, ON);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -50,12 +50,9 @@ public class TopLevelBatteryPreferenceControllerTest {
|
||||
private TopLevelBatteryPreferenceController mController;
|
||||
private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
|
||||
|
||||
@Mock
|
||||
private UsbPort mUsbPort;
|
||||
@Mock
|
||||
private UsbManager mUsbManager;
|
||||
@Mock
|
||||
private UsbPortStatus mUsbPortStatus;
|
||||
@Mock private UsbPort mUsbPort;
|
||||
@Mock private UsbManager mUsbManager;
|
||||
@Mock private UsbPortStatus mUsbPortStatus;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -125,8 +122,7 @@ public class TopLevelBatteryPreferenceControllerTest {
|
||||
info.discharging = false;
|
||||
info.chargeLabel = "5% - charging";
|
||||
|
||||
assertThat(mController.getDashboardLabel(mContext, info, true))
|
||||
.isEqualTo(info.chargeLabel);
|
||||
assertThat(mController.getDashboardLabel(mContext, info, true)).isEqualTo(info.chargeLabel);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -136,7 +132,8 @@ public class TopLevelBatteryPreferenceControllerTest {
|
||||
BatteryInfo info = new BatteryInfo();
|
||||
|
||||
assertThat(mController.getDashboardLabel(mContext, info, true))
|
||||
.isEqualTo(mContext.getString(
|
||||
.isEqualTo(
|
||||
mContext.getString(
|
||||
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.statusLabel = "expected returned label";
|
||||
|
||||
assertThat(mController.getDashboardLabel(mContext, info, true))
|
||||
.isEqualTo(info.statusLabel);
|
||||
assertThat(mController.getDashboardLabel(mContext, info, true)).isEqualTo(info.statusLabel);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -88,8 +88,8 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
public void testUpdateState_isSystemOrDefaultAppAndUnrestrictedStates_prefChecked() {
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -100,8 +100,8 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -112,8 +112,8 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
@Test
|
||||
public void testUpdateState_isUnrestrictedStates_prefChecked() {
|
||||
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -124,8 +124,8 @@ public class UnrestrictedPreferenceControllerTest {
|
||||
@Test
|
||||
public void testUpdateState_prefUnchecked() {
|
||||
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
|
@@ -47,10 +47,8 @@ public class BatterySaverButtonPreferenceControllerTest {
|
||||
private Context mContext;
|
||||
private MainSwitchPreference mPreference;
|
||||
|
||||
@Mock
|
||||
private PowerManager mPowerManager;
|
||||
@Mock
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock private PowerManager mPowerManager;
|
||||
@Mock private PreferenceScreen mPreferenceScreen;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
|
@@ -59,10 +59,12 @@ public class BatterySaverSchedulePreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testPreference_lowPowerLevelZero_percentageMode_summaryNoSchedule() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
@@ -71,10 +73,14 @@ public class BatterySaverSchedulePreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void testPreference_lowPowerLevelNonZero_percentageMode_summaryPercentage() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, TRIGGER_LEVEL);
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
|
||||
TRIGGER_LEVEL);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||
|
||||
mController.updateState(mPreference);
|
||||
|
||||
|
@@ -34,8 +34,7 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
||||
private Context mContext;
|
||||
private ContentResolver mResolver;
|
||||
private BatterySaverScheduleSeekBarController mController;
|
||||
@Mock
|
||||
private PreferenceScreen mScreen;
|
||||
@Mock private PreferenceScreen mScreen;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -83,7 +82,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
||||
|
||||
@Test
|
||||
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);
|
||||
|
||||
mController.updateSeekBar();
|
||||
@@ -95,7 +96,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
||||
@Test
|
||||
public void updateSeekBar_percentageMode_hasCorrectProperties() {
|
||||
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);
|
||||
setTriggerLevel(10);
|
||||
|
||||
@@ -108,7 +111,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
||||
|
||||
@Test
|
||||
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);
|
||||
setTriggerLevel(0);
|
||||
|
||||
@@ -120,7 +125,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
||||
|
||||
@Test
|
||||
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);
|
||||
setTriggerLevel(15);
|
||||
|
||||
|
@@ -1,6 +1,7 @@
|
||||
package com.android.settings.fuelgauge.batterysaver;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
@@ -90,18 +91,25 @@ public final class BatterySaverScheduleSettingsTest {
|
||||
}
|
||||
|
||||
private void setSchedule(int scheduleType, int schedulePercentage) {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.AUTOMATIC_POWER_SAVE_MODE, scheduleType);
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, schedulePercentage);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||
scheduleType);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
|
||||
schedulePercentage);
|
||||
}
|
||||
|
||||
private void verifySchedule(String scheduleTypeKey, int schedulePercentage) {
|
||||
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_PERCENTAGE_VALUE,
|
||||
scheduleTypeKey, schedulePercentage);
|
||||
scheduleTypeKey,
|
||||
schedulePercentage);
|
||||
}
|
||||
|
||||
private void waitAWhile() {
|
||||
|
@@ -34,13 +34,13 @@ import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {
|
||||
@Config(
|
||||
shadows = {
|
||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||
})
|
||||
public class BatterySaverSettingsTest {
|
||||
BatterySaverSettings mFragment;
|
||||
@Mock
|
||||
PreferenceScreen mScreen;
|
||||
@Mock PreferenceScreen mScreen;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -50,7 +50,6 @@ public class BatterySaverSettingsTest {
|
||||
doReturn(mScreen).when(mFragment).getPreferenceScreen();
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void setupFooter_linkAddedWhenAppropriate() {
|
||||
doReturn("").when(mFragment).getText(anyInt());
|
||||
|
@@ -63,16 +63,15 @@ public class AnomalyCleanupJobServiceTest {
|
||||
|
||||
private Context mContext;
|
||||
private JobScheduler mJobScheduler;
|
||||
@Mock
|
||||
private JobParameters mParams;
|
||||
@Mock private JobParameters mParams;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mJobScheduler = spy(new JobSchedulerImpl(mContext,
|
||||
IJobScheduler.Stub.asInterface(new Binder())));
|
||||
mJobScheduler =
|
||||
spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
|
||||
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
||||
}
|
||||
|
||||
@@ -108,22 +107,28 @@ public class AnomalyCleanupJobServiceTest {
|
||||
@Ignore
|
||||
public void onStartJob_cleanUpDataBefore30days() {
|
||||
final BatteryDatabaseManager databaseManager = BatteryDatabaseManager.getInstance(mContext);
|
||||
final AnomalyCleanupJobService service = spy(Robolectric.setupService(
|
||||
AnomalyCleanupJobService.class));
|
||||
final AnomalyCleanupJobService service =
|
||||
spy(Robolectric.setupService(AnomalyCleanupJobService.class));
|
||||
doNothing().when(service).jobFinished(any(), anyBoolean());
|
||||
|
||||
// Insert two records, one is current and the other one is 31 days before
|
||||
databaseManager.insertAnomaly(UID, PACKAGE_NAME, ANOMALY_TYPE,
|
||||
AnomalyDatabaseHelper.State.NEW, TIMESTAMP_NOW);
|
||||
databaseManager.insertAnomaly(UID, PACKAGE_NAME_OLD, ANOMALY_TYPE,
|
||||
AnomalyDatabaseHelper.State.NEW, TIMESTAMP_31_DAYS_BEFORE);
|
||||
databaseManager.insertAnomaly(
|
||||
UID, PACKAGE_NAME, ANOMALY_TYPE, AnomalyDatabaseHelper.State.NEW, TIMESTAMP_NOW);
|
||||
databaseManager.insertAnomaly(
|
||||
UID,
|
||||
PACKAGE_NAME_OLD,
|
||||
ANOMALY_TYPE,
|
||||
AnomalyDatabaseHelper.State.NEW,
|
||||
TIMESTAMP_31_DAYS_BEFORE);
|
||||
|
||||
service.onStartJob(mParams);
|
||||
|
||||
// In database, it only contains the current record
|
||||
final List<AppInfo> appInfos = databaseManager.queryAllAnomalies(0,
|
||||
AnomalyDatabaseHelper.State.NEW);
|
||||
assertThat(appInfos).containsExactly(new AppInfo.Builder()
|
||||
final List<AppInfo> appInfos =
|
||||
databaseManager.queryAllAnomalies(0, AnomalyDatabaseHelper.State.NEW);
|
||||
assertThat(appInfos)
|
||||
.containsExactly(
|
||||
new AppInfo.Builder()
|
||||
.setUid(UID)
|
||||
.setPackageName(PACKAGE_NAME)
|
||||
.addAnomalyType(ANOMALY_TYPE)
|
||||
|
@@ -57,8 +57,7 @@ public class AnomalyConfigJobServiceTest {
|
||||
|
||||
private static final int ANOMALY_CONFIG_VERSION = 1;
|
||||
private static final String ANOMALY_CONFIG = "X64s";
|
||||
@Mock
|
||||
private StatsManager mStatsManager;
|
||||
@Mock private StatsManager mStatsManager;
|
||||
|
||||
private Context mContext;
|
||||
private JobScheduler mJobScheduler;
|
||||
@@ -69,14 +68,16 @@ public class AnomalyConfigJobServiceTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mJobScheduler = spy(new JobSchedulerImpl(mContext,
|
||||
IJobScheduler.Stub.asInterface(new Binder())));
|
||||
mJobScheduler =
|
||||
spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
|
||||
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
||||
|
||||
mJobService = spy(new AnomalyConfigJobService());
|
||||
doReturn(application.getSharedPreferences(AnomalyConfigJobService.PREF_DB,
|
||||
Context.MODE_PRIVATE)).when(mJobService).getSharedPreferences(anyString(),
|
||||
anyInt());
|
||||
doReturn(
|
||||
application.getSharedPreferences(
|
||||
AnomalyConfigJobService.PREF_DB, Context.MODE_PRIVATE))
|
||||
.when(mJobService)
|
||||
.getSharedPreferences(anyString(), anyInt());
|
||||
doReturn(application.getContentResolver()).when(mJobService).getContentResolver();
|
||||
}
|
||||
|
||||
@@ -106,10 +107,12 @@ public class AnomalyConfigJobServiceTest {
|
||||
@Test
|
||||
public void checkAnomalyConfig_newConfigExist_removeOldConfig()
|
||||
throws StatsManager.StatsUnavailableException {
|
||||
Settings.Global.putInt(application.getContentResolver(),
|
||||
Settings.Global.ANOMALY_CONFIG_VERSION, ANOMALY_CONFIG_VERSION);
|
||||
Settings.Global.putString(application.getContentResolver(), Settings.Global.ANOMALY_CONFIG,
|
||||
ANOMALY_CONFIG);
|
||||
Settings.Global.putInt(
|
||||
application.getContentResolver(),
|
||||
Settings.Global.ANOMALY_CONFIG_VERSION,
|
||||
ANOMALY_CONFIG_VERSION);
|
||||
Settings.Global.putString(
|
||||
application.getContentResolver(), Settings.Global.ANOMALY_CONFIG, ANOMALY_CONFIG);
|
||||
|
||||
mJobService.checkAnomalyConfig(mStatsManager);
|
||||
|
||||
@@ -119,10 +122,12 @@ public class AnomalyConfigJobServiceTest {
|
||||
@Test
|
||||
public void checkAnomalyConfig_newConfigExist_uploadNewConfig()
|
||||
throws StatsManager.StatsUnavailableException {
|
||||
Settings.Global.putInt(application.getContentResolver(),
|
||||
Settings.Global.ANOMALY_CONFIG_VERSION, ANOMALY_CONFIG_VERSION);
|
||||
Settings.Global.putString(application.getContentResolver(), Settings.Global.ANOMALY_CONFIG,
|
||||
ANOMALY_CONFIG);
|
||||
Settings.Global.putInt(
|
||||
application.getContentResolver(),
|
||||
Settings.Global.ANOMALY_CONFIG_VERSION,
|
||||
ANOMALY_CONFIG_VERSION);
|
||||
Settings.Global.putString(
|
||||
application.getContentResolver(), Settings.Global.ANOMALY_CONFIG, ANOMALY_CONFIG);
|
||||
|
||||
mJobService.checkAnomalyConfig(mStatsManager);
|
||||
|
||||
|
@@ -86,20 +86,13 @@ public class AnomalyDetectionJobServiceTest {
|
||||
"anomaly_type=6,auto_restriction=false";
|
||||
private static final int ANOMALY_TYPE = 6;
|
||||
private static final long VERSION_CODE = 15;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
@Mock
|
||||
private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||
@Mock
|
||||
private BatteryUtils mBatteryUtils;
|
||||
@Mock
|
||||
private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
@Mock
|
||||
private StatsDimensionsValue mStatsDimensionsValue;
|
||||
@Mock
|
||||
private JobParameters mJobParameters;
|
||||
@Mock
|
||||
private JobWorkItem mJobWorkItem;
|
||||
@Mock private UserManager mUserManager;
|
||||
@Mock private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||
@Mock private BatteryUtils mBatteryUtils;
|
||||
@Mock private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||
@Mock private StatsDimensionsValue mStatsDimensionsValue;
|
||||
@Mock private JobParameters mJobParameters;
|
||||
@Mock private JobWorkItem mJobWorkItem;
|
||||
|
||||
private BatteryTipPolicy mPolicy;
|
||||
private Bundle mBundle;
|
||||
@@ -113,8 +106,8 @@ public class AnomalyDetectionJobServiceTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mJobScheduler = spy(new JobSchedulerImpl(mContext,
|
||||
IJobScheduler.Stub.asInterface(new Binder())));
|
||||
mJobScheduler =
|
||||
spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
|
||||
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
||||
|
||||
mPolicy = new BatteryTipPolicy(mContext);
|
||||
@@ -146,17 +139,24 @@ public class AnomalyDetectionJobServiceTest {
|
||||
@Test
|
||||
public void saveAnomalyToDatabase_systemAllowlisted_doNotSave() {
|
||||
doReturn(UID).when(mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||
doReturn(true).when(mPowerAllowlistBackend)
|
||||
doReturn(true)
|
||||
.when(mPowerAllowlistBackend)
|
||||
.isAllowlisted(any(String[].class), any(Integer.class));
|
||||
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||
mContext,
|
||||
mUserManager,
|
||||
mBatteryDatabaseManager,
|
||||
mBatteryUtils,
|
||||
mPolicy,
|
||||
mPowerAllowlistBackend,
|
||||
mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider,
|
||||
mFeatureFactory.metricsFeatureProvider, mBundle);
|
||||
mFeatureFactory.metricsFeatureProvider,
|
||||
mBundle);
|
||||
|
||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
||||
anyInt(), anyLong());
|
||||
verify(mBatteryDatabaseManager, never())
|
||||
.insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -166,19 +166,28 @@ public class AnomalyDetectionJobServiceTest {
|
||||
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
||||
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
||||
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
||||
doReturn(Process.FIRST_APPLICATION_UID).when(
|
||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||
doReturn(Process.FIRST_APPLICATION_UID)
|
||||
.when(mAnomalyDetectionJobService)
|
||||
.extractUidFromStatsDimensionsValue(any());
|
||||
doReturn(true).when(mBatteryUtils).shouldHideAnomaly(any(), anyInt(), any());
|
||||
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||
mContext,
|
||||
mUserManager,
|
||||
mBatteryDatabaseManager,
|
||||
mBatteryUtils,
|
||||
mPolicy,
|
||||
mPowerAllowlistBackend,
|
||||
mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider,
|
||||
mFeatureFactory.metricsFeatureProvider, mBundle);
|
||||
mFeatureFactory.metricsFeatureProvider,
|
||||
mBundle);
|
||||
|
||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
||||
anyInt(), anyLong());
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
||||
verify(mBatteryDatabaseManager, never())
|
||||
.insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_ANOMALY_IGNORED,
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
||||
@@ -187,32 +196,46 @@ public class AnomalyDetectionJobServiceTest {
|
||||
|
||||
@Test
|
||||
public void saveAnomalyToDatabase_systemUid_doNotSave() {
|
||||
doReturn(Process.SYSTEM_UID).when(
|
||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||
doReturn(Process.SYSTEM_UID)
|
||||
.when(mAnomalyDetectionJobService)
|
||||
.extractUidFromStatsDimensionsValue(any());
|
||||
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||
mContext,
|
||||
mUserManager,
|
||||
mBatteryDatabaseManager,
|
||||
mBatteryUtils,
|
||||
mPolicy,
|
||||
mPowerAllowlistBackend,
|
||||
mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider,
|
||||
mFeatureFactory.metricsFeatureProvider,
|
||||
mBundle);
|
||||
|
||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
||||
anyInt(), anyLong());
|
||||
verify(mBatteryDatabaseManager, never())
|
||||
.insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void saveAnomalyToDatabase_uidNull_doNotSave() {
|
||||
doReturn(AnomalyDetectionJobService.UID_NULL).when(
|
||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||
doReturn(AnomalyDetectionJobService.UID_NULL)
|
||||
.when(mAnomalyDetectionJobService)
|
||||
.extractUidFromStatsDimensionsValue(any());
|
||||
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||
mContext,
|
||||
mUserManager,
|
||||
mBatteryDatabaseManager,
|
||||
mBatteryUtils,
|
||||
mPolicy,
|
||||
mPowerAllowlistBackend,
|
||||
mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider,
|
||||
mFeatureFactory.metricsFeatureProvider,
|
||||
mBundle);
|
||||
|
||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
||||
anyInt(), anyLong());
|
||||
verify(mBatteryDatabaseManager, never())
|
||||
.insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -222,18 +245,32 @@ public class AnomalyDetectionJobServiceTest {
|
||||
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
||||
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
||||
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
||||
doReturn(Process.FIRST_APPLICATION_UID).when(
|
||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||
doReturn(Process.FIRST_APPLICATION_UID)
|
||||
.when(mAnomalyDetectionJobService)
|
||||
.extractUidFromStatsDimensionsValue(any());
|
||||
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||
mContext,
|
||||
mUserManager,
|
||||
mBatteryDatabaseManager,
|
||||
mBatteryUtils,
|
||||
mPolicy,
|
||||
mPowerAllowlistBackend,
|
||||
mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider,
|
||||
mFeatureFactory.metricsFeatureProvider,
|
||||
mBundle);
|
||||
|
||||
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
|
||||
eq(AnomalyDatabaseHelper.State.AUTO_HANDLED), anyLong());
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
||||
verify(mBatteryDatabaseManager)
|
||||
.insertAnomaly(
|
||||
anyInt(),
|
||||
anyString(),
|
||||
eq(6),
|
||||
eq(AnomalyDatabaseHelper.State.AUTO_HANDLED),
|
||||
anyLong());
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
||||
@@ -247,18 +284,32 @@ public class AnomalyDetectionJobServiceTest {
|
||||
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
||||
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
||||
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
||||
doReturn(Process.FIRST_APPLICATION_UID).when(
|
||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||
doReturn(Process.FIRST_APPLICATION_UID)
|
||||
.when(mAnomalyDetectionJobService)
|
||||
.extractUidFromStatsDimensionsValue(any());
|
||||
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||
mContext,
|
||||
mUserManager,
|
||||
mBatteryDatabaseManager,
|
||||
mBatteryUtils,
|
||||
mPolicy,
|
||||
mPowerAllowlistBackend,
|
||||
mContext.getContentResolver(),
|
||||
mFeatureFactory.powerUsageFeatureProvider,
|
||||
mFeatureFactory.metricsFeatureProvider,
|
||||
mBundle);
|
||||
|
||||
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
|
||||
eq(AnomalyDatabaseHelper.State.NEW), anyLong());
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
||||
verify(mBatteryDatabaseManager)
|
||||
.insertAnomaly(
|
||||
anyInt(),
|
||||
anyString(),
|
||||
eq(6),
|
||||
eq(AnomalyDatabaseHelper.State.NEW),
|
||||
anyLong());
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
||||
@@ -280,8 +331,8 @@ public class AnomalyDetectionJobServiceTest {
|
||||
statsDimensionsValues.add(intValue);
|
||||
when(tupleValue.getTupleValueList()).thenReturn(statsDimensionsValues);
|
||||
|
||||
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(
|
||||
tupleValue)).isEqualTo(UID);
|
||||
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(tupleValue))
|
||||
.isEqualTo(UID);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -292,8 +343,8 @@ public class AnomalyDetectionJobServiceTest {
|
||||
when(floatValue.getField()).thenReturn(AnomalyDetectionJobService.STATSD_UID_FILED);
|
||||
when(floatValue.getFloatValue()).thenReturn(0f);
|
||||
|
||||
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(
|
||||
floatValue)).isEqualTo(AnomalyDetectionJobService.UID_NULL);
|
||||
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(floatValue))
|
||||
.isEqualTo(AnomalyDetectionJobService.UID_NULL);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -18,7 +18,6 @@ package com.android.settings.fuelgauge.batterytip;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.spy;
|
||||
|
||||
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.shadow.ShadowAlertDialogCompat;
|
||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||
import com.android.settingslib.fuelgauge.EstimateKt;
|
||||
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
@@ -98,7 +96,8 @@ public class BatteryTipDialogFragmentTest {
|
||||
mPackageManager.setApplicationIcon(PACKAGE_NAME, new ColorDrawable());
|
||||
|
||||
List<AppInfo> highUsageTips = new ArrayList<>();
|
||||
mAppInfo = new AppInfo.Builder()
|
||||
mAppInfo =
|
||||
new AppInfo.Builder()
|
||||
.setScreenOnTimeMs(SCREEN_TIME_MS)
|
||||
.setPackageName(PACKAGE_NAME)
|
||||
.build();
|
||||
@@ -107,11 +106,11 @@ public class BatteryTipDialogFragmentTest {
|
||||
|
||||
final List<AppInfo> restrictApps = new ArrayList<>();
|
||||
restrictApps.add(mAppInfo);
|
||||
mRestrictedOneAppTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
||||
new ArrayList<>(restrictApps));
|
||||
mRestrictedOneAppTip =
|
||||
new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>(restrictApps));
|
||||
restrictApps.add(mAppInfo);
|
||||
mRestrictTwoAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
||||
new ArrayList<>(restrictApps));
|
||||
mRestrictTwoAppsTip =
|
||||
new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>(restrictApps));
|
||||
|
||||
mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
|
||||
mDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */);
|
||||
@@ -128,24 +127,30 @@ public class BatteryTipDialogFragmentTest {
|
||||
|
||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mHighUsageTip, METRICS_KEY);
|
||||
|
||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
||||
0 /* containerViewId */, null /* bundle */);
|
||||
FragmentController.setupFragment(
|
||||
mDialogFragment,
|
||||
FragmentActivity.class,
|
||||
0 /* containerViewId */,
|
||||
null /* bundle */);
|
||||
|
||||
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
||||
|
||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
|
||||
assertThat(shadowDialog.getMessage()).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_dialog_message, 1));
|
||||
assertThat(shadowDialog.getMessage())
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_dialog_message, 1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnCreateDialog_restrictOneAppTip_fireRestrictOneAppDialog() {
|
||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictedOneAppTip, METRICS_KEY);
|
||||
|
||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
||||
0 /* containerViewId */, null /* bundle */);
|
||||
FragmentController.setupFragment(
|
||||
mDialogFragment,
|
||||
FragmentActivity.class,
|
||||
0 /* containerViewId */,
|
||||
null /* bundle */);
|
||||
|
||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
@@ -163,9 +168,11 @@ public class BatteryTipDialogFragmentTest {
|
||||
|
||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictTwoAppsTip, METRICS_KEY);
|
||||
|
||||
|
||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
||||
0 /* containerViewId */, null /* bundle */);
|
||||
FragmentController.setupFragment(
|
||||
mDialogFragment,
|
||||
FragmentActivity.class,
|
||||
0 /* containerViewId */,
|
||||
null /* bundle */);
|
||||
|
||||
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
||||
|
||||
@@ -189,13 +196,16 @@ public class BatteryTipDialogFragmentTest {
|
||||
for (int i = 0; i < 6; i++) {
|
||||
appInfos.add(mAppInfo);
|
||||
}
|
||||
final RestrictAppTip restrictSixAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
||||
appInfos);
|
||||
final RestrictAppTip restrictSixAppsTip =
|
||||
new RestrictAppTip(BatteryTip.StateType.NEW, appInfos);
|
||||
|
||||
mDialogFragment = BatteryTipDialogFragment.newInstance(restrictSixAppsTip, METRICS_KEY);
|
||||
|
||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
||||
0 /* containerViewId */, null /* bundle */);
|
||||
FragmentController.setupFragment(
|
||||
mDialogFragment,
|
||||
FragmentActivity.class,
|
||||
0 /* containerViewId */,
|
||||
null /* bundle */);
|
||||
|
||||
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
||||
|
||||
@@ -215,8 +225,11 @@ public class BatteryTipDialogFragmentTest {
|
||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mUnrestrictAppTip, METRICS_KEY);
|
||||
ShadowUtils.setApplicationLabel(PACKAGE_NAME, DISPLAY_NAME);
|
||||
|
||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
||||
0 /* containerViewId */, null /* bundle */);
|
||||
FragmentController.setupFragment(
|
||||
mDialogFragment,
|
||||
FragmentActivity.class,
|
||||
0 /* containerViewId */,
|
||||
null /* bundle */);
|
||||
|
||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||
|
@@ -54,17 +54,16 @@ public class BatteryTipLoaderTest {
|
||||
BatteryTip.TipType.BATTERY_DEFENDER,
|
||||
BatteryTip.TipType.DOCK_DEFENDER,
|
||||
BatteryTip.TipType.INCOMPATIBLE_CHARGER,
|
||||
BatteryTip.TipType.HIGH_DEVICE_USAGE};
|
||||
BatteryTip.TipType.HIGH_DEVICE_USAGE
|
||||
};
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock
|
||||
private PowerManager mPowerManager;
|
||||
@Mock
|
||||
private Intent mIntent;
|
||||
@Mock
|
||||
private BatteryUtils mBatteryUtils;
|
||||
@Mock
|
||||
private BatteryInfo mBatteryInfo;
|
||||
|
||||
@Mock private PowerManager mPowerManager;
|
||||
@Mock private Intent mIntent;
|
||||
@Mock private BatteryUtils mBatteryUtils;
|
||||
@Mock private BatteryInfo mBatteryInfo;
|
||||
private Context mContext;
|
||||
private BatteryTipLoader mBatteryTipLoader;
|
||||
|
||||
|
@@ -15,8 +15,7 @@
|
||||
*/
|
||||
package com.android.settings.fuelgauge.batterytip;
|
||||
|
||||
import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType
|
||||
.SMART_BATTERY_MANAGER;
|
||||
import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType.SMART_BATTERY_MANAGER;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
@@ -31,8 +30,6 @@ import android.text.format.DateUtils;
|
||||
|
||||
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.core.BasePreferenceController;
|
||||
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 long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||
|
||||
@Mock
|
||||
private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener;
|
||||
@Mock
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock
|
||||
private BatteryTip mBatteryTip;
|
||||
@Mock
|
||||
private SettingsActivity mSettingsActivity;
|
||||
@Mock
|
||||
private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener;
|
||||
@Mock private PreferenceScreen mPreferenceScreen;
|
||||
@Mock private BatteryTip mBatteryTip;
|
||||
@Mock private SettingsActivity mSettingsActivity;
|
||||
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||
|
||||
private Context mContext;
|
||||
private CardPreference mCardPreference;
|
||||
@@ -147,13 +139,13 @@ public class BatteryTipPreferenceControllerTest {
|
||||
|
||||
@Test
|
||||
public void getAvailabilityStatus_returnAvailableUnsearchable() {
|
||||
assertThat(mBatteryTipPreferenceController.getAvailabilityStatus()).isEqualTo(
|
||||
BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||
assertThat(mBatteryTipPreferenceController.getAvailabilityStatus())
|
||||
.isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||
}
|
||||
|
||||
private BatteryTipPreferenceController buildBatteryTipPreferenceController() {
|
||||
final BatteryTipPreferenceController controller = new BatteryTipPreferenceController(
|
||||
mContext, KEY_PREF);
|
||||
final BatteryTipPreferenceController controller =
|
||||
new BatteryTipPreferenceController(mContext, KEY_PREF);
|
||||
controller.setActivity(mSettingsActivity);
|
||||
controller.setFragment(mFragment);
|
||||
controller.setBatteryTipListener(mBatteryTipListener);
|
||||
|
@@ -45,10 +45,8 @@ import java.util.ArrayList;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class BatteryTipUtilsTest {
|
||||
|
||||
@Mock
|
||||
private SettingsActivity mSettingsActivity;
|
||||
@Mock
|
||||
private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock private SettingsActivity mSettingsActivity;
|
||||
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||
private RestrictAppTip mRestrictAppTip;
|
||||
private LowBatteryTip mLowBatteryTip;
|
||||
private BatteryDefenderTip mBatteryDefenderTip;
|
||||
@@ -61,42 +59,49 @@ public class BatteryTipUtilsTest {
|
||||
when(mSettingsActivity.getApplicationContext()).thenReturn(RuntimeEnvironment.application);
|
||||
when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application);
|
||||
mRestrictAppTip = spy(new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>()));
|
||||
mLowBatteryTip = spy(
|
||||
new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */));
|
||||
mBatteryDefenderTip = spy(new BatteryDefenderTip(BatteryTip.StateType.NEW,
|
||||
false /* isPluggedIn */));
|
||||
mLowBatteryTip =
|
||||
spy(new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */));
|
||||
mBatteryDefenderTip =
|
||||
spy(new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetActionForBatteryTip_typeRestrictStateNew_returnActionRestrict() {
|
||||
when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
||||
|
||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity,
|
||||
mFragment)).isInstanceOf(RestrictAppAction.class);
|
||||
assertThat(
|
||||
BatteryTipUtils.getActionForBatteryTip(
|
||||
mRestrictAppTip, mSettingsActivity, mFragment))
|
||||
.isInstanceOf(RestrictAppAction.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetActionForBatteryTip_typeRestrictStateHandled_returnActionOpen() {
|
||||
when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.HANDLED);
|
||||
|
||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity,
|
||||
mFragment)).isInstanceOf(OpenRestrictAppFragmentAction.class);
|
||||
assertThat(
|
||||
BatteryTipUtils.getActionForBatteryTip(
|
||||
mRestrictAppTip, mSettingsActivity, mFragment))
|
||||
.isInstanceOf(OpenRestrictAppFragmentAction.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetActionForBatteryTip_typeLowBatteryStateNew_returnActionOpen() {
|
||||
when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
||||
|
||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mLowBatteryTip, mSettingsActivity,
|
||||
mFragment)).isInstanceOf(OpenBatterySaverAction.class);
|
||||
assertThat(
|
||||
BatteryTipUtils.getActionForBatteryTip(
|
||||
mLowBatteryTip, mSettingsActivity, mFragment))
|
||||
.isInstanceOf(OpenBatterySaverAction.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void
|
||||
testGetActionForBatteryTip_typeBatteryDefenderStateNew_returnNullAction() {
|
||||
public void testGetActionForBatteryTip_typeBatteryDefenderStateNew_returnNullAction() {
|
||||
when(mBatteryDefenderTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
||||
|
||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mBatteryDefenderTip, mSettingsActivity,
|
||||
mFragment)).isNull();
|
||||
assertThat(
|
||||
BatteryTipUtils.getActionForBatteryTip(
|
||||
mBatteryDefenderTip, mSettingsActivity, mFragment))
|
||||
.isNull();
|
||||
}
|
||||
}
|
||||
|
@@ -24,9 +24,9 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
import java.time.Duration;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class HighUsageDataParserTest {
|
||||
|
@@ -39,10 +39,10 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class OpenRestrictAppFragmentActionTest {
|
||||
@@ -53,10 +53,8 @@ public class OpenRestrictAppFragmentActionTest {
|
||||
private static final int ANOMALY_BT = 1;
|
||||
private static final int METRICS_KEY = 1;
|
||||
|
||||
@Mock
|
||||
private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock
|
||||
private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||
private OpenRestrictAppFragmentAction mAction;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private Context mContext;
|
||||
@@ -67,19 +65,22 @@ public class OpenRestrictAppFragmentActionTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = ApplicationProvider.getApplicationContext();
|
||||
mAppInfos = new ArrayList<>();
|
||||
mAppInfos.add(new AppInfo.Builder()
|
||||
mAppInfos.add(
|
||||
new AppInfo.Builder()
|
||||
.setPackageName(PACKAGE_NAME_1)
|
||||
.addAnomalyType(ANOMALY_BT)
|
||||
.build());
|
||||
mAppInfos.add(new AppInfo.Builder()
|
||||
mAppInfos.add(
|
||||
new AppInfo.Builder()
|
||||
.setPackageName(PACKAGE_NAME_2)
|
||||
.addAnomalyType(ANOMALY_WAKEUP)
|
||||
.build());
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
when(mFragment.getContext()).thenReturn(mContext);
|
||||
|
||||
mAction = new OpenRestrictAppFragmentAction(mFragment,
|
||||
new RestrictAppTip(BatteryTip.StateType.HANDLED, mAppInfos));
|
||||
mAction =
|
||||
new OpenRestrictAppFragmentAction(
|
||||
mFragment, new RestrictAppTip(BatteryTip.StateType.HANDLED, mAppInfos));
|
||||
mAction.mBatteryDatabaseManager = mBatteryDatabaseManager;
|
||||
}
|
||||
|
||||
@@ -93,9 +94,12 @@ public class OpenRestrictAppFragmentActionTest {
|
||||
public void testHandlePositiveAction() {
|
||||
mAction.handlePositiveAction(METRICS_KEY);
|
||||
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_OPEN_APP_RESTRICTION_PAGE, METRICS_KEY);
|
||||
verify(mBatteryDatabaseManager).updateAnomalies(mAppInfos,
|
||||
AnomalyDatabaseHelper.State.HANDLED);
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_OPEN_APP_RESTRICTION_PAGE,
|
||||
METRICS_KEY);
|
||||
verify(mBatteryDatabaseManager)
|
||||
.updateAnomalies(mAppInfos, AnomalyDatabaseHelper.State.HANDLED);
|
||||
}
|
||||
}
|
||||
|
@@ -52,8 +52,7 @@ public class RestrictAppActionTest {
|
||||
private static final int ANOMALY_BT = 1;
|
||||
private static final int METRICS_KEY = 1;
|
||||
|
||||
@Mock
|
||||
private BatteryUtils mBatteryUtils;
|
||||
@Mock private BatteryUtils mBatteryUtils;
|
||||
private RestrictAppAction mRestrictAppAction;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
|
||||
@@ -62,11 +61,9 @@ public class RestrictAppActionTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
final List<AppInfo> mAppInfos = new ArrayList<>();
|
||||
mAppInfos.add(new AppInfo.Builder()
|
||||
.setUid(UID_1)
|
||||
.setPackageName(PACKAGE_NAME_1)
|
||||
.build());
|
||||
mAppInfos.add(new AppInfo.Builder()
|
||||
mAppInfos.add(new AppInfo.Builder().setUid(UID_1).setPackageName(PACKAGE_NAME_1).build());
|
||||
mAppInfos.add(
|
||||
new AppInfo.Builder()
|
||||
.setUid(UID_2)
|
||||
.setPackageName(PACKAGE_NAME_2)
|
||||
.addAnomalyType(ANOMALY_BT)
|
||||
@@ -74,7 +71,9 @@ public class RestrictAppActionTest {
|
||||
.build());
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
|
||||
mRestrictAppAction = new RestrictAppAction(RuntimeEnvironment.application,
|
||||
mRestrictAppAction =
|
||||
new RestrictAppAction(
|
||||
RuntimeEnvironment.application,
|
||||
new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfos));
|
||||
mRestrictAppAction.mBatteryUtils = mBatteryUtils;
|
||||
}
|
||||
@@ -89,17 +88,28 @@ public class RestrictAppActionTest {
|
||||
public void testHandlePositiveAction() {
|
||||
mRestrictAppAction.handlePositiveAction(METRICS_KEY);
|
||||
|
||||
verify(mBatteryUtils)
|
||||
.setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_IGNORED);
|
||||
verify(mBatteryUtils)
|
||||
.setForceAppStandby(UID_2, PACKAGE_NAME_2, AppOpsManager.MODE_IGNORED);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_1, 0);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_2,
|
||||
verify(mBatteryUtils).setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_IGNORED);
|
||||
verify(mBatteryUtils).setForceAppStandby(UID_2, PACKAGE_NAME_2, AppOpsManager.MODE_IGNORED);
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
|
||||
METRICS_KEY,
|
||||
PACKAGE_NAME_1,
|
||||
0);
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
|
||||
METRICS_KEY,
|
||||
PACKAGE_NAME_2,
|
||||
ANOMALY_WAKEUP);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_2,
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
|
||||
METRICS_KEY,
|
||||
PACKAGE_NAME_2,
|
||||
ANOMALY_BT);
|
||||
}
|
||||
}
|
||||
|
@@ -44,8 +44,7 @@ public class UnrestrictAppActionTest {
|
||||
private static final String PACKAGE_NAME_1 = "com.android.app1";
|
||||
private static final int METRICS_KEY = 1;
|
||||
|
||||
@Mock
|
||||
private BatteryUtils mBatteryUtils;
|
||||
@Mock private BatteryUtils mBatteryUtils;
|
||||
private UnrestrictAppAction mUnrestrictAppAction;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
|
||||
@@ -53,13 +52,13 @@ public class UnrestrictAppActionTest {
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
final AppInfo appInfo = new AppInfo.Builder()
|
||||
.setUid(UID_1)
|
||||
.setPackageName(PACKAGE_NAME_1)
|
||||
.build();
|
||||
final AppInfo appInfo =
|
||||
new AppInfo.Builder().setUid(UID_1).setPackageName(PACKAGE_NAME_1).build();
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
|
||||
mUnrestrictAppAction = new UnrestrictAppAction(RuntimeEnvironment.application,
|
||||
mUnrestrictAppAction =
|
||||
new UnrestrictAppAction(
|
||||
RuntimeEnvironment.application,
|
||||
new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo));
|
||||
mUnrestrictAppAction.mBatteryUtils = mBatteryUtils;
|
||||
}
|
||||
@@ -73,9 +72,9 @@ public class UnrestrictAppActionTest {
|
||||
public void testHandlePositiveAction() {
|
||||
mUnrestrictAppAction.handlePositiveAction(METRICS_KEY);
|
||||
|
||||
verify(mBatteryUtils)
|
||||
.setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_ALLOWED);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
verify(mBatteryUtils).setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_ALLOWED);
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP,
|
||||
METRICS_KEY,
|
||||
|
@@ -38,8 +38,7 @@ import org.robolectric.RobolectricTestRunner;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class BatteryDefenderDetectorTest {
|
||||
|
||||
@Mock
|
||||
private BatteryInfo mBatteryInfo;
|
||||
@Mock private BatteryInfo mBatteryInfo;
|
||||
private BatteryDefenderDetector mBatteryDefenderDetector;
|
||||
private Context mContext;
|
||||
|
||||
@@ -53,8 +52,7 @@ public class BatteryDefenderDetectorTest {
|
||||
|
||||
mContext = ApplicationProvider.getApplicationContext();
|
||||
|
||||
mBatteryDefenderDetector = new BatteryDefenderDetector(
|
||||
mBatteryInfo, mContext);
|
||||
mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, mContext);
|
||||
|
||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
}
|
||||
|
@@ -59,25 +59,35 @@ public class DockDefenderDetectorTest {
|
||||
mBatteryInfo = new BatteryInfo();
|
||||
mBatteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_DOCK;
|
||||
mDockDefenderDetector = new DockDefenderDetector(mBatteryInfo, mContext);
|
||||
Intent intent = BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
50 /* level */, 100 /* scale */, BatteryManager.BATTERY_STATUS_CHARGING);
|
||||
doReturn(intent).when(mContext).registerReceiver(eq(null),
|
||||
refEq(new IntentFilter(Intent.ACTION_BATTERY_CHANGED)));
|
||||
Intent intent =
|
||||
BatteryTestUtils.getCustomBatteryIntent(
|
||||
BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||
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(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
|
||||
0);
|
||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_dockDefenderTemporarilyBypassed() {
|
||||
Settings.Global.putInt(mContext.getContentResolver(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 1);
|
||||
Settings.Global.putInt(
|
||||
mContext.getContentResolver(),
|
||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
|
||||
1);
|
||||
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
|
||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
||||
assertEquals(
|
||||
((DockDefenderTip) batteryTip).getMode(),
|
||||
BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED);
|
||||
}
|
||||
|
||||
@@ -89,8 +99,8 @@ public class DockDefenderDetectorTest {
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
|
||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
||||
BatteryUtils.DockDefenderMode.ACTIVE);
|
||||
assertEquals(
|
||||
((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.ACTIVE);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -101,7 +111,8 @@ public class DockDefenderDetectorTest {
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
|
||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
||||
assertEquals(
|
||||
((DockDefenderTip) batteryTip).getMode(),
|
||||
BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
|
||||
}
|
||||
|
||||
@@ -113,8 +124,8 @@ public class DockDefenderDetectorTest {
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
|
||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
||||
BatteryUtils.DockDefenderMode.DISABLED);
|
||||
assertEquals(
|
||||
((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -124,8 +135,8 @@ public class DockDefenderDetectorTest {
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
|
||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
||||
BatteryUtils.DockDefenderMode.DISABLED);
|
||||
assertEquals(
|
||||
((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -136,7 +147,7 @@ public class DockDefenderDetectorTest {
|
||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||
|
||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
||||
BatteryUtils.DockDefenderMode.DISABLED);
|
||||
assertEquals(
|
||||
((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
|
||||
}
|
||||
}
|
||||
|
@@ -62,18 +62,12 @@ public class HighUsageDetectorTest {
|
||||
private static final double POWER_LOW = 10000;
|
||||
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private UidBatteryConsumer mHighBatteryConsumer;
|
||||
@Mock
|
||||
private UidBatteryConsumer mLowBatteryConsumer;
|
||||
@Mock
|
||||
private UidBatteryConsumer mSystemBatteryConsumer;
|
||||
@Mock
|
||||
private HighUsageDataParser mDataParser;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock
|
||||
private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock private UidBatteryConsumer mHighBatteryConsumer;
|
||||
@Mock private UidBatteryConsumer mLowBatteryConsumer;
|
||||
@Mock private UidBatteryConsumer mSystemBatteryConsumer;
|
||||
@Mock private HighUsageDataParser mDataParser;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||
|
||||
private AppInfo mHighAppInfo;
|
||||
private AppInfo mLowAppInfo;
|
||||
@@ -94,10 +88,16 @@ public class HighUsageDetectorTest {
|
||||
when(mBatteryStatsManager.getBatteryUsageStats(any(BatteryUsageStatsQuery.class)))
|
||||
.thenReturn(mBatteryUsageStats);
|
||||
|
||||
mContext.sendStickyBroadcast(new Intent(Intent.ACTION_BATTERY_CHANGED)
|
||||
mContext.sendStickyBroadcast(
|
||||
new Intent(Intent.ACTION_BATTERY_CHANGED)
|
||||
.putExtra(BatteryManager.EXTRA_PLUGGED, 0));
|
||||
|
||||
mHighUsageDetector = spy(new HighUsageDetector(mContext, mPolicy, mBatteryUsageStats,
|
||||
mHighUsageDetector =
|
||||
spy(
|
||||
new HighUsageDetector(
|
||||
mContext,
|
||||
mPolicy,
|
||||
mBatteryUsageStats,
|
||||
mBatteryUtils.getBatteryInfo(TAG)));
|
||||
mHighUsageDetector.mBatteryUtils = mBatteryUtils;
|
||||
mHighUsageDetector.mDataParser = mDataParser;
|
||||
@@ -111,12 +111,8 @@ public class HighUsageDetectorTest {
|
||||
when(mBatteryUsageStats.getDischargePercentage()).thenReturn(100);
|
||||
when(mBatteryUsageStats.getConsumedPower()).thenReturn(POWER_HIGH + POWER_LOW);
|
||||
|
||||
mHighAppInfo = new AppInfo.Builder()
|
||||
.setUid(UID_HIGH)
|
||||
.build();
|
||||
mLowAppInfo = new AppInfo.Builder()
|
||||
.setUid(UID_LOW)
|
||||
.build();
|
||||
mHighAppInfo = new AppInfo.Builder().setUid(UID_HIGH).build();
|
||||
mLowAppInfo = new AppInfo.Builder().setUid(UID_LOW).build();
|
||||
|
||||
ArrayList<UidBatteryConsumer> consumers = new ArrayList<>();
|
||||
consumers.add(mSystemBatteryConsumer);
|
||||
|
@@ -40,8 +40,7 @@ import java.util.concurrent.TimeUnit;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class LowBatteryDetectorTest {
|
||||
|
||||
@Mock
|
||||
private BatteryInfo mBatteryInfo;
|
||||
@Mock private BatteryInfo mBatteryInfo;
|
||||
private BatteryTipPolicy mPolicy;
|
||||
private LowBatteryDetector mLowBatteryDetector;
|
||||
private Context mContext;
|
||||
@@ -55,15 +54,16 @@ public class LowBatteryDetectorTest {
|
||||
ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", true);
|
||||
mBatteryInfo.discharging = true;
|
||||
|
||||
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
||||
false /* isPowerSaveMode */);
|
||||
mLowBatteryDetector =
|
||||
new LowBatteryDetector(
|
||||
mContext, mPolicy, mBatteryInfo, false /* isPowerSaveMode */);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_disabledByPolicy_tipInvisible() {
|
||||
ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", false);
|
||||
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
||||
true /* isPowerSaveMode */);
|
||||
mLowBatteryDetector =
|
||||
new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, true /* isPowerSaveMode */);
|
||||
|
||||
assertThat(mLowBatteryDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
@@ -84,8 +84,8 @@ public class LowBatteryDetectorTest {
|
||||
|
||||
@Test
|
||||
public void testDetect_batterySaverOn_tipInvisible() {
|
||||
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
||||
true /* isPowerSaveMode */);
|
||||
mLowBatteryDetector =
|
||||
new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, true /* isPowerSaveMode */);
|
||||
|
||||
assertThat(mLowBatteryDetector.detect().getState())
|
||||
.isEqualTo(BatteryTip.StateType.INVISIBLE);
|
||||
|
@@ -22,7 +22,6 @@ import static org.mockito.Mockito.spy;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.os.PowerManager;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.android.settings.fuelgauge.BatteryInfo;
|
||||
@@ -49,8 +48,7 @@ public class SmartBatteryDetectorTest {
|
||||
private SmartBatteryDetector mSmartBatteryDetector;
|
||||
private BatteryTipPolicy mPolicy;
|
||||
|
||||
@Mock
|
||||
private BatteryInfo mBatteryInfo;
|
||||
@Mock private BatteryInfo mBatteryInfo;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -59,8 +57,13 @@ public class SmartBatteryDetectorTest {
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mContentResolver = mContext.getContentResolver();
|
||||
mPolicy = spy(new BatteryTipPolicy(mContext));
|
||||
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
||||
mContentResolver, false /* isPowerSaveMode */);
|
||||
mSmartBatteryDetector =
|
||||
new SmartBatteryDetector(
|
||||
mContext,
|
||||
mPolicy,
|
||||
mBatteryInfo,
|
||||
mContentResolver,
|
||||
false /* isPowerSaveMode */);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -72,8 +75,8 @@ public class SmartBatteryDetectorTest {
|
||||
|
||||
@Test
|
||||
public void testDetect_smartBatteryOff_tipVisible() {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
Settings.Global.putInt(
|
||||
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||
|
||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isTrue();
|
||||
@@ -81,30 +84,40 @@ public class SmartBatteryDetectorTest {
|
||||
|
||||
@Test
|
||||
public void testDetect_batterySaverOn_tipInvisible() {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
Settings.Global.putInt(
|
||||
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
||||
mContentResolver, true /* isPowerSaveMode */);
|
||||
mSmartBatteryDetector =
|
||||
new SmartBatteryDetector(
|
||||
mContext,
|
||||
mPolicy,
|
||||
mBatteryInfo,
|
||||
mContentResolver,
|
||||
true /* isPowerSaveMode */);
|
||||
|
||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_unexpectedBatteryLevel_tipInvisible() {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
Settings.Global.putInt(
|
||||
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||
mBatteryInfo.batteryLevel = UNEXPECTED_BATTERY_LEVEL;
|
||||
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
||||
mContentResolver, true /* isPowerSaveMode */);
|
||||
mSmartBatteryDetector =
|
||||
new SmartBatteryDetector(
|
||||
mContext,
|
||||
mPolicy,
|
||||
mBatteryInfo,
|
||||
mContentResolver,
|
||||
true /* isPowerSaveMode */);
|
||||
|
||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDetect_smartBatteryOn_tipInvisible() {
|
||||
Settings.Global.putInt(mContentResolver,
|
||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1);
|
||||
Settings.Global.putInt(
|
||||
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1);
|
||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||
|
||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||
|
@@ -17,9 +17,7 @@ package com.android.settings.fuelgauge.batterytip.tips;
|
||||
|
||||
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.when;
|
||||
@@ -63,8 +61,8 @@ public class BatteryDefenderTipTest {
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mBatteryDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW,
|
||||
false /* isPluggedIn */);
|
||||
mBatteryDefenderTip =
|
||||
new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */);
|
||||
|
||||
when(mPreference.getContext()).thenReturn(mContext);
|
||||
when(mCardPreference.getContext()).thenReturn(mContext);
|
||||
@@ -93,8 +91,8 @@ public class BatteryDefenderTipTest {
|
||||
mBatteryDefenderTip.updateState(mBatteryTip);
|
||||
mBatteryDefenderTip.log(mContext, mMetricsFeatureProvider);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(mContext,
|
||||
SettingsEnums.ACTION_BATTERY_DEFENDER_TIP, mBatteryTip.mState);
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_DEFENDER_TIP, mBatteryTip.mState);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -131,8 +129,8 @@ public class BatteryDefenderTipTest {
|
||||
|
||||
@Test
|
||||
public void updatePreference_whenCharging_setPrimaryButtonVisibleToBeTrue() {
|
||||
mBatteryDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW,
|
||||
true /* isPluggedIn */);
|
||||
mBatteryDefenderTip =
|
||||
new BatteryDefenderTip(BatteryTip.StateType.NEW, true /* isPluggedIn */);
|
||||
|
||||
mBatteryDefenderTip.updatePreference(mCardPreference);
|
||||
|
||||
|
@@ -45,8 +45,7 @@ public class BatteryTipTest {
|
||||
|
||||
private static final String TITLE = "title";
|
||||
private static final String SUMMARY = "summary";
|
||||
@DrawableRes
|
||||
private static final int ICON_ID = R.drawable.ic_fingerprint;
|
||||
@DrawableRes private static final int ICON_ID = R.drawable.ic_fingerprint;
|
||||
|
||||
private Context mContext;
|
||||
private TestBatteryTip mBatteryTip;
|
||||
@@ -86,8 +85,10 @@ public class BatteryTipTest {
|
||||
@Test
|
||||
public void updatePreference_resetLayoutState() {
|
||||
mContext.setTheme(R.style.Theme_Settings);
|
||||
PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
|
||||
View.inflate(mContext, R.layout.card_preference_layout, /* parent= */ null));
|
||||
PreferenceViewHolder holder =
|
||||
PreferenceViewHolder.createInstanceForTests(
|
||||
View.inflate(
|
||||
mContext, R.layout.card_preference_layout, /* parent= */ null));
|
||||
CardPreference cardPreference = new CardPreference(mContext);
|
||||
cardPreference.onBindViewHolder(holder);
|
||||
cardPreference.setPrimaryButtonVisible(true);
|
||||
@@ -113,9 +114,7 @@ public class BatteryTipTest {
|
||||
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 {
|
||||
TestBatteryTip() {
|
||||
super(TipType.SUMMARY, StateType.NEW, true);
|
||||
@@ -150,7 +149,8 @@ public class BatteryTipTest {
|
||||
// do nothing
|
||||
}
|
||||
|
||||
public final Parcelable.Creator CREATOR = new Parcelable.Creator() {
|
||||
public final Parcelable.Creator CREATOR =
|
||||
new Parcelable.Creator() {
|
||||
public BatteryTip createFromParcel(Parcel in) {
|
||||
return new TestBatteryTip(in);
|
||||
}
|
||||
|
@@ -54,10 +54,8 @@ public class DockDefenderTipTest {
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
|
||||
@Mock
|
||||
private Preference mPreference;
|
||||
@Mock
|
||||
private CardPreference mCardPreference;
|
||||
@Mock private Preference mPreference;
|
||||
@Mock private CardPreference mCardPreference;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -67,14 +65,18 @@ public class DockDefenderTipTest {
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
||||
|
||||
mDockDefenderTipFutureBypass = new DockDefenderTip(BatteryTip.StateType.NEW,
|
||||
BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
|
||||
mDockDefenderTipActive = new DockDefenderTip(BatteryTip.StateType.NEW,
|
||||
BatteryUtils.DockDefenderMode.ACTIVE);
|
||||
mDockDefenderTipTemporarilyBypassed = new DockDefenderTip(BatteryTip.StateType.NEW,
|
||||
mDockDefenderTipFutureBypass =
|
||||
new DockDefenderTip(
|
||||
BatteryTip.StateType.NEW, BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
|
||||
mDockDefenderTipActive =
|
||||
new DockDefenderTip(BatteryTip.StateType.NEW, BatteryUtils.DockDefenderMode.ACTIVE);
|
||||
mDockDefenderTipTemporarilyBypassed =
|
||||
new DockDefenderTip(
|
||||
BatteryTip.StateType.NEW,
|
||||
BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED);
|
||||
mDockDefenderTipDisabled = new DockDefenderTip(BatteryTip.StateType.INVISIBLE,
|
||||
BatteryUtils.DockDefenderMode.DISABLED);
|
||||
mDockDefenderTipDisabled =
|
||||
new DockDefenderTip(
|
||||
BatteryTip.StateType.INVISIBLE, BatteryUtils.DockDefenderMode.DISABLED);
|
||||
|
||||
doReturn(mContext).when(mPreference).getContext();
|
||||
doReturn(mContext).when(mCardPreference).getContext();
|
||||
@@ -82,22 +84,28 @@ public class DockDefenderTipTest {
|
||||
|
||||
@Test
|
||||
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));
|
||||
assertThat(mDockDefenderTipActive.getTitle(mContext).toString()).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_dock_defender_active_title));
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getTitle(mContext).toString()).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_dock_defender_temporarily_bypassed_title));
|
||||
assertThat(mDockDefenderTipActive.getTitle(mContext).toString())
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_dock_defender_active_title));
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getTitle(mContext).toString())
|
||||
.isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.battery_tip_dock_defender_temporarily_bypassed_title));
|
||||
assertThat(mDockDefenderTipDisabled.getTitle(mContext)).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetSummary() {
|
||||
assertThat(mDockDefenderTipFutureBypass.getSummary(mContext).toString()).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_dock_defender_future_bypass_summary));
|
||||
assertThat(mDockDefenderTipActive.getSummary(mContext).toString()).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_dock_defender_active_summary));
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString()).isEqualTo(
|
||||
assertThat(mDockDefenderTipFutureBypass.getSummary(mContext).toString())
|
||||
.isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.battery_tip_dock_defender_future_bypass_summary));
|
||||
assertThat(mDockDefenderTipActive.getSummary(mContext).toString())
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_dock_defender_active_summary));
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString())
|
||||
.isEqualTo(
|
||||
mContext.getString(
|
||||
R.string.battery_tip_dock_defender_temporarily_bypassed_summary));
|
||||
assertThat(mDockDefenderTipDisabled.getSummary(mContext)).isNull();
|
||||
@@ -105,45 +113,48 @@ public class DockDefenderTipTest {
|
||||
|
||||
@Test
|
||||
public void testGetIconId_dockDefenderActive_getProtectedIcon() {
|
||||
assertThat(mDockDefenderTipActive.getIconId()).isEqualTo(
|
||||
R.drawable.ic_battery_status_protected_24dp);
|
||||
assertThat(mDockDefenderTipActive.getIconId())
|
||||
.isEqualTo(R.drawable.ic_battery_status_protected_24dp);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testGetIconId_dockDefenderNotActive_getUntriggeredIcon() {
|
||||
assertThat(mDockDefenderTipFutureBypass.getIconId()).isEqualTo(
|
||||
R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getIconId()).isEqualTo(
|
||||
R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||
assertThat(mDockDefenderTipDisabled.getIconId()).isEqualTo(
|
||||
R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||
assertThat(mDockDefenderTipFutureBypass.getIconId())
|
||||
.isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getIconId())
|
||||
.isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||
assertThat(mDockDefenderTipDisabled.getIconId())
|
||||
.isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testUpdateState() {
|
||||
mDockDefenderTipTemporarilyBypassed.updateState(mDockDefenderTipDisabled);
|
||||
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getState()).isEqualTo(
|
||||
BatteryTip.StateType.INVISIBLE);
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getMode()).isEqualTo(
|
||||
BatteryUtils.DockDefenderMode.DISABLED);
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getState())
|
||||
.isEqualTo(BatteryTip.StateType.INVISIBLE);
|
||||
assertThat(mDockDefenderTipTemporarilyBypassed.getMode())
|
||||
.isEqualTo(BatteryUtils.DockDefenderMode.DISABLED);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLog() {
|
||||
mDockDefenderTipActive.log(mContext, mMetricsFeatureProvider);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.ACTION_DOCK_DEFENDER_TIP,
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_DOCK_DEFENDER_TIP,
|
||||
mDockDefenderTipActive.getState());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testUpdatePreference_dockDefenderTipFutureBypass() {
|
||||
mDockDefenderTipFutureBypass.updatePreference(mCardPreference);
|
||||
|
||||
verify(mCardPreference).setPrimaryButtonVisible(true);
|
||||
verify(mCardPreference).setPrimaryButtonText(
|
||||
verify(mCardPreference)
|
||||
.setPrimaryButtonText(
|
||||
mContext.getString(R.string.battery_tip_charge_to_full_button));
|
||||
verifySecondaryButton();
|
||||
}
|
||||
@@ -153,7 +164,8 @@ public class DockDefenderTipTest {
|
||||
mDockDefenderTipActive.updatePreference(mCardPreference);
|
||||
|
||||
verify(mCardPreference).setPrimaryButtonVisible(true);
|
||||
verify(mCardPreference).setPrimaryButtonText(
|
||||
verify(mCardPreference)
|
||||
.setPrimaryButtonText(
|
||||
mContext.getString(R.string.battery_tip_charge_to_full_button));
|
||||
verifySecondaryButton();
|
||||
}
|
||||
@@ -170,8 +182,10 @@ public class DockDefenderTipTest {
|
||||
private void verifySecondaryButton() {
|
||||
verify(mCardPreference).setSecondaryButtonText(mContext.getString(R.string.learn_more));
|
||||
verify(mCardPreference).setSecondaryButtonVisible(true);
|
||||
verify(mCardPreference).setSecondaryButtonContentDescription(mContext.getString(
|
||||
R.string.battery_tip_limited_temporarily_sec_button_content_description));
|
||||
final String expectedContent =
|
||||
mContext.getString(
|
||||
R.string.battery_tip_limited_temporarily_sec_button_content_description);
|
||||
verify(mCardPreference).setSecondaryButtonContentDescription(expectedContent);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -182,9 +196,11 @@ public class DockDefenderTipTest {
|
||||
}
|
||||
|
||||
private String getLastErrorLog() {
|
||||
return ShadowLog.getLogsForTag(DockDefenderTip.class.getSimpleName()).stream().filter(
|
||||
log -> log.type == Log.ERROR).reduce((first, second) -> second).orElse(
|
||||
createErrorLog("No Error Log")).msg;
|
||||
return ShadowLog.getLogsForTag(DockDefenderTip.class.getSimpleName()).stream()
|
||||
.filter(log -> log.type == Log.ERROR)
|
||||
.reduce((first, second) -> second)
|
||||
.orElse(createErrorLog("No Error Log"))
|
||||
.msg;
|
||||
}
|
||||
|
||||
private ShadowLog.LogItem createErrorLog(String msg) {
|
||||
|
@@ -45,8 +45,7 @@ public class HighUsageTipTest {
|
||||
private static final long SCREEN_TIME = 30 * DateUtils.MINUTE_IN_MILLIS;
|
||||
private static final long LAST_FULL_CHARGE_TIME = 20 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
@Mock
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
private Context mContext;
|
||||
private HighUsageTip mBatteryTip;
|
||||
private List<AppInfo> mUsageAppList;
|
||||
@@ -57,7 +56,8 @@ public class HighUsageTipTest {
|
||||
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mUsageAppList = new ArrayList<>();
|
||||
mUsageAppList.add(new AppInfo.Builder()
|
||||
mUsageAppList.add(
|
||||
new AppInfo.Builder()
|
||||
.setPackageName(PACKAGE_NAME)
|
||||
.setScreenOnTimeMs(SCREEN_TIME)
|
||||
.build());
|
||||
@@ -86,18 +86,24 @@ public class HighUsageTipTest {
|
||||
|
||||
@Test
|
||||
public void toString_containsAppData() {
|
||||
assertThat(mBatteryTip.toString()).isEqualTo(
|
||||
"type=2 state=0 { packageName=com.android.app,anomalyTypes={},screenTime=1800000 "
|
||||
+ "}");
|
||||
assertThat(mBatteryTip.toString())
|
||||
.isEqualTo(
|
||||
"type=2 state=0 {"
|
||||
+ " packageName=com.android.app,anomalyTypes={},screenTime=1800000 }");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLog_logAppInfo() {
|
||||
mBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||
verify(mMetricsFeatureProvider).action(mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP, BatteryTip.StateType.NEW);
|
||||
verify(mMetricsFeatureProvider)
|
||||
.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,
|
||||
PACKAGE_NAME);
|
||||
}
|
||||
|
@@ -17,16 +17,11 @@ package com.android.settings.fuelgauge.batterytip.tips;
|
||||
|
||||
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.when;
|
||||
|
||||
import android.app.settings.SettingsEnums;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.preference.Preference;
|
||||
@@ -72,20 +67,19 @@ public final class IncompatibleChargerTipTest {
|
||||
|
||||
@Test
|
||||
public void getTitle_showTitle() {
|
||||
assertThat(mIncompatibleChargerTip.getTitle(mContext)).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_incompatible_charging_title));
|
||||
assertThat(mIncompatibleChargerTip.getTitle(mContext))
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_incompatible_charging_title));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getSummary_showSummary() {
|
||||
assertThat(mIncompatibleChargerTip.getSummary(mContext)).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_incompatible_charging_message));
|
||||
assertThat(mIncompatibleChargerTip.getSummary(mContext))
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_incompatible_charging_message));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getIcon_showIcon() {
|
||||
assertThat(mIncompatibleChargerTip.getIconId())
|
||||
.isEqualTo(R.drawable.ic_battery_charger);
|
||||
assertThat(mIncompatibleChargerTip.getIconId()).isEqualTo(R.drawable.ic_battery_charger);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -93,8 +87,11 @@ public final class IncompatibleChargerTipTest {
|
||||
mIncompatibleChargerTip.updateState(mBatteryTip);
|
||||
mIncompatibleChargerTip.log(mContext, mMetricsFeatureProvider);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(mContext,
|
||||
SettingsEnums.ACTION_INCOMPATIBLE_CHARGING_TIP, mBatteryTip.mState);
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_INCOMPATIBLE_CHARGING_TIP,
|
||||
mBatteryTip.mState);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -37,8 +37,7 @@ import org.robolectric.RuntimeEnvironment;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class LowBatteryTipTest {
|
||||
|
||||
@Mock
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
private Context mContext;
|
||||
private LowBatteryTip mLowBatteryTip;
|
||||
|
||||
@@ -58,25 +57,25 @@ public class LowBatteryTipTest {
|
||||
final LowBatteryTip parcelTip = new LowBatteryTip(parcel);
|
||||
|
||||
assertThat(parcelTip.isPowerSaveModeOn()).isFalse();
|
||||
assertThat(parcelTip.getSummary(mContext)).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_low_battery_summary));
|
||||
assertThat(parcelTip.getSummary(mContext))
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_low_battery_summary));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateState_stateNew_showExpectedInformation() {
|
||||
mLowBatteryTip.mState = BatteryTip.StateType.NEW;
|
||||
|
||||
assertThat(mLowBatteryTip.getTitle(mContext)).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_low_battery_title));
|
||||
assertThat(mLowBatteryTip.getSummary(mContext)).isEqualTo(
|
||||
mContext.getString(R.string.battery_tip_low_battery_summary));
|
||||
assertThat(mLowBatteryTip.getTitle(mContext))
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_low_battery_title));
|
||||
assertThat(mLowBatteryTip.getSummary(mContext))
|
||||
.isEqualTo(mContext.getString(R.string.battery_tip_low_battery_summary));
|
||||
assertThat(mLowBatteryTip.getIconId()).isEqualTo(R.drawable.ic_battery_saver_accent_24dp);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void updateState_powerSaveModeOn_notShowTipItem() {
|
||||
final LowBatteryTip tip = new LowBatteryTip(
|
||||
BatteryTip.StateType.NEW, true /* powerSaveModeOn */);
|
||||
final LowBatteryTip tip =
|
||||
new LowBatteryTip(BatteryTip.StateType.NEW, true /* powerSaveModeOn */);
|
||||
|
||||
tip.updateState(tip);
|
||||
|
||||
@@ -87,7 +86,10 @@ public class LowBatteryTipTest {
|
||||
public void log_lowBatteryActionWithCorrectState() {
|
||||
mLowBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_LOW_BATTERY_TIP, BatteryTip.StateType.NEW);
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_LOW_BATTERY_TIP,
|
||||
BatteryTip.StateType.NEW);
|
||||
}
|
||||
}
|
||||
|
@@ -65,12 +65,9 @@ public class RestrictAppTipTest {
|
||||
private List<AppInfo> mUsageAppList;
|
||||
private AppInfo mAppInfo;
|
||||
private AppInfo mUninstallAppInfo;
|
||||
@Mock
|
||||
private ApplicationInfo mApplicationInfo;
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
@Mock private ApplicationInfo mApplicationInfo;
|
||||
@Mock private PackageManager mPackageManager;
|
||||
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
@@ -79,19 +76,26 @@ public class RestrictAppTipTest {
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
doReturn(mContext).when(mContext).getApplicationContext();
|
||||
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);
|
||||
doThrow(new PackageManager.NameNotFoundException()).when(mPackageManager)
|
||||
.getApplicationInfo(UNINSTALL_PACKAGE_NAME,
|
||||
doThrow(new PackageManager.NameNotFoundException())
|
||||
.when(mPackageManager)
|
||||
.getApplicationInfo(
|
||||
UNINSTALL_PACKAGE_NAME,
|
||||
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
|
||||
doReturn(DISPLAY_NAME).when(mApplicationInfo).loadLabel(mPackageManager);
|
||||
|
||||
mAppInfo = new AppInfo.Builder()
|
||||
mAppInfo =
|
||||
new AppInfo.Builder()
|
||||
.setPackageName(PACKAGE_NAME)
|
||||
.addAnomalyType(ANOMALY_WAKEUP)
|
||||
.addAnomalyType(ANOMALY_WAKELOCK)
|
||||
.build();
|
||||
mUninstallAppInfo = new AppInfo.Builder()
|
||||
mUninstallAppInfo =
|
||||
new AppInfo.Builder()
|
||||
.setPackageName(UNINSTALL_PACKAGE_NAME)
|
||||
.addAnomalyType(ANOMALY_WAKEUP)
|
||||
.build();
|
||||
@@ -99,8 +103,8 @@ public class RestrictAppTipTest {
|
||||
mUsageAppList.add(mAppInfo);
|
||||
mNewBatteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, mUsageAppList);
|
||||
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
|
||||
mInvisibleBatteryTip = new RestrictAppTip(BatteryTip.StateType.INVISIBLE,
|
||||
new ArrayList<>());
|
||||
mInvisibleBatteryTip =
|
||||
new RestrictAppTip(BatteryTip.StateType.INVISIBLE, new ArrayList<>());
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -149,8 +153,9 @@ public class RestrictAppTipTest {
|
||||
@Test
|
||||
public void getSummary_oneAppHandled_showHandledSummary() {
|
||||
assertThat(mHandledBatteryTip.getSummary(mContext).toString())
|
||||
.isEqualTo(StringUtil.getIcuPluralsString(mContext, 1,
|
||||
R.string.battery_tip_restrict_handled_summary));
|
||||
.isEqualTo(
|
||||
StringUtil.getIcuPluralsString(
|
||||
mContext, 1, R.string.battery_tip_restrict_handled_summary));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -158,8 +163,9 @@ public class RestrictAppTipTest {
|
||||
mUsageAppList.add(new AppInfo.Builder().build());
|
||||
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
|
||||
assertThat(mHandledBatteryTip.getSummary(mContext))
|
||||
.isEqualTo(StringUtil.getIcuPluralsString(mContext, 2,
|
||||
R.string.battery_tip_restrict_handled_summary));
|
||||
.isEqualTo(
|
||||
StringUtil.getIcuPluralsString(
|
||||
mContext, 2, R.string.battery_tip_restrict_handled_summary));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -217,22 +223,31 @@ public class RestrictAppTipTest {
|
||||
|
||||
@Test
|
||||
public void toString_containsAppData() {
|
||||
assertThat(mNewBatteryTip.toString()).isEqualTo(
|
||||
"type=1 state=0 { packageName=com.android.app,anomalyTypes={0, 1},screenTime=0 }");
|
||||
assertThat(mNewBatteryTip.toString())
|
||||
.isEqualTo(
|
||||
"type=1 state=0 { packageName=com.android.app,anomalyTypes={0,"
|
||||
+ " 1},screenTime=0 }");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLog_stateNew_logAppInfo() {
|
||||
mNewBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, BatteryTip.StateType.NEW);
|
||||
verify(mMetricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP,
|
||||
BatteryTip.StateType.NEW);
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST,
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
PACKAGE_NAME,
|
||||
ANOMALY_WAKEUP);
|
||||
verify(mMetricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST,
|
||||
SettingsEnums.PAGE_UNKNOWN,
|
||||
PACKAGE_NAME,
|
||||
@@ -243,9 +258,12 @@ public class RestrictAppTipTest {
|
||||
public void testLog_stateHandled_doNotLogAppInfo() {
|
||||
mHandledBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, BatteryTip.StateType.HANDLED);
|
||||
verify(mMetricsFeatureProvider, never()).action(
|
||||
anyInt(), anyInt(), anyInt(), anyString(), anyInt());
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP,
|
||||
BatteryTip.StateType.HANDLED);
|
||||
verify(mMetricsFeatureProvider, never())
|
||||
.action(anyInt(), anyInt(), anyInt(), anyString(), anyInt());
|
||||
}
|
||||
}
|
||||
|
@@ -33,8 +33,7 @@ import org.robolectric.RuntimeEnvironment;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class SmartBatteryTipTest {
|
||||
|
||||
@Mock
|
||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||
private Context mContext;
|
||||
private SmartBatteryTip mSmartBatteryTip;
|
||||
|
||||
@@ -50,7 +49,10 @@ public class SmartBatteryTipTest {
|
||||
public void testLog() {
|
||||
mSmartBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||
|
||||
verify(mMetricsFeatureProvider).action(mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_SMART_BATTERY_TIP, BatteryTip.StateType.NEW);
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
MetricsProto.MetricsEvent.ACTION_SMART_BATTERY_TIP,
|
||||
BatteryTip.StateType.NEW);
|
||||
}
|
||||
}
|
||||
|
@@ -45,19 +45,18 @@ public class AnomalyEventWrapperTest {
|
||||
|
||||
@Test
|
||||
public void getDismissRecordKey_returnExpectedResult() {
|
||||
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext,
|
||||
BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
|
||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey())
|
||||
.isEqualTo("KEY_BRIGHTNESS");
|
||||
mAnomalyEventWrapper =
|
||||
new AnomalyEventWrapper(
|
||||
mContext, BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
|
||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_BRIGHTNESS");
|
||||
|
||||
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext,
|
||||
BatteryTestUtils.createScreenTimeoutAnomalyEvent());
|
||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey())
|
||||
.isEqualTo("KEY_SCREEN_TIMEOUT");
|
||||
mAnomalyEventWrapper =
|
||||
new AnomalyEventWrapper(
|
||||
mContext, BatteryTestUtils.createScreenTimeoutAnomalyEvent());
|
||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_SCREEN_TIMEOUT");
|
||||
|
||||
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext,
|
||||
BatteryTestUtils.createAppAnomalyEvent());
|
||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey())
|
||||
.isEqualTo("KEY_APP_1");
|
||||
mAnomalyEventWrapper =
|
||||
new AnomalyEventWrapper(mContext, BatteryTestUtils.createAppAnomalyEvent());
|
||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_APP_1");
|
||||
}
|
||||
}
|
||||
|
@@ -66,22 +66,14 @@ import java.util.TimeZone;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class BatteryChartPreferenceControllerTest {
|
||||
@Mock
|
||||
private Intent mIntent;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
@Mock
|
||||
private SettingsActivity mSettingsActivity;
|
||||
@Mock
|
||||
private TextView mChartSummaryTextView;
|
||||
@Mock
|
||||
private BatteryChartView mDailyChartView;
|
||||
@Mock
|
||||
private BatteryChartView mHourlyChartView;
|
||||
@Mock
|
||||
private ViewPropertyAnimator mViewPropertyAnimator;
|
||||
@Mock
|
||||
private LinearLayout.LayoutParams mLayoutParams;
|
||||
@Mock private Intent mIntent;
|
||||
@Mock private UserManager mUserManager;
|
||||
@Mock private SettingsActivity mSettingsActivity;
|
||||
@Mock private TextView mChartSummaryTextView;
|
||||
@Mock private BatteryChartView mDailyChartView;
|
||||
@Mock private BatteryChartView mHourlyChartView;
|
||||
@Mock private ViewPropertyAnimator mViewPropertyAnimator;
|
||||
@Mock private LinearLayout.LayoutParams mLayoutParams;
|
||||
|
||||
private Context mContext;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
@@ -97,9 +89,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
doReturn(mContext).when(mContext).getApplicationContext();
|
||||
doReturn(mUserManager)
|
||||
.when(mContext)
|
||||
.getSystemService(UserManager.class);
|
||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||
doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
|
||||
doReturn(new int[] {0}).when(mUserManager).getProfileIdsWithDisabled(anyInt());
|
||||
final Resources resources = spy(mContext.getResources());
|
||||
@@ -156,9 +146,12 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE);
|
||||
// Ignore fast refresh ui from the data processor callback.
|
||||
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(1619247660000L /* 7:01 AM */,
|
||||
List.of(
|
||||
1619247660000L /* 7:01 AM */,
|
||||
1619251200000L /* 8 AM */,
|
||||
1619258400000L /* 10 AM */,
|
||||
1619265600000L /* 12 PM */,
|
||||
@@ -173,10 +166,12 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
reset(mHourlyChartView);
|
||||
setupHourlyChartViewAnimationMock();
|
||||
|
||||
BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel(
|
||||
BatteryChartViewModel expectedDailyViewModel =
|
||||
new BatteryChartViewModel(
|
||||
List.of(100, 83, 59, 66),
|
||||
// "Sat", "Sun", "Mon", "Mon"
|
||||
List.of(1619247660000L /* Sat */,
|
||||
List.of(
|
||||
1619247660000L /* Sat */,
|
||||
1619308800000L /* Sun */,
|
||||
1619395200000L /* Mon */,
|
||||
1619460120000L /* Mon */),
|
||||
@@ -202,9 +197,12 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
|
||||
expectedDailyViewModel.setSelectedIndex(0);
|
||||
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(1619247660000L /* 7:01 AM */,
|
||||
List.of(
|
||||
1619247660000L /* 7:01 AM */,
|
||||
1619251200000L /* 8 AM */,
|
||||
1619258400000L /* 10 AM */,
|
||||
1619265600000L /* 12 PM */,
|
||||
@@ -228,9 +226,11 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
||||
expectedDailyViewModel.setSelectedIndex(1);
|
||||
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(1619308800000L /* 12 AM */,
|
||||
List.of(
|
||||
1619308800000L /* 12 AM */,
|
||||
1619316000000L /* 2 AM */,
|
||||
1619323200000L /* 4 AM */,
|
||||
1619330400000L /* 6 AM */,
|
||||
@@ -259,9 +259,12 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
||||
expectedDailyViewModel.setSelectedIndex(2);
|
||||
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(1619395200000L /* 12 AM */,
|
||||
List.of(
|
||||
1619395200000L /* 12 AM */,
|
||||
1619402400000L /* 2 AM */,
|
||||
1619409600000L /* 4 AM */,
|
||||
1619416800000L /* 6 AM */,
|
||||
@@ -274,7 +277,6 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
1619460120000L /* now (6:02 PM) */),
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
|
||||
mBatteryChartPreferenceController.mHourlyChartLabelTextGenerator));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -408,8 +410,8 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 2;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"10 AM - 12 PM");
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation())
|
||||
.isEqualTo("10 AM - 12 PM");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -418,8 +420,8 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 1;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 8;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"Sunday 4 PM - 6 PM");
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation())
|
||||
.isEqualTo("Sunday 4 PM - 6 PM");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -428,8 +430,8 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"7:01 AM - 8 AM");
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation())
|
||||
.isEqualTo("7:01 AM - 8 AM");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -438,8 +440,7 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 3;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"12 PM - now");
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("12 PM - now");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -448,8 +449,8 @@ public final class BatteryChartPreferenceControllerTest {
|
||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
|
||||
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
||||
"7:01 AM - now");
|
||||
assertThat(mBatteryChartPreferenceController.getSlotInformation())
|
||||
.isEqualTo("7:01 AM - now");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -45,8 +45,7 @@ public final class BatteryChartViewTest {
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
||||
|
||||
@Mock
|
||||
private View mMockView;
|
||||
@Mock private View mMockView;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -54,17 +53,19 @@ public final class BatteryChartViewTest {
|
||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||
mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
mContext.getResources().getConfiguration().setLocales(
|
||||
new LocaleList(new Locale("en_US")));
|
||||
mContext.getResources().getConfiguration().setLocales(new LocaleList(new Locale("en_US")));
|
||||
mBatteryChartView = new BatteryChartView(mContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onClick_invokesCallback() {
|
||||
final int originalSelectedIndex = 2;
|
||||
BatteryChartViewModel batteryChartViewModel = new BatteryChartViewModel(
|
||||
List.of(90, 80, 70, 60), List.of(0L, 0L, 0L, 0L),
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS, null);
|
||||
BatteryChartViewModel batteryChartViewModel =
|
||||
new BatteryChartViewModel(
|
||||
List.of(90, 80, 70, 60),
|
||||
List.of(0L, 0L, 0L, 0L),
|
||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
|
||||
null);
|
||||
batteryChartViewModel.setSelectedIndex(originalSelectedIndex);
|
||||
mBatteryChartView.setViewModel(batteryChartViewModel);
|
||||
for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) {
|
||||
|
@@ -149,16 +149,12 @@ public class BatteryDiffDataTest {
|
||||
createBatteryDiffEntry(mContext, /* consumePower= */ 28.5, /* key= */ "APP_1"));
|
||||
batteryDiffEntries.add(
|
||||
createBatteryDiffEntry(
|
||||
mContext,
|
||||
/* consumePower= */ 20,
|
||||
BatteryDiffEntry.UNINSTALLED_APPS_KEY));
|
||||
mContext, /* consumePower= */ 20, BatteryDiffEntry.UNINSTALLED_APPS_KEY));
|
||||
batteryDiffEntries.add(
|
||||
createBatteryDiffEntry(mContext, /* consumePower= */ 3, /* key= */ "APP_2"));
|
||||
batteryDiffEntries.add(
|
||||
createBatteryDiffEntry(
|
||||
mContext,
|
||||
/* consumePower= */ 28.5,
|
||||
BatteryDiffEntry.SYSTEM_APPS_KEY));
|
||||
mContext, /* consumePower= */ 28.5, BatteryDiffEntry.SYSTEM_APPS_KEY));
|
||||
batteryDiffEntries.add(
|
||||
createBatteryDiffEntry(mContext, /* consumePower= */ 20, /* key= */ "APP_3"));
|
||||
|
||||
|
@@ -64,7 +64,6 @@ public final class BatteryDiffEntryTest {
|
||||
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 Context mContext;
|
||||
|
||||
@Mock private ApplicationInfo mMockAppInfo;
|
||||
@@ -451,7 +450,6 @@ public final class BatteryDiffEntryTest {
|
||||
assertThat(entry.isUninstalledEntry()).isFalse();
|
||||
assertThat(BatteryDiffEntry.sPackageNameAndUidCache.containsKey(PACKAGE_NAME)).isTrue();
|
||||
assertThat(BatteryDiffEntry.sPackageNameAndUidCache.get(PACKAGE_NAME)).isEqualTo(UID);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -61,18 +61,15 @@ public class BatteryEntryTest {
|
||||
private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen";
|
||||
private static final String ANDROID_PACKAGE = "android";
|
||||
|
||||
@Rule
|
||||
public MockitoRule mocks = MockitoJUnit.rule();
|
||||
@Rule public MockitoRule mocks = MockitoJUnit.rule();
|
||||
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private Context mMockContext;
|
||||
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private PackageManager mMockPackageManager;
|
||||
@Mock
|
||||
private UserManager mMockUserManager;
|
||||
@Mock
|
||||
private UidBatteryConsumer mUidBatteryConsumer;
|
||||
@Mock private PackageManager mMockPackageManager;
|
||||
@Mock private UserManager mMockUserManager;
|
||||
@Mock private UidBatteryConsumer mUidBatteryConsumer;
|
||||
|
||||
@Before
|
||||
public void stubContextToReturnMockPackageManager() {
|
||||
@@ -83,23 +80,27 @@ public class BatteryEntryTest {
|
||||
@Before
|
||||
public void stubPackageManagerToReturnAppPackageAndName() throws NameNotFoundException {
|
||||
when(mMockPackageManager.getApplicationInfo(anyString(), eq(0) /* no flags */))
|
||||
.thenAnswer(invocation -> {
|
||||
.thenAnswer(
|
||||
invocation -> {
|
||||
ApplicationInfo info = new ApplicationInfo();
|
||||
info.packageName = invocation.getArgument(0);
|
||||
return info;
|
||||
});
|
||||
when(mMockPackageManager.getApplicationLabel(any(ApplicationInfo.class)))
|
||||
.thenAnswer(invocation -> LABEL_PREFIX
|
||||
+ ((ApplicationInfo) invocation.getArgument(0)).packageName);
|
||||
.thenAnswer(
|
||||
invocation ->
|
||||
LABEL_PREFIX
|
||||
+ ((ApplicationInfo) invocation.getArgument(0))
|
||||
.packageName);
|
||||
}
|
||||
|
||||
private BatteryEntry createBatteryEntryForApp(String[] packages, String packageName,
|
||||
String highDrainPackage) {
|
||||
private BatteryEntry createBatteryEntryForApp(
|
||||
String[] packages, String packageName, String highDrainPackage) {
|
||||
UidBatteryConsumer consumer = mock(UidBatteryConsumer.class);
|
||||
when(consumer.getUid()).thenReturn(APP_UID);
|
||||
when(consumer.getPackageWithHighestDrain()).thenReturn(highDrainPackage);
|
||||
return new BatteryEntry(mMockContext, mMockUserManager,
|
||||
consumer, false, APP_UID, packages, packageName);
|
||||
return new BatteryEntry(
|
||||
mMockContext, mMockUserManager, consumer, false, APP_UID, packages, packageName);
|
||||
}
|
||||
|
||||
private BatteryEntry createAggregateBatteryEntry(int powerComponentId) {
|
||||
@@ -122,14 +123,13 @@ public class BatteryEntryTest {
|
||||
private BatteryEntry createUserBatteryConsumer(int userId) {
|
||||
UserBatteryConsumer consumer = mock(UserBatteryConsumer.class);
|
||||
when(consumer.getUserId()).thenReturn(userId);
|
||||
return new BatteryEntry(mMockContext, mMockUserManager,
|
||||
consumer, false, 0, null, null);
|
||||
return new BatteryEntry(mMockContext, mMockUserManager, consumer, false, 0, null, null);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception {
|
||||
BatteryEntry entry = createBatteryEntryForApp(null, APP_DEFAULT_PACKAGE_NAME,
|
||||
HIGH_DRAIN_PACKAGE);
|
||||
BatteryEntry entry =
|
||||
createBatteryEntryForApp(null, APP_DEFAULT_PACKAGE_NAME, HIGH_DRAIN_PACKAGE);
|
||||
|
||||
assertThat(entry.getDefaultPackageName()).isEqualTo(APP_DEFAULT_PACKAGE_NAME);
|
||||
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + APP_DEFAULT_PACKAGE_NAME);
|
||||
@@ -157,8 +157,10 @@ public class BatteryEntryTest {
|
||||
|
||||
@Test
|
||||
public void batteryEntryForApp_shouldSetHighestDrainPackage_whenMultiplePackagesFoundForUid() {
|
||||
BatteryEntry entry = createBatteryEntryForApp(
|
||||
new String[]{APP_DEFAULT_PACKAGE_NAME, "package2", "package3"}, null,
|
||||
BatteryEntry entry =
|
||||
createBatteryEntryForApp(
|
||||
new String[] {APP_DEFAULT_PACKAGE_NAME, "package2", "package3"},
|
||||
null,
|
||||
HIGH_DRAIN_PACKAGE);
|
||||
|
||||
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + HIGH_DRAIN_PACKAGE);
|
||||
@@ -166,7 +168,9 @@ public class BatteryEntryTest {
|
||||
|
||||
@Test
|
||||
public void batteryEntryForAOD_containCorrectInfo() {
|
||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
||||
final BatteryEntry entry =
|
||||
new BatteryEntry(
|
||||
RuntimeEnvironment.application,
|
||||
BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
|
||||
/* devicePowerMah= */ 200,
|
||||
/* usageDurationMs= */ 1000,
|
||||
@@ -178,7 +182,9 @@ public class BatteryEntryTest {
|
||||
|
||||
@Test
|
||||
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,
|
||||
/* powerComponentName= */ "ABC",
|
||||
/* devicePowerMah= */ 200);
|
||||
@@ -192,15 +198,24 @@ public class BatteryEntryTest {
|
||||
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND))
|
||||
.thenReturn(100L);
|
||||
|
||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
||||
mMockUserManager, mUidBatteryConsumer, false, 0, null, null);
|
||||
final BatteryEntry entry =
|
||||
new BatteryEntry(
|
||||
RuntimeEnvironment.application,
|
||||
mMockUserManager,
|
||||
mUidBatteryConsumer,
|
||||
false,
|
||||
0,
|
||||
null,
|
||||
null);
|
||||
|
||||
assertThat(entry.getTimeInForegroundMs()).isEqualTo(100L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTimeInForegroundMs_aggregateBatteryConsumer() {
|
||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
||||
final BatteryEntry entry =
|
||||
new BatteryEntry(
|
||||
RuntimeEnvironment.application,
|
||||
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
||||
/* devicePowerMah= */ 10,
|
||||
/* usageDurationMs= */ 100,
|
||||
@@ -214,15 +229,24 @@ public class BatteryEntryTest {
|
||||
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
|
||||
.thenReturn(100L);
|
||||
|
||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
||||
mMockUserManager, mUidBatteryConsumer, false, 0, null, null);
|
||||
final BatteryEntry entry =
|
||||
new BatteryEntry(
|
||||
RuntimeEnvironment.application,
|
||||
mMockUserManager,
|
||||
mUidBatteryConsumer,
|
||||
false,
|
||||
0,
|
||||
null,
|
||||
null);
|
||||
|
||||
assertThat(entry.getTimeInBackgroundMs()).isEqualTo(100L);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTimeInBackgroundMs_systemConsumer() {
|
||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
||||
final BatteryEntry entry =
|
||||
new BatteryEntry(
|
||||
RuntimeEnvironment.application,
|
||||
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
||||
/* devicePowerMah= */ 100,
|
||||
/* usageDurationMs= */ 1000,
|
||||
@@ -241,15 +265,16 @@ public class BatteryEntryTest {
|
||||
|
||||
@Test
|
||||
public void getKey_AggregateBatteryConsumer_returnComponentId() {
|
||||
final BatteryEntry entry = createAggregateBatteryEntry(
|
||||
BatteryConsumer.POWER_COMPONENT_BLUETOOTH);
|
||||
final BatteryEntry entry =
|
||||
createAggregateBatteryEntry(BatteryConsumer.POWER_COMPONENT_BLUETOOTH);
|
||||
final String key = entry.getKey();
|
||||
assertThat(key).isEqualTo("S|2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getKey_CustomAggregateBatteryConsumer_returnComponentId() {
|
||||
final BatteryEntry entry = createCustomAggregateBatteryEntry(
|
||||
final BatteryEntry entry =
|
||||
createCustomAggregateBatteryEntry(
|
||||
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42);
|
||||
final String key = entry.getKey();
|
||||
assertThat(key).isEqualTo("S|1042");
|
||||
@@ -269,19 +294,18 @@ public class BatteryEntryTest {
|
||||
doReturn(mMockUserManager).when(mContext).getSystemService(UserManager.class);
|
||||
doReturn(null).when(mMockUserManager).getUserInfo(userId);
|
||||
|
||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId(
|
||||
mContext, userId);
|
||||
assertThat(nameAndIcon.mName).isEqualTo(getString(
|
||||
R.string.running_process_item_removed_user_label));
|
||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId(mContext, userId);
|
||||
assertThat(nameAndIcon.mName)
|
||||
.isEqualTo(getString(R.string.running_process_item_removed_user_label));
|
||||
assertThat(nameAndIcon.mIcon).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getNameAndIconFromUid_rerturnExpectedName() {
|
||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
|
||||
mContext, /* name */ null, /* uid */ 0);
|
||||
assertThat(nameAndIcon.mName).isEqualTo(
|
||||
getString(com.android.settingslib.R.string.process_kernel_label));
|
||||
final NameAndIcon nameAndIcon =
|
||||
BatteryEntry.getNameAndIconFromUid(mContext, /* name */ null, /* uid */ 0);
|
||||
assertThat(nameAndIcon.mName)
|
||||
.isEqualTo(getString(com.android.settingslib.R.string.process_kernel_label));
|
||||
|
||||
assertNameAndIcon("mediaserver", R.string.process_mediaserver_label);
|
||||
assertNameAndIcon("dex2oat32", R.string.process_dex2oat_label);
|
||||
@@ -291,7 +315,8 @@ public class BatteryEntryTest {
|
||||
|
||||
@Test
|
||||
public void getNameAndIconFromUid_tetheringUid_rerturnExpectedName() {
|
||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
|
||||
final NameAndIcon nameAndIcon =
|
||||
BatteryEntry.getNameAndIconFromUid(
|
||||
mContext, /* name */ null, /* uid */ BatteryUtils.UID_TETHERING);
|
||||
|
||||
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_network_tethering));
|
||||
@@ -299,7 +324,8 @@ public class BatteryEntryTest {
|
||||
|
||||
@Test
|
||||
public void getNameAndIconFromUid_removedAppsUid_rerturnExpectedName() {
|
||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
|
||||
final NameAndIcon nameAndIcon =
|
||||
BatteryEntry.getNameAndIconFromUid(
|
||||
mContext, /* name */ null, /* uid */ BatteryUtils.UID_REMOVED_APPS);
|
||||
|
||||
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_removed_apps));
|
||||
@@ -307,47 +333,57 @@ public class BatteryEntryTest {
|
||||
|
||||
@Test
|
||||
public void getNameAndIconFromPowerComponent_rerturnExpectedNameAndIcon() {
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_SCREEN,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_SCREEN,
|
||||
R.string.power_screen,
|
||||
R.drawable.ic_settings_display);
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_CPU,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_CPU,
|
||||
R.string.power_cpu,
|
||||
R.drawable.ic_settings_cpu);
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
||||
R.string.power_bluetooth,
|
||||
R.drawable.ic_settings_bluetooth);
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_CAMERA,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_CAMERA,
|
||||
R.string.power_camera,
|
||||
R.drawable.ic_settings_camera);
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
|
||||
R.string.power_flashlight,
|
||||
R.drawable.ic_settings_flashlight);
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
|
||||
R.string.power_cell,
|
||||
R.drawable.ic_settings_cellular);
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_GNSS,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_GNSS,
|
||||
R.string.power_gps,
|
||||
R.drawable.ic_settings_gps);
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_WIFI,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_WIFI,
|
||||
R.string.power_wifi,
|
||||
R.drawable.ic_settings_wireless_no_theme);
|
||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_PHONE,
|
||||
assertNameAndIcon(
|
||||
BatteryConsumer.POWER_COMPONENT_PHONE,
|
||||
R.string.power_phone,
|
||||
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.drawable.ic_settings_aod);
|
||||
}
|
||||
|
||||
private void assertNameAndIcon(String name, int stringId) {
|
||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
|
||||
mContext, name, /* uid */ 1000);
|
||||
final NameAndIcon nameAndIcon =
|
||||
BatteryEntry.getNameAndIconFromUid(mContext, name, /* uid */ 1000);
|
||||
assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
|
||||
}
|
||||
|
||||
private void assertNameAndIcon(int powerComponentId, int stringId, int iconId) {
|
||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromPowerComponent(
|
||||
mContext, powerComponentId);
|
||||
final NameAndIcon nameAndIcon =
|
||||
BatteryEntry.getNameAndIconFromPowerComponent(mContext, powerComponentId);
|
||||
assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
|
||||
assertThat(nameAndIcon.mIconId).isEqualTo(iconId);
|
||||
}
|
||||
|
@@ -41,10 +41,8 @@ import java.util.TimeZone;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public final class BatteryHistEntryTest {
|
||||
|
||||
@Mock
|
||||
private BatteryEntry mMockBatteryEntry;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock private BatteryEntry mMockBatteryEntry;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -115,8 +113,8 @@ public final class BatteryHistEntryTest {
|
||||
|
||||
@Test
|
||||
public void testGetKey_consumerUidType_returnExpectedString() {
|
||||
final ContentValues values = getContentValuesWithType(
|
||||
ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
|
||||
final ContentValues values =
|
||||
getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
|
||||
values.put(BatteryHistEntry.KEY_UID, 3);
|
||||
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
||||
|
||||
@@ -125,8 +123,8 @@ public final class BatteryHistEntryTest {
|
||||
|
||||
@Test
|
||||
public void testGetKey_consumerUserType_returnExpectedString() {
|
||||
final ContentValues values = getContentValuesWithType(
|
||||
ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
|
||||
final ContentValues values =
|
||||
getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
|
||||
values.put(BatteryHistEntry.KEY_USER_ID, 2);
|
||||
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
||||
|
||||
@@ -135,14 +133,12 @@ public final class BatteryHistEntryTest {
|
||||
|
||||
@Test
|
||||
public void testGetKey_consumerSystemType_returnExpectedString() {
|
||||
final ContentValues values = getContentValuesWithType(
|
||||
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||
final ContentValues values =
|
||||
getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||
final BatteryInformation batteryInformation =
|
||||
BatteryInformation
|
||||
.newBuilder()
|
||||
.setDrainType(1)
|
||||
.build();
|
||||
values.put(BatteryHistEntry.KEY_BATTERY_INFORMATION,
|
||||
BatteryInformation.newBuilder().setDrainType(1).build();
|
||||
values.put(
|
||||
BatteryHistEntry.KEY_BATTERY_INFORMATION,
|
||||
ConvertUtils.convertBatteryInformationToString(batteryInformation));
|
||||
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
||||
|
||||
@@ -151,32 +147,51 @@ public final class BatteryHistEntryTest {
|
||||
|
||||
@Test
|
||||
public void testIsAppEntry_returnExpectedResult() {
|
||||
assertThat(isUidConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isFalse();
|
||||
assertThat(isUidConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isFalse();
|
||||
assertThat(isUidConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isTrue();
|
||||
assertThat(
|
||||
isUidConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
|
||||
.mConsumerType))
|
||||
.isFalse();
|
||||
assertThat(
|
||||
isUidConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
|
||||
.isFalse();
|
||||
assertThat(isUidConsumer(createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
|
||||
.isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsUserEntry_returnExpectedResult() {
|
||||
assertThat(isUserConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isFalse();
|
||||
assertThat(isUserConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isTrue();
|
||||
assertThat(isUserConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isFalse();
|
||||
assertThat(
|
||||
isUserConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
|
||||
.mConsumerType))
|
||||
.isFalse();
|
||||
assertThat(
|
||||
isUserConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
|
||||
.isTrue();
|
||||
assertThat(
|
||||
isUserConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIsSystemEntry_returnExpectedResult() {
|
||||
assertThat(isSystemConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isTrue();
|
||||
assertThat(isSystemConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isFalse();
|
||||
assertThat(isSystemConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isFalse();
|
||||
assertThat(
|
||||
isSystemConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
|
||||
.mConsumerType))
|
||||
.isTrue();
|
||||
assertThat(
|
||||
isSystemConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
|
||||
.isFalse();
|
||||
assertThat(
|
||||
isSystemConsumer(
|
||||
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -185,7 +200,8 @@ public final class BatteryHistEntryTest {
|
||||
final long upperTimestamp = 300L;
|
||||
final long lowerTimestamp = 100L;
|
||||
final double ratio = 0.5;
|
||||
final BatteryHistEntry lowerHistEntry = createBatteryHistEntry(
|
||||
final BatteryHistEntry lowerHistEntry =
|
||||
createBatteryHistEntry(
|
||||
/* bootTimestamp= */ 1000L,
|
||||
lowerTimestamp,
|
||||
/* totalPower= */ 50,
|
||||
@@ -197,7 +213,8 @@ public final class BatteryHistEntryTest {
|
||||
/* foregroundUsageTimeInMs= */ 100,
|
||||
/* backgroundUsageTimeInMs= */ 200,
|
||||
/* batteryLevel= */ 90);
|
||||
final BatteryHistEntry upperHistEntry = createBatteryHistEntry(
|
||||
final BatteryHistEntry upperHistEntry =
|
||||
createBatteryHistEntry(
|
||||
/* bootTimestamp= */ 1200L,
|
||||
upperTimestamp,
|
||||
/* totalPower= */ 80,
|
||||
@@ -212,14 +229,12 @@ public final class BatteryHistEntryTest {
|
||||
|
||||
final BatteryHistEntry newEntry =
|
||||
BatteryHistEntry.interpolate(
|
||||
slotTimestamp,
|
||||
upperTimestamp,
|
||||
ratio,
|
||||
lowerHistEntry,
|
||||
upperHistEntry);
|
||||
slotTimestamp, upperTimestamp, ratio, lowerHistEntry, upperHistEntry);
|
||||
|
||||
assertBatteryHistEntry(
|
||||
newEntry, 3, upperHistEntry.mPercentOfTotal,
|
||||
newEntry,
|
||||
3,
|
||||
upperHistEntry.mPercentOfTotal,
|
||||
/* bootTimestamp= */ 1200 - 100,
|
||||
/* timestamp= */ slotTimestamp,
|
||||
/* totalPower= */ 50 + 0.5 * (80 - 50),
|
||||
@@ -238,7 +253,8 @@ public final class BatteryHistEntryTest {
|
||||
final long slotTimestamp = 200L;
|
||||
final long upperTimestamp = 300L;
|
||||
final double ratio = 0.5;
|
||||
final BatteryHistEntry upperHistEntry = createBatteryHistEntry(
|
||||
final BatteryHistEntry upperHistEntry =
|
||||
createBatteryHistEntry(
|
||||
/* bootTimestamp= */ 1200L,
|
||||
upperTimestamp,
|
||||
/* totalPower= */ 80,
|
||||
@@ -260,7 +276,9 @@ public final class BatteryHistEntryTest {
|
||||
upperHistEntry);
|
||||
|
||||
assertBatteryHistEntry(
|
||||
newEntry, 3, upperHistEntry.mPercentOfTotal,
|
||||
newEntry,
|
||||
3,
|
||||
upperHistEntry.mPercentOfTotal,
|
||||
/* bootTimestamp= */ 1200 - 100,
|
||||
/* timestamp= */ slotTimestamp,
|
||||
/* totalPower= */ 0.5 * 80,
|
||||
@@ -280,15 +298,16 @@ public final class BatteryHistEntryTest {
|
||||
|
||||
private static ContentValues getContentValuesWithType(int consumerType) {
|
||||
final ContentValues values = new ContentValues();
|
||||
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE,
|
||||
Integer.valueOf(consumerType));
|
||||
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf(consumerType));
|
||||
return values;
|
||||
}
|
||||
|
||||
private void assertBatteryHistEntry(
|
||||
BatteryHistEntry entry, int drainType, double percentOfTotal) {
|
||||
assertBatteryHistEntry(
|
||||
entry, drainType, percentOfTotal,
|
||||
entry,
|
||||
drainType,
|
||||
percentOfTotal,
|
||||
/* bootTimestamp= */ 101L,
|
||||
/* timestamp= */ 10001L,
|
||||
/* totalPower= */ 5.1,
|
||||
@@ -321,8 +340,7 @@ public final class BatteryHistEntryTest {
|
||||
assertThat(entry.mUid).isEqualTo(1001);
|
||||
assertThat(entry.mUserId).isEqualTo(UserHandle.getUserId(1001));
|
||||
assertThat(entry.mAppLabel).isEqualTo("Settings");
|
||||
assertThat(entry.mPackageName)
|
||||
.isEqualTo("com.google.android.settings.battery");
|
||||
assertThat(entry.mPackageName).isEqualTo("com.google.android.settings.battery");
|
||||
assertThat(entry.mIsHidden).isTrue();
|
||||
assertThat(entry.mBootTimestamp).isEqualTo(bootTimestamp);
|
||||
assertThat(entry.mTimestamp).isEqualTo(timestamp);
|
||||
@@ -338,13 +356,10 @@ public final class BatteryHistEntryTest {
|
||||
assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
|
||||
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
|
||||
assertThat(entry.mDrainType).isEqualTo(drainType);
|
||||
assertThat(entry.mConsumerType)
|
||||
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||
assertThat(entry.mConsumerType).isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||
assertThat(entry.mBatteryLevel).isEqualTo(batteryLevel);
|
||||
assertThat(entry.mBatteryStatus)
|
||||
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||
assertThat(entry.mBatteryHealth)
|
||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
||||
assertThat(entry.mBatteryStatus).isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||
assertThat(entry.mBatteryHealth).isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
||||
}
|
||||
|
||||
private BatteryHistEntry createBatteryHistEntry(
|
||||
@@ -359,24 +374,24 @@ public final class BatteryHistEntryTest {
|
||||
long foregroundUsageTimeInMs,
|
||||
long backgroundUsageTimeInMs,
|
||||
int batteryLevel) {
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
BatteryHistEntry.KEY_UID,
|
||||
BatteryHistEntry.KEY_USER_ID,
|
||||
BatteryHistEntry.KEY_PACKAGE_NAME,
|
||||
BatteryHistEntry.KEY_TIMESTAMP,
|
||||
BatteryHistEntry.KEY_CONSUMER_TYPE,
|
||||
BatteryHistEntry.KEY_BATTERY_INFORMATION});
|
||||
BatteryHistEntry.KEY_BATTERY_INFORMATION
|
||||
});
|
||||
DeviceBatteryState deviceBatteryState =
|
||||
DeviceBatteryState
|
||||
.newBuilder()
|
||||
DeviceBatteryState.newBuilder()
|
||||
.setBatteryLevel(batteryLevel)
|
||||
.setBatteryStatus(BatteryManager.BATTERY_STATUS_FULL)
|
||||
.setBatteryHealth(BatteryManager.BATTERY_HEALTH_COLD)
|
||||
.build();
|
||||
BatteryInformation batteryInformation =
|
||||
BatteryInformation
|
||||
.newBuilder()
|
||||
BatteryInformation.newBuilder()
|
||||
.setDeviceBatteryState(deviceBatteryState)
|
||||
.setIsHidden(true)
|
||||
.setBootTimestamp(bootTimestamp)
|
||||
@@ -400,7 +415,8 @@ public final class BatteryHistEntryTest {
|
||||
"com.google.android.settings.battery",
|
||||
Long.valueOf(timestamp),
|
||||
Integer.valueOf(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY),
|
||||
ConvertUtils.convertBatteryInformationToString(batteryInformation)});
|
||||
ConvertUtils.convertBatteryInformationToString(batteryInformation)
|
||||
});
|
||||
cursor.moveToFirst();
|
||||
return new BatteryHistEntry(cursor);
|
||||
}
|
||||
|
@@ -38,14 +38,10 @@ import org.robolectric.RuntimeEnvironment;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class BatteryHistoryPreferenceTest {
|
||||
@Mock
|
||||
private PreferenceViewHolder mViewHolder;
|
||||
@Mock
|
||||
private TextView mTextView;
|
||||
@Mock
|
||||
private BatteryChartView mDailyChartView;
|
||||
@Mock
|
||||
private BatteryChartView mHourlyChartView;
|
||||
@Mock private PreferenceViewHolder mViewHolder;
|
||||
@Mock private TextView mTextView;
|
||||
@Mock private BatteryChartView mDailyChartView;
|
||||
@Mock private BatteryChartView mHourlyChartView;
|
||||
private BatteryHistoryPreference mBatteryHistoryPreference;
|
||||
|
||||
@Before
|
||||
|
@@ -42,12 +42,14 @@ public class BatteryLevelDataTest {
|
||||
@Test
|
||||
public void getDailyTimestamps_allDataInOneHour_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
final List<Long> timestamps =
|
||||
List.of(
|
||||
1640970006000L, // 2022-01-01 01:00:06
|
||||
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
|
||||
1640973608000L // 2022-01-01 01:00:08
|
||||
);
|
||||
@@ -57,13 +59,15 @@ public class BatteryLevelDataTest {
|
||||
@Test
|
||||
public void getDailyTimestamps_OneHourDataPerDay_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
final List<Long> timestamps =
|
||||
List.of(
|
||||
1641049200000L, // 2022-01-01 23:00:00
|
||||
1641052800000L, // 2022-01-02 00: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
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641056400000L // 2022-01-02 01:00:00
|
||||
@@ -74,7 +78,8 @@ public class BatteryLevelDataTest {
|
||||
@Test
|
||||
public void getDailyTimestamps_OneDayData_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
final List<Long> timestamps =
|
||||
List.of(
|
||||
1640966400000L, // 2022-01-01 00:00:00
|
||||
1640970000000L, // 2022-01-01 01:00:00
|
||||
1640973600000L, // 2022-01-01 02:00:00
|
||||
@@ -82,7 +87,8 @@ public class BatteryLevelDataTest {
|
||||
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
|
||||
1640980800000L // 2022-01-01 04:00:00
|
||||
);
|
||||
@@ -92,14 +98,16 @@ public class BatteryLevelDataTest {
|
||||
@Test
|
||||
public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
final List<Long> timestamps =
|
||||
List.of(
|
||||
1641045600000L, // 2022-01-01 22:00:00
|
||||
1641060000000L, // 2022-01-02 02:00:00
|
||||
1641160800000L, // 2022-01-03 06: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
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641139200000L, // 2022-01-03 00:00:00
|
||||
@@ -112,14 +120,16 @@ public class BatteryLevelDataTest {
|
||||
@Test
|
||||
public void getDailyTimestamps_FirstDayOneHourData_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
final List<Long> timestamps =
|
||||
List.of(
|
||||
1641049200000L, // 2022-01-01 23:00:00
|
||||
1641060000000L, // 2022-01-02 02:00:00
|
||||
1641160800000L, // 2022-01-03 06: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
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641139200000L, // 2022-01-03 00:00:00
|
||||
@@ -132,14 +142,16 @@ public class BatteryLevelDataTest {
|
||||
@Test
|
||||
public void getDailyTimestamps_LastDayNoData_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
final List<Long> timestamps =
|
||||
List.of(
|
||||
1640988000000L, // 2022-01-01 06:00:00
|
||||
1641060000000L, // 2022-01-02 02:00:00
|
||||
1641160800000L, // 2022-01-03 06: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
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641139200000L, // 2022-01-03 00:00:00
|
||||
@@ -151,14 +163,16 @@ public class BatteryLevelDataTest {
|
||||
@Test
|
||||
public void getDailyTimestamps_LastDayOneHourData_returnExpectedList() {
|
||||
// Timezone GMT+8
|
||||
final List<Long> timestamps = List.of(
|
||||
final List<Long> timestamps =
|
||||
List.of(
|
||||
1640988000000L, // 2022-01-01 06:00:00
|
||||
1641060000000L, // 2022-01-02 02:00:00
|
||||
1641160800000L, // 2022-01-03 06: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
|
||||
1641052800000L, // 2022-01-02 00:00:00
|
||||
1641139200000L, // 2022-01-03 00:00:00
|
||||
@@ -172,21 +186,26 @@ public class BatteryLevelDataTest {
|
||||
public void combine_normalFlow_returnExpectedResult() {
|
||||
final BatteryLevelData batteryLevelData =
|
||||
new BatteryLevelData(Map.of(1691596800000L, 90, 1691604000000L, 80));
|
||||
final List<BatteryEvent> batteryLevelRecordEvents = List.of(
|
||||
BatteryEvent.newBuilder().setTimestamp(1691586000166L).setBatteryLevel(100)
|
||||
.setType(BatteryEventType.FULL_CHARGED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(1691589600000L).setBatteryLevel(98)
|
||||
.setType(BatteryEventType.EVEN_HOUR).build());
|
||||
final List<BatteryEvent> batteryLevelRecordEvents =
|
||||
List.of(
|
||||
BatteryEvent.newBuilder()
|
||||
.setTimestamp(1691586000166L)
|
||||
.setBatteryLevel(100)
|
||||
.setType(BatteryEventType.FULL_CHARGED)
|
||||
.build(),
|
||||
BatteryEvent.newBuilder()
|
||||
.setTimestamp(1691589600000L)
|
||||
.setBatteryLevel(98)
|
||||
.setType(BatteryEventType.EVEN_HOUR)
|
||||
.build());
|
||||
|
||||
BatteryLevelData result =
|
||||
BatteryLevelData.combine(batteryLevelData, batteryLevelRecordEvents);
|
||||
|
||||
assertThat(result.getDailyBatteryLevels().getTimestamps())
|
||||
.isEqualTo(List.of(1691586000166L, 1691596800000L, 1691604000000L));
|
||||
assertThat(result.getDailyBatteryLevels().getLevels())
|
||||
.isEqualTo(List.of(100, 90, 80));
|
||||
assertThat(result.getHourlyBatteryLevelsPerDay())
|
||||
.hasSize(2);
|
||||
assertThat(result.getDailyBatteryLevels().getLevels()).isEqualTo(List.of(100, 90, 80));
|
||||
assertThat(result.getHourlyBatteryLevelsPerDay()).hasSize(2);
|
||||
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps())
|
||||
.isEqualTo(List.of(1691586000166L, 1691589600000L, 1691596800000L));
|
||||
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels())
|
||||
@@ -199,17 +218,22 @@ public class BatteryLevelDataTest {
|
||||
|
||||
@Test
|
||||
public void combine_existingBatteryLevelDataIsNull_returnExpectedResult() {
|
||||
final List<BatteryEvent> batteryLevelRecordEvents = List.of(
|
||||
BatteryEvent.newBuilder().setTimestamp(1691586000166L).setBatteryLevel(100)
|
||||
.setType(BatteryEventType.FULL_CHARGED).build(),
|
||||
BatteryEvent.newBuilder().setTimestamp(1691589600000L).setBatteryLevel(98)
|
||||
.setType(BatteryEventType.EVEN_HOUR).build());
|
||||
final List<BatteryEvent> batteryLevelRecordEvents =
|
||||
List.of(
|
||||
BatteryEvent.newBuilder()
|
||||
.setTimestamp(1691586000166L)
|
||||
.setBatteryLevel(100)
|
||||
.setType(BatteryEventType.FULL_CHARGED)
|
||||
.build(),
|
||||
BatteryEvent.newBuilder()
|
||||
.setTimestamp(1691589600000L)
|
||||
.setBatteryLevel(98)
|
||||
.setType(BatteryEventType.EVEN_HOUR)
|
||||
.build());
|
||||
|
||||
BatteryLevelData result =
|
||||
BatteryLevelData.combine(null, batteryLevelRecordEvents);
|
||||
BatteryLevelData result = BatteryLevelData.combine(null, batteryLevelRecordEvents);
|
||||
|
||||
assertThat(result.getHourlyBatteryLevelsPerDay())
|
||||
.hasSize(1);
|
||||
assertThat(result.getHourlyBatteryLevelsPerDay()).hasSize(1);
|
||||
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps())
|
||||
.isEqualTo(List.of(1691586000166L, 1691589600000L));
|
||||
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels())
|
||||
@@ -219,23 +243,29 @@ public class BatteryLevelDataTest {
|
||||
@Test
|
||||
public void getIndexByTimestamps_returnExpectedResult() {
|
||||
final BatteryLevelData batteryLevelData =
|
||||
new BatteryLevelData(Map.of(
|
||||
new BatteryLevelData(
|
||||
Map.of(
|
||||
1694354400000L, 1, // 2023-09-10 22:00:00
|
||||
1694361600000L, 2, // 2023-09-11 00:00:00
|
||||
1694368800000L, 3)); // 2023-09-11 02:00:00
|
||||
final PowerAnomalyEvent event = BatteryTestUtils.createAppAnomalyEvent();
|
||||
|
||||
assertThat(batteryLevelData.getIndexByTimestamps(0L, 0L))
|
||||
.isEqualTo(Pair.create(BatteryChartViewModel.SELECTED_INDEX_INVALID,
|
||||
.isEqualTo(
|
||||
Pair.create(
|
||||
BatteryChartViewModel.SELECTED_INDEX_INVALID,
|
||||
BatteryChartViewModel.SELECTED_INDEX_INVALID));
|
||||
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));
|
||||
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L, 1694368800000L))
|
||||
.isEqualTo(Pair.create(1, 0));
|
||||
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L - 1L))
|
||||
.isEqualTo(Pair.create(1, 0));
|
||||
assertThat(batteryLevelData.getIndexByTimestamps(
|
||||
assertThat(
|
||||
batteryLevelData.getIndexByTimestamps(
|
||||
event.getWarningItemInfo().getStartTimestamp(),
|
||||
event.getWarningItemInfo().getEndTimestamp()))
|
||||
.isEqualTo(Pair.create(1, 0));
|
||||
|
@@ -61,12 +61,9 @@ public final class BatteryTipsCardPreferenceTest {
|
||||
private BatteryTipsController mBatteryTipsController;
|
||||
private BatteryChartPreferenceController mBatteryChartPreferenceController;
|
||||
|
||||
@Mock
|
||||
private View mFakeView;
|
||||
@Mock
|
||||
private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
|
||||
@Mock
|
||||
private BatteryDiffEntry mFakeEntry;
|
||||
@Mock private View mFakeView;
|
||||
@Mock private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
|
||||
@Mock private BatteryDiffEntry mFakeEntry;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -85,7 +82,10 @@ public final class BatteryTipsCardPreferenceTest {
|
||||
mPowerUsageAdvanced.mBatteryTipsController = mBatteryTipsController;
|
||||
mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController;
|
||||
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
|
||||
1694361600000L, 2, // 2023-09-11 00:00:00
|
||||
1694368800000L, 3))); // 2023-09-11 02:00:00
|
||||
@@ -94,8 +94,8 @@ public final class BatteryTipsCardPreferenceTest {
|
||||
|
||||
@Test
|
||||
public void constructor_returnExpectedResult() {
|
||||
assertThat(mBatteryTipsCardPreference.getLayoutResource()).isEqualTo(
|
||||
R.layout.battery_tips_card);
|
||||
assertThat(mBatteryTipsCardPreference.getLayoutResource())
|
||||
.isEqualTo(R.layout.battery_tips_card);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -118,10 +118,13 @@ public final class BatteryTipsCardPreferenceTest {
|
||||
.isEqualTo(DisplaySettings.class.getName());
|
||||
assertThat(intent.getIntExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, -1))
|
||||
.isEqualTo(SettingsEnums.DISPLAY);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "BrightnessAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT,
|
||||
"BrightnessAnomaly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -140,10 +143,16 @@ public final class BatteryTipsCardPreferenceTest {
|
||||
assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext)).hasSize(1);
|
||||
assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext))
|
||||
.contains(PowerAnomalyKey.KEY_SCREEN_TIMEOUT.name());
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "ScreenTimeoutAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
|
||||
"ScreenTimeoutAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS,
|
||||
"ScreenTimeoutAnomaly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -159,13 +168,12 @@ public final class BatteryTipsCardPreferenceTest {
|
||||
|
||||
assertThat(mBatteryTipsCardPreference.isVisible()).isFalse();
|
||||
verify(mContext, never()).startActivity(any(Intent.class));
|
||||
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(
|
||||
eq(1), eq(0));
|
||||
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
|
||||
verify(mBatteryChartPreferenceController).selectHighlightSlotIndex();
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "AppAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "AppAnomaly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -180,12 +188,11 @@ public final class BatteryTipsCardPreferenceTest {
|
||||
|
||||
assertThat(mBatteryTipsCardPreference.isVisible()).isFalse();
|
||||
verify(mContext, never()).startActivity(any(Intent.class));
|
||||
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(
|
||||
eq(1), eq(0));
|
||||
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
|
||||
verify(mBatteryChartPreferenceController, never()).selectHighlightSlotIndex();
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "AppAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "AppAnomaly");
|
||||
}
|
||||
}
|
||||
|
@@ -48,8 +48,7 @@ public final class BatteryTipsControllerTest {
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
private BatteryTipsController mBatteryTipsController;
|
||||
|
||||
@Mock
|
||||
private BatteryTipsCardPreference mBatteryTipsCardPreference;
|
||||
@Mock private BatteryTipsCardPreference mBatteryTipsCardPreference;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -82,17 +81,17 @@ public final class BatteryTipsControllerTest {
|
||||
new AnomalyEventWrapper(mContext, event), false);
|
||||
|
||||
// Check pre-defined string
|
||||
verify(mBatteryTipsCardPreference).setTitle(
|
||||
"Turn on adaptive brightness to extend battery life");
|
||||
verify(mBatteryTipsCardPreference)
|
||||
.setTitle("Turn on adaptive brightness to extend battery life");
|
||||
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
||||
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId(
|
||||
R.color.color_accent_selector);
|
||||
verify(mBatteryTipsCardPreference)
|
||||
.setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
|
||||
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||
// Check proto info
|
||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -105,20 +104,24 @@ public final class BatteryTipsControllerTest {
|
||||
|
||||
verify(mBatteryTipsCardPreference).setTitle("Reduce screen timeout to extend battery life");
|
||||
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
||||
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId(
|
||||
R.color.color_accent_selector);
|
||||
verify(mBatteryTipsCardPreference)
|
||||
.setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
|
||||
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
|
||||
"ScreenTimeoutAnomaly");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void handleBatteryTipsCardUpdated_screenTimeoutAnomalyHasTitle_showAnomaly() {
|
||||
PowerAnomalyEvent event = BatteryTestUtils.createScreenTimeoutAnomalyEvent();
|
||||
String testTitle = "TestTitle";
|
||||
event = event.toBuilder()
|
||||
event =
|
||||
event.toBuilder()
|
||||
.setWarningBannerInfo(
|
||||
event.getWarningBannerInfo().toBuilder()
|
||||
.setTitleString(testTitle)
|
||||
@@ -131,13 +134,16 @@ public final class BatteryTipsControllerTest {
|
||||
|
||||
verify(mBatteryTipsCardPreference).setTitle(testTitle);
|
||||
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
||||
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId(
|
||||
R.color.color_accent_selector);
|
||||
verify(mBatteryTipsCardPreference)
|
||||
.setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
|
||||
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(
|
||||
mContext,
|
||||
SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
|
||||
"ScreenTimeoutAnomaly");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -146,20 +152,18 @@ public final class BatteryTipsControllerTest {
|
||||
when(mFeatureFactory.powerUsageFeatureProvider.isBatteryTipsEnabled()).thenReturn(true);
|
||||
|
||||
AnomalyEventWrapper eventWrapper = new AnomalyEventWrapper(mContext, event);
|
||||
eventWrapper.setRelatedBatteryDiffEntry(
|
||||
new BatteryDiffEntry(mContext, "", "Chrome", 0));
|
||||
eventWrapper.setRelatedBatteryDiffEntry(new BatteryDiffEntry(mContext, "", "Chrome", 0));
|
||||
mBatteryTipsController.handleBatteryTipsCardUpdated(eventWrapper, false);
|
||||
|
||||
verify(mBatteryTipsCardPreference).setTitle(
|
||||
"Chrome used more battery than usual");
|
||||
verify(mBatteryTipsCardPreference).setIconResourceId(
|
||||
R.drawable.ic_battery_tips_warning_icon);
|
||||
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId(
|
||||
R.color.color_battery_anomaly_yellow_selector);
|
||||
verify(mBatteryTipsCardPreference).setTitle("Chrome used more battery than usual");
|
||||
verify(mBatteryTipsCardPreference)
|
||||
.setIconResourceId(R.drawable.ic_battery_tips_warning_icon);
|
||||
verify(mBatteryTipsCardPreference)
|
||||
.setMainButtonStrokeColorResourceId(R.color.color_battery_anomaly_yellow_selector);
|
||||
verify(mBatteryTipsCardPreference).setMainButtonLabel("Check");
|
||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||
verify(mFeatureFactory.metricsFeatureProvider)
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||
}
|
||||
}
|
||||
|
@@ -58,18 +58,12 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
private static final String PREF_KEY2 = "pref_key2";
|
||||
private static final String PREF_SUMMARY = "fake preference summary";
|
||||
|
||||
@Mock
|
||||
private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock
|
||||
private SettingsActivity mSettingsActivity;
|
||||
@Mock
|
||||
private PreferenceGroup mAppListPreferenceGroup;
|
||||
@Mock
|
||||
private Drawable mDrawable;
|
||||
@Mock
|
||||
private BatteryHistEntry mBatteryHistEntry;
|
||||
@Mock
|
||||
private AnomalyAppItemPreference mAnomalyAppItemPreference;
|
||||
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||
@Mock private SettingsActivity mSettingsActivity;
|
||||
@Mock private PreferenceGroup mAppListPreferenceGroup;
|
||||
@Mock private Drawable mDrawable;
|
||||
@Mock private BatteryHistEntry mBatteryHistEntry;
|
||||
@Mock private AnomalyAppItemPreference mAnomalyAppItemPreference;
|
||||
|
||||
private Context mContext;
|
||||
private FakeFeatureFactory mFeatureFactory;
|
||||
@@ -94,7 +88,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
.getHideApplicationSet();
|
||||
mBatteryUsageBreakdownController = createController();
|
||||
mBatteryUsageBreakdownController.mAppListPreferenceGroup = mAppListPreferenceGroup;
|
||||
mBatteryDiffEntry = new BatteryDiffEntry(
|
||||
mBatteryDiffEntry =
|
||||
new BatteryDiffEntry(
|
||||
mContext,
|
||||
/* uid= */ 0L,
|
||||
/* userId= */ 0L,
|
||||
@@ -114,10 +109,18 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
/* cachedUsageConsumePower= */ 0);
|
||||
mBatteryDiffEntry = spy(mBatteryDiffEntry);
|
||||
mBatteryUsageBreakdownController.mBatteryDiffData =
|
||||
new BatteryDiffData(mContext, /* startTimestamp= */ 0L, /* endTimestamp= */ 0L,
|
||||
/* startBatteryLevel= */ 0, /* endBatteryLevel= */ 0,
|
||||
/* screenOnTime= */ 0L, Arrays.asList(mBatteryDiffEntry), Arrays.asList(),
|
||||
Set.of(), Set.of(), /* isAccumulated= */ false);
|
||||
new BatteryDiffData(
|
||||
mContext,
|
||||
/* startTimestamp= */ 0L,
|
||||
/* endTimestamp= */ 0L,
|
||||
/* startBatteryLevel= */ 0,
|
||||
/* endBatteryLevel= */ 0,
|
||||
/* screenOnTime= */ 0L,
|
||||
Arrays.asList(mBatteryDiffEntry),
|
||||
Arrays.asList(),
|
||||
Set.of(),
|
||||
Set.of(),
|
||||
/* isAccumulated= */ false);
|
||||
BatteryDiffEntry.clearCache();
|
||||
// Adds fake testing data.
|
||||
BatteryDiffEntry.sResourceCache.put(
|
||||
@@ -129,8 +132,7 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
@Test
|
||||
public void onDestroy_clearPreferenceCacheAndPreferenceGroupRemoveAll() {
|
||||
// Ensures the testing environment is correct.
|
||||
mBatteryUsageBreakdownController.mPreferenceCache.put(
|
||||
PREF_KEY, mAnomalyAppItemPreference);
|
||||
mBatteryUsageBreakdownController.mPreferenceCache.put(PREF_KEY, mAnomalyAppItemPreference);
|
||||
assertThat(mBatteryUsageBreakdownController.mPreferenceCache).hasSize(1);
|
||||
|
||||
mBatteryUsageBreakdownController.onDestroy();
|
||||
@@ -158,8 +160,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
|
||||
// Verifies the preference cache.
|
||||
final PowerGaugePreference pref =
|
||||
(PowerGaugePreference) mBatteryUsageBreakdownController.mPreferenceCache
|
||||
.get(PREF_KEY);
|
||||
(PowerGaugePreference)
|
||||
mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY);
|
||||
assertThat(pref).isNotNull();
|
||||
// Verifies the added preference configuration.
|
||||
verify(mAppListPreferenceGroup).addPreference(pref);
|
||||
@@ -218,8 +220,10 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
|
||||
@Test
|
||||
public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
|
||||
assertThat(mBatteryUsageBreakdownController
|
||||
.handlePreferenceTreeClick(mAppListPreferenceGroup)).isFalse();
|
||||
assertThat(
|
||||
mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
||||
mAppListPreferenceGroup))
|
||||
.isFalse();
|
||||
|
||||
verify(mMetricsFeatureProvider, never())
|
||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM);
|
||||
@@ -232,8 +236,10 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
|
||||
doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
|
||||
|
||||
assertThat(mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
||||
mAnomalyAppItemPreference)).isTrue();
|
||||
assertThat(
|
||||
mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
||||
mAnomalyAppItemPreference))
|
||||
.isTrue();
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.OPEN_BATTERY_USAGE,
|
||||
@@ -248,8 +254,10 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_UID_BATTERY;
|
||||
doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
|
||||
|
||||
assertThat(mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
||||
mAnomalyAppItemPreference)).isTrue();
|
||||
assertThat(
|
||||
mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
||||
mAnomalyAppItemPreference))
|
||||
.isTrue();
|
||||
verify(mMetricsFeatureProvider)
|
||||
.action(
|
||||
SettingsEnums.OPEN_BATTERY_USAGE,
|
||||
@@ -262,7 +270,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
@Test
|
||||
public void setPreferencePercent_lessThanThreshold_expectedFormat() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry(
|
||||
final BatteryDiffEntry batteryDiffEntry =
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ true,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* foregroundUsageTimeInMs= */ 0,
|
||||
@@ -279,7 +288,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
@Test
|
||||
public void setPreferencePercent_greaterThanThreshold_expectedFormat() {
|
||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||
final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry(
|
||||
final BatteryDiffEntry batteryDiffEntry =
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ true,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* foregroundUsageTimeInMs= */ 0,
|
||||
@@ -299,7 +309,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
pref,
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ true,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* foregroundUsageTimeInMs= */ 0,
|
||||
@@ -313,7 +324,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
pref,
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ true,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
||||
@@ -327,7 +339,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
pref,
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ true,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS * 2,
|
||||
@@ -341,7 +354,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
pref,
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ false,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* foregroundUsageTimeInMs= */ 0,
|
||||
@@ -355,7 +369,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
pref,
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ false,
|
||||
/* screenOnTimeInMs= */ 0,
|
||||
/* foregroundUsageTimeInMs= */ 0,
|
||||
@@ -369,7 +384,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
pref,
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ false,
|
||||
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS,
|
||||
/* foregroundUsageTimeInMs= */ 0,
|
||||
@@ -383,20 +399,27 @@ public final class BatteryUsageBreakdownControllerTest {
|
||||
pref.setSummary(PREF_SUMMARY);
|
||||
|
||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||
pref, createBatteryDiffEntry(
|
||||
pref,
|
||||
createBatteryDiffEntry(
|
||||
/* isSystem= */ false,
|
||||
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
||||
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
||||
/* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1));
|
||||
assertThat(pref.getSummary().toString()).isEqualTo(
|
||||
"Screen time: less than a min\nBackground: less than a min");
|
||||
assertThat(pref.getSummary().toString())
|
||||
.isEqualTo("Screen time: less than a min\nBackground: less than a min");
|
||||
}
|
||||
|
||||
private BatteryDiffEntry createBatteryDiffEntry(boolean isSystem, long screenOnTimeInMs,
|
||||
long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
|
||||
private BatteryDiffEntry createBatteryDiffEntry(
|
||||
boolean isSystem,
|
||||
long screenOnTimeInMs,
|
||||
long foregroundUsageTimeInMs,
|
||||
long backgroundUsageTimeInMs) {
|
||||
final ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf(
|
||||
isSystem ? ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY
|
||||
contentValues.put(
|
||||
BatteryHistEntry.KEY_CONSUMER_TYPE,
|
||||
Integer.valueOf(
|
||||
isSystem
|
||||
? ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY
|
||||
: ConvertUtils.CONSUMER_TYPE_UID_BATTERY));
|
||||
contentValues.put(BatteryHistEntry.KEY_USER_ID, Integer.valueOf(1001));
|
||||
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(contentValues);
|
||||
|
@@ -48,8 +48,7 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
private BatteryUsageBroadcastReceiver mBatteryUsageBroadcastReceiver;
|
||||
private FakeFeatureFactory mFakeFeatureFactory;
|
||||
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock private PackageManager mPackageManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -72,8 +71,8 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
public void onReceive_workProfile_doNothing() {
|
||||
BatteryTestUtils.setWorkProfile(mContext);
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||
}
|
||||
@@ -85,10 +84,11 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting())
|
||||
.thenReturn(true);
|
||||
doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||
.when(mContext).registerReceiver(any(), any());
|
||||
.when(mContext)
|
||||
.registerReceiver(any(), any());
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||
@@ -102,13 +102,14 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
.thenReturn(true);
|
||||
// Make sure isCharged returns true.
|
||||
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.
|
||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||
SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||
@@ -122,12 +123,13 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
.thenReturn(true);
|
||||
// Make sure isCharged returns true.
|
||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||
.when(mContext).registerReceiver(any(), any());
|
||||
.when(mContext)
|
||||
.registerReceiver(any(), any());
|
||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||
@@ -141,12 +143,13 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
.thenReturn(true);
|
||||
// Make sure isCharged returns true.
|
||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||
.when(mContext).registerReceiver(any(), any());
|
||||
.when(mContext)
|
||||
.registerReceiver(any(), any());
|
||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
||||
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||
@@ -159,10 +162,11 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting())
|
||||
.thenReturn(false);
|
||||
doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||
.when(mContext).registerReceiver(any(), any());
|
||||
.when(mContext)
|
||||
.registerReceiver(any(), any());
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||
@@ -176,13 +180,14 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
.thenReturn(false);
|
||||
// Make sure isCharged returns true.
|
||||
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.
|
||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||
SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||
@@ -196,12 +201,13 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
.thenReturn(false);
|
||||
// Make sure isCharged returns true.
|
||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||
.when(mContext).registerReceiver(any(), any());
|
||||
.when(mContext)
|
||||
.registerReceiver(any(), any());
|
||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||
@@ -215,12 +221,13 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
.thenReturn(false);
|
||||
// Make sure isCharged returns true.
|
||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||
.when(mContext).registerReceiver(any(), any());
|
||||
.when(mContext)
|
||||
.registerReceiver(any(), any());
|
||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||
|
||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||
@@ -234,12 +241,12 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
/*packageName*/ "com.android.testing_package", Boolean.valueOf(true));
|
||||
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext,
|
||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA));
|
||||
|
||||
assertThat(BatteryDiffEntry.sValidForRestriction).isEmpty();
|
||||
assertSharedPreferences(
|
||||
BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
|
||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -250,12 +257,12 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
/*packageName*/ "com.android.testing_package", Boolean.valueOf(true));
|
||||
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
||||
|
||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
||||
mBatteryUsageBroadcastReceiver.onReceive(
|
||||
mContext,
|
||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA));
|
||||
|
||||
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
||||
assertSharedPreferences(
|
||||
BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
|
||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
|
||||
}
|
||||
|
||||
private static Intent getBatteryIntent(int level, int status) {
|
||||
@@ -267,7 +274,6 @@ public final class BatteryUsageBroadcastReceiverTest {
|
||||
}
|
||||
|
||||
private void assertSharedPreferences(String preferenceKey) {
|
||||
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey))
|
||||
.isTrue();
|
||||
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey)).isTrue();
|
||||
}
|
||||
}
|
||||
|
@@ -95,7 +95,10 @@ public final class BatteryUsageContentProviderTest {
|
||||
IllegalArgumentException.class,
|
||||
() ->
|
||||
mProvider.query(
|
||||
uri, /*strings=*/ null, /*s=*/ null, /*strings1=*/ null,
|
||||
uri,
|
||||
/* strings= */ null,
|
||||
/* s= */ null,
|
||||
/* strings1= */ null,
|
||||
/* s1= */ null));
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
@@ -116,7 +119,10 @@ public final class BatteryUsageContentProviderTest {
|
||||
IllegalArgumentException.class,
|
||||
() ->
|
||||
mProvider.query(
|
||||
uri, /*strings=*/ null, /*s=*/ null, /*strings1=*/ null,
|
||||
uri,
|
||||
/* strings= */ null,
|
||||
/* s= */ null,
|
||||
/* strings1= */ null,
|
||||
/* s1= */ null));
|
||||
assertThrows(
|
||||
IllegalArgumentException.class,
|
||||
@@ -128,7 +134,8 @@ public final class BatteryUsageContentProviderTest {
|
||||
mProvider.onCreate();
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
|
||||
values.put(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
||||
values.put(
|
||||
BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
||||
BatteryEventType.FULL_CHARGED.getNumber());
|
||||
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 100);
|
||||
mProvider.insert(DatabaseUtils.BATTERY_EVENT_URI, values);
|
||||
@@ -263,15 +270,13 @@ public final class BatteryUsageContentProviderTest {
|
||||
public void insert_batteryState_returnsExpectedResult() {
|
||||
mProvider.onCreate();
|
||||
final DeviceBatteryState deviceBatteryState =
|
||||
DeviceBatteryState
|
||||
.newBuilder()
|
||||
DeviceBatteryState.newBuilder()
|
||||
.setBatteryLevel(51)
|
||||
.setBatteryStatus(2)
|
||||
.setBatteryHealth(3)
|
||||
.build();
|
||||
final BatteryInformation batteryInformation =
|
||||
BatteryInformation
|
||||
.newBuilder()
|
||||
BatteryInformation.newBuilder()
|
||||
.setDeviceBatteryState(deviceBatteryState)
|
||||
.setAppLabel("Settings")
|
||||
.setIsHidden(true)
|
||||
@@ -318,17 +323,13 @@ public final class BatteryUsageContentProviderTest {
|
||||
public void insert_partialFieldsContentValues_returnsExpectedResult() {
|
||||
mProvider.onCreate();
|
||||
final DeviceBatteryState deviceBatteryState =
|
||||
DeviceBatteryState
|
||||
.newBuilder()
|
||||
DeviceBatteryState.newBuilder()
|
||||
.setBatteryLevel(52)
|
||||
.setBatteryStatus(3)
|
||||
.setBatteryHealth(2)
|
||||
.build();
|
||||
final BatteryInformation batteryInformation =
|
||||
BatteryInformation
|
||||
.newBuilder()
|
||||
.setDeviceBatteryState(deviceBatteryState)
|
||||
.build();
|
||||
BatteryInformation.newBuilder().setDeviceBatteryState(deviceBatteryState).build();
|
||||
final String expectedBatteryInformationString =
|
||||
ConvertUtils.convertBatteryInformationToString(batteryInformation);
|
||||
final ContentValues values = new ContentValues();
|
||||
@@ -381,7 +382,8 @@ public final class BatteryUsageContentProviderTest {
|
||||
mProvider.onCreate();
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
|
||||
values.put(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
||||
values.put(
|
||||
BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 66);
|
||||
|
||||
@@ -393,23 +395,25 @@ public final class BatteryUsageContentProviderTest {
|
||||
BatteryStateDatabase.getInstance(mContext).batteryEventDao().getAll();
|
||||
assertThat(entities).hasSize(1);
|
||||
assertThat(entities.get(0).timestamp).isEqualTo(10001L);
|
||||
assertThat(entities.get(0).batteryEventType).isEqualTo(
|
||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(entities.get(0).batteryEventType)
|
||||
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(entities.get(0).batteryLevel).isEqualTo(66);
|
||||
|
||||
final Cursor cursor1 = getCursorOfBatteryEvents(
|
||||
0L, List.of(BatteryEventType.POWER_CONNECTED.getNumber()));
|
||||
final Cursor cursor1 =
|
||||
getCursorOfBatteryEvents(0L, List.of(BatteryEventType.POWER_CONNECTED.getNumber()));
|
||||
assertThat(cursor1.getCount()).isEqualTo(1);
|
||||
cursor1.moveToFirst();
|
||||
assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryEventEntity.KEY_TIMESTAMP)))
|
||||
.isEqualTo(10001L);
|
||||
assertThat(
|
||||
cursor1.getInt(cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)))
|
||||
cursor1.getInt(
|
||||
cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)))
|
||||
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(cursor1.getInt(cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_LEVEL)))
|
||||
.isEqualTo(66);
|
||||
|
||||
final Cursor cursor2 = getCursorOfBatteryEvents(
|
||||
final Cursor cursor2 =
|
||||
getCursorOfBatteryEvents(
|
||||
0L, List.of(BatteryEventType.POWER_DISCONNECTED.getNumber()));
|
||||
assertThat(cursor2.getCount()).isEqualTo(0);
|
||||
}
|
||||
@@ -435,8 +439,11 @@ public final class BatteryUsageContentProviderTest {
|
||||
cursor1.moveToFirst();
|
||||
assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryUsageSlotEntity.KEY_TIMESTAMP)))
|
||||
.isEqualTo(10001L);
|
||||
assertThat(cursor1.getString(cursor1.getColumnIndex(
|
||||
BatteryUsageSlotEntity.KEY_BATTERY_USAGE_SLOT))).isEqualTo("TEST_STRING");
|
||||
assertThat(
|
||||
cursor1.getString(
|
||||
cursor1.getColumnIndex(
|
||||
BatteryUsageSlotEntity.KEY_BATTERY_USAGE_SLOT)))
|
||||
.isEqualTo("TEST_STRING");
|
||||
|
||||
final Cursor cursor2 = getCursorOfBatteryUsageSlots(10002L);
|
||||
assertThat(cursor2.getCount()).isEqualTo(0);
|
||||
@@ -455,13 +462,13 @@ public final class BatteryUsageContentProviderTest {
|
||||
UnsupportedOperationException.class,
|
||||
() ->
|
||||
mProvider.update(
|
||||
/*uri=*/ null, /*contentValues=*/ null, /*s=*/ null,
|
||||
/* uri= */ null,
|
||||
/* contentValues= */ null,
|
||||
/* s= */ null,
|
||||
/* strings= */ null));
|
||||
}
|
||||
|
||||
private Cursor insertBatteryState(
|
||||
Duration currentTime,
|
||||
String queryTimestamp)
|
||||
private Cursor insertBatteryState(Duration currentTime, String queryTimestamp)
|
||||
throws Exception {
|
||||
mProvider.onCreate();
|
||||
final FakeClock fakeClock = new FakeClock();
|
||||
@@ -470,20 +477,17 @@ public final class BatteryUsageContentProviderTest {
|
||||
final long currentTimestamp = currentTime.toMillis();
|
||||
// Inserts some valid testing data.
|
||||
BatteryTestUtils.insertDataToBatteryStateTable(
|
||||
mContext, currentTimestamp - 6, PACKAGE_NAME1,
|
||||
/*isFullChargeStart=*/ true);
|
||||
mContext, currentTimestamp - 6, PACKAGE_NAME1, /* isFullChargeStart= */ true);
|
||||
BatteryTestUtils.insertDataToBatteryStateTable(
|
||||
mContext, currentTimestamp - 2, PACKAGE_NAME2);
|
||||
BatteryTestUtils.insertDataToBatteryStateTable(
|
||||
mContext, currentTimestamp, PACKAGE_NAME3);
|
||||
BatteryTestUtils.insertDataToBatteryStateTable(mContext, currentTimestamp, PACKAGE_NAME3);
|
||||
|
||||
final Uri batteryStateQueryContentUri =
|
||||
new Uri.Builder()
|
||||
.scheme(ContentResolver.SCHEME_CONTENT)
|
||||
.authority(DatabaseUtils.AUTHORITY)
|
||||
.appendPath(DatabaseUtils.BATTERY_STATE_TABLE)
|
||||
.appendQueryParameter(
|
||||
DatabaseUtils.QUERY_KEY_TIMESTAMP, queryTimestamp)
|
||||
.appendQueryParameter(DatabaseUtils.QUERY_KEY_TIMESTAMP, queryTimestamp)
|
||||
.build();
|
||||
|
||||
final Cursor cursor = query(batteryStateQueryContentUri);
|
||||
@@ -532,15 +536,15 @@ public final class BatteryUsageContentProviderTest {
|
||||
.scheme(ContentResolver.SCHEME_CONTENT)
|
||||
.authority(DatabaseUtils.AUTHORITY)
|
||||
.appendPath(DatabaseUtils.APP_USAGE_LATEST_TIMESTAMP_PATH)
|
||||
.appendQueryParameter(
|
||||
DatabaseUtils.QUERY_KEY_USERID, Long.toString(userId))
|
||||
.appendQueryParameter(DatabaseUtils.QUERY_KEY_USERID, Long.toString(userId))
|
||||
.build();
|
||||
|
||||
return query(appUsageLatestTimestampQueryContentUri);
|
||||
}
|
||||
|
||||
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))
|
||||
.collect(Collectors.joining(","));
|
||||
final Uri appUsageEventUri =
|
||||
@@ -558,7 +562,8 @@ public final class BatteryUsageContentProviderTest {
|
||||
|
||||
private Cursor getCursorOfBatteryEvents(
|
||||
final long queryTimestamp, final List<Integer> batteryEventTypes) {
|
||||
final String batteryEventTypesString = batteryEventTypes.stream()
|
||||
final String batteryEventTypesString =
|
||||
batteryEventTypes.stream()
|
||||
.map(type -> String.valueOf(type))
|
||||
.collect(Collectors.joining(","));
|
||||
final Uri batteryEventUri =
|
||||
|
@@ -52,28 +52,22 @@ import java.util.List;
|
||||
public final class BatteryUsageDataLoaderTest {
|
||||
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private ContentResolver mMockContentResolver;
|
||||
@Mock
|
||||
private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock
|
||||
private PackageManager mPackageManager;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock
|
||||
private BatteryEntry mMockBatteryEntry;
|
||||
@Captor
|
||||
private ArgumentCaptor<BatteryUsageStatsQuery> mStatsQueryCaptor;
|
||||
@Mock private ContentResolver mMockContentResolver;
|
||||
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock private PackageManager mPackageManager;
|
||||
@Mock private UserManager mUserManager;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock private BatteryEntry mMockBatteryEntry;
|
||||
@Captor private ArgumentCaptor<BatteryUsageStatsQuery> mStatsQueryCaptor;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
doReturn(mContext).when(mContext).getApplicationContext();
|
||||
doReturn(mBatteryStatsManager).when(mContext).getSystemService(
|
||||
Context.BATTERY_STATS_SERVICE);
|
||||
doReturn(mBatteryStatsManager)
|
||||
.when(mContext)
|
||||
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||
doReturn(mMockContentResolver).when(mContext).getContentResolver();
|
||||
@@ -91,8 +85,7 @@ public final class BatteryUsageDataLoaderTest {
|
||||
BatteryUsageDataLoader.loadBatteryStatsData(mContext, /* isFullChargeStart= */ false);
|
||||
|
||||
final int queryFlags = mStatsQueryCaptor.getValue().getFlags();
|
||||
assertThat(queryFlags
|
||||
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
|
||||
assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
|
||||
.isNotEqualTo(0);
|
||||
verify(mMockContentResolver).insert(any(), any());
|
||||
}
|
||||
|
@@ -39,25 +39,23 @@ import org.robolectric.RuntimeEnvironment;
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class BatteryUsageStatsLoaderTest {
|
||||
private Context mContext;
|
||||
@Mock
|
||||
private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Captor
|
||||
private ArgumentCaptor<BatteryUsageStatsQuery> mUsageStatsQueryCaptor;
|
||||
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
@Captor private ArgumentCaptor<BatteryUsageStatsQuery> mUsageStatsQueryCaptor;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
doReturn(mBatteryStatsManager).when(mContext).getSystemService(
|
||||
Context.BATTERY_STATS_SERVICE);
|
||||
doReturn(mBatteryStatsManager)
|
||||
.when(mContext)
|
||||
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadInBackground_loadWithoutHistory() {
|
||||
BatteryUsageStatsLoader loader = new BatteryUsageStatsLoader(
|
||||
mContext, /* includeBatteryHistory */ false);
|
||||
BatteryUsageStatsLoader loader =
|
||||
new BatteryUsageStatsLoader(mContext, /* includeBatteryHistory */ false);
|
||||
|
||||
when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture()))
|
||||
.thenReturn(mBatteryUsageStats);
|
||||
@@ -65,14 +63,14 @@ public class BatteryUsageStatsLoaderTest {
|
||||
loader.loadInBackground();
|
||||
|
||||
final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags();
|
||||
assertThat(queryFlags
|
||||
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY).isEqualTo(0);
|
||||
assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
|
||||
.isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLoadInBackground_loadWithHistory() {
|
||||
BatteryUsageStatsLoader loader = new BatteryUsageStatsLoader(
|
||||
mContext, /* includeBatteryHistory */ true);
|
||||
BatteryUsageStatsLoader loader =
|
||||
new BatteryUsageStatsLoader(mContext, /* includeBatteryHistory */ true);
|
||||
|
||||
when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture()))
|
||||
.thenReturn(mBatteryUsageStats);
|
||||
@@ -80,7 +78,7 @@ public class BatteryUsageStatsLoaderTest {
|
||||
loader.loadInBackground();
|
||||
|
||||
final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags();
|
||||
assertThat(queryFlags
|
||||
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY).isNotEqualTo(0);
|
||||
assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
|
||||
.isNotEqualTo(0);
|
||||
}
|
||||
}
|
||||
|
@@ -88,7 +88,8 @@ public final class BootBroadcastReceiverTest {
|
||||
final SharedPreferences sharedPreferences = DatabaseUtils.getSharedPreferences(mContext);
|
||||
sharedPreferences
|
||||
.edit()
|
||||
.putInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE,
|
||||
.putInt(
|
||||
DatabaseUtils.KEY_LAST_USAGE_SOURCE,
|
||||
UsageStatsManager.USAGE_SOURCE_CURRENT_ACTIVITY)
|
||||
.apply();
|
||||
|
||||
@@ -96,8 +97,7 @@ public final class BootBroadcastReceiverTest {
|
||||
|
||||
assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNotNull();
|
||||
assertThat(
|
||||
DatabaseUtils
|
||||
.getSharedPreferences(mContext)
|
||||
DatabaseUtils.getSharedPreferences(mContext)
|
||||
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
||||
.isFalse();
|
||||
}
|
||||
@@ -142,11 +142,10 @@ public final class BootBroadcastReceiverTest {
|
||||
public void invokeJobRecheck_broadcastsIntent() {
|
||||
BootBroadcastReceiver.invokeJobRecheck(mContext);
|
||||
|
||||
final List<Intent> intents =
|
||||
Shadows.shadowOf((Application) mContext).getBroadcastIntents();
|
||||
final List<Intent> intents = Shadows.shadowOf((Application) mContext).getBroadcastIntents();
|
||||
assertThat(intents).hasSize(1);
|
||||
assertThat(intents.get(0).getAction()).isEqualTo(
|
||||
BootBroadcastReceiver.ACTION_PERIODIC_JOB_RECHECK);
|
||||
assertThat(intents.get(0).getAction())
|
||||
.isEqualTo(BootBroadcastReceiver.ACTION_PERIODIC_JOB_RECHECK);
|
||||
}
|
||||
|
||||
private void clearSharedPreferences() {
|
||||
|
@@ -61,14 +61,10 @@ public final class ConvertUtilsTest {
|
||||
|
||||
private Context mContext;
|
||||
|
||||
@Mock
|
||||
private PackageManager mMockPackageManager;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock
|
||||
private BatteryEntry mMockBatteryEntry;
|
||||
@Mock
|
||||
private IUsageStatsManager mUsageStatsManager;
|
||||
@Mock private PackageManager mMockPackageManager;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock private BatteryEntry mMockBatteryEntry;
|
||||
@Mock private IUsageStatsManager mUsageStatsManager;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -150,8 +146,8 @@ public final class ConvertUtilsTest {
|
||||
when(mMockBatteryEntry.getUid()).thenReturn(-1);
|
||||
when(mMockBatteryEntry.getLabel()).thenReturn("CPU");
|
||||
when(mMockBatteryEntry.getDefaultPackageName()).thenReturn(null);
|
||||
when(mMockBatteryEntry.getPowerComponentId()).thenReturn(
|
||||
BatteryConsumer.POWER_COMPONENT_CPU);
|
||||
when(mMockBatteryEntry.getPowerComponentId())
|
||||
.thenReturn(BatteryConsumer.POWER_COMPONENT_CPU);
|
||||
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
|
||||
when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
|
||||
when(mMockBatteryEntry.getConsumedPowerInForeground()).thenReturn(1.2);
|
||||
@@ -200,8 +196,8 @@ public final class ConvertUtilsTest {
|
||||
assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3);
|
||||
assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L);
|
||||
assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L);
|
||||
assertThat(batteryInformation.getDrainType()).isEqualTo(
|
||||
BatteryConsumer.POWER_COMPONENT_CPU);
|
||||
assertThat(batteryInformation.getDrainType())
|
||||
.isEqualTo(BatteryConsumer.POWER_COMPONENT_CPU);
|
||||
assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12);
|
||||
assertThat(deviceBatteryState.getBatteryStatus())
|
||||
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||
@@ -234,8 +230,7 @@ public final class ConvertUtilsTest {
|
||||
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||
assertThat(deviceBatteryState.getBatteryHealth())
|
||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
||||
assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP))
|
||||
.isEqualTo(10001L);
|
||||
assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP)).isEqualTo(10001L);
|
||||
assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME))
|
||||
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
||||
}
|
||||
@@ -273,11 +268,10 @@ public final class ConvertUtilsTest {
|
||||
.setType(BatteryEventType.POWER_CONNECTED)
|
||||
.setBatteryLevel(66)
|
||||
.build();
|
||||
final ContentValues values =
|
||||
ConvertUtils.convertBatteryEventToContentValues(batteryEvent);
|
||||
final ContentValues values = ConvertUtils.convertBatteryEventToContentValues(batteryEvent);
|
||||
assertThat(values.getAsLong(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L);
|
||||
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)).isEqualTo(
|
||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))
|
||||
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66);
|
||||
}
|
||||
|
||||
@@ -302,8 +296,7 @@ public final class ConvertUtilsTest {
|
||||
final int expectedType = 3;
|
||||
when(mMockBatteryEntry.getUid()).thenReturn(1001);
|
||||
when(mMockBatteryEntry.getLabel()).thenReturn("Settings");
|
||||
when(mMockBatteryEntry.getDefaultPackageName())
|
||||
.thenReturn("com.android.settings.battery");
|
||||
when(mMockBatteryEntry.getDefaultPackageName()).thenReturn("com.android.settings.battery");
|
||||
when(mMockBatteryEntry.isHidden()).thenReturn(true);
|
||||
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
|
||||
when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
|
||||
@@ -319,23 +312,16 @@ public final class ConvertUtilsTest {
|
||||
.thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||
|
||||
final BatteryHistEntry batteryHistEntry =
|
||||
ConvertUtils.convertToBatteryHistEntry(
|
||||
mMockBatteryEntry,
|
||||
mBatteryUsageStats);
|
||||
ConvertUtils.convertToBatteryHistEntry(mMockBatteryEntry, mBatteryUsageStats);
|
||||
|
||||
assertThat(batteryHistEntry.mUid).isEqualTo(1001L);
|
||||
assertThat(batteryHistEntry.mUserId)
|
||||
.isEqualTo(UserHandle.getUserId(1001));
|
||||
assertThat(batteryHistEntry.mAppLabel)
|
||||
.isEqualTo("Settings");
|
||||
assertThat(batteryHistEntry.mPackageName)
|
||||
.isEqualTo("com.android.settings.battery");
|
||||
assertThat(batteryHistEntry.mUserId).isEqualTo(UserHandle.getUserId(1001));
|
||||
assertThat(batteryHistEntry.mAppLabel).isEqualTo("Settings");
|
||||
assertThat(batteryHistEntry.mPackageName).isEqualTo("com.android.settings.battery");
|
||||
assertThat(batteryHistEntry.mIsHidden).isTrue();
|
||||
assertThat(batteryHistEntry.mBootTimestamp)
|
||||
.isEqualTo(0L);
|
||||
assertThat(batteryHistEntry.mBootTimestamp).isEqualTo(0L);
|
||||
assertThat(batteryHistEntry.mTimestamp).isEqualTo(0L);
|
||||
assertThat(batteryHistEntry.mZoneId)
|
||||
.isEqualTo(TimeZone.getDefault().getID());
|
||||
assertThat(batteryHistEntry.mZoneId).isEqualTo(TimeZone.getDefault().getID());
|
||||
assertThat(batteryHistEntry.mTotalPower).isEqualTo(5.1);
|
||||
assertThat(batteryHistEntry.mConsumePower).isEqualTo(1.1);
|
||||
assertThat(batteryHistEntry.mForegroundUsageConsumePower).isEqualTo(1.2);
|
||||
@@ -343,10 +329,8 @@ public final class ConvertUtilsTest {
|
||||
assertThat(batteryHistEntry.mBackgroundUsageConsumePower).isEqualTo(1.4);
|
||||
assertThat(batteryHistEntry.mCachedUsageConsumePower).isEqualTo(1.5);
|
||||
assertThat(batteryHistEntry.mPercentOfTotal).isEqualTo(0.3);
|
||||
assertThat(batteryHistEntry.mForegroundUsageTimeInMs)
|
||||
.isEqualTo(1234L);
|
||||
assertThat(batteryHistEntry.mBackgroundUsageTimeInMs)
|
||||
.isEqualTo(5689L);
|
||||
assertThat(batteryHistEntry.mForegroundUsageTimeInMs).isEqualTo(1234L);
|
||||
assertThat(batteryHistEntry.mBackgroundUsageTimeInMs).isEqualTo(5689L);
|
||||
assertThat(batteryHistEntry.mDrainType).isEqualTo(expectedType);
|
||||
assertThat(batteryHistEntry.mConsumerType)
|
||||
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||
@@ -359,20 +343,15 @@ public final class ConvertUtilsTest {
|
||||
public void convertToBatteryHistEntry_nullBatteryEntry_returnsExpectedResult() {
|
||||
final BatteryHistEntry batteryHistEntry =
|
||||
ConvertUtils.convertToBatteryHistEntry(
|
||||
/*entry=*/ null,
|
||||
/*batteryUsageStats=*/ null);
|
||||
/* entry= */ null, /* batteryUsageStats= */ null);
|
||||
|
||||
assertThat(batteryHistEntry.mBootTimestamp)
|
||||
.isEqualTo(0L);
|
||||
assertThat(batteryHistEntry.mTimestamp)
|
||||
.isEqualTo(0);
|
||||
assertThat(batteryHistEntry.mZoneId)
|
||||
.isEqualTo(TimeZone.getDefault().getID());
|
||||
assertThat(batteryHistEntry.mBootTimestamp).isEqualTo(0L);
|
||||
assertThat(batteryHistEntry.mTimestamp).isEqualTo(0);
|
||||
assertThat(batteryHistEntry.mZoneId).isEqualTo(TimeZone.getDefault().getID());
|
||||
assertThat(batteryHistEntry.mBatteryLevel).isEqualTo(0);
|
||||
assertThat(batteryHistEntry.mBatteryStatus).isEqualTo(0);
|
||||
assertThat(batteryHistEntry.mBatteryHealth).isEqualTo(0);
|
||||
assertThat(batteryHistEntry.mPackageName)
|
||||
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
||||
assertThat(batteryHistEntry.mPackageName).isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -387,8 +366,8 @@ public final class ConvertUtilsTest {
|
||||
when(mMockPackageManager.getPackageUidAsUser(any(), anyInt())).thenReturn(1001);
|
||||
|
||||
final long userId = 2;
|
||||
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(
|
||||
mContext, mUsageStatsManager, event, userId);
|
||||
final AppUsageEvent appUsageEvent =
|
||||
ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId);
|
||||
assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
|
||||
assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED);
|
||||
assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
|
||||
@@ -449,7 +428,8 @@ public final class ConvertUtilsTest {
|
||||
|
||||
@Test
|
||||
public void convertToAppUsageEvent_returnExpectedResult() {
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
AppUsageEventEntity.KEY_UID,
|
||||
AppUsageEventEntity.KEY_USER_ID,
|
||||
@@ -457,7 +437,8 @@ public final class ConvertUtilsTest {
|
||||
AppUsageEventEntity.KEY_TIMESTAMP,
|
||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE,
|
||||
AppUsageEventEntity.KEY_TASK_ROOT_PACKAGE_NAME,
|
||||
AppUsageEventEntity.KEY_INSTANCE_ID});
|
||||
AppUsageEventEntity.KEY_INSTANCE_ID
|
||||
});
|
||||
cursor.addRow(
|
||||
new Object[] {
|
||||
101L,
|
||||
@@ -466,7 +447,8 @@ public final class ConvertUtilsTest {
|
||||
10001L,
|
||||
AppUsageEventType.DEVICE_SHUTDOWN.getNumber(),
|
||||
"com.android.settings2",
|
||||
100001L});
|
||||
100001L
|
||||
});
|
||||
cursor.moveToFirst();
|
||||
|
||||
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor);
|
||||
@@ -482,20 +464,23 @@ public final class ConvertUtilsTest {
|
||||
|
||||
@Test
|
||||
public void convertToAppUsageEvent_emptyInstanceIdAndRootName_returnExpectedResult() {
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
AppUsageEventEntity.KEY_UID,
|
||||
AppUsageEventEntity.KEY_USER_ID,
|
||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||
AppUsageEventEntity.KEY_TIMESTAMP,
|
||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE});
|
||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE
|
||||
});
|
||||
cursor.addRow(
|
||||
new Object[] {
|
||||
101L,
|
||||
1001L,
|
||||
"com.android.settings1",
|
||||
10001L,
|
||||
AppUsageEventType.DEVICE_SHUTDOWN.getNumber()});
|
||||
AppUsageEventType.DEVICE_SHUTDOWN.getNumber()
|
||||
});
|
||||
cursor.moveToFirst();
|
||||
|
||||
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor);
|
||||
@@ -511,8 +496,8 @@ public final class ConvertUtilsTest {
|
||||
|
||||
@Test
|
||||
public void convertToBatteryEvent_normalCase_returnsExpectedResult() {
|
||||
final BatteryEvent batteryEvent = ConvertUtils.convertToBatteryEvent(
|
||||
666L, BatteryEventType.POWER_DISCONNECTED, 88);
|
||||
final BatteryEvent batteryEvent =
|
||||
ConvertUtils.convertToBatteryEvent(666L, BatteryEventType.POWER_DISCONNECTED, 88);
|
||||
assertThat(batteryEvent.getTimestamp()).isEqualTo(666L);
|
||||
assertThat(batteryEvent.getType()).isEqualTo(BatteryEventType.POWER_DISCONNECTED);
|
||||
assertThat(batteryEvent.getBatteryLevel()).isEqualTo(88);
|
||||
@@ -520,8 +505,9 @@ public final class ConvertUtilsTest {
|
||||
|
||||
@Test
|
||||
public void convertToBatteryEventList_normalCase_returnsExpectedResult() {
|
||||
final BatteryLevelData batteryLevelData = new BatteryLevelData(Map.of(
|
||||
1691589600000L, 98, 1691596800000L, 90, 1691596812345L, 80));
|
||||
final BatteryLevelData batteryLevelData =
|
||||
new BatteryLevelData(
|
||||
Map.of(1691589600000L, 98, 1691596800000L, 90, 1691596812345L, 80));
|
||||
|
||||
final List<BatteryEvent> batteryEventList =
|
||||
ConvertUtils.convertToBatteryEventList(batteryLevelData);
|
||||
@@ -537,14 +523,20 @@ public final class ConvertUtilsTest {
|
||||
|
||||
@Test
|
||||
public void convertToBatteryUsageSlotList_normalCase_returnsExpectedResult() {
|
||||
BatteryDiffData batteryDiffData1 = new BatteryDiffData(
|
||||
mContext, 11L, 12L, 13, 14, 15, List.of(), List.of(), Set.of(), Set.of(), false);
|
||||
BatteryDiffData batteryDiffData2 = new BatteryDiffData(
|
||||
mContext, 21L, 22L, 23, 24, 25, List.of(), List.of(), Set.of(), Set.of(), 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);
|
||||
BatteryDiffData batteryDiffData1 =
|
||||
new BatteryDiffData(
|
||||
mContext, 11L, 12L, 13, 14, 15, List.of(), List.of(), Set.of(), Set.of(),
|
||||
false);
|
||||
BatteryDiffData batteryDiffData2 =
|
||||
new BatteryDiffData(
|
||||
mContext, 21L, 22L, 23, 24, 25, List.of(), List.of(), Set.of(), Set.of(),
|
||||
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 =
|
||||
ConvertUtils.convertToBatteryUsageSlotList(batteryDiffDataMap);
|
||||
@@ -556,8 +548,7 @@ public final class ConvertUtilsTest {
|
||||
|
||||
@Test
|
||||
public void getLocale_nullContext_returnDefaultLocale() {
|
||||
assertThat(ConvertUtils.getLocale(/*context=*/ null))
|
||||
.isEqualTo(Locale.getDefault());
|
||||
assertThat(ConvertUtils.getLocale(/* context= */ null)).isEqualTo(Locale.getDefault());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -578,7 +569,8 @@ public final class ConvertUtilsTest {
|
||||
final String packageName = "com.android.settings1";
|
||||
final String taskRootPackageName = "com.android.settings2";
|
||||
|
||||
assertThat(ConvertUtils.getEffectivePackageName(
|
||||
assertThat(
|
||||
ConvertUtils.getEffectivePackageName(
|
||||
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||
.isEqualTo(packageName);
|
||||
}
|
||||
@@ -588,7 +580,8 @@ public final class ConvertUtilsTest {
|
||||
final String packageName = "com.android.settings1";
|
||||
final String taskRootPackageName = "com.android.settings2";
|
||||
|
||||
assertThat(ConvertUtils.getEffectivePackageName(
|
||||
assertThat(
|
||||
ConvertUtils.getEffectivePackageName(
|
||||
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||
.isEqualTo(packageName);
|
||||
}
|
||||
@@ -599,7 +592,8 @@ public final class ConvertUtilsTest {
|
||||
final String packageName = "com.android.settings1";
|
||||
final String taskRootPackageName = "com.android.settings2";
|
||||
|
||||
assertThat(ConvertUtils.getEffectivePackageName(
|
||||
assertThat(
|
||||
ConvertUtils.getEffectivePackageName(
|
||||
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||
.isEqualTo(taskRootPackageName);
|
||||
}
|
||||
@@ -609,11 +603,19 @@ public final class ConvertUtilsTest {
|
||||
ConvertUtils.sUsageSource = USAGE_SOURCE_TASK_ROOT_ACTIVITY;
|
||||
final String packageName = "com.android.settings1";
|
||||
|
||||
assertThat(ConvertUtils.getEffectivePackageName(
|
||||
mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ null))
|
||||
assertThat(
|
||||
ConvertUtils.getEffectivePackageName(
|
||||
mContext,
|
||||
mUsageStatsManager,
|
||||
packageName,
|
||||
/* taskRootPackageName= */ null))
|
||||
.isEqualTo(packageName);
|
||||
assertThat(ConvertUtils.getEffectivePackageName(
|
||||
mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ ""))
|
||||
assertThat(
|
||||
ConvertUtils.getEffectivePackageName(
|
||||
mContext,
|
||||
mUsageStatsManager,
|
||||
packageName,
|
||||
/* taskRootPackageName= */ ""))
|
||||
.isEqualTo(packageName);
|
||||
}
|
||||
}
|
||||
|
@@ -70,18 +70,12 @@ public final class DataProcessManagerTest {
|
||||
private Context mContext;
|
||||
private DataProcessManager mDataProcessManager;
|
||||
|
||||
@Mock
|
||||
private IUsageStatsManager mUsageStatsManager;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
@Mock
|
||||
private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock
|
||||
private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock
|
||||
private Intent mIntent;
|
||||
@Captor
|
||||
private ArgumentCaptor<BatteryUsageStatsQuery> mBatteryUsageStatsQueryCaptor;
|
||||
@Mock private IUsageStatsManager mUsageStatsManager;
|
||||
@Mock private UserManager mUserManager;
|
||||
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||
@Mock private Intent mIntent;
|
||||
@Captor private ArgumentCaptor<BatteryUsageStatsQuery> mBatteryUsageStatsQueryCaptor;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -91,20 +85,24 @@ public final class DataProcessManagerTest {
|
||||
DataProcessor.sTestSystemAppsPackageNames = Set.of();
|
||||
DataProcessor.sUsageStatsManager = mUsageStatsManager;
|
||||
doReturn(mContext).when(mContext).getApplicationContext();
|
||||
doReturn(mUserManager)
|
||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||
doReturn(mBatteryStatsManager)
|
||||
.when(mContext)
|
||||
.getSystemService(UserManager.class);
|
||||
doReturn(mBatteryStatsManager).when(mContext).getSystemService(
|
||||
Context.BATTERY_STATS_SERVICE);
|
||||
doReturn(mBatteryUsageStats).when(
|
||||
mBatteryStatsManager).getBatteryUsageStats(mBatteryUsageStatsQueryCaptor.capture());
|
||||
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
||||
doReturn(mBatteryUsageStats)
|
||||
.when(mBatteryStatsManager)
|
||||
.getBatteryUsageStats(mBatteryUsageStatsQueryCaptor.capture());
|
||||
doReturn(mIntent).when(mContext).registerReceiver(any(), any());
|
||||
doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt());
|
||||
doReturn(66).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_LEVEL), anyInt());
|
||||
|
||||
mDataProcessManager = new DataProcessManager(
|
||||
mContext, /*handler=*/ null, /*rawStartTimestamp=*/ 0L,
|
||||
/*lastFullChargeTimestamp=*/ 0L, /*callbackFunction=*/ null,
|
||||
mDataProcessManager =
|
||||
new DataProcessManager(
|
||||
mContext,
|
||||
/* handler= */ null,
|
||||
/* rawStartTimestamp= */ 0L,
|
||||
/* lastFullChargeTimestamp= */ 0L,
|
||||
/* callbackFunction= */ null,
|
||||
/* hourlyBatteryLevelsPerDay= */ new ArrayList<>(),
|
||||
/* batteryHistoryMap= */ new HashMap<>());
|
||||
}
|
||||
@@ -126,11 +124,13 @@ public final class DataProcessManagerTest {
|
||||
@Test
|
||||
@LooperMode(LooperMode.Mode.LEGACY)
|
||||
public void start_loadEmptyDatabaseAppUsageData() {
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
AppUsageEventEntity.KEY_UID,
|
||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||
AppUsageEventEntity.KEY_TIMESTAMP});
|
||||
AppUsageEventEntity.KEY_TIMESTAMP
|
||||
});
|
||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||
doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
|
||||
|
||||
@@ -182,7 +182,8 @@ public final class DataProcessManagerTest {
|
||||
doReturn(new ArrayList<>()).when(mUserManager).getUserProfiles();
|
||||
|
||||
// Fake database usage data.
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE,
|
||||
AppUsageEventEntity.KEY_TIMESTAMP,
|
||||
@@ -191,20 +192,42 @@ public final class DataProcessManagerTest {
|
||||
AppUsageEventEntity.KEY_PACKAGE_NAME
|
||||
});
|
||||
// Adds fake data into the cursor.
|
||||
cursor.addRow(new Object[] {
|
||||
AppUsageEventType.ACTIVITY_RESUMED.getNumber(), /*timestamp=*/ 3, /*userId=*/ 1,
|
||||
/*instanceId=*/ 2, packageName});
|
||||
cursor.addRow(new Object[] {
|
||||
AppUsageEventType.ACTIVITY_STOPPED.getNumber(), /*timestamp=*/ 4, /*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<>() {
|
||||
cursor.addRow(
|
||||
new Object[] {
|
||||
AppUsageEventType.ACTIVITY_RESUMED.getNumber(),
|
||||
/* timestamp= */ 3,
|
||||
/* userId= */ 1,
|
||||
/* instanceId= */ 2,
|
||||
packageName
|
||||
});
|
||||
cursor.addRow(
|
||||
new Object[] {
|
||||
AppUsageEventType.ACTIVITY_STOPPED.getNumber(),
|
||||
/* timestamp= */ 4,
|
||||
/* 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;
|
||||
|
||||
@Override
|
||||
public Cursor get() {
|
||||
mTimes++;
|
||||
@@ -212,10 +235,15 @@ public final class DataProcessManagerTest {
|
||||
}
|
||||
};
|
||||
|
||||
final DataProcessManager dataProcessManager = new DataProcessManager(
|
||||
mContext, /*handler=*/ null, /*rawStartTimestamp=*/ 2L,
|
||||
/*lastFullChargeTimestamp=*/ 1L, /*callbackFunction=*/ null,
|
||||
hourlyBatteryLevelsPerDay, /*batteryHistoryMap=*/ new HashMap<>());
|
||||
final DataProcessManager dataProcessManager =
|
||||
new DataProcessManager(
|
||||
mContext,
|
||||
/* handler= */ null,
|
||||
/* rawStartTimestamp= */ 2L,
|
||||
/* lastFullChargeTimestamp= */ 1L,
|
||||
/* callbackFunction= */ null,
|
||||
hourlyBatteryLevelsPerDay,
|
||||
/* batteryHistoryMap= */ new HashMap<>());
|
||||
dataProcessManager.start();
|
||||
|
||||
assertThat(dataProcessManager.getIsCurrentAppUsageLoaded()).isTrue();
|
||||
@@ -274,11 +302,13 @@ public final class DataProcessManagerTest {
|
||||
.when(mUsageStatsManager)
|
||||
.queryEventsForUser(anyLong(), anyLong(), anyInt(), any());
|
||||
doReturn(false).when(mUserManager).isUserUnlocked(anyInt());
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
AppUsageEventEntity.KEY_UID,
|
||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||
AppUsageEventEntity.KEY_TIMESTAMP});
|
||||
AppUsageEventEntity.KEY_TIMESTAMP
|
||||
});
|
||||
// Adds fake data into the cursor.
|
||||
cursor.addRow(new Object[] {101L, "app name1", 1001L});
|
||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||
@@ -293,16 +323,20 @@ public final class DataProcessManagerTest {
|
||||
@Test
|
||||
@LooperMode(LooperMode.Mode.LEGACY)
|
||||
public void getBatteryLevelData_emptyHistoryMap_returnNull() {
|
||||
assertThat(DataProcessManager.getBatteryLevelData(
|
||||
assertThat(
|
||||
DataProcessManager.getBatteryLevelData(
|
||||
mContext,
|
||||
/* handler= */ null,
|
||||
/* isFromPeriodJob= */ false,
|
||||
/*asyncResponseDelegate=*/ null)).isNull();
|
||||
assertThat(DataProcessManager.getBatteryLevelData(
|
||||
/* asyncResponseDelegate= */ null))
|
||||
.isNull();
|
||||
assertThat(
|
||||
DataProcessManager.getBatteryLevelData(
|
||||
mContext,
|
||||
/* handler= */ null,
|
||||
/* isFromPeriodJob= */ true,
|
||||
/*asyncResponseDelegate=*/ null)).isNull();
|
||||
/* asyncResponseDelegate= */ null))
|
||||
.isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -311,7 +345,8 @@ public final class DataProcessManagerTest {
|
||||
final long[] timestamps = {
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 300L,
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 200L,
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 100L};
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 100L
|
||||
};
|
||||
final int[] levels = {100, 99, 98};
|
||||
DataProcessManager.sFakeBatteryHistoryMap = createHistoryMap(timestamps, levels);
|
||||
DataProcessor.sTestCurrentTimeMillis = timestamps[timestamps.length - 1];
|
||||
@@ -323,9 +358,8 @@ public final class DataProcessManagerTest {
|
||||
/* isFromPeriodJob= */ false,
|
||||
/* asyncResponseDelegate= */ null);
|
||||
|
||||
final List<Long> expectedDailyTimestamps = List.of(
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 300L,
|
||||
DateUtils.HOUR_IN_MILLIS * 2 - 100L);
|
||||
final List<Long> expectedDailyTimestamps =
|
||||
List.of(DateUtils.HOUR_IN_MILLIS * 2 - 300L, DateUtils.HOUR_IN_MILLIS * 2 - 100L);
|
||||
final List<Integer> expectedDailyLevels = List.of(100, 66);
|
||||
final List<List<Long>> expectedHourlyTimestamps = List.of(expectedDailyTimestamps);
|
||||
final List<List<Integer>> expectedHourlyLevels = List.of(expectedDailyLevels);
|
||||
@@ -352,7 +386,8 @@ public final class DataProcessManagerTest {
|
||||
/* isFromPeriodJob= */ false,
|
||||
/* asyncResponseDelegate= */ null);
|
||||
|
||||
final List<Long> expectedDailyTimestamps = List.of(
|
||||
final List<Long> expectedDailyTimestamps =
|
||||
List.of(
|
||||
1640966400000L, // 2022-01-01 00:00:00
|
||||
1640970000000L); // 2022-01-01 01:00:00
|
||||
final List<Integer> expectedDailyLevels = List.of(100, 66);
|
||||
@@ -400,16 +435,11 @@ public final class DataProcessManagerTest {
|
||||
private static ContentValues getContentValuesWithBatteryLevel(final int level) {
|
||||
final ContentValues values = new ContentValues();
|
||||
final DeviceBatteryState deviceBatteryState =
|
||||
DeviceBatteryState
|
||||
.newBuilder()
|
||||
.setBatteryLevel(level)
|
||||
.build();
|
||||
DeviceBatteryState.newBuilder().setBatteryLevel(level).build();
|
||||
final BatteryInformation batteryInformation =
|
||||
BatteryInformation
|
||||
.newBuilder()
|
||||
.setDeviceBatteryState(deviceBatteryState)
|
||||
.build();
|
||||
values.put(BatteryHistEntry.KEY_BATTERY_INFORMATION,
|
||||
BatteryInformation.newBuilder().setDeviceBatteryState(deviceBatteryState).build();
|
||||
values.put(
|
||||
BatteryHistEntry.KEY_BATTERY_INFORMATION,
|
||||
ConvertUtils.convertBatteryInformationToString(batteryInformation));
|
||||
return values;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -117,9 +117,7 @@ public final class DatabaseUtilsTest {
|
||||
.setType(AppUsageEventType.ACTIVITY_STOPPED)
|
||||
.build();
|
||||
final AppUsageEvent appUsageEvent3 =
|
||||
AppUsageEvent.newBuilder()
|
||||
.setType(AppUsageEventType.DEVICE_SHUTDOWN)
|
||||
.build();
|
||||
AppUsageEvent.newBuilder().setType(AppUsageEventType.DEVICE_SHUTDOWN).build();
|
||||
appUsageEventList.add(appUsageEvent1);
|
||||
appUsageEventList.add(appUsageEvent2);
|
||||
appUsageEventList.add(appUsageEvent3);
|
||||
@@ -135,10 +133,9 @@ public final class DatabaseUtilsTest {
|
||||
// Verifies the inserted ContentValues into content provider.
|
||||
final ContentValues[] valuesArray =
|
||||
new ContentValues[] {valuesList.get(0), valuesList.get(1)};
|
||||
verify(mMockContentResolver).bulkInsert(
|
||||
DatabaseUtils.APP_USAGE_EVENT_URI, valuesArray);
|
||||
verify(mMockContentResolver).notifyChange(
|
||||
DatabaseUtils.APP_USAGE_EVENT_URI, /*observer=*/ null);
|
||||
verify(mMockContentResolver).bulkInsert(DatabaseUtils.APP_USAGE_EVENT_URI, valuesArray);
|
||||
verify(mMockContentResolver)
|
||||
.notifyChange(DatabaseUtils.APP_USAGE_EVENT_URI, /* observer= */ null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -161,12 +158,10 @@ public final class DatabaseUtilsTest {
|
||||
final ContentValues contentValues =
|
||||
DatabaseUtils.sendBatteryEventData(mContext, batteryEvent);
|
||||
|
||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_TIMESTAMP))
|
||||
.isEqualTo(10001L);
|
||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L);
|
||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))
|
||||
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL))
|
||||
.isEqualTo(66);
|
||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66);
|
||||
// Verifies the inserted ContentValues into content provider.
|
||||
verify(mMockContentResolver).insert(DatabaseUtils.BATTERY_EVENT_URI, contentValues);
|
||||
}
|
||||
@@ -176,8 +171,11 @@ public final class DatabaseUtilsTest {
|
||||
doReturn(null).when(mContext).registerReceiver(any(), any());
|
||||
assertThat(
|
||||
DatabaseUtils.sendBatteryEntryData(
|
||||
mContext, System.currentTimeMillis(), /*batteryEntryList=*/ null,
|
||||
mBatteryUsageStats, /*isFullChargeStart=*/ false))
|
||||
mContext,
|
||||
System.currentTimeMillis(),
|
||||
/* batteryEntryList= */ null,
|
||||
mBatteryUsageStats,
|
||||
/* isFullChargeStart= */ false))
|
||||
.isNull();
|
||||
}
|
||||
|
||||
@@ -209,10 +207,9 @@ public final class DatabaseUtilsTest {
|
||||
// Verifies the inserted ContentValues into content provider.
|
||||
final ContentValues[] valuesArray =
|
||||
new ContentValues[] {valuesList.get(0), valuesList.get(1)};
|
||||
verify(mMockContentResolver).bulkInsert(
|
||||
DatabaseUtils.BATTERY_CONTENT_URI, valuesArray);
|
||||
verify(mMockContentResolver).notifyChange(
|
||||
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
|
||||
verify(mMockContentResolver).bulkInsert(DatabaseUtils.BATTERY_CONTENT_URI, valuesArray);
|
||||
verify(mMockContentResolver)
|
||||
.notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -231,8 +228,8 @@ public final class DatabaseUtilsTest {
|
||||
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
||||
// Verifies the inserted ContentValues into content provider.
|
||||
verify(mMockContentResolver).insert(any(), any());
|
||||
verify(mMockContentResolver).notifyChange(
|
||||
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
|
||||
verify(mMockContentResolver)
|
||||
.notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -251,8 +248,8 @@ public final class DatabaseUtilsTest {
|
||||
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
||||
// Verifies the inserted ContentValues into content provider.
|
||||
verify(mMockContentResolver).insert(any(), any());
|
||||
verify(mMockContentResolver).notifyChange(
|
||||
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
|
||||
verify(mMockContentResolver)
|
||||
.notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -271,8 +268,8 @@ public final class DatabaseUtilsTest {
|
||||
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
||||
// Verifies the inserted ContentValues into content provider.
|
||||
verify(mMockContentResolver).insert(any(), any());
|
||||
verify(mMockContentResolver).notifyChange(
|
||||
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
|
||||
verify(mMockContentResolver)
|
||||
.notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -282,16 +279,20 @@ public final class DatabaseUtilsTest {
|
||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||
|
||||
final long earliestTimestamp = 10001L;
|
||||
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||
mContext, /*userId=*/ 0, earliestTimestamp)).isEqualTo(earliestTimestamp);
|
||||
assertThat(
|
||||
DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||
mContext, /* userId= */ 0, earliestTimestamp))
|
||||
.isEqualTo(earliestTimestamp);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAppUsageStartTimestampOfUser_nullCursor_returnEarliestTimestamp() {
|
||||
DatabaseUtils.sFakeSupplier = () -> null;
|
||||
final long earliestTimestamp = 10001L;
|
||||
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||
mContext, /*userId=*/ 0, earliestTimestamp)).isEqualTo(earliestTimestamp);
|
||||
assertThat(
|
||||
DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||
mContext, /* userId= */ 0, earliestTimestamp))
|
||||
.isEqualTo(earliestTimestamp);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -304,50 +305,62 @@ public final class DatabaseUtilsTest {
|
||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||
|
||||
final long earliestTimestamp1 = 1001L;
|
||||
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||
mContext, /*userId=*/ 0, earliestTimestamp1)).isEqualTo(returnedTimestamp + 1);
|
||||
assertThat(
|
||||
DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||
mContext, /* userId= */ 0, earliestTimestamp1))
|
||||
.isEqualTo(returnedTimestamp + 1);
|
||||
final long earliestTimestamp2 = 100001L;
|
||||
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||
mContext, /*userId=*/ 0, earliestTimestamp2)).isEqualTo(earliestTimestamp2);
|
||||
assertThat(
|
||||
DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||
mContext, /* userId= */ 0, earliestTimestamp2))
|
||||
.isEqualTo(earliestTimestamp2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAppUsageEventForUsers_emptyCursorContent_returnEmptyMap() {
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
AppUsageEventEntity.KEY_UID,
|
||||
AppUsageEventEntity.KEY_USER_ID,
|
||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||
AppUsageEventEntity.KEY_TIMESTAMP,
|
||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE});
|
||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE
|
||||
});
|
||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||
|
||||
assertThat(DatabaseUtils.getAppUsageEventForUsers(
|
||||
assertThat(
|
||||
DatabaseUtils.getAppUsageEventForUsers(
|
||||
mContext,
|
||||
/* calendar= */ null,
|
||||
/* userIds= */ new ArrayList<>(),
|
||||
/*startTimestampOfLevelData=*/ 0)).isEmpty();
|
||||
/* startTimestampOfLevelData= */ 0))
|
||||
.isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAppUsageEventForUsers_nullCursor_returnEmptyMap() {
|
||||
DatabaseUtils.sFakeSupplier = () -> null;
|
||||
assertThat(DatabaseUtils.getAppUsageEventForUsers(
|
||||
assertThat(
|
||||
DatabaseUtils.getAppUsageEventForUsers(
|
||||
mContext,
|
||||
/* calendar= */ null,
|
||||
/* userIds= */ new ArrayList<>(),
|
||||
/*startTimestampOfLevelData=*/ 0)).isEmpty();
|
||||
/* startTimestampOfLevelData= */ 0))
|
||||
.isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getAppUsageEventForUsers_returnExpectedMap() {
|
||||
final Long timestamp1 = 1001L;
|
||||
final Long timestamp2 = 1002L;
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
AppUsageEventEntity.KEY_UID,
|
||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||
AppUsageEventEntity.KEY_TIMESTAMP});
|
||||
AppUsageEventEntity.KEY_TIMESTAMP
|
||||
});
|
||||
// Adds fake data into the cursor.
|
||||
cursor.addRow(new Object[] {101L, "app name1", timestamp1});
|
||||
cursor.addRow(new Object[] {101L, "app name2", timestamp2});
|
||||
@@ -355,7 +368,8 @@ public final class DatabaseUtilsTest {
|
||||
cursor.addRow(new Object[] {101L, "app name4", timestamp2});
|
||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||
|
||||
final List<AppUsageEvent> appUsageEventList = DatabaseUtils.getAppUsageEventForUsers(
|
||||
final List<AppUsageEvent> appUsageEventList =
|
||||
DatabaseUtils.getAppUsageEventForUsers(
|
||||
mContext,
|
||||
/* calendar= */ null,
|
||||
/* userIds= */ new ArrayList<>(),
|
||||
@@ -369,11 +383,13 @@ public final class DatabaseUtilsTest {
|
||||
|
||||
@Test
|
||||
public void getHistoryMap_emptyCursorContent_returnEmptyMap() {
|
||||
final MatrixCursor cursor = new MatrixCursor(
|
||||
final MatrixCursor cursor =
|
||||
new MatrixCursor(
|
||||
new String[] {
|
||||
BatteryHistEntry.KEY_UID,
|
||||
BatteryHistEntry.KEY_USER_ID,
|
||||
BatteryHistEntry.KEY_TIMESTAMP});
|
||||
BatteryHistEntry.KEY_TIMESTAMP
|
||||
});
|
||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||
|
||||
assertThat(DatabaseUtils.getHistoryMapSinceQueryTimestamp(mContext, 0)).isEmpty();
|
||||
@@ -391,14 +407,22 @@ public final class DatabaseUtilsTest {
|
||||
final Long timestamp2 = Long.valueOf(1002L);
|
||||
final MatrixCursor cursor = getMatrixCursor();
|
||||
// Adds fake data into the cursor.
|
||||
cursor.addRow(new Object[] {
|
||||
"app name1", timestamp1, 1, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, true});
|
||||
cursor.addRow(new Object[] {
|
||||
"app name2", timestamp2, 2, 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});
|
||||
cursor.addRow(
|
||||
new Object[] {
|
||||
"app name1", timestamp1, 1, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, true
|
||||
});
|
||||
cursor.addRow(
|
||||
new Object[] {
|
||||
"app name2", timestamp2, 2, 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;
|
||||
|
||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap =
|
||||
@@ -421,8 +445,9 @@ public final class DatabaseUtilsTest {
|
||||
public void getHistoryMap_withWorkProfile_returnExpectedMap()
|
||||
throws PackageManager.NameNotFoundException {
|
||||
doReturn("com.fake.package").when(mContext).getPackageName();
|
||||
doReturn(mMockContext).when(mContext).createPackageContextAsUser(
|
||||
"com.fake.package", /*flags=*/ 0, UserHandle.OWNER);
|
||||
doReturn(mMockContext)
|
||||
.when(mContext)
|
||||
.createPackageContextAsUser("com.fake.package", /* flags= */ 0, UserHandle.OWNER);
|
||||
doReturn(UserHandle.CURRENT).when(mContext).getUser();
|
||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||
doReturn(true).when(mUserManager).isManagedProfile();
|
||||
@@ -440,8 +465,7 @@ public final class DatabaseUtilsTest {
|
||||
public void removeUsageSource_hasNoData() {
|
||||
DatabaseUtils.removeUsageSource(mContext);
|
||||
assertThat(
|
||||
DatabaseUtils
|
||||
.getSharedPreferences(mContext)
|
||||
DatabaseUtils.getSharedPreferences(mContext)
|
||||
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
||||
.isFalse();
|
||||
}
|
||||
@@ -457,8 +481,7 @@ public final class DatabaseUtilsTest {
|
||||
DatabaseUtils.removeUsageSource(mContext);
|
||||
|
||||
assertThat(
|
||||
DatabaseUtils
|
||||
.getSharedPreferences(mContext)
|
||||
DatabaseUtils.getSharedPreferences(mContext)
|
||||
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
||||
.isFalse();
|
||||
}
|
||||
@@ -482,9 +505,10 @@ public final class DatabaseUtilsTest {
|
||||
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
||||
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
||||
assertThat(
|
||||
DatabaseUtils
|
||||
.getSharedPreferences(mContext)
|
||||
.getInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_CURRENT_ACTIVITY))
|
||||
DatabaseUtils.getSharedPreferences(mContext)
|
||||
.getInt(
|
||||
DatabaseUtils.KEY_LAST_USAGE_SOURCE,
|
||||
USAGE_SOURCE_CURRENT_ACTIVITY))
|
||||
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
||||
}
|
||||
|
||||
@@ -495,9 +519,10 @@ public final class DatabaseUtilsTest {
|
||||
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
||||
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
|
||||
assertThat(
|
||||
DatabaseUtils
|
||||
.getSharedPreferences(mContext)
|
||||
.getInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_CURRENT_ACTIVITY))
|
||||
DatabaseUtils.getSharedPreferences(mContext)
|
||||
.getInt(
|
||||
DatabaseUtils.KEY_LAST_USAGE_SOURCE,
|
||||
USAGE_SOURCE_CURRENT_ACTIVITY))
|
||||
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
|
||||
}
|
||||
|
||||
@@ -506,20 +531,16 @@ public final class DatabaseUtilsTest {
|
||||
final String preferenceKey = "test_preference_key";
|
||||
DatabaseUtils.recordDateTime(mContext, preferenceKey);
|
||||
|
||||
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey))
|
||||
.isTrue();
|
||||
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey)).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void dump_dumpExpectedData() {
|
||||
DatabaseUtils.recordDateTime(mContext,
|
||||
Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||
DatabaseUtils.recordDateTime(mContext,
|
||||
BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||
DatabaseUtils.recordDateTime(mContext,
|
||||
DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME);
|
||||
DatabaseUtils.recordDateTime(mContext,
|
||||
DatabaseUtils.KEY_LAST_UPLOAD_FULL_CHARGE_TIME);
|
||||
DatabaseUtils.recordDateTime(mContext, Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||
DatabaseUtils.recordDateTime(
|
||||
mContext, BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||
DatabaseUtils.recordDateTime(mContext, DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME);
|
||||
DatabaseUtils.recordDateTime(mContext, DatabaseUtils.KEY_LAST_UPLOAD_FULL_CHARGE_TIME);
|
||||
final StringWriter stringWriter = new StringWriter();
|
||||
final PrintWriter printWriter = new PrintWriter(stringWriter);
|
||||
|
||||
@@ -570,8 +591,7 @@ public final class DatabaseUtilsTest {
|
||||
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||
assertThat(deviceBatteryState.getBatteryHealth())
|
||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
||||
assertThat(values.getAsString("packageName"))
|
||||
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
||||
assertThat(values.getAsString("packageName")).isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
||||
}
|
||||
|
||||
private static Intent getBatteryIntent() {
|
||||
@@ -590,6 +610,7 @@ public final class DatabaseUtilsTest {
|
||||
BatteryHistEntry.KEY_TIMESTAMP,
|
||||
BatteryHistEntry.KEY_UID,
|
||||
BatteryHistEntry.KEY_CONSUMER_TYPE,
|
||||
BatteryHistEntry.KEY_IS_FULL_CHARGE_CYCLE_START});
|
||||
BatteryHistEntry.KEY_IS_FULL_CHARGE_CYCLE_START
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -71,12 +71,13 @@ public final class PeriodicJobManagerTest {
|
||||
public void getTriggerAtMillis_withoutOffset_returnsExpectedResult() {
|
||||
long timeSlotUnit = PeriodicJobManager.DATA_FETCH_INTERVAL_MINUTE;
|
||||
// Sets the current time.
|
||||
Duration currentTimeDuration =
|
||||
Duration.ofMinutes(timeSlotUnit * 2);
|
||||
Duration currentTimeDuration = Duration.ofMinutes(timeSlotUnit * 2);
|
||||
FakeClock fakeClock = new FakeClock();
|
||||
fakeClock.setCurrentTime(currentTimeDuration);
|
||||
|
||||
assertThat(PeriodicJobManager.getTriggerAtMillis(mContext, fakeClock, /*fromBoot=*/ false))
|
||||
assertThat(
|
||||
PeriodicJobManager.getTriggerAtMillis(
|
||||
mContext, fakeClock, /* fromBoot= */ false))
|
||||
.isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis());
|
||||
}
|
||||
|
||||
@@ -86,8 +87,7 @@ public final class PeriodicJobManagerTest {
|
||||
// Sets the current time.
|
||||
Duration currentTimeDuration = Duration.ofMinutes(timeSlotUnit * 2);
|
||||
FakeClock fakeClock = new FakeClock();
|
||||
fakeClock.setCurrentTime(
|
||||
currentTimeDuration.plusMinutes(1L).plusMillis(51L));
|
||||
fakeClock.setCurrentTime(currentTimeDuration.plusMinutes(1L).plusMillis(51L));
|
||||
|
||||
assertThat(PeriodicJobManager.getTriggerAtMillis(mContext, fakeClock, /* fromBoot= */ true))
|
||||
.isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis());
|
||||
|
@@ -129,5 +129,4 @@ public final class PeriodicJobReceiverTest {
|
||||
// Ensures the testing environment is correct.
|
||||
assertThat(mDao.getAllAfter(0)).hasSize(3);
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -53,8 +53,12 @@ public class PowerGaugePreferenceTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContext = RuntimeEnvironment.application;
|
||||
mRootView = LayoutInflater.from(mContext)
|
||||
.inflate(com.android.settingslib.widget.preference.app.R.layout.preference_app, null);
|
||||
mRootView =
|
||||
LayoutInflater.from(mContext)
|
||||
.inflate(
|
||||
com.android.settingslib.widget.preference.app.R.layout
|
||||
.preference_app,
|
||||
null);
|
||||
mWidgetView =
|
||||
LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null);
|
||||
final LinearLayout widgetFrame = mRootView.findViewById(android.R.id.widget_frame);
|
||||
|
@@ -55,14 +55,10 @@ public final class PowerUsageAdvancedTest {
|
||||
private Predicate<PowerAnomalyEvent> mCardFilterPredicate;
|
||||
private Predicate<PowerAnomalyEvent> mSlotFilterPredicate;
|
||||
|
||||
@Mock
|
||||
private BatteryTipsController mBatteryTipsController;
|
||||
@Mock
|
||||
private BatteryChartPreferenceController mBatteryChartPreferenceController;
|
||||
@Mock
|
||||
private ScreenOnTimeController mScreenOnTimeController;
|
||||
@Mock
|
||||
private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
|
||||
@Mock private BatteryTipsController mBatteryTipsController;
|
||||
@Mock private BatteryChartPreferenceController mBatteryChartPreferenceController;
|
||||
@Mock private ScreenOnTimeController mScreenOnTimeController;
|
||||
@Mock private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -75,7 +71,10 @@ public final class PowerUsageAdvancedTest {
|
||||
mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController;
|
||||
mPowerUsageAdvanced.mScreenOnTimeController = mScreenOnTimeController;
|
||||
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
|
||||
1694361600000L, 2, // 2023-09-11 00:00:00
|
||||
1694368800000L, 3))); // 2023-09-11 02:00:00
|
||||
@@ -86,15 +85,17 @@ public final class PowerUsageAdvancedTest {
|
||||
@Test
|
||||
public void getFilterAnomalyEvent_withEmptyOrNullList_getNull() {
|
||||
prepareCardFilterPredicate(null);
|
||||
assertThat(PowerUsageAdvanced
|
||||
.getAnomalyEvent(null, mCardFilterPredicate)).isNull();
|
||||
assertThat(PowerUsageAdvanced
|
||||
.getAnomalyEvent(null, mSlotFilterPredicate)).isNull();
|
||||
assertThat(PowerUsageAdvanced.getAnomalyEvent(
|
||||
BatteryTestUtils.createEmptyPowerAnomalyEventList(), mCardFilterPredicate))
|
||||
assertThat(PowerUsageAdvanced.getAnomalyEvent(null, mCardFilterPredicate)).isNull();
|
||||
assertThat(PowerUsageAdvanced.getAnomalyEvent(null, mSlotFilterPredicate)).isNull();
|
||||
assertThat(
|
||||
PowerUsageAdvanced.getAnomalyEvent(
|
||||
BatteryTestUtils.createEmptyPowerAnomalyEventList(),
|
||||
mCardFilterPredicate))
|
||||
.isNull();
|
||||
assertThat(PowerUsageAdvanced.getAnomalyEvent(
|
||||
BatteryTestUtils.createEmptyPowerAnomalyEventList(), mSlotFilterPredicate))
|
||||
assertThat(
|
||||
PowerUsageAdvanced.getAnomalyEvent(
|
||||
BatteryTestUtils.createEmptyPowerAnomalyEventList(),
|
||||
mSlotFilterPredicate))
|
||||
.isNull();
|
||||
}
|
||||
|
||||
@@ -104,12 +105,10 @@ public final class PowerUsageAdvancedTest {
|
||||
BatteryTestUtils.createNonEmptyPowerAnomalyEventList();
|
||||
|
||||
final PowerAnomalyEvent slotEvent =
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
||||
mSlotFilterPredicate);
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
|
||||
prepareCardFilterPredicate(slotEvent);
|
||||
final PowerAnomalyEvent cardEvent =
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
||||
mCardFilterPredicate);
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
|
||||
|
||||
assertThat(cardEvent).isEqualTo(BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
|
||||
assertThat(slotEvent).isNull();
|
||||
@@ -123,12 +122,10 @@ public final class PowerUsageAdvancedTest {
|
||||
DatabaseUtils.setDismissedPowerAnomalyKeys(mContext, PowerAnomalyKey.KEY_BRIGHTNESS.name());
|
||||
|
||||
final PowerAnomalyEvent slotEvent =
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
||||
mSlotFilterPredicate);
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
|
||||
prepareCardFilterPredicate(slotEvent);
|
||||
final PowerAnomalyEvent cardEvent =
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
||||
mCardFilterPredicate);
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
|
||||
|
||||
assertThat(cardEvent).isEqualTo(BatteryTestUtils.createScreenTimeoutAnomalyEvent());
|
||||
assertThat(slotEvent).isNull();
|
||||
@@ -144,12 +141,10 @@ public final class PowerUsageAdvancedTest {
|
||||
}
|
||||
|
||||
final PowerAnomalyEvent slotEvent =
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
||||
mSlotFilterPredicate);
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
|
||||
prepareCardFilterPredicate(slotEvent);
|
||||
final PowerAnomalyEvent cardEvent =
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
||||
mCardFilterPredicate);
|
||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
|
||||
|
||||
assertThat(cardEvent).isNull();
|
||||
assertThat(slotEvent).isNull();
|
||||
@@ -165,7 +160,8 @@ public final class PowerUsageAdvancedTest {
|
||||
.isEqualTo(event.getEventId());
|
||||
verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyConfirmListener(isNull());
|
||||
verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyRejectListener(isNull());
|
||||
verify(mPowerUsageAdvanced.mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(
|
||||
verify(mPowerUsageAdvanced.mBatteryChartPreferenceController)
|
||||
.onHighlightSlotIndexUpdate(
|
||||
eq(BatteryChartViewModel.SELECTED_INDEX_INVALID),
|
||||
eq(BatteryChartViewModel.SELECTED_INDEX_INVALID));
|
||||
}
|
||||
@@ -180,10 +176,14 @@ public final class PowerUsageAdvancedTest {
|
||||
.isEqualTo(event.getEventId());
|
||||
verify(mBatteryTipsController).setOnAnomalyConfirmListener(isNull());
|
||||
verify(mBatteryTipsController).setOnAnomalyRejectListener(isNull());
|
||||
assertThat(mPowerUsageAdvanced.mBatteryLevelData.get().getIndexByTimestamps(
|
||||
assertThat(
|
||||
mPowerUsageAdvanced
|
||||
.mBatteryLevelData
|
||||
.get()
|
||||
.getIndexByTimestamps(
|
||||
event.getWarningItemInfo().getStartTimestamp(),
|
||||
event.getWarningItemInfo().getEndTimestamp()
|
||||
)).isEqualTo(Pair.create(1, 0));
|
||||
event.getWarningItemInfo().getEndTimestamp()))
|
||||
.isEqualTo(Pair.create(1, 0));
|
||||
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
|
||||
verify(mBatteryTipsController).setOnAnomalyConfirmListener(notNull());
|
||||
}
|
||||
@@ -192,8 +192,7 @@ public final class PowerUsageAdvancedTest {
|
||||
public void onDisplayAnomalyEventUpdated_withSettingsCardAndAppsSlotEvent_showExpected() {
|
||||
final PowerAnomalyEvent settingsEvent =
|
||||
BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent();
|
||||
final PowerAnomalyEvent appsEvent =
|
||||
BatteryTestUtils.createAppAnomalyEvent();
|
||||
final PowerAnomalyEvent appsEvent = BatteryTestUtils.createAppAnomalyEvent();
|
||||
|
||||
mPowerUsageAdvanced.onDisplayAnomalyEventUpdated(settingsEvent, appsEvent);
|
||||
|
||||
@@ -207,8 +206,9 @@ public final class PowerUsageAdvancedTest {
|
||||
private void prepareCardFilterPredicate(PowerAnomalyEvent slotEvent) {
|
||||
final Set<String> dismissedPowerAnomalyKeys =
|
||||
DatabaseUtils.getDismissedPowerAnomalyKeys(mContext);
|
||||
mCardFilterPredicate = event -> !dismissedPowerAnomalyKeys.contains(
|
||||
event.getDismissRecordKey())
|
||||
mCardFilterPredicate =
|
||||
event ->
|
||||
!dismissedPowerAnomalyKeys.contains(event.getDismissRecordKey())
|
||||
&& (event.equals(slotEvent) || !event.hasWarningItemInfo());
|
||||
}
|
||||
}
|
@@ -52,10 +52,8 @@ import java.util.List;
|
||||
@Config(shadows = ShadowDashboardFragment.class)
|
||||
public class PowerUsageBaseTest {
|
||||
|
||||
@Mock
|
||||
private LoaderManager mLoaderManager;
|
||||
@Mock
|
||||
private Loader<BatteryUsageStats> mBatteryUsageStatsLoader;
|
||||
@Mock private LoaderManager mLoaderManager;
|
||||
@Mock private Loader<BatteryUsageStats> mBatteryUsageStatsLoader;
|
||||
private TestFragment mFragment;
|
||||
|
||||
@Before
|
||||
@@ -77,16 +75,19 @@ public class PowerUsageBaseTest {
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
||||
doReturn(mBatteryUsageStatsLoader).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||
doReturn(mBatteryUsageStatsLoader)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||
doReturn(false).when(mBatteryUsageStatsLoader).isReset();
|
||||
|
||||
mFragment.restartBatteryStatsLoader(
|
||||
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||
|
||||
verify(mLoaderManager)
|
||||
.restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||
refEq(bundle), any());
|
||||
.restartLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||
refEq(bundle),
|
||||
any());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -94,16 +95,19 @@ public class PowerUsageBaseTest {
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
||||
doReturn(mBatteryUsageStatsLoader).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||
doReturn(mBatteryUsageStatsLoader)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||
doReturn(true).when(mBatteryUsageStatsLoader).isReset();
|
||||
|
||||
mFragment.restartBatteryStatsLoader(
|
||||
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||
|
||||
verify(mLoaderManager)
|
||||
.initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||
refEq(bundle), any());
|
||||
.initLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||
refEq(bundle),
|
||||
any());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -111,14 +115,18 @@ public class PowerUsageBaseTest {
|
||||
final Bundle bundle = new Bundle();
|
||||
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
||||
doReturn(null).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||
doReturn(null)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||
|
||||
mFragment.restartBatteryStatsLoader(
|
||||
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||
|
||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||
refEq(bundle), any());
|
||||
verify(mLoaderManager)
|
||||
.initLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||
refEq(bundle),
|
||||
any());
|
||||
}
|
||||
|
||||
private static class TestFragment extends PowerUsageBase {
|
||||
|
@@ -70,7 +70,8 @@ import java.util.List;
|
||||
|
||||
// TODO: Improve this test class so that it starts up the real activity and fragment.
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = {
|
||||
@Config(
|
||||
shadows = {
|
||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||
})
|
||||
public class PowerUsageSummaryTest {
|
||||
@@ -81,26 +82,16 @@ public class PowerUsageSummaryTest {
|
||||
sAdditionalBatteryInfoIntent = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
|
||||
}
|
||||
|
||||
@Mock
|
||||
private SettingsActivity mSettingsActivity;
|
||||
@Mock
|
||||
private LoaderManager mLoaderManager;
|
||||
@Mock
|
||||
private Loader<BatteryTip> mBatteryTipLoader;
|
||||
@Mock
|
||||
private Loader<BatteryInfo> mBatteryInfoLoader;
|
||||
@Mock
|
||||
private ContentResolver mContentResolver;
|
||||
@Mock
|
||||
private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
|
||||
@Mock
|
||||
private VisibilityLoggerMixin mVisibilityLoggerMixin;
|
||||
@Mock
|
||||
private PreferenceScreen mPreferenceScreen;
|
||||
@Mock
|
||||
private Preference mBatteryUsagePreference;
|
||||
@Mock
|
||||
private Preference mHelpPreference;
|
||||
@Mock private SettingsActivity mSettingsActivity;
|
||||
@Mock private LoaderManager mLoaderManager;
|
||||
@Mock private Loader<BatteryTip> mBatteryTipLoader;
|
||||
@Mock private Loader<BatteryInfo> mBatteryInfoLoader;
|
||||
@Mock private ContentResolver mContentResolver;
|
||||
@Mock private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
|
||||
@Mock private VisibilityLoggerMixin mVisibilityLoggerMixin;
|
||||
@Mock private PreferenceScreen mPreferenceScreen;
|
||||
@Mock private Preference mBatteryUsagePreference;
|
||||
@Mock private Preference mHelpPreference;
|
||||
|
||||
private Context mRealContext;
|
||||
private TestFragment mFragment;
|
||||
@@ -120,8 +111,8 @@ public class PowerUsageSummaryTest {
|
||||
.thenReturn(sAdditionalBatteryInfoIntent);
|
||||
mFragment.mBatteryUtils = Mockito.spy(new BatteryUtils(mRealContext));
|
||||
ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin);
|
||||
ReflectionHelpers.setField(mFragment, "mBatteryBroadcastReceiver",
|
||||
mBatteryBroadcastReceiver);
|
||||
ReflectionHelpers.setField(
|
||||
mFragment, "mBatteryBroadcastReceiver", mBatteryBroadcastReceiver);
|
||||
doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
|
||||
when(mFragment.getContentResolver()).thenReturn(mContentResolver);
|
||||
when(mFragment.findPreference(KEY_BATTERY_USAGE)).thenReturn(mBatteryUsagePreference);
|
||||
@@ -158,41 +149,45 @@ public class PowerUsageSummaryTest {
|
||||
@Test
|
||||
public void restartBatteryTipLoader() {
|
||||
// TODO: add policy logic here when BatteryTipPolicy is implemented
|
||||
doReturn(mBatteryTipLoader).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||
doReturn(mBatteryTipLoader)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||
doReturn(false).when(mBatteryTipLoader).isReset();
|
||||
|
||||
mFragment.restartBatteryTipLoader();
|
||||
|
||||
verify(mLoaderManager).restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER),
|
||||
eq(Bundle.EMPTY), any());
|
||||
verify(mLoaderManager)
|
||||
.restartLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartBatteryTipLoader_nullLoader_initLoader() {
|
||||
doReturn(null).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||
doReturn(null)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||
|
||||
mFragment.restartBatteryTipLoader();
|
||||
|
||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER),
|
||||
eq(Bundle.EMPTY), any());
|
||||
verify(mLoaderManager)
|
||||
.initLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartBatteryTipLoader_loaderReset_initLoader() {
|
||||
doReturn(mBatteryTipLoader).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||
doReturn(mBatteryTipLoader)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||
doReturn(true).when(mBatteryTipLoader).isReset();
|
||||
|
||||
mFragment.restartBatteryTipLoader();
|
||||
|
||||
|
||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER),
|
||||
eq(Bundle.EMPTY), any());
|
||||
verify(mLoaderManager)
|
||||
.initLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void refreshUi_contextNull_doNothing() {
|
||||
doReturn(null).when(mFragment).getContext();
|
||||
@@ -256,8 +251,10 @@ public class PowerUsageSummaryTest {
|
||||
public void onResume_registerContentObserver() {
|
||||
mFragment.onResume();
|
||||
|
||||
verify(mContentResolver).registerContentObserver(
|
||||
Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
|
||||
verify(mContentResolver)
|
||||
.registerContentObserver(
|
||||
Settings.Global.getUriFor(
|
||||
Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
|
||||
false,
|
||||
mFragment.mSettingsObserver);
|
||||
}
|
||||
@@ -266,8 +263,7 @@ public class PowerUsageSummaryTest {
|
||||
public void onPause_unregisterContentObserver() {
|
||||
mFragment.onPause();
|
||||
|
||||
verify(mContentResolver).unregisterContentObserver(
|
||||
mFragment.mSettingsObserver);
|
||||
verify(mContentResolver).unregisterContentObserver(mFragment.mSettingsObserver);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -276,8 +272,10 @@ public class PowerUsageSummaryTest {
|
||||
|
||||
mFragment.restartBatteryInfoLoader();
|
||||
|
||||
verify(mLoaderManager, never()).restartLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER, Bundle.EMPTY,
|
||||
verify(mLoaderManager, never())
|
||||
.restartLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER,
|
||||
Bundle.EMPTY,
|
||||
mFragment.mBatteryInfoLoaderCallbacks);
|
||||
}
|
||||
|
||||
@@ -287,45 +285,59 @@ public class PowerUsageSummaryTest {
|
||||
|
||||
mFragment.restartBatteryInfoLoader();
|
||||
|
||||
verify(mLoaderManager, never()).restartLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER, Bundle.EMPTY,
|
||||
verify(mLoaderManager, never())
|
||||
.restartLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER,
|
||||
Bundle.EMPTY,
|
||||
mFragment.mBatteryInfoLoaderCallbacks);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartBatteryInfoLoader() {
|
||||
doReturn(mBatteryInfoLoader).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||
doReturn(mBatteryInfoLoader)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||
doReturn(false).when(mBatteryTipLoader).isReset();
|
||||
|
||||
mFragment.restartBatteryInfoLoader();
|
||||
|
||||
verify(mLoaderManager).restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||
eq(Bundle.EMPTY), any());
|
||||
verify(mLoaderManager)
|
||||
.restartLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||
eq(Bundle.EMPTY),
|
||||
any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartBatteryInfoLoader_nullLoader_initLoader() {
|
||||
doReturn(null).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||
doReturn(null)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||
|
||||
mFragment.restartBatteryInfoLoader();
|
||||
|
||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||
eq(Bundle.EMPTY), any());
|
||||
verify(mLoaderManager)
|
||||
.initLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||
eq(Bundle.EMPTY),
|
||||
any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void restartBatteryInfoLoader_loaderReset_initLoader() {
|
||||
mFragment.setIsBatteryPresent(true);
|
||||
doReturn(mBatteryInfoLoader).when(mLoaderManager).getLoader(
|
||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||
doReturn(mBatteryInfoLoader)
|
||||
.when(mLoaderManager)
|
||||
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||
doReturn(true).when(mBatteryInfoLoader).isReset();
|
||||
|
||||
mFragment.restartBatteryInfoLoader();
|
||||
|
||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||
eq(Bundle.EMPTY), any());
|
||||
verify(mLoaderManager)
|
||||
.initLoader(
|
||||
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||
eq(Bundle.EMPTY),
|
||||
any());
|
||||
}
|
||||
|
||||
private static class TestFragment extends PowerUsageSummary {
|
||||
@@ -357,5 +369,4 @@ public class PowerUsageSummaryTest {
|
||||
return mLoaderManager;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -46,10 +46,8 @@ public final class ScreenOnTimeControllerTest {
|
||||
private Context mContext;
|
||||
private ScreenOnTimeController mScreenOnTimeController;
|
||||
|
||||
@Mock
|
||||
private PreferenceCategory mRootPreference;
|
||||
@Mock
|
||||
private TextViewPreference mScreenOnTimeTextPreference;
|
||||
@Mock private PreferenceCategory mRootPreference;
|
||||
@Mock private TextViewPreference mScreenOnTimeTextPreference;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
|
@@ -42,8 +42,7 @@ public final class SpinnerPreferenceTest {
|
||||
private Context mContext;
|
||||
private SpinnerPreference mSpinnerPreference;
|
||||
|
||||
@Mock
|
||||
private Spinner mMockSpinner;
|
||||
@Mock private Spinner mMockSpinner;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
|
@@ -46,8 +46,8 @@ public final class TextViewPreferenceTest {
|
||||
|
||||
@Test
|
||||
public void constructor_returnExpectedResult() {
|
||||
assertThat(mTextViewPreference.getLayoutResource()).isEqualTo(
|
||||
R.layout.preference_text_view);
|
||||
assertThat(mTextViewPreference.getLayoutResource())
|
||||
.isEqualTo(R.layout.preference_text_view);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -36,11 +36,9 @@ public class TimestampUtilsTest {
|
||||
@Test
|
||||
public void getNextHourTimestamp_returnExpectedResult() {
|
||||
// 2021-02-28 06:00:00 => 2021-02-28 07:00:00
|
||||
assertThat(TimestampUtils.getNextHourTimestamp(1614463200000L))
|
||||
.isEqualTo(1614466800000L);
|
||||
assertThat(TimestampUtils.getNextHourTimestamp(1614463200000L)).isEqualTo(1614466800000L);
|
||||
// 2021-12-31 23:59:59 => 2022-01-01 00:00:00
|
||||
assertThat(TimestampUtils.getNextHourTimestamp(16409663999999L))
|
||||
.isEqualTo(16409664000000L);
|
||||
assertThat(TimestampUtils.getNextHourTimestamp(16409663999999L)).isEqualTo(16409664000000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -66,11 +64,9 @@ public class TimestampUtilsTest {
|
||||
@Test
|
||||
public void getTimestampOfNextDay_returnExpectedResult() {
|
||||
// 2021-02-28 06:00:00 => 2021-03-01 00:00:00
|
||||
assertThat(TimestampUtils.getNextDayTimestamp(1614463200000L))
|
||||
.isEqualTo(1614528000000L);
|
||||
assertThat(TimestampUtils.getNextDayTimestamp(1614463200000L)).isEqualTo(1614528000000L);
|
||||
// 2021-12-31 16:00:00 => 2022-01-01 00:00:00
|
||||
assertThat(TimestampUtils.getNextDayTimestamp(1640937600000L))
|
||||
.isEqualTo(1640966400000L);
|
||||
assertThat(TimestampUtils.getNextDayTimestamp(1640937600000L)).isEqualTo(1640966400000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@@ -35,8 +35,8 @@ public final class AppUsageEventEntityTest {
|
||||
final int instanceId = 100001;
|
||||
final String taskRootPackageName = "com.android.settings2";
|
||||
|
||||
AppUsageEventEntity entity = AppUsageEventEntity
|
||||
.newBuilder()
|
||||
AppUsageEventEntity entity =
|
||||
AppUsageEventEntity.newBuilder()
|
||||
.setUid(uid)
|
||||
.setUserId(userId)
|
||||
.setTimestamp(timestamp)
|
||||
|
@@ -60,15 +60,16 @@ public final class BatteryEventDaoTest {
|
||||
BatteryStateDatabase.setBatteryStateDatabase(/* database= */ null);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getLastFullChargeTimestamp_normalFlow_expectedBehavior() throws Exception {
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(TIMESTAMP1)
|
||||
.setBatteryEventType(3)
|
||||
.setBatteryLevel(100)
|
||||
.build());
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(TIMESTAMP2)
|
||||
.setBatteryEventType(4)
|
||||
.setBatteryLevel(96)
|
||||
@@ -83,7 +84,8 @@ public final class BatteryEventDaoTest {
|
||||
@Test
|
||||
public void getLastFullChargeTimestamp_noLastFullChargeTime_returns0() throws Exception {
|
||||
mBatteryEventDao.clearAll();
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(TIMESTAMP2)
|
||||
.setBatteryEventType(4)
|
||||
.setBatteryLevel(96)
|
||||
@@ -98,12 +100,14 @@ public final class BatteryEventDaoTest {
|
||||
|
||||
@Test
|
||||
public void getAllAfter_normalFlow_returnExpectedResult() {
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(100L)
|
||||
.setBatteryEventType(1)
|
||||
.setBatteryLevel(66)
|
||||
.build());
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(200L)
|
||||
.setBatteryEventType(2)
|
||||
.setBatteryLevel(88)
|
||||
@@ -112,12 +116,9 @@ public final class BatteryEventDaoTest {
|
||||
final Cursor cursor = mBatteryEventDao.getAllAfter(160L, List.of(1, 2));
|
||||
assertThat(cursor.getCount()).isEqualTo(1);
|
||||
cursor.moveToFirst();
|
||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP)))
|
||||
.isEqualTo(200L);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE)))
|
||||
.isEqualTo(2);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
|
||||
.isEqualTo(88);
|
||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(200L);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(2);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(88);
|
||||
|
||||
mBatteryEventDao.clearAll();
|
||||
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
||||
@@ -125,12 +126,14 @@ public final class BatteryEventDaoTest {
|
||||
|
||||
@Test
|
||||
public void getAllAfter_filterBatteryTypes_returnExpectedResult() {
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(100L)
|
||||
.setBatteryEventType(1)
|
||||
.setBatteryLevel(66)
|
||||
.build());
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(200L)
|
||||
.setBatteryEventType(2)
|
||||
.setBatteryLevel(88)
|
||||
@@ -139,12 +142,9 @@ public final class BatteryEventDaoTest {
|
||||
final Cursor cursor = mBatteryEventDao.getAllAfter(0L, List.of(1));
|
||||
assertThat(cursor.getCount()).isEqualTo(1);
|
||||
cursor.moveToFirst();
|
||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP)))
|
||||
.isEqualTo(100L);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE)))
|
||||
.isEqualTo(1);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
|
||||
.isEqualTo(66);
|
||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(100L);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(1);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(66);
|
||||
|
||||
mBatteryEventDao.clearAll();
|
||||
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
||||
@@ -152,12 +152,14 @@ public final class BatteryEventDaoTest {
|
||||
|
||||
@Test
|
||||
public void getAllAfter_filterTimestamp_returnExpectedResult() {
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(100L)
|
||||
.setBatteryEventType(1)
|
||||
.setBatteryLevel(66)
|
||||
.build());
|
||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
||||
mBatteryEventDao.insert(
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(200L)
|
||||
.setBatteryEventType(1)
|
||||
.setBatteryLevel(88)
|
||||
@@ -166,12 +168,9 @@ public final class BatteryEventDaoTest {
|
||||
final Cursor cursor = mBatteryEventDao.getAllAfter(200L, List.of(1));
|
||||
assertThat(cursor.getCount()).isEqualTo(1);
|
||||
cursor.moveToFirst();
|
||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP)))
|
||||
.isEqualTo(200L);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE)))
|
||||
.isEqualTo(1);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
|
||||
.isEqualTo(88);
|
||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(200L);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(1);
|
||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(88);
|
||||
|
||||
mBatteryEventDao.clearAll();
|
||||
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
||||
|
@@ -32,8 +32,8 @@ public final class BatteryEventEntityTest {
|
||||
final int batteryEventType = 1;
|
||||
final int batteryLevel = 66;
|
||||
|
||||
BatteryEventEntity entity = BatteryEventEntity
|
||||
.newBuilder()
|
||||
BatteryEventEntity entity =
|
||||
BatteryEventEntity.newBuilder()
|
||||
.setTimestamp(timestamp)
|
||||
.setBatteryEventType(batteryEventType)
|
||||
.setBatteryLevel(batteryLevel)
|
||||
|
@@ -57,7 +57,10 @@ public final class BatteryStateDaoTest {
|
||||
BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP3, PACKAGE_NAME3);
|
||||
BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP2, PACKAGE_NAME2);
|
||||
BatteryTestUtils.insertDataToBatteryStateTable(
|
||||
mContext, TIMESTAMP1, PACKAGE_NAME1, /*multiple=*/ true,
|
||||
mContext,
|
||||
TIMESTAMP1,
|
||||
PACKAGE_NAME1,
|
||||
/* multiple= */ true,
|
||||
/* isFullChargeStart= */ true);
|
||||
}
|
||||
|
||||
@@ -142,23 +145,19 @@ public final class BatteryStateDaoTest {
|
||||
|
||||
@Test
|
||||
public void getDistinctTimestampCount_normalFlow_returnsExpectedResult() {
|
||||
assertThat(mBatteryStateDao.getDistinctTimestampCount(/*timestamp=*/ 0))
|
||||
.isEqualTo(3);
|
||||
assertThat(mBatteryStateDao.getDistinctTimestampCount(TIMESTAMP1))
|
||||
.isEqualTo(2);
|
||||
assertThat(mBatteryStateDao.getDistinctTimestampCount(/* timestamp= */ 0)).isEqualTo(3);
|
||||
assertThat(mBatteryStateDao.getDistinctTimestampCount(TIMESTAMP1)).isEqualTo(2);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getDistinctTimestamps_normalFlow_returnsExpectedResult() {
|
||||
final List<Long> timestamps =
|
||||
mBatteryStateDao.getDistinctTimestamps(/*timestamp=*/ 0);
|
||||
final List<Long> timestamps = mBatteryStateDao.getDistinctTimestamps(/* timestamp= */ 0);
|
||||
|
||||
assertThat(timestamps).hasSize(3);
|
||||
assertThat(timestamps).containsExactly(TIMESTAMP1, TIMESTAMP2, TIMESTAMP3);
|
||||
}
|
||||
|
||||
private static void assertBatteryState(
|
||||
BatteryState state, long timestamp, String packageName) {
|
||||
private static void assertBatteryState(BatteryState state, long timestamp, String packageName) {
|
||||
assertThat(state.timestamp).isEqualTo(timestamp);
|
||||
assertThat(state.packageName).isEqualTo(packageName);
|
||||
}
|
||||
|
@@ -41,15 +41,13 @@ public final class BatteryStateTest {
|
||||
@Before
|
||||
public void setUp() {
|
||||
final DeviceBatteryState deviceBatteryState =
|
||||
DeviceBatteryState
|
||||
.newBuilder()
|
||||
DeviceBatteryState.newBuilder()
|
||||
.setBatteryLevel(BATTERY_LEVEL)
|
||||
.setBatteryStatus(BATTERY_STATUS)
|
||||
.setBatteryHealth(BATTERY_HEALTH)
|
||||
.build();
|
||||
mBatteryInformation =
|
||||
BatteryInformation
|
||||
.newBuilder()
|
||||
BatteryInformation.newBuilder()
|
||||
.setDeviceBatteryState(deviceBatteryState)
|
||||
.setBootTimestamp(101L)
|
||||
.setIsHidden(true)
|
||||
@@ -78,8 +76,8 @@ public final class BatteryStateTest {
|
||||
assertThat(state.timestamp).isEqualTo(100001L);
|
||||
assertThat(state.consumerType).isEqualTo(2);
|
||||
assertThat(state.isFullChargeCycleStart).isTrue();
|
||||
assertThat(state.batteryInformation).isEqualTo(
|
||||
ConvertUtils.convertBatteryInformationToString(mBatteryInformation));
|
||||
assertThat(state.batteryInformation)
|
||||
.isEqualTo(ConvertUtils.convertBatteryInformationToString(mBatteryInformation));
|
||||
}
|
||||
|
||||
private static BatteryState create(BatteryInformation batteryInformation) {
|
||||
|
@@ -31,8 +31,8 @@ public final class BatteryUsageSlotEntityTest {
|
||||
final long timestamp = 10001L;
|
||||
final String batteryUsageSlotString = "batteryUsageSlotString";
|
||||
|
||||
BatteryUsageSlotEntity entity = BatteryUsageSlotEntity
|
||||
.newBuilder()
|
||||
BatteryUsageSlotEntity entity =
|
||||
BatteryUsageSlotEntity.newBuilder()
|
||||
.setTimestamp(timestamp)
|
||||
.setBatteryUsageSlot(batteryUsageSlotString)
|
||||
.build();
|
||||
|
Reference in New Issue
Block a user