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;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {
|
@Config(
|
||||||
|
shadows = {
|
||||||
ShadowEntityHeaderController.class,
|
ShadowEntityHeaderController.class,
|
||||||
ShadowActivityManager.class,
|
ShadowActivityManager.class,
|
||||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||||
@@ -99,30 +100,19 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private FragmentActivity mActivity;
|
private FragmentActivity mActivity;
|
||||||
@Mock
|
|
||||||
private EntityHeaderController mEntityHeaderController;
|
@Mock private EntityHeaderController mEntityHeaderController;
|
||||||
@Mock
|
@Mock private LayoutPreference mHeaderPreference;
|
||||||
private LayoutPreference mHeaderPreference;
|
@Mock private ApplicationsState mState;
|
||||||
@Mock
|
@Mock private ApplicationsState.AppEntry mAppEntry;
|
||||||
private ApplicationsState mState;
|
@Mock private Bundle mBundle;
|
||||||
@Mock
|
@Mock private BatteryEntry mBatteryEntry;
|
||||||
private ApplicationsState.AppEntry mAppEntry;
|
@Mock private PackageManager mPackageManager;
|
||||||
@Mock
|
@Mock private InstallSourceInfo mInstallSourceInfo;
|
||||||
private Bundle mBundle;
|
@Mock private AppOpsManager mAppOpsManager;
|
||||||
@Mock
|
@Mock private LoaderManager mLoaderManager;
|
||||||
private BatteryEntry mBatteryEntry;
|
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||||
@Mock
|
@Mock private BackupManager mBackupManager;
|
||||||
private PackageManager mPackageManager;
|
|
||||||
@Mock
|
|
||||||
private InstallSourceInfo mInstallSourceInfo;
|
|
||||||
@Mock
|
|
||||||
private AppOpsManager mAppOpsManager;
|
|
||||||
@Mock
|
|
||||||
private LoaderManager mLoaderManager;
|
|
||||||
@Mock
|
|
||||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
|
||||||
@Mock
|
|
||||||
private BackupManager mBackupManager;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private PrimarySwitchPreference mAllowBackgroundUsagePreference;
|
private PrimarySwitchPreference mAllowBackgroundUsagePreference;
|
||||||
@@ -149,19 +139,26 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
doReturn(mLoaderManager).when(mFragment).getLoaderManager();
|
doReturn(mLoaderManager).when(mFragment).getLoaderManager();
|
||||||
|
|
||||||
ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
|
ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setButtonActions(anyInt(), anyInt());
|
.setButtonActions(anyInt(), anyInt());
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setIcon(nullable(Drawable.class));
|
.setIcon(nullable(Drawable.class));
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable(
|
doReturn(mEntityHeaderController)
|
||||||
ApplicationsState.AppEntry.class));
|
.when(mEntityHeaderController)
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
.setIcon(nullable(ApplicationsState.AppEntry.class));
|
||||||
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setLabel(nullable(String.class));
|
.setLabel(nullable(String.class));
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setLabel(nullable(String.class));
|
.setLabel(nullable(String.class));
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setLabel(nullable(ApplicationsState.AppEntry.class));
|
.setLabel(nullable(ApplicationsState.AppEntry.class));
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setSummary(nullable(String.class));
|
.setSummary(nullable(String.class));
|
||||||
|
|
||||||
when(mBatteryEntry.getUid()).thenReturn(UID);
|
when(mBatteryEntry.getUid()).thenReturn(UID);
|
||||||
@@ -184,13 +181,15 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
|
|
||||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||||
|
|
||||||
Answer<Void> callable = invocation -> {
|
Answer<Void> callable =
|
||||||
|
invocation -> {
|
||||||
mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||||
System.out.println("mBundle = " + mBundle);
|
System.out.println("mBundle = " + mBundle);
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
doAnswer(callable).when(mActivity).startActivityAsUser(captor.capture(),
|
doAnswer(callable)
|
||||||
nullable(UserHandle.class));
|
.when(mActivity)
|
||||||
|
.startActivityAsUser(captor.capture(), nullable(UserHandle.class));
|
||||||
doAnswer(callable).when(mActivity).startActivity(captor.capture());
|
doAnswer(callable).when(mActivity).startActivity(captor.capture());
|
||||||
|
|
||||||
mAllowBackgroundUsagePreference = new PrimarySwitchPreference(mContext);
|
mAllowBackgroundUsagePreference = new PrimarySwitchPreference(mContext);
|
||||||
@@ -219,7 +218,9 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initHeader_HasAppEntry_BuildByAppEntry() {
|
public void initHeader_HasAppEntry_BuildByAppEntry() {
|
||||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
ReflectionHelpers.setStaticField(
|
||||||
|
AppUtils.class,
|
||||||
|
"sInstantAppDataProvider",
|
||||||
new InstantAppDataProvider() {
|
new InstantAppDataProvider() {
|
||||||
@Override
|
@Override
|
||||||
public boolean isInstantApp(ApplicationInfo info) {
|
public boolean isInstantApp(ApplicationInfo info) {
|
||||||
@@ -236,7 +237,9 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initHeader_HasAppEntry_InstantApp() {
|
public void initHeader_HasAppEntry_InstantApp() {
|
||||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
ReflectionHelpers.setStaticField(
|
||||||
|
AppUtils.class,
|
||||||
|
"sInstantAppDataProvider",
|
||||||
new InstantAppDataProvider() {
|
new InstantAppDataProvider() {
|
||||||
@Override
|
@Override
|
||||||
public boolean isInstantApp(ApplicationInfo info) {
|
public boolean isInstantApp(ApplicationInfo info) {
|
||||||
@@ -253,16 +256,13 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startBatteryDetailPage_invalidToShowSummary_noFGBDData() {
|
public void startBatteryDetailPage_invalidToShowSummary_noFGBDData() {
|
||||||
AdvancedPowerUsageDetail.startBatteryDetailPage(mActivity, mFragment,
|
AdvancedPowerUsageDetail.startBatteryDetailPage(
|
||||||
mBatteryEntry, USAGE_PERCENT);
|
mActivity, mFragment, mBatteryEntry, USAGE_PERCENT);
|
||||||
|
|
||||||
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
|
assertThat(mBundle.getInt(AdvancedPowerUsageDetail.EXTRA_UID)).isEqualTo(UID);
|
||||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME))
|
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_BACKGROUND_TIME)).isEqualTo(0);
|
||||||
.isEqualTo(0);
|
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME)).isEqualTo(0);
|
||||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_FOREGROUND_TIME))
|
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_SCREEN_ON_TIME)).isEqualTo(0);
|
||||||
.isEqualTo(0);
|
|
||||||
assertThat(mBundle.getLong(AdvancedPowerUsageDetail.EXTRA_SCREEN_ON_TIME))
|
|
||||||
.isEqualTo(0);
|
|
||||||
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
|
assertThat(mBundle.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
|
||||||
.isEqualTo(USAGE_PERCENT);
|
.isEqualTo(USAGE_PERCENT);
|
||||||
}
|
}
|
||||||
@@ -276,18 +276,22 @@ public class AdvancedPowerUsageDetailTest {
|
|||||||
|
|
||||||
verify(mActivity).startActivity(captor.capture());
|
verify(mActivity).startActivity(captor.capture());
|
||||||
|
|
||||||
assertThat(captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
|
assertThat(
|
||||||
|
captor.getValue()
|
||||||
|
.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
|
||||||
.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME))
|
.getString(AdvancedPowerUsageDetail.EXTRA_PACKAGE_NAME))
|
||||||
.isEqualTo(PACKAGE_NAME[0]);
|
.isEqualTo(PACKAGE_NAME[0]);
|
||||||
|
|
||||||
assertThat(captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
|
assertThat(
|
||||||
|
captor.getValue()
|
||||||
|
.getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS)
|
||||||
.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
|
.getString(AdvancedPowerUsageDetail.EXTRA_POWER_USAGE_PERCENT))
|
||||||
.isEqualTo("0%");
|
.isEqualTo("0%");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName() throws
|
public void startBatteryDetailPage_batteryEntryNotExisted_extractUidFromPackageName()
|
||||||
PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
|
doReturn(UID).when(mPackageManager).getPackageUid(PACKAGE_NAME[0], 0 /* no flag */);
|
||||||
|
|
||||||
AdvancedPowerUsageDetail.startBatteryDetailPage(
|
AdvancedPowerUsageDetail.startBatteryDetailPage(
|
||||||
|
|||||||
@@ -88,8 +88,8 @@ public class AllowBackgroundPreferenceControllerTest {
|
|||||||
public void testUpdateState_isSystemOrDefaultAppAndRestrictedStates_prefChecked() {
|
public void testUpdateState_isSystemOrDefaultAppAndRestrictedStates_prefChecked() {
|
||||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_RESTRICTED);
|
.thenReturn(BatteryOptimizeUtils.MODE_RESTRICTED);
|
||||||
|
|
||||||
mController.updateState(mMainSwitchPreference);
|
mController.updateState(mMainSwitchPreference);
|
||||||
|
|
||||||
@@ -101,8 +101,8 @@ public class AllowBackgroundPreferenceControllerTest {
|
|||||||
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
||||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||||
|
|
||||||
mController.updateState(mMainSwitchPreference);
|
mController.updateState(mMainSwitchPreference);
|
||||||
|
|
||||||
@@ -113,8 +113,8 @@ public class AllowBackgroundPreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testUpdateState_isRestrictedStates_prefChecked() {
|
public void testUpdateState_isRestrictedStates_prefChecked() {
|
||||||
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_RESTRICTED);
|
.thenReturn(BatteryOptimizeUtils.MODE_RESTRICTED);
|
||||||
|
|
||||||
mController.updateState(mMainSwitchPreference);
|
mController.updateState(mMainSwitchPreference);
|
||||||
|
|
||||||
@@ -125,8 +125,8 @@ public class AllowBackgroundPreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testUpdateState_prefUnchecked() {
|
public void testUpdateState_prefUnchecked() {
|
||||||
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||||
|
|
||||||
mController.updateState(mMainSwitchPreference);
|
mController.updateState(mMainSwitchPreference);
|
||||||
|
|
||||||
|
|||||||
@@ -91,26 +91,25 @@ public class AutoRestrictionPreferenceControllerTest {
|
|||||||
public void testGetAvailabilityStatus_smartBatterySupported_returnDisabled() {
|
public void testGetAvailabilityStatus_smartBatterySupported_returnDisabled() {
|
||||||
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
||||||
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
assertThat(mController.getAvailabilityStatus())
|
||||||
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
.isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetAvailabilityStatus_smartBatteryUnSupported_returnAvailable() {
|
public void testGetAvailabilityStatus_smartBatteryUnSupported_returnAvailable() {
|
||||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
||||||
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
assertThat(mController.getAvailabilityStatus())
|
||||||
BasePreferenceController.AVAILABLE);
|
.isEqualTo(BasePreferenceController.AVAILABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void putAutoRestrictionValue(int value) {
|
private void putAutoRestrictionValue(int value) {
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.APP_AUTO_RESTRICTION_ENABLED,
|
mContext.getContentResolver(), Settings.Global.APP_AUTO_RESTRICTION_ENABLED, value);
|
||||||
value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getAutoRestrictionValue() {
|
private int getAutoRestrictionValue() {
|
||||||
return Settings.Global.getInt(mContext.getContentResolver(),
|
return Settings.Global.getInt(
|
||||||
Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON);
|
mContext.getContentResolver(), Settings.Global.APP_AUTO_RESTRICTION_ENABLED, ON);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,30 +94,20 @@ public final class BatteryBackupHelperTest {
|
|||||||
private BatteryBackupHelper mBatteryBackupHelper;
|
private BatteryBackupHelper mBatteryBackupHelper;
|
||||||
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
||||||
|
|
||||||
@Mock
|
@Mock private PackageManager mPackageManager;
|
||||||
private PackageManager mPackageManager;
|
@Mock private BackupDataOutput mBackupDataOutput;
|
||||||
@Mock
|
@Mock private BackupDataInputStream mBackupDataInputStream;
|
||||||
private BackupDataOutput mBackupDataOutput;
|
@Mock private IDeviceIdleController mDeviceController;
|
||||||
@Mock
|
@Mock private IPackageManager mIPackageManager;
|
||||||
private BackupDataInputStream mBackupDataInputStream;
|
@Mock private AppOpsManager mAppOpsManager;
|
||||||
@Mock
|
@Mock private UserManager mUserManager;
|
||||||
private IDeviceIdleController mDeviceController;
|
@Mock private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||||
@Mock
|
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||||
private IPackageManager mIPackageManager;
|
|
||||||
@Mock
|
|
||||||
private AppOpsManager mAppOpsManager;
|
|
||||||
@Mock
|
|
||||||
private UserManager mUserManager;
|
|
||||||
@Mock
|
|
||||||
private PowerAllowlistBackend mPowerAllowlistBackend;
|
|
||||||
@Mock
|
|
||||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mPowerUsageFeatureProvider =
|
mPowerUsageFeatureProvider = FakeFeatureFactory.setupForTest().powerUsageFeatureProvider;
|
||||||
FakeFeatureFactory.setupForTest().powerUsageFeatureProvider;
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mStringWriter = new StringWriter();
|
mStringWriter = new StringWriter();
|
||||||
mPrintWriter = new PrintWriter(mStringWriter);
|
mPrintWriter = new PrintWriter(mStringWriter);
|
||||||
@@ -199,8 +189,7 @@ public final class BatteryBackupHelperTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void backupOptimizationMode_backupOptimizationModeAndIgnoreSystemApp()
|
public void backupOptimizationMode_backupOptimizationModeAndIgnoreSystemApp() throws Exception {
|
||||||
throws Exception {
|
|
||||||
final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
|
final List<String> allowlistedApps = Arrays.asList(PACKAGE_NAME1);
|
||||||
createTestingData(PACKAGE_NAME1, UID1, PACKAGE_NAME2, PACKAGE_NAME3);
|
createTestingData(PACKAGE_NAME1, UID1, PACKAGE_NAME2, PACKAGE_NAME3);
|
||||||
// Sets "com.android.testing.1" as system app.
|
// Sets "com.android.testing.1" as system app.
|
||||||
@@ -294,8 +283,7 @@ public final class BatteryBackupHelperTest {
|
|||||||
// Invoke the restoreEntity() method 2nd time.
|
// Invoke the restoreEntity() method 2nd time.
|
||||||
mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
|
mBatteryBackupHelper.restoreEntity(mBackupDataInputStream);
|
||||||
|
|
||||||
assertThat(TestUtils.getScheduledLevel(mContext))
|
assertThat(TestUtils.getScheduledLevel(mContext)).isEqualTo(invalidScheduledLevel);
|
||||||
.isEqualTo(invalidScheduledLevel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -313,9 +301,14 @@ public final class BatteryBackupHelperTest {
|
|||||||
@Test
|
@Test
|
||||||
public void restoreOptimizationMode_invalidModeFormat_skipRestore() throws Exception {
|
public void restoreOptimizationMode_invalidModeFormat_skipRestore() throws Exception {
|
||||||
final String invalidNumberFormat = "google";
|
final String invalidNumberFormat = "google";
|
||||||
final String packageModes =
|
final String package1Mode = PACKAGE_NAME1
|
||||||
PACKAGE_NAME1 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER +
|
+ DELIMITER_MODE
|
||||||
PACKAGE_NAME2 + DELIMITER_MODE + invalidNumberFormat;
|
+ MODE_RESTRICTED
|
||||||
|
+ DELIMITER;
|
||||||
|
final String package2Mode = PACKAGE_NAME2
|
||||||
|
+ DELIMITER_MODE
|
||||||
|
+ invalidNumberFormat;
|
||||||
|
final String packageModes = package1Mode + package2Mode;
|
||||||
|
|
||||||
mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
|
mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
|
||||||
TimeUnit.SECONDS.sleep(1);
|
TimeUnit.SECONDS.sleep(1);
|
||||||
@@ -328,10 +321,19 @@ public final class BatteryBackupHelperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void restoreOptimizationMode_restoreExpectedModes() throws Exception {
|
public void restoreOptimizationMode_restoreExpectedModes() throws Exception {
|
||||||
final String packageModes =
|
final String package1Mode = PACKAGE_NAME1
|
||||||
PACKAGE_NAME1 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER +
|
+ DELIMITER_MODE
|
||||||
PACKAGE_NAME2 + DELIMITER_MODE + MODE_UNRESTRICTED + DELIMITER +
|
+ MODE_RESTRICTED
|
||||||
PACKAGE_NAME3 + DELIMITER_MODE + MODE_RESTRICTED + DELIMITER;
|
+ DELIMITER;
|
||||||
|
final String package2Mode = PACKAGE_NAME2
|
||||||
|
+ DELIMITER_MODE
|
||||||
|
+ MODE_UNRESTRICTED
|
||||||
|
+ DELIMITER;
|
||||||
|
final String package3Mode = PACKAGE_NAME3
|
||||||
|
+ DELIMITER_MODE
|
||||||
|
+ MODE_RESTRICTED
|
||||||
|
+ DELIMITER;
|
||||||
|
final String packageModes = package1Mode + package2Mode + package3Mode;
|
||||||
|
|
||||||
mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
|
mBatteryBackupHelper.restoreOptimizationMode(packageModes.getBytes());
|
||||||
TimeUnit.SECONDS.sleep(1);
|
TimeUnit.SECONDS.sleep(1);
|
||||||
@@ -358,13 +360,14 @@ public final class BatteryBackupHelperTest {
|
|||||||
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_PRODUCT, Build.PRODUCT);
|
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_PRODUCT, Build.PRODUCT);
|
||||||
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_MANUFACTURER, Build.MANUFACTURER);
|
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_MANUFACTURER, Build.MANUFACTURER);
|
||||||
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_FINGERPRINT, Build.FINGERPRINT);
|
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_FINGERPRINT, Build.FINGERPRINT);
|
||||||
inOrder.verify(mBackupDataOutput, never()).writeEntityHeader(
|
inOrder.verify(mBackupDataOutput, never())
|
||||||
eq(BatteryBackupHelper.KEY_BUILD_METADATA_1), anyInt());
|
.writeEntityHeader(eq(BatteryBackupHelper.KEY_BUILD_METADATA_1), anyInt());
|
||||||
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_METADATA_2, deviceMetadata);
|
verifyBackupData(inOrder, BatteryBackupHelper.KEY_BUILD_METADATA_2, deviceMetadata);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void mockUid(int uid, String packageName) throws Exception {
|
private void mockUid(int uid, String packageName) throws Exception {
|
||||||
doReturn(uid).when(mPackageManager)
|
doReturn(uid)
|
||||||
|
.when(mPackageManager)
|
||||||
.getPackageUid(packageName, PackageManager.GET_META_DATA);
|
.getPackageUid(packageName, PackageManager.GET_META_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -384,8 +387,8 @@ public final class BatteryBackupHelperTest {
|
|||||||
final Set<String> expectedResultSet =
|
final Set<String> expectedResultSet =
|
||||||
Set.of(expectedResult.split(BatteryBackupHelper.DELIMITER));
|
Set.of(expectedResult.split(BatteryBackupHelper.DELIMITER));
|
||||||
|
|
||||||
verify(mBackupDataOutput).writeEntityHeader(
|
verify(mBackupDataOutput)
|
||||||
BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
|
.writeEntityHeader(BatteryBackupHelper.KEY_OPTIMIZATION_LIST, expectedBytes.length);
|
||||||
verify(mBackupDataOutput).writeEntityData(captor.capture(), eq(expectedBytes.length));
|
verify(mBackupDataOutput).writeEntityData(captor.capture(), eq(expectedBytes.length));
|
||||||
final String actualResult = new String(captor.getValue());
|
final String actualResult = new String(captor.getValue());
|
||||||
final Set<String> actualResultSet =
|
final Set<String> actualResultSet =
|
||||||
@@ -393,8 +396,9 @@ public final class BatteryBackupHelperTest {
|
|||||||
assertThat(actualResultSet).isEqualTo(expectedResultSet);
|
assertThat(actualResultSet).isEqualTo(expectedResultSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createTestingData(String packageName1, int uid1, String packageName2,
|
private void createTestingData(
|
||||||
String packageName3) throws Exception {
|
String packageName1, int uid1, String packageName2, String packageName3)
|
||||||
|
throws Exception {
|
||||||
// Sets the getInstalledApplications() method for testing.
|
// Sets the getInstalledApplications() method for testing.
|
||||||
final UserInfo userInfo =
|
final UserInfo userInfo =
|
||||||
new UserInfo(/* userId= */ 0, /* userName= */ "google", /* flag= */ 0);
|
new UserInfo(/* userId= */ 0, /* userName= */ "google", /* flag= */ 0);
|
||||||
@@ -413,8 +417,10 @@ public final class BatteryBackupHelperTest {
|
|||||||
applicationInfo3.uid = 3;
|
applicationInfo3.uid = 3;
|
||||||
applicationInfo3.packageName = packageName3;
|
applicationInfo3.packageName = packageName3;
|
||||||
applicationInfo3.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
applicationInfo3.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
||||||
doReturn(new ParceledListSlice<ApplicationInfo>(
|
doReturn(
|
||||||
Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3)))
|
new ParceledListSlice<ApplicationInfo>(
|
||||||
|
Arrays.asList(
|
||||||
|
applicationInfo1, applicationInfo2, applicationInfo3)))
|
||||||
.when(mIPackageManager)
|
.when(mIPackageManager)
|
||||||
.getInstalledApplications(anyLong(), anyInt());
|
.getInstalledApplications(anyLong(), anyInt());
|
||||||
// Sets the AppOpsManager for checkOpNoThrow() method.
|
// Sets the AppOpsManager for checkOpNoThrow() method.
|
||||||
@@ -434,8 +440,8 @@ public final class BatteryBackupHelperTest {
|
|||||||
new ArraySet<>(Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3));
|
new ArraySet<>(Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifyBackupData(
|
private void verifyBackupData(InOrder inOrder, String dataKey, String dataContent)
|
||||||
InOrder inOrder, String dataKey, String dataContent) throws Exception {
|
throws Exception {
|
||||||
final byte[] expectedBytes = dataContent.getBytes();
|
final byte[] expectedBytes = dataContent.getBytes();
|
||||||
inOrder.verify(mBackupDataOutput).writeEntityHeader(dataKey, expectedBytes.length);
|
inOrder.verify(mBackupDataOutput).writeEntityHeader(dataKey, expectedBytes.length);
|
||||||
inOrder.verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length);
|
inOrder.verify(mBackupDataOutput).writeEntityData(expectedBytes, expectedBytes.length);
|
||||||
|
|||||||
@@ -54,8 +54,7 @@ public class BatteryBroadcastReceiverTest {
|
|||||||
private static final int BATTERY_INTENT_LEVEL = 80;
|
private static final int BATTERY_INTENT_LEVEL = 80;
|
||||||
private static final int BATTERY_INTENT_SCALE = 100;
|
private static final int BATTERY_INTENT_SCALE = 100;
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryBroadcastReceiver.OnBatteryChangedListener mBatteryListener;
|
||||||
private BatteryBroadcastReceiver.OnBatteryChangedListener mBatteryListener;
|
|
||||||
private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
|
private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private Intent mChargingIntent;
|
private Intent mChargingIntent;
|
||||||
@@ -75,8 +74,8 @@ public class BatteryBroadcastReceiverTest {
|
|||||||
mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED);
|
mChargingIntent = new Intent(Intent.ACTION_BATTERY_CHANGED);
|
||||||
mChargingIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_INTENT_LEVEL);
|
mChargingIntent.putExtra(BatteryManager.EXTRA_LEVEL, BATTERY_INTENT_LEVEL);
|
||||||
mChargingIntent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_INTENT_SCALE);
|
mChargingIntent.putExtra(BatteryManager.EXTRA_SCALE, BATTERY_INTENT_SCALE);
|
||||||
mChargingIntent
|
mChargingIntent.putExtra(
|
||||||
.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
|
BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_CHARGING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -85,8 +84,10 @@ public class BatteryBroadcastReceiverTest {
|
|||||||
|
|
||||||
assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
|
assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
|
||||||
.isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
|
.isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
|
||||||
assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(
|
assertThat(mBatteryBroadcastReceiver.mBatteryStatus)
|
||||||
Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false));
|
.isEqualTo(
|
||||||
|
Utils.getBatteryStatus(
|
||||||
|
mContext, mChargingIntent, /* compactStatus= */ false));
|
||||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL);
|
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_LEVEL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -103,7 +104,8 @@ public class BatteryBroadcastReceiverTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onReceive_chargingStatusChanged_dataUpdated() {
|
public void onReceive_chargingStatusChanged_dataUpdated() {
|
||||||
mChargingIntent.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
mChargingIntent.putExtra(
|
||||||
|
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||||
mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent);
|
mBatteryBroadcastReceiver.onReceive(mContext, mChargingIntent);
|
||||||
|
|
||||||
@@ -123,8 +125,8 @@ public class BatteryBroadcastReceiverTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onReceive_powerSaveModeChanged_listenerInvoked() {
|
public void onReceive_powerSaveModeChanged_listenerInvoked() {
|
||||||
mBatteryBroadcastReceiver.onReceive(mContext,
|
mBatteryBroadcastReceiver.onReceive(
|
||||||
new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
|
mContext, new Intent(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED));
|
||||||
|
|
||||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_SAVER);
|
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_SAVER);
|
||||||
}
|
}
|
||||||
@@ -150,16 +152,16 @@ public class BatteryBroadcastReceiverTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onReceive_dockDefenderBypassed_listenerInvoked() {
|
public void onReceive_dockDefenderBypassed_listenerInvoked() {
|
||||||
mBatteryBroadcastReceiver.onReceive(mContext,
|
mBatteryBroadcastReceiver.onReceive(
|
||||||
new Intent(BatteryUtils.BYPASS_DOCK_DEFENDER_ACTION));
|
mContext, new Intent(BatteryUtils.BYPASS_DOCK_DEFENDER_ACTION));
|
||||||
|
|
||||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
|
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onReceive_usbPortComplianceChanged_listenerInvoked() {
|
public void onReceive_usbPortComplianceChanged_listenerInvoked() {
|
||||||
mBatteryBroadcastReceiver.onReceive(mContext,
|
mBatteryBroadcastReceiver.onReceive(
|
||||||
new Intent(UsbManager.ACTION_USB_PORT_COMPLIANCE_CHANGED));
|
mContext, new Intent(UsbManager.ACTION_USB_PORT_COMPLIANCE_CHANGED));
|
||||||
|
|
||||||
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
|
verify(mBatteryListener).onBatteryChanged(BatteryUpdateType.BATTERY_STATUS);
|
||||||
}
|
}
|
||||||
@@ -173,8 +175,10 @@ public class BatteryBroadcastReceiverTest {
|
|||||||
|
|
||||||
assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
|
assertThat(mBatteryBroadcastReceiver.mBatteryLevel)
|
||||||
.isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
|
.isEqualTo(Utils.getBatteryPercentage(mChargingIntent));
|
||||||
assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(
|
assertThat(mBatteryBroadcastReceiver.mBatteryStatus)
|
||||||
Utils.getBatteryStatus(mContext, mChargingIntent, /* compactStatus= */ false));
|
.isEqualTo(
|
||||||
|
Utils.getBatteryStatus(
|
||||||
|
mContext, mChargingIntent, /* compactStatus= */ false));
|
||||||
assertThat(mBatteryBroadcastReceiver.mBatteryHealth)
|
assertThat(mBatteryBroadcastReceiver.mBatteryHealth)
|
||||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
.isEqualTo(BatteryManager.BATTERY_HEALTH_UNKNOWN);
|
||||||
assertThat(mBatteryBroadcastReceiver.mChargingStatus)
|
assertThat(mBatteryBroadcastReceiver.mChargingStatus)
|
||||||
@@ -188,7 +192,8 @@ public class BatteryBroadcastReceiverTest {
|
|||||||
mBatteryBroadcastReceiver.register();
|
mBatteryBroadcastReceiver.register();
|
||||||
|
|
||||||
ArgumentCaptor<IntentFilter> captor = ArgumentCaptor.forClass(IntentFilter.class);
|
ArgumentCaptor<IntentFilter> captor = ArgumentCaptor.forClass(IntentFilter.class);
|
||||||
verify(mContext).registerReceiver(
|
verify(mContext)
|
||||||
|
.registerReceiver(
|
||||||
eq(mBatteryBroadcastReceiver),
|
eq(mBatteryBroadcastReceiver),
|
||||||
captor.capture(),
|
captor.capture(),
|
||||||
eq(Context.RECEIVER_EXPORTED));
|
eq(Context.RECEIVER_EXPORTED));
|
||||||
|
|||||||
@@ -68,22 +68,14 @@ public class BatteryHeaderPreferenceControllerTest {
|
|||||||
private static final String TIME_LEFT = "2h30min";
|
private static final String TIME_LEFT = "2h30min";
|
||||||
private static final String BATTERY_STATUS = "Charging";
|
private static final String BATTERY_STATUS = "Charging";
|
||||||
|
|
||||||
@Mock
|
@Mock private PreferenceScreen mPreferenceScreen;
|
||||||
private PreferenceScreen mPreferenceScreen;
|
@Mock private BatteryInfo mBatteryInfo;
|
||||||
@Mock
|
@Mock private EntityHeaderController mEntityHeaderController;
|
||||||
private BatteryInfo mBatteryInfo;
|
@Mock private UsageProgressBarPreference mBatteryUsageProgressBarPref;
|
||||||
@Mock
|
@Mock private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
|
||||||
private EntityHeaderController mEntityHeaderController;
|
@Mock private UsbPort mUsbPort;
|
||||||
@Mock
|
@Mock private UsbManager mUsbManager;
|
||||||
private UsageProgressBarPreference mBatteryUsageProgressBarPref;
|
@Mock private UsbPortStatus mUsbPortStatus;
|
||||||
@Mock
|
|
||||||
private BatteryStatusFeatureProvider mBatteryStatusFeatureProvider;
|
|
||||||
@Mock
|
|
||||||
private UsbPort mUsbPort;
|
|
||||||
@Mock
|
|
||||||
private UsbManager mUsbManager;
|
|
||||||
@Mock
|
|
||||||
private UsbPortStatus mUsbPortStatus;
|
|
||||||
|
|
||||||
private BatteryHeaderPreferenceController mController;
|
private BatteryHeaderPreferenceController mController;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -104,7 +96,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
|||||||
mBatteryIntent.putExtra(BatteryManager.EXTRA_PLUGGED, 1);
|
mBatteryIntent.putExtra(BatteryManager.EXTRA_PLUGGED, 1);
|
||||||
doReturn(mBatteryIntent).when(mContext).registerReceiver(any(), any());
|
doReturn(mBatteryIntent).when(mContext).registerReceiver(any(), any());
|
||||||
|
|
||||||
doReturn(mBatteryUsageProgressBarPref).when(mPreferenceScreen)
|
doReturn(mBatteryUsageProgressBarPref)
|
||||||
|
.when(mPreferenceScreen)
|
||||||
.findPreference(BatteryHeaderPreferenceController.KEY_BATTERY_HEADER);
|
.findPreference(BatteryHeaderPreferenceController.KEY_BATTERY_HEADER);
|
||||||
|
|
||||||
mBatteryInfo.batteryLevel = BATTERY_LEVEL;
|
mBatteryInfo.batteryLevel = BATTERY_LEVEL;
|
||||||
@@ -235,8 +228,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void updateHeaderByBatteryTips_lowBatteryTip_showLowBattery() {
|
public void updateHeaderByBatteryTips_lowBatteryTip_showLowBattery() {
|
||||||
setChargingState(/* isDischarging */ true, /* updatedByStatusFeature */ false);
|
setChargingState(/* isDischarging */ true, /* updatedByStatusFeature */ false);
|
||||||
BatteryTip lowBatteryTip = new LowBatteryTip(
|
BatteryTip lowBatteryTip =
|
||||||
BatteryTip.StateType.NEW, /* powerSaveModeOn */false);
|
new LowBatteryTip(BatteryTip.StateType.NEW, /* powerSaveModeOn */ false);
|
||||||
|
|
||||||
mController.updateHeaderByBatteryTips(lowBatteryTip, mBatteryInfo);
|
mController.updateHeaderByBatteryTips(lowBatteryTip, mBatteryInfo);
|
||||||
|
|
||||||
@@ -265,8 +258,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateHeaderByBatteryTips_noBatteryInfo_noAction() {
|
public void updateHeaderByBatteryTips_noBatteryInfo_noAction() {
|
||||||
BatteryTip lowBatteryTip = new LowBatteryTip(
|
BatteryTip lowBatteryTip =
|
||||||
BatteryTip.StateType.NEW, /* powerSaveModeOn */false);
|
new LowBatteryTip(BatteryTip.StateType.NEW, /* powerSaveModeOn */ false);
|
||||||
|
|
||||||
mController.updateHeaderByBatteryTips(lowBatteryTip, null);
|
mController.updateHeaderByBatteryTips(lowBatteryTip, null);
|
||||||
|
|
||||||
@@ -288,7 +281,9 @@ public class BatteryHeaderPreferenceControllerTest {
|
|||||||
|
|
||||||
mController.updateHeaderPreference(mBatteryInfo);
|
mController.updateHeaderPreference(mBatteryInfo);
|
||||||
|
|
||||||
verify(mBatteryUsageProgressBarPref).setBottomSummary(mContext.getString(
|
verify(mBatteryUsageProgressBarPref)
|
||||||
|
.setBottomSummary(
|
||||||
|
mContext.getString(
|
||||||
com.android.settingslib.R.string.battery_info_status_not_charging));
|
com.android.settingslib.R.string.battery_info_status_not_charging));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,8 +297,8 @@ public class BatteryHeaderPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAvailabilityStatus_returnAvailableUnsearchable() {
|
public void getAvailabilityStatus_returnAvailableUnsearchable() {
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
assertThat(mController.getAvailabilityStatus())
|
||||||
BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
.isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -319,12 +314,13 @@ public class BatteryHeaderPreferenceControllerTest {
|
|||||||
public void displayPreference_init_showLoading() {
|
public void displayPreference_init_showLoading() {
|
||||||
mController.displayPreference(mPreferenceScreen);
|
mController.displayPreference(mPreferenceScreen);
|
||||||
|
|
||||||
verify(mBatteryUsageProgressBarPref).setBottomSummary(
|
verify(mBatteryUsageProgressBarPref)
|
||||||
mContext.getString(R.string.settings_license_activity_loading));
|
.setBottomSummary(mContext.getString(R.string.settings_license_activity_loading));
|
||||||
}
|
}
|
||||||
|
|
||||||
private CharSequence formatBatteryPercentageText() {
|
private CharSequence formatBatteryPercentageText() {
|
||||||
return TextUtils.expandTemplate(mContext.getText(R.string.battery_header_title_alternate),
|
return TextUtils.expandTemplate(
|
||||||
|
mContext.getText(R.string.battery_header_title_alternate),
|
||||||
NumberFormat.getIntegerInstance().format(BATTERY_LEVEL));
|
NumberFormat.getIntegerInstance().format(BATTERY_LEVEL));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,7 +329,7 @@ public class BatteryHeaderPreferenceControllerTest {
|
|||||||
mBatteryInfo.statusLabel = BATTERY_STATUS;
|
mBatteryInfo.statusLabel = BATTERY_STATUS;
|
||||||
mBatteryInfo.discharging = isDischarging;
|
mBatteryInfo.discharging = isDischarging;
|
||||||
|
|
||||||
when(mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(
|
when(mBatteryStatusFeatureProvider.triggerBatteryStatusUpdate(mController, mBatteryInfo))
|
||||||
mController, mBatteryInfo)).thenReturn(updatedByStatusFeature);
|
.thenReturn(updatedByStatusFeature);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,10 +46,8 @@ public class BatteryInfoLoaderTest {
|
|||||||
|
|
||||||
private static final long TEST_TIME_REMAINING = 1000L;
|
private static final long TEST_TIME_REMAINING = 1000L;
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||||
private BatteryStatsManager mBatteryStatsManager;
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
@Mock
|
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
|
|||||||
@@ -72,11 +72,11 @@ public class BatteryInfoTest {
|
|||||||
private static final String ENHANCED_STRING_SUFFIX = "based on your usage";
|
private static final String ENHANCED_STRING_SUFFIX = "based on your usage";
|
||||||
private static final String BATTERY_RUN_OUT_PREFIX = "Battery may run out by";
|
private static final String BATTERY_RUN_OUT_PREFIX = "Battery may run out by";
|
||||||
private static final long TEST_CHARGE_TIME_REMAINING = TimeUnit.MINUTES.toMicros(1);
|
private static final long TEST_CHARGE_TIME_REMAINING = TimeUnit.MINUTES.toMicros(1);
|
||||||
private static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED =
|
private static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED = "1 min left until full";
|
||||||
"1 min left until full";
|
|
||||||
private static final String TEST_BATTERY_LEVEL_10 = "10%";
|
private static final String TEST_BATTERY_LEVEL_10 = "10%";
|
||||||
private static final String FIFTEEN_MIN_FORMATTED = "15 min";
|
private static final String FIFTEEN_MIN_FORMATTED = "15 min";
|
||||||
private static final Estimate MOCK_ESTIMATE = new Estimate(
|
private static final Estimate MOCK_ESTIMATE =
|
||||||
|
new Estimate(
|
||||||
1000, /* estimateMillis */
|
1000, /* estimateMillis */
|
||||||
false, /* isBasedOnUsage */
|
false, /* isBasedOnUsage */
|
||||||
1000 /* averageDischargeTime */);
|
1000 /* averageDischargeTime */);
|
||||||
@@ -85,8 +85,7 @@ public class BatteryInfoTest {
|
|||||||
private Intent mChargingBatteryBroadcast;
|
private Intent mChargingBatteryBroadcast;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
@Mock
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -99,15 +98,20 @@ public class BatteryInfoTest {
|
|||||||
mChargingBatteryBroadcast = BatteryTestUtils.getChargingIntent();
|
mChargingBatteryBroadcast = BatteryTestUtils.getChargingIntent();
|
||||||
|
|
||||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0);
|
mContext.getContentResolver(),
|
||||||
|
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
|
||||||
|
0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_hasStatusLabel() {
|
public void testGetBatteryInfo_hasStatusLabel() {
|
||||||
doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getBatteryTimeRemainingMs();
|
doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getBatteryTimeRemainingMs();
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext,
|
BatteryInfo info =
|
||||||
mDisChargingBatteryBroadcast, mBatteryUsageStats,
|
BatteryInfo.getBatteryInfoOld(
|
||||||
|
mContext,
|
||||||
|
mDisChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
SystemClock.elapsedRealtime() * 1000,
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
true /* shortString */);
|
true /* shortString */);
|
||||||
|
|
||||||
@@ -117,8 +121,13 @@ public class BatteryInfoTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_doNotShowChargingMethod_hasRemainingTime() {
|
public void testGetBatteryInfo_doNotShowChargingMethod_hasRemainingTime() {
|
||||||
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */);
|
BatteryInfo.getBatteryInfoOld(
|
||||||
|
mContext,
|
||||||
|
mChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.chargeLabel.toString()).isEqualTo(STATUS_CHARGING_TIME);
|
assertThat(info.chargeLabel.toString()).isEqualTo(STATUS_CHARGING_TIME);
|
||||||
}
|
}
|
||||||
@@ -126,8 +135,13 @@ public class BatteryInfoTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_doNotShowChargingMethod_noRemainingTime() {
|
public void testGetBatteryInfo_doNotShowChargingMethod_noRemainingTime() {
|
||||||
doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
doReturn(REMAINING_TIME_NULL).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, false /* shortString */);
|
BatteryInfo.getBatteryInfoOld(
|
||||||
|
mContext,
|
||||||
|
mChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.chargeLabel.toString()).ignoringCase().isEqualTo(STATUS_CHARGING_NO_TIME);
|
assertThat(info.chargeLabel.toString()).ignoringCase().isEqualTo(STATUS_CHARGING_NO_TIME);
|
||||||
}
|
}
|
||||||
@@ -135,9 +149,15 @@ public class BatteryInfoTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_pluggedInUsingShortString_usesCorrectData() {
|
public void testGetBatteryInfo_pluggedInUsingShortString_usesCorrectData() {
|
||||||
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
||||||
.when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
.when(mBatteryUsageStats)
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfoOld(mContext, mChargingBatteryBroadcast,
|
.getChargeTimeRemainingMs();
|
||||||
mBatteryUsageStats, SystemClock.elapsedRealtime() * 1000, true /* shortString */);
|
BatteryInfo info =
|
||||||
|
BatteryInfo.getBatteryInfoOld(
|
||||||
|
mContext,
|
||||||
|
mChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
|
true /* shortString */);
|
||||||
|
|
||||||
assertThat(info.discharging).isEqualTo(false);
|
assertThat(info.discharging).isEqualTo(false);
|
||||||
assertThat(info.chargeLabel.toString()).isEqualTo("50% - 1 min left until full");
|
assertThat(info.chargeLabel.toString()).isEqualTo("50% - 1 min left until full");
|
||||||
@@ -145,14 +165,26 @@ public class BatteryInfoTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_basedOnUsageTrueMoreThanFifteenMinutes_usesCorrectString() {
|
public void testGetBatteryInfo_basedOnUsageTrueMoreThanFifteenMinutes_usesCorrectString() {
|
||||||
Estimate estimate = new Estimate(Duration.ofHours(4).toMillis(),
|
Estimate estimate =
|
||||||
|
new Estimate(
|
||||||
|
Duration.ofHours(4).toMillis(),
|
||||||
true /* isBasedOnUsage */,
|
true /* isBasedOnUsage */,
|
||||||
1000 /* averageDischargeTime */);
|
1000 /* averageDischargeTime */);
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
mDisChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
estimate,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
BatteryInfo info2 =
|
||||||
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
mDisChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
estimate,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
true /* shortString */);
|
true /* shortString */);
|
||||||
|
|
||||||
// Both long and short strings should not have extra text
|
// Both long and short strings should not have extra text
|
||||||
@@ -165,11 +197,18 @@ public class BatteryInfoTest {
|
|||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void getBatteryInfo_MoreThanOneDay_suggestionLabelIsCorrectString() {
|
public void getBatteryInfo_MoreThanOneDay_suggestionLabelIsCorrectString() {
|
||||||
Estimate estimate = new Estimate(Duration.ofDays(3).toMillis(),
|
Estimate estimate =
|
||||||
|
new Estimate(
|
||||||
|
Duration.ofDays(3).toMillis(),
|
||||||
true /* isBasedOnUsage */,
|
true /* isBasedOnUsage */,
|
||||||
1000 /* averageDischargeTime */);
|
1000 /* averageDischargeTime */);
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, estimate, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
mDisChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
estimate,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.suggestionLabel).doesNotContain(BATTERY_RUN_OUT_PREFIX);
|
assertThat(info.suggestionLabel).doesNotContain(BATTERY_RUN_OUT_PREFIX);
|
||||||
@@ -177,11 +216,21 @@ public class BatteryInfoTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_basedOnUsageFalse_usesDefaultString() {
|
public void testGetBatteryInfo_basedOnUsageFalse_usesDefaultString() {
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
mDisChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
BatteryInfo info2 = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast,
|
BatteryInfo info2 =
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
mDisChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
true /* shortString */);
|
true /* shortString */);
|
||||||
|
|
||||||
assertThat(info.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
|
assertThat(info.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
|
||||||
@@ -191,10 +240,16 @@ public class BatteryInfoTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_charging_usesChargeTime() {
|
public void testGetBatteryInfo_charging_usesChargeTime() {
|
||||||
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
||||||
.when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
.when(mBatteryUsageStats)
|
||||||
|
.getChargeTimeRemainingMs();
|
||||||
|
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
mChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.remainingTimeUs).isEqualTo(TEST_CHARGE_TIME_REMAINING);
|
assertThat(info.remainingTimeUs).isEqualTo(TEST_CHARGE_TIME_REMAINING);
|
||||||
@@ -206,8 +261,13 @@ public class BatteryInfoTest {
|
|||||||
public void testGetBatteryInfo_pluggedInWithFullBattery_onlyShowBatteryLevel() {
|
public void testGetBatteryInfo_pluggedInWithFullBattery_onlyShowBatteryLevel() {
|
||||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 100);
|
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 100);
|
||||||
|
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
mChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.chargeLabel).isEqualTo("100%");
|
assertThat(info.chargeLabel).isEqualTo("100%");
|
||||||
@@ -215,14 +275,18 @@ public class BatteryInfoTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_chargingWithDefender_updateChargeLabel() {
|
public void testGetBatteryInfo_chargingWithDefender_updateChargeLabel() {
|
||||||
doReturn(TEST_CHARGE_TIME_REMAINING)
|
doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||||
.when(mBatteryUsageStats)
|
mChargingBatteryBroadcast.putExtra(
|
||||||
.getChargeTimeRemainingMs();
|
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
|
||||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||||
|
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
mChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.isBatteryDefender).isTrue();
|
assertThat(info.isBatteryDefender).isTrue();
|
||||||
@@ -231,30 +295,32 @@ public class BatteryInfoTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_getChargeTimeRemaining_updateSettingsGlobal() {
|
public void testGetBatteryInfo_getChargeTimeRemaining_updateSettingsGlobal() {
|
||||||
doReturn(TEST_CHARGE_TIME_REMAINING)
|
doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||||
.when(mBatteryUsageStats)
|
|
||||||
.getChargeTimeRemainingMs();
|
|
||||||
|
|
||||||
BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
BatteryInfo.getBatteryInfo(
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
mContext,
|
||||||
|
mChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(
|
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext))
|
||||||
TEST_CHARGE_TIME_REMAINING);
|
.isEqualTo(TEST_CHARGE_TIME_REMAINING);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_differentChargeTimeRemaining_updateSettingsGlobal() {
|
public void testGetBatteryInfo_differentChargeTimeRemaining_updateSettingsGlobal() {
|
||||||
doReturn(TEST_CHARGE_TIME_REMAINING)
|
doReturn(TEST_CHARGE_TIME_REMAINING).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||||
.when(mBatteryUsageStats)
|
|
||||||
.getChargeTimeRemainingMs();
|
|
||||||
final long newTimeToFull = 300L;
|
final long newTimeToFull = 300L;
|
||||||
doReturn(newTimeToFull)
|
doReturn(newTimeToFull).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||||
.when(mBatteryUsageStats)
|
|
||||||
.getChargeTimeRemainingMs();
|
|
||||||
|
|
||||||
BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
|
BatteryInfo.getBatteryInfo(
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
mContext,
|
||||||
|
mChargingBatteryBroadcast,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(newTimeToFull);
|
assertThat(BatteryInfo.getSettingsChargeTimeRemaining(mContext)).isEqualTo(newTimeToFull);
|
||||||
@@ -263,17 +329,26 @@ public class BatteryInfoTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_dockDefenderActive_updateChargeString() {
|
public void testGetBatteryInfo_dockDefenderActive_updateChargeString() {
|
||||||
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
doReturn(TEST_CHARGE_TIME_REMAINING / 1000)
|
||||||
.when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
.when(mBatteryUsageStats)
|
||||||
|
.getChargeTimeRemainingMs();
|
||||||
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||||
Intent intent = BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
Intent intent =
|
||||||
|
BatteryTestUtils.getCustomBatteryIntent(
|
||||||
|
BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||||
50 /* level */,
|
50 /* level */,
|
||||||
100 /* scale */,
|
100 /* scale */,
|
||||||
BatteryManager.BATTERY_STATUS_CHARGING)
|
BatteryManager.BATTERY_STATUS_CHARGING)
|
||||||
.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
.putExtra(
|
||||||
|
BatteryManager.EXTRA_CHARGING_STATUS,
|
||||||
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
BatteryManager.CHARGING_POLICY_ADAPTIVE_LONGLIFE);
|
||||||
|
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, intent,
|
BatteryInfo info =
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
intent,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_PAUSED);
|
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_PAUSED);
|
||||||
@@ -282,17 +357,24 @@ public class BatteryInfoTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_dockDefenderTemporarilyBypassed_updateChargeLabel() {
|
public void testGetBatteryInfo_dockDefenderTemporarilyBypassed_updateChargeLabel() {
|
||||||
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
doReturn(REMAINING_TIME).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
mChargingBatteryBroadcast.putExtra(
|
||||||
BatteryManager.CHARGING_POLICY_DEFAULT);
|
BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 1);
|
mContext.getContentResolver(),
|
||||||
|
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
|
||||||
|
1);
|
||||||
|
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
|
BatteryInfo info =
|
||||||
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
BatteryTestUtils.getCustomBatteryIntent(
|
||||||
|
BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||||
50 /* level */,
|
50 /* level */,
|
||||||
100 /* scale */,
|
100 /* scale */,
|
||||||
BatteryManager.BATTERY_STATUS_CHARGING),
|
BatteryManager.BATTERY_STATUS_CHARGING),
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_TIME);
|
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_TIME);
|
||||||
@@ -301,15 +383,20 @@ public class BatteryInfoTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testGetBatteryInfo_dockDefenderFutureBypass_updateChargeLabel() {
|
public void testGetBatteryInfo_dockDefenderFutureBypass_updateChargeLabel() {
|
||||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isExtraDefend();
|
||||||
mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_CHARGING_STATUS,
|
mChargingBatteryBroadcast.putExtra(
|
||||||
BatteryManager.CHARGING_POLICY_DEFAULT);
|
BatteryManager.EXTRA_CHARGING_STATUS, BatteryManager.CHARGING_POLICY_DEFAULT);
|
||||||
|
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
|
BatteryInfo info =
|
||||||
BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
|
BatteryTestUtils.getCustomBatteryIntent(
|
||||||
|
BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||||
50 /* level */,
|
50 /* level */,
|
||||||
100 /* scale */,
|
100 /* scale */,
|
||||||
BatteryManager.BATTERY_STATUS_CHARGING),
|
BatteryManager.BATTERY_STATUS_CHARGING),
|
||||||
mBatteryUsageStats, MOCK_ESTIMATE, SystemClock.elapsedRealtime() * 1000,
|
mBatteryUsageStats,
|
||||||
|
MOCK_ESTIMATE,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
false /* shortString */);
|
false /* shortString */);
|
||||||
|
|
||||||
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_FUTURE_BYPASS);
|
assertThat(info.chargeLabel.toString()).contains(STATUS_CHARGING_FUTURE_BYPASS);
|
||||||
@@ -318,15 +405,20 @@ public class BatteryInfoTest {
|
|||||||
// Make our battery stats return a sequence of battery events.
|
// Make our battery stats return a sequence of battery events.
|
||||||
private void mockBatteryStatsHistory() {
|
private void mockBatteryStatsHistory() {
|
||||||
// Mock out new data every time iterateBatteryStatsHistory is called.
|
// Mock out new data every time iterateBatteryStatsHistory is called.
|
||||||
doAnswer(invocation -> {
|
doAnswer(
|
||||||
BatteryStatsHistoryIterator iterator = mock(BatteryStatsHistoryIterator.class);
|
invocation -> {
|
||||||
when(iterator.next()).thenReturn(
|
BatteryStatsHistoryIterator iterator =
|
||||||
|
mock(BatteryStatsHistoryIterator.class);
|
||||||
|
when(iterator.next())
|
||||||
|
.thenReturn(
|
||||||
makeHistoryIterm(1000, 99),
|
makeHistoryIterm(1000, 99),
|
||||||
makeHistoryIterm(1500, 98),
|
makeHistoryIterm(1500, 98),
|
||||||
makeHistoryIterm(2000, 97),
|
makeHistoryIterm(2000, 97),
|
||||||
null);
|
null);
|
||||||
return iterator;
|
return iterator;
|
||||||
}).when(mBatteryUsageStats).iterateBatteryStatsHistory();
|
})
|
||||||
|
.when(mBatteryUsageStats)
|
||||||
|
.iterateBatteryStatsHistory();
|
||||||
}
|
}
|
||||||
|
|
||||||
private BatteryStats.HistoryItem makeHistoryIterm(long time, int batteryLevel) {
|
private BatteryStats.HistoryItem makeHistoryIterm(long time, int batteryLevel) {
|
||||||
@@ -373,7 +465,8 @@ public class BatteryInfoTest {
|
|||||||
pointsExpected.append(2000, 96);
|
pointsExpected.append(2000, 96);
|
||||||
pointsExpected.append(2500, 95);
|
pointsExpected.append(2500, 95);
|
||||||
pointsExpected.append(3000, 94);
|
pointsExpected.append(3000, 94);
|
||||||
doReturn(pointsExpected).when(mFeatureFactory.powerUsageFeatureProvider)
|
doReturn(pointsExpected)
|
||||||
|
.when(mFeatureFactory.powerUsageFeatureProvider)
|
||||||
.getEnhancedBatteryPredictionCurve(any(Context.class), anyLong());
|
.getEnhancedBatteryPredictionCurve(any(Context.class), anyLong());
|
||||||
|
|
||||||
info.bindHistory(view);
|
info.bindHistory(view);
|
||||||
@@ -390,14 +483,21 @@ public class BatteryInfoTest {
|
|||||||
} else {
|
} else {
|
||||||
doReturn(0L).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
doReturn(0L).when(mBatteryUsageStats).getChargeTimeRemainingMs();
|
||||||
}
|
}
|
||||||
Estimate batteryEstimate = new Estimate(
|
Estimate batteryEstimate =
|
||||||
|
new Estimate(
|
||||||
estimate ? 1000 : 0,
|
estimate ? 1000 : 0,
|
||||||
false /* isBasedOnUsage */,
|
false /* isBasedOnUsage */,
|
||||||
1000 /* averageDischargeTime */);
|
1000 /* averageDischargeTime */);
|
||||||
BatteryInfo info = BatteryInfo.getBatteryInfo(mContext,
|
BatteryInfo info =
|
||||||
|
BatteryInfo.getBatteryInfo(
|
||||||
|
mContext,
|
||||||
charging ? mChargingBatteryBroadcast : mDisChargingBatteryBroadcast,
|
charging ? mChargingBatteryBroadcast : mDisChargingBatteryBroadcast,
|
||||||
mBatteryUsageStats, batteryEstimate, SystemClock.elapsedRealtime() * 1000, false);
|
mBatteryUsageStats,
|
||||||
doReturn(enhanced).when(mFeatureFactory.powerUsageFeatureProvider)
|
batteryEstimate,
|
||||||
|
SystemClock.elapsedRealtime() * 1000,
|
||||||
|
false);
|
||||||
|
doReturn(enhanced)
|
||||||
|
.when(mFeatureFactory.powerUsageFeatureProvider)
|
||||||
.isEnhancedBatteryPredictionEnabled(mContext);
|
.isEnhancedBatteryPredictionEnabled(mContext);
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,12 +39,9 @@ public class BatteryMeterViewTest {
|
|||||||
private static final int BATTERY_CRITICAL_LEVEL = 15;
|
private static final int BATTERY_CRITICAL_LEVEL = 15;
|
||||||
private static final int BATTERY_LOW_LEVEL = 3;
|
private static final int BATTERY_LOW_LEVEL = 3;
|
||||||
|
|
||||||
@Mock
|
@Mock private ColorFilter mErrorColorFilter;
|
||||||
private ColorFilter mErrorColorFilter;
|
@Mock private ColorFilter mAccentColorFilter;
|
||||||
@Mock
|
@Mock private ColorFilter mForegroundColorFilter;
|
||||||
private ColorFilter mAccentColorFilter;
|
|
||||||
@Mock
|
|
||||||
private ColorFilter mForegroundColorFilter;
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private BatteryMeterView mBatteryMeterView;
|
private BatteryMeterView mBatteryMeterView;
|
||||||
private BatteryMeterView.BatteryMeterDrawable mDrawable;
|
private BatteryMeterView.BatteryMeterDrawable mDrawable;
|
||||||
|
|||||||
@@ -57,8 +57,7 @@ public final class BatteryOptimizeLogUtilsTest {
|
|||||||
BatteryOptimizeLogUtils.writeLog(mContext, Action.APPLY, "pkg1", "logs");
|
BatteryOptimizeLogUtils.writeLog(mContext, Action.APPLY, "pkg1", "logs");
|
||||||
BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
|
BatteryOptimizeLogUtils.printBatteryOptimizeHistoricalLog(mContext, mTestPrintWriter);
|
||||||
|
|
||||||
assertThat(mTestStringWriter.toString()).contains(
|
assertThat(mTestStringWriter.toString()).contains("pkg1\taction:APPLY\tevent:logs");
|
||||||
"pkg1\taction:APPLY\tevent:logs");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -98,8 +98,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||||
.thenReturn(AppOpsManager.MODE_IGNORED);
|
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||||
|
|
||||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
|
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_RESTRICTED);
|
||||||
.isEqualTo(MODE_RESTRICTED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -108,8 +107,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||||
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||||
|
|
||||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
|
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_UNRESTRICTED);
|
||||||
.isEqualTo(MODE_UNRESTRICTED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -118,8 +116,7 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||||
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||||
|
|
||||||
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode())
|
assertThat(mBatteryOptimizeUtils.getAppOptimizationMode()).isEqualTo(MODE_OPTIMIZED);
|
||||||
.isEqualTo(MODE_OPTIMIZED);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -168,7 +165,6 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
when(mMockAppOpsManager.checkOpNoThrow(anyInt(), anyInt(), anyString()))
|
||||||
.thenReturn(AppOpsManager.MODE_IGNORED);
|
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||||
|
|
||||||
|
|
||||||
mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED, Action.UNKNOWN);
|
mBatteryOptimizeUtils.setAppUsageState(MODE_UNRESTRICTED, Action.UNKNOWN);
|
||||||
TimeUnit.SECONDS.sleep(1);
|
TimeUnit.SECONDS.sleep(1);
|
||||||
|
|
||||||
@@ -205,7 +201,8 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetInstalledApplications_returnEmptyArray() {
|
public void testGetInstalledApplications_returnEmptyArray() {
|
||||||
assertTrue(BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager)
|
assertTrue(
|
||||||
|
BatteryOptimizeUtils.getInstalledApplications(mContext, mMockIPackageManager)
|
||||||
.isEmpty());
|
.isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,8 +239,13 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
applicationInfo4.enabled = true;
|
applicationInfo4.enabled = true;
|
||||||
applicationInfo4.uid = 4;
|
applicationInfo4.uid = 4;
|
||||||
applicationInfo4.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
|
applicationInfo4.enabledSetting = PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER;
|
||||||
doReturn(new ParceledListSlice<ApplicationInfo>(
|
doReturn(
|
||||||
Arrays.asList(applicationInfo1, applicationInfo2, applicationInfo3, applicationInfo4)))
|
new ParceledListSlice<ApplicationInfo>(
|
||||||
|
Arrays.asList(
|
||||||
|
applicationInfo1,
|
||||||
|
applicationInfo2,
|
||||||
|
applicationInfo3,
|
||||||
|
applicationInfo4)))
|
||||||
.when(mMockIPackageManager)
|
.when(mMockIPackageManager)
|
||||||
.getInstalledApplications(anyLong(), anyInt());
|
.getInstalledApplications(anyLong(), anyInt());
|
||||||
|
|
||||||
@@ -260,7 +262,8 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testResetAppOptimizationMode_Optimized_verifyAction() throws Exception {
|
public void testResetAppOptimizationMode_Optimized_verifyAction() throws Exception {
|
||||||
runTestForResetWithMode(
|
runTestForResetWithMode(
|
||||||
AppOpsManager.MODE_ALLOWED, /* allowListed */ false,
|
AppOpsManager.MODE_ALLOWED, /* allowListed */
|
||||||
|
false,
|
||||||
/* isSystemOrDefaultApp */ false);
|
/* isSystemOrDefaultApp */ false);
|
||||||
|
|
||||||
verifyNoInteractions(mMockBatteryUtils);
|
verifyNoInteractions(mMockBatteryUtils);
|
||||||
@@ -274,7 +277,8 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testResetAppOptimizationMode_SystemOrDefault_verifyAction() throws Exception {
|
public void testResetAppOptimizationMode_SystemOrDefault_verifyAction() throws Exception {
|
||||||
runTestForResetWithMode(
|
runTestForResetWithMode(
|
||||||
AppOpsManager.MODE_ALLOWED, /* allowListed */ true,
|
AppOpsManager.MODE_ALLOWED, /* allowListed */
|
||||||
|
true,
|
||||||
/* isSystemOrDefaultApp */ true);
|
/* isSystemOrDefaultApp */ true);
|
||||||
|
|
||||||
verifyNoInteractions(mMockBatteryUtils);
|
verifyNoInteractions(mMockBatteryUtils);
|
||||||
@@ -289,7 +293,8 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testResetAppOptimizationMode_Restricted_verifyAction() throws Exception {
|
public void testResetAppOptimizationMode_Restricted_verifyAction() throws Exception {
|
||||||
runTestForResetWithMode(
|
runTestForResetWithMode(
|
||||||
AppOpsManager.MODE_IGNORED, /* allowListed */ false,
|
AppOpsManager.MODE_IGNORED, /* allowListed */
|
||||||
|
false,
|
||||||
/* isSystemOrDefaultApp */ false);
|
/* isSystemOrDefaultApp */ false);
|
||||||
|
|
||||||
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
||||||
@@ -298,7 +303,8 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testResetAppOptimizationMode_Unrestricted_verifyAction() throws Exception {
|
public void testResetAppOptimizationMode_Unrestricted_verifyAction() throws Exception {
|
||||||
runTestForResetWithMode(
|
runTestForResetWithMode(
|
||||||
AppOpsManager.MODE_ALLOWED, /* allowListed */ true,
|
AppOpsManager.MODE_ALLOWED, /* allowListed */
|
||||||
|
true,
|
||||||
/* isSystemOrDefaultApp */ false);
|
/* isSystemOrDefaultApp */ false);
|
||||||
|
|
||||||
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
verifySetAppOptimizationMode(AppOpsManager.MODE_ALLOWED, /* allowListed */ false);
|
||||||
@@ -314,26 +320,22 @@ public class BatteryOptimizeUtilsTest {
|
|||||||
applicationInfo.uid = UID;
|
applicationInfo.uid = UID;
|
||||||
applicationInfo.packageName = PACKAGE_NAME;
|
applicationInfo.packageName = PACKAGE_NAME;
|
||||||
applicationInfo.enabled = true;
|
applicationInfo.enabled = true;
|
||||||
doReturn(new ParceledListSlice<ApplicationInfo>(
|
doReturn(new ParceledListSlice<ApplicationInfo>(Arrays.asList(applicationInfo)))
|
||||||
Arrays.asList(applicationInfo)))
|
|
||||||
.when(mMockIPackageManager)
|
.when(mMockIPackageManager)
|
||||||
.getInstalledApplications(anyLong(), anyInt());
|
.getInstalledApplications(anyLong(), anyInt());
|
||||||
|
|
||||||
doReturn(appStandbyMode)
|
doReturn(appStandbyMode)
|
||||||
.when(mMockAppOpsManager)
|
.when(mMockAppOpsManager)
|
||||||
.checkOpNoThrow(anyInt(), anyInt(), anyString());
|
.checkOpNoThrow(anyInt(), anyInt(), anyString());
|
||||||
doReturn(allowListed)
|
doReturn(allowListed).when(mMockBackend).isAllowlisted(anyString(), anyInt());
|
||||||
.when(mMockBackend)
|
doReturn(isSystemOrDefaultApp).when(mMockBackend).isSysAllowlisted(anyString());
|
||||||
.isAllowlisted(anyString(), anyInt());
|
doReturn(isSystemOrDefaultApp).when(mMockBackend).isDefaultActiveApp(anyString(), anyInt());
|
||||||
doReturn(isSystemOrDefaultApp)
|
|
||||||
.when(mMockBackend)
|
|
||||||
.isSysAllowlisted(anyString());
|
|
||||||
doReturn(isSystemOrDefaultApp)
|
|
||||||
.when(mMockBackend)
|
|
||||||
.isDefaultActiveApp(anyString(), anyInt());
|
|
||||||
|
|
||||||
BatteryOptimizeUtils.resetAppOptimizationMode(
|
BatteryOptimizeUtils.resetAppOptimizationMode(
|
||||||
mContext, mMockIPackageManager, mMockAppOpsManager, mMockBackend,
|
mContext,
|
||||||
|
mMockIPackageManager,
|
||||||
|
mMockAppOpsManager,
|
||||||
|
mMockBackend,
|
||||||
mMockBatteryUtils);
|
mMockBatteryUtils);
|
||||||
TimeUnit.SECONDS.sleep(1);
|
TimeUnit.SECONDS.sleep(1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,11 +21,9 @@ import static org.mockito.Mockito.spy;
|
|||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.settings.SettingsEnums;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.util.Pair;
|
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
@@ -41,10 +39,8 @@ import org.robolectric.util.ReflectionHelpers;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class BatterySaverControllerTest {
|
public class BatterySaverControllerTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private Preference mBatterySaverPref;
|
||||||
private Preference mBatterySaverPref;
|
@Mock private PowerManager mPowerManager;
|
||||||
@Mock
|
|
||||||
private PowerManager mPowerManager;
|
|
||||||
|
|
||||||
private BatterySaverController mBatterySaverController;
|
private BatterySaverController mBatterySaverController;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -58,8 +54,8 @@ public class BatterySaverControllerTest {
|
|||||||
ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
|
ReflectionHelpers.setField(mBatterySaverController, "mPowerManager", mPowerManager);
|
||||||
ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
|
ReflectionHelpers.setField(mBatterySaverController, "mBatterySaverPref", mBatterySaverPref);
|
||||||
|
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -84,8 +80,8 @@ public class BatterySaverControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getSummary_batterySaverOffButScheduled_showSummaryScheduled() {
|
public void getSummary_batterySaverOffButScheduled_showSummaryScheduled() {
|
||||||
when(mPowerManager.isPowerSaveMode()).thenReturn(false);
|
when(mPowerManager.isPowerSaveMode()).thenReturn(false);
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 15);
|
mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 15);
|
||||||
|
|
||||||
assertThat(mBatterySaverController.getSummary()).isEqualTo("Will turn on at 15%");
|
assertThat(mBatterySaverController.getSummary()).isEqualTo("Will turn on at 15%");
|
||||||
}
|
}
|
||||||
@@ -93,8 +89,8 @@ public class BatterySaverControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getSummary_batterySaverOffButScheduledZeroPercent_showSummaryOff() {
|
public void getSummary_batterySaverOffButScheduledZeroPercent_showSummaryOff() {
|
||||||
when(mPowerManager.isPowerSaveMode()).thenReturn(false);
|
when(mPowerManager.isPowerSaveMode()).thenReturn(false);
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||||
|
|
||||||
assertThat(mBatterySaverController.getSummary()).isEqualTo("Off");
|
assertThat(mBatterySaverController.getSummary()).isEqualTo("Off");
|
||||||
}
|
}
|
||||||
@@ -107,8 +103,8 @@ public class BatterySaverControllerTest {
|
|||||||
Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
|
Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||||
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
|
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
|
||||||
|
|
||||||
assertThat(mBatterySaverController.getSummary()).
|
assertThat(mBatterySaverController.getSummary())
|
||||||
isEqualTo("Will turn on based on your routine");
|
.isEqualTo("Will turn on based on your routine");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -32,10 +32,8 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class BatterySaverReceiverTest {
|
public class BatterySaverReceiverTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private BatterySaverReceiver.BatterySaverListener mBatterySaverListener;
|
||||||
private BatterySaverReceiver.BatterySaverListener mBatterySaverListener;
|
@Mock private Context mContext;
|
||||||
@Mock
|
|
||||||
private Context mContext;
|
|
||||||
private BatterySaverReceiver mBatterySaverReceiver;
|
private BatterySaverReceiver mBatterySaverReceiver;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
|||||||
@@ -56,18 +56,15 @@ import java.util.Arrays;
|
|||||||
@Config(shadows = {BatterySettingsMigrateCheckerTest.ShadowUserHandle.class})
|
@Config(shadows = {BatterySettingsMigrateCheckerTest.ShadowUserHandle.class})
|
||||||
public final class BatterySettingsMigrateCheckerTest {
|
public final class BatterySettingsMigrateCheckerTest {
|
||||||
|
|
||||||
private static final Intent BOOT_COMPLETED_INTENT =
|
private static final Intent BOOT_COMPLETED_INTENT = new Intent(Intent.ACTION_BOOT_COMPLETED);
|
||||||
new Intent(Intent.ACTION_BOOT_COMPLETED);
|
|
||||||
private static final int UID = 2003;
|
private static final int UID = 2003;
|
||||||
private static final String PACKAGE_NAME = "com.android.test.app";
|
private static final String PACKAGE_NAME = "com.android.test.app";
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private BatterySettingsMigrateChecker mBatterySettingsMigrateChecker;
|
private BatterySettingsMigrateChecker mBatterySettingsMigrateChecker;
|
||||||
|
|
||||||
@Mock
|
@Mock private PackageManager mPackageManager;
|
||||||
private PackageManager mPackageManager;
|
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||||
@Mock
|
|
||||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
@@ -76,7 +73,8 @@ public final class BatterySettingsMigrateCheckerTest {
|
|||||||
BatteryUtils.getInstance(mContext).reset();
|
BatteryUtils.getInstance(mContext).reset();
|
||||||
doReturn(mContext).when(mContext).getApplicationContext();
|
doReturn(mContext).when(mContext).getApplicationContext();
|
||||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||||
doReturn(UID).when(mPackageManager)
|
doReturn(UID)
|
||||||
|
.when(mPackageManager)
|
||||||
.getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
.getPackageUid(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
||||||
BatterySettingsMigrateChecker.sBatteryOptimizeUtils = mBatteryOptimizeUtils;
|
BatterySettingsMigrateChecker.sBatteryOptimizeUtils = mBatteryOptimizeUtils;
|
||||||
mBatterySettingsMigrateChecker = new BatterySettingsMigrateChecker();
|
mBatterySettingsMigrateChecker = new BatterySettingsMigrateChecker();
|
||||||
@@ -150,45 +148,42 @@ public final class BatterySettingsMigrateCheckerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void verifyBatteryOptimizeModeApps_inAllowList_resetOptimizationMode()
|
public void verifyBatteryOptimizeModeApps_inAllowList_resetOptimizationMode() throws Exception {
|
||||||
throws Exception {
|
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED)
|
||||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils)
|
.when(mBatteryOptimizeUtils)
|
||||||
.getAppOptimizationMode();
|
.getAppOptimizationMode();
|
||||||
|
|
||||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||||
mContext,
|
mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, Arrays.asList(PACKAGE_NAME));
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
|
||||||
Arrays.asList(PACKAGE_NAME));
|
|
||||||
|
|
||||||
final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
|
final InOrder inOrder = inOrder(mBatteryOptimizeUtils);
|
||||||
inOrder.verify(mBatteryOptimizeUtils).getAppOptimizationMode();
|
inOrder.verify(mBatteryOptimizeUtils).getAppOptimizationMode();
|
||||||
inOrder.verify(mBatteryOptimizeUtils).setAppUsageState(
|
inOrder.verify(mBatteryOptimizeUtils)
|
||||||
|
.setAppUsageState(
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
||||||
BatteryOptimizeHistoricalLogEntry.Action.FORCE_RESET);
|
BatteryOptimizeHistoricalLogEntry.Action.FORCE_RESET);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void verifyBatteryOptimizeModeApps_optimizedMode_noAction() throws Exception {
|
public void verifyBatteryOptimizeModeApps_optimizedMode_noAction() throws Exception {
|
||||||
doReturn(BatteryOptimizeUtils.MODE_OPTIMIZED).when(mBatteryOptimizeUtils)
|
doReturn(BatteryOptimizeUtils.MODE_OPTIMIZED)
|
||||||
|
.when(mBatteryOptimizeUtils)
|
||||||
.getAppOptimizationMode();
|
.getAppOptimizationMode();
|
||||||
|
|
||||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||||
mContext,
|
mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, Arrays.asList(PACKAGE_NAME));
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
|
||||||
Arrays.asList(PACKAGE_NAME));
|
|
||||||
|
|
||||||
verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any());
|
verify(mBatteryOptimizeUtils, never()).setAppUsageState(anyInt(), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void verifyBatteryOptimizeModeApps_notInAllowList_noAction() throws Exception {
|
public void verifyBatteryOptimizeModeApps_notInAllowList_noAction() throws Exception {
|
||||||
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED).when(mBatteryOptimizeUtils)
|
doReturn(BatteryOptimizeUtils.MODE_RESTRICTED)
|
||||||
|
.when(mBatteryOptimizeUtils)
|
||||||
.getAppOptimizationMode();
|
.getAppOptimizationMode();
|
||||||
|
|
||||||
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
mBatterySettingsMigrateChecker.verifyBatteryOptimizeModeApps(
|
||||||
mContext,
|
mContext, BatteryOptimizeUtils.MODE_OPTIMIZED, new ArrayList<String>());
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED,
|
|
||||||
new ArrayList<String>());
|
|
||||||
|
|
||||||
verifyNoInteractions(mBatteryOptimizeUtils);
|
verifyNoInteractions(mBatteryOptimizeUtils);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -106,32 +106,22 @@ public class BatteryUtilsTest {
|
|||||||
private static final String INFO_EXCESSIVE = "anomaly_type=4,auto_restriction=false";
|
private static final String INFO_EXCESSIVE = "anomaly_type=4,auto_restriction=false";
|
||||||
private static final String INFO_WAKELOCK = "anomaly_type=1,auto_restriction=false";
|
private static final String INFO_WAKELOCK = "anomaly_type=1,auto_restriction=false";
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryStats.Uid mUid;
|
||||||
private BatteryStats.Uid mUid;
|
@Mock private BatteryStats.Timer mTimer;
|
||||||
@Mock
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
private BatteryStats.Timer mTimer;
|
@Mock private BatteryConsumer mAggregateBatteryConsumer;
|
||||||
@Mock
|
@Mock private BatteryInfo mBatteryInfo;
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
@Mock private PackageManager mPackageManager;
|
||||||
@Mock
|
@Mock private AppOpsManager mAppOpsManager;
|
||||||
private BatteryConsumer mAggregateBatteryConsumer;
|
@Mock private ApplicationInfo mApplicationInfo;
|
||||||
@Mock
|
|
||||||
private BatteryInfo mBatteryInfo;
|
|
||||||
@Mock
|
|
||||||
private PackageManager mPackageManager;
|
|
||||||
@Mock
|
|
||||||
private AppOpsManager mAppOpsManager;
|
|
||||||
@Mock
|
|
||||||
private ApplicationInfo mApplicationInfo;
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private BatteryStatsManager mBatteryStatsManager;
|
private BatteryStatsManager mBatteryStatsManager;
|
||||||
@Mock
|
|
||||||
private ApplicationInfo mHighApplicationInfo;
|
@Mock private ApplicationInfo mHighApplicationInfo;
|
||||||
@Mock
|
@Mock private ApplicationInfo mLowApplicationInfo;
|
||||||
private ApplicationInfo mLowApplicationInfo;
|
@Mock private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||||
@Mock
|
@Mock private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||||
private PowerAllowlistBackend mPowerAllowlistBackend;
|
|
||||||
@Mock
|
|
||||||
private BatteryDatabaseManager mBatteryDatabaseManager;
|
|
||||||
private AnomalyInfo mAnomalyInfo;
|
private AnomalyInfo mAnomalyInfo;
|
||||||
private BatteryUtils mBatteryUtils;
|
private BatteryUtils mBatteryUtils;
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
@@ -145,16 +135,21 @@ public class BatteryUtilsTest {
|
|||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mProvider = mFeatureFactory.powerUsageFeatureProvider;
|
mProvider = mFeatureFactory.powerUsageFeatureProvider;
|
||||||
|
|
||||||
doReturn(TIME_STATE_TOP).when(mUid).getProcessStateTime(eq(PROCESS_STATE_TOP), anyLong(),
|
doReturn(TIME_STATE_TOP)
|
||||||
anyInt());
|
.when(mUid)
|
||||||
doReturn(TIME_STATE_FOREGROUND_SERVICE).when(mUid).getProcessStateTime(
|
.getProcessStateTime(eq(PROCESS_STATE_TOP), anyLong(), anyInt());
|
||||||
eq(PROCESS_STATE_FOREGROUND_SERVICE), anyLong(), anyInt());
|
doReturn(TIME_STATE_FOREGROUND_SERVICE)
|
||||||
doReturn(TIME_STATE_TOP_SLEEPING).when(mUid).getProcessStateTime(
|
.when(mUid)
|
||||||
eq(PROCESS_STATE_TOP_SLEEPING), anyLong(), anyInt());
|
.getProcessStateTime(eq(PROCESS_STATE_FOREGROUND_SERVICE), anyLong(), anyInt());
|
||||||
doReturn(TIME_STATE_FOREGROUND).when(mUid).getProcessStateTime(eq(PROCESS_STATE_FOREGROUND),
|
doReturn(TIME_STATE_TOP_SLEEPING)
|
||||||
anyLong(), anyInt());
|
.when(mUid)
|
||||||
doReturn(TIME_STATE_BACKGROUND).when(mUid).getProcessStateTime(eq(PROCESS_STATE_BACKGROUND),
|
.getProcessStateTime(eq(PROCESS_STATE_TOP_SLEEPING), anyLong(), anyInt());
|
||||||
anyLong(), anyInt());
|
doReturn(TIME_STATE_FOREGROUND)
|
||||||
|
.when(mUid)
|
||||||
|
.getProcessStateTime(eq(PROCESS_STATE_FOREGROUND), anyLong(), anyInt());
|
||||||
|
doReturn(TIME_STATE_BACKGROUND)
|
||||||
|
.when(mUid)
|
||||||
|
.getProcessStateTime(eq(PROCESS_STATE_BACKGROUND), anyLong(), anyInt());
|
||||||
|
|
||||||
when(mPackageManager.getApplicationInfo(eq(HIGH_SDK_PACKAGE), anyInt()))
|
when(mPackageManager.getApplicationInfo(eq(HIGH_SDK_PACKAGE), anyInt()))
|
||||||
.thenReturn(mHighApplicationInfo);
|
.thenReturn(mHighApplicationInfo);
|
||||||
@@ -166,11 +161,13 @@ public class BatteryUtilsTest {
|
|||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||||
doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
|
doReturn(mAppOpsManager).when(mContext).getSystemService(Context.APP_OPS_SERVICE);
|
||||||
doReturn(mBatteryStatsManager).when(mContext)
|
doReturn(mBatteryStatsManager)
|
||||||
|
.when(mContext)
|
||||||
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
||||||
mBatteryUtils = spy(new BatteryUtils(mContext));
|
mBatteryUtils = spy(new BatteryUtils(mContext));
|
||||||
mBatteryUtils.mPowerUsageFeatureProvider = mProvider;
|
mBatteryUtils.mPowerUsageFeatureProvider = mProvider;
|
||||||
doReturn(0L).when(mBatteryUtils)
|
doReturn(0L)
|
||||||
|
.when(mBatteryUtils)
|
||||||
.getForegroundServiceTotalTimeUs(any(BatteryStats.Uid.class), anyLong());
|
.getForegroundServiceTotalTimeUs(any(BatteryStats.Uid.class), anyLong());
|
||||||
mAnomalyInfo = new AnomalyInfo(INFO_WAKELOCK);
|
mAnomalyInfo = new AnomalyInfo(INFO_WAKELOCK);
|
||||||
|
|
||||||
@@ -180,54 +177,62 @@ public class BatteryUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetProcessTimeMs_typeForeground_timeCorrect() {
|
public void testGetProcessTimeMs_typeForeground_timeCorrect() {
|
||||||
doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils)
|
doReturn(TIME_STATE_FOREGROUND + 500)
|
||||||
|
.when(mBatteryUtils)
|
||||||
.getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
|
.getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
|
||||||
|
|
||||||
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.FOREGROUND, mUid,
|
final long time =
|
||||||
BatteryStats.STATS_SINCE_CHARGED);
|
mBatteryUtils.getProcessTimeMs(
|
||||||
|
BatteryUtils.StatusType.FOREGROUND, mUid, BatteryStats.STATS_SINCE_CHARGED);
|
||||||
|
|
||||||
assertThat(time).isEqualTo(TIME_EXPECTED_FOREGROUND);
|
assertThat(time).isEqualTo(TIME_EXPECTED_FOREGROUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetProcessTimeMs_typeBackground_timeCorrect() {
|
public void testGetProcessTimeMs_typeBackground_timeCorrect() {
|
||||||
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.BACKGROUND, mUid,
|
final long time =
|
||||||
BatteryStats.STATS_SINCE_CHARGED);
|
mBatteryUtils.getProcessTimeMs(
|
||||||
|
BatteryUtils.StatusType.BACKGROUND, mUid, BatteryStats.STATS_SINCE_CHARGED);
|
||||||
|
|
||||||
assertThat(time).isEqualTo(TIME_EXPECTED_BACKGROUND);
|
assertThat(time).isEqualTo(TIME_EXPECTED_BACKGROUND);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetProcessTimeMs_typeAll_timeCorrect() {
|
public void testGetProcessTimeMs_typeAll_timeCorrect() {
|
||||||
doReturn(TIME_STATE_FOREGROUND + 500).when(mBatteryUtils)
|
doReturn(TIME_STATE_FOREGROUND + 500)
|
||||||
|
.when(mBatteryUtils)
|
||||||
.getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
|
.getForegroundActivityTotalTimeUs(eq(mUid), anyLong());
|
||||||
|
|
||||||
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, mUid,
|
final long time =
|
||||||
BatteryStats.STATS_SINCE_CHARGED);
|
mBatteryUtils.getProcessTimeMs(
|
||||||
|
BatteryUtils.StatusType.ALL, mUid, BatteryStats.STATS_SINCE_CHARGED);
|
||||||
|
|
||||||
assertThat(time).isEqualTo(TIME_EXPECTED_ALL);
|
assertThat(time).isEqualTo(TIME_EXPECTED_ALL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetProcessTimeMs_uidNull_returnZero() {
|
public void testGetProcessTimeMs_uidNull_returnZero() {
|
||||||
final long time = mBatteryUtils.getProcessTimeMs(BatteryUtils.StatusType.ALL, null,
|
final long time =
|
||||||
BatteryStats.STATS_SINCE_CHARGED);
|
mBatteryUtils.getProcessTimeMs(
|
||||||
|
BatteryUtils.StatusType.ALL, null, BatteryStats.STATS_SINCE_CHARGED);
|
||||||
|
|
||||||
assertThat(time).isEqualTo(0);
|
assertThat(time).isEqualTo(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateBatteryPercent() {
|
public void testCalculateBatteryPercent() {
|
||||||
assertThat(mBatteryUtils.calculateBatteryPercent(BATTERY_SYSTEM_USAGE, TOTAL_BATTERY_USAGE,
|
assertThat(
|
||||||
DISCHARGE_AMOUNT))
|
mBatteryUtils.calculateBatteryPercent(
|
||||||
.isWithin(PRECISION).of(PERCENT_SYSTEM_USAGE);
|
BATTERY_SYSTEM_USAGE, TOTAL_BATTERY_USAGE, DISCHARGE_AMOUNT))
|
||||||
|
.isWithin(PRECISION)
|
||||||
|
.of(PERCENT_SYSTEM_USAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCalculateLastFullChargeTime() {
|
public void testCalculateLastFullChargeTime() {
|
||||||
final long currentTimeMs = System.currentTimeMillis();
|
final long currentTimeMs = System.currentTimeMillis();
|
||||||
when(mBatteryUsageStats.getStatsStartTimestamp()).thenReturn(
|
when(mBatteryUsageStats.getStatsStartTimestamp())
|
||||||
currentTimeMs - TIME_SINCE_LAST_FULL_CHARGE_MS);
|
.thenReturn(currentTimeMs - TIME_SINCE_LAST_FULL_CHARGE_MS);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.calculateLastFullChargeTime(mBatteryUsageStats, currentTimeMs))
|
assertThat(mBatteryUtils.calculateLastFullChargeTime(mBatteryUsageStats, currentTimeMs))
|
||||||
.isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_MS);
|
.isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_MS);
|
||||||
@@ -237,46 +242,51 @@ public class BatteryUtilsTest {
|
|||||||
public void testGetForegroundActivityTotalTimeMs_returnMilliseconds() {
|
public void testGetForegroundActivityTotalTimeMs_returnMilliseconds() {
|
||||||
final long rawRealtimeUs = SystemClock.elapsedRealtime() * 1000;
|
final long rawRealtimeUs = SystemClock.elapsedRealtime() * 1000;
|
||||||
doReturn(mTimer).when(mUid).getForegroundActivityTimer();
|
doReturn(mTimer).when(mUid).getForegroundActivityTimer();
|
||||||
doReturn(TIME_SINCE_LAST_FULL_CHARGE_US).when(mTimer)
|
doReturn(TIME_SINCE_LAST_FULL_CHARGE_US)
|
||||||
|
.when(mTimer)
|
||||||
.getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED);
|
.getTotalTimeLocked(rawRealtimeUs, BatteryStats.STATS_SINCE_CHARGED);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs)).isEqualTo(
|
assertThat(mBatteryUtils.getForegroundActivityTotalTimeUs(mUid, rawRealtimeUs))
|
||||||
TIME_SINCE_LAST_FULL_CHARGE_US);
|
.isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_US);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetTargetSdkVersion_packageExist_returnSdk() throws
|
public void testGetTargetSdkVersion_packageExist_returnSdk()
|
||||||
PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME,
|
doReturn(mApplicationInfo)
|
||||||
PackageManager.GET_META_DATA);
|
.when(mPackageManager)
|
||||||
|
.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
||||||
mApplicationInfo.targetSdkVersion = SDK_VERSION;
|
mApplicationInfo.targetSdkVersion = SDK_VERSION;
|
||||||
|
|
||||||
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME)).isEqualTo(SDK_VERSION);
|
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME)).isEqualTo(SDK_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetTargetSdkVersion_packageNotExist_returnSdkNull() throws
|
public void testGetTargetSdkVersion_packageNotExist_returnSdkNull()
|
||||||
PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
doThrow(new PackageManager.NameNotFoundException()).when(
|
doThrow(new PackageManager.NameNotFoundException())
|
||||||
mPackageManager).getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
.when(mPackageManager)
|
||||||
|
.getApplicationInfo(PACKAGE_NAME, PackageManager.GET_META_DATA);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME)).isEqualTo(
|
assertThat(mBatteryUtils.getTargetSdkVersion(PACKAGE_NAME))
|
||||||
BatteryUtils.SDK_NULL);
|
.isEqualTo(BatteryUtils.SDK_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBackgroundRestrictionOn_restrictionOn_returnTrue() {
|
public void testBackgroundRestrictionOn_restrictionOn_returnTrue() {
|
||||||
doReturn(AppOpsManager.MODE_IGNORED).when(mAppOpsManager).checkOpNoThrow(
|
doReturn(AppOpsManager.MODE_IGNORED)
|
||||||
AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
|
.when(mAppOpsManager)
|
||||||
|
.checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID,
|
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, PACKAGE_NAME))
|
||||||
PACKAGE_NAME)).isTrue();
|
.isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testBackgroundRestrictionOn_restrictionOff_returnFalse() {
|
public void testBackgroundRestrictionOn_restrictionOff_returnFalse() {
|
||||||
doReturn(AppOpsManager.MODE_ALLOWED).when(mAppOpsManager).checkOpNoThrow(
|
doReturn(AppOpsManager.MODE_ALLOWED)
|
||||||
AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
|
.when(mAppOpsManager)
|
||||||
|
.checkOpNoThrow(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, PACKAGE_NAME);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, PACKAGE_NAME))
|
assertThat(mBatteryUtils.isBackgroundRestrictionEnabled(SDK_VERSION, UID, PACKAGE_NAME))
|
||||||
.isFalse();
|
.isFalse();
|
||||||
@@ -294,8 +304,8 @@ public class BatteryUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsPreOApp_containPreOApp_ReturnTrue() {
|
public void testIsPreOApp_containPreOApp_ReturnTrue() {
|
||||||
assertThat(
|
assertThat(mBatteryUtils.isPreOApp(new String[] {HIGH_SDK_PACKAGE, LOW_SDK_PACKAGE}))
|
||||||
mBatteryUtils.isPreOApp(new String[]{HIGH_SDK_PACKAGE, LOW_SDK_PACKAGE})).isTrue();
|
.isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -309,9 +319,17 @@ public class BatteryUtilsTest {
|
|||||||
mBatteryUtils.setForceAppStandby(UID, LOW_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
mBatteryUtils.setForceAppStandby(UID, LOW_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
||||||
|
|
||||||
// Restrict both OP_RUN_IN_BACKGROUND and OP_RUN_ANY_IN_BACKGROUND
|
// Restrict both OP_RUN_IN_BACKGROUND and OP_RUN_ANY_IN_BACKGROUND
|
||||||
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID, LOW_SDK_PACKAGE,
|
verify(mAppOpsManager)
|
||||||
|
.setMode(
|
||||||
|
AppOpsManager.OP_RUN_IN_BACKGROUND,
|
||||||
|
UID,
|
||||||
|
LOW_SDK_PACKAGE,
|
||||||
AppOpsManager.MODE_IGNORED);
|
AppOpsManager.MODE_IGNORED);
|
||||||
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, LOW_SDK_PACKAGE,
|
verify(mAppOpsManager)
|
||||||
|
.setMode(
|
||||||
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||||
|
UID,
|
||||||
|
LOW_SDK_PACKAGE,
|
||||||
AppOpsManager.MODE_IGNORED);
|
AppOpsManager.MODE_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -321,18 +339,27 @@ public class BatteryUtilsTest {
|
|||||||
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
||||||
|
|
||||||
// Don't restrict OP_RUN_IN_BACKGROUND because it is already been restricted for O app
|
// Don't restrict OP_RUN_IN_BACKGROUND because it is already been restricted for O app
|
||||||
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_IN_BACKGROUND, UID,
|
verify(mAppOpsManager, never())
|
||||||
HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
.setMode(
|
||||||
|
AppOpsManager.OP_RUN_IN_BACKGROUND,
|
||||||
|
UID,
|
||||||
|
HIGH_SDK_PACKAGE,
|
||||||
|
AppOpsManager.MODE_IGNORED);
|
||||||
// Restrict OP_RUN_ANY_IN_BACKGROUND
|
// Restrict OP_RUN_ANY_IN_BACKGROUND
|
||||||
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
verify(mAppOpsManager)
|
||||||
HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
.setMode(
|
||||||
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||||
|
UID,
|
||||||
|
HIGH_SDK_PACKAGE,
|
||||||
|
AppOpsManager.MODE_IGNORED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSetForceAppStandby_restrictApp_recordTime() {
|
public void testSetForceAppStandby_restrictApp_recordTime() {
|
||||||
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_IGNORED);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager).insertAction(
|
verify(mBatteryDatabaseManager)
|
||||||
|
.insertAction(
|
||||||
eq(AnomalyDatabaseHelper.ActionType.RESTRICTION), eq(UID),
|
eq(AnomalyDatabaseHelper.ActionType.RESTRICTION), eq(UID),
|
||||||
eq(HIGH_SDK_PACKAGE), anyLong());
|
eq(HIGH_SDK_PACKAGE), anyLong());
|
||||||
}
|
}
|
||||||
@@ -341,22 +368,24 @@ public class BatteryUtilsTest {
|
|||||||
public void testSetForceAppStandby_unrestrictApp_deleteTime() {
|
public void testSetForceAppStandby_unrestrictApp_deleteTime() {
|
||||||
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_ALLOWED);
|
mBatteryUtils.setForceAppStandby(UID, HIGH_SDK_PACKAGE, AppOpsManager.MODE_ALLOWED);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager).deleteAction(AnomalyDatabaseHelper.ActionType.RESTRICTION,
|
verify(mBatteryDatabaseManager)
|
||||||
UID, HIGH_SDK_PACKAGE);
|
.deleteAction(AnomalyDatabaseHelper.ActionType.RESTRICTION, UID, HIGH_SDK_PACKAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsForceAppStandbyEnabled_enabled_returnTrue() {
|
public void testIsForceAppStandbyEnabled_enabled_returnTrue() {
|
||||||
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
when(mAppOpsManager.checkOpNoThrow(
|
||||||
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_IGNORED);
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
|
||||||
|
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isTrue();
|
assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsForceAppStandbyEnabled_disabled_returnFalse() {
|
public void testIsForceAppStandbyEnabled_disabled_returnFalse() {
|
||||||
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
when(mAppOpsManager.checkOpNoThrow(
|
||||||
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_ALLOWED);
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
|
||||||
|
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isFalse();
|
assertThat(mBatteryUtils.isForceAppStandbyEnabled(UID, PACKAGE_NAME)).isFalse();
|
||||||
}
|
}
|
||||||
@@ -372,8 +401,8 @@ public class BatteryUtilsTest {
|
|||||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||||
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
|
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
|
||||||
|
|
||||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||||
mAnomalyInfo)).isTrue();
|
.isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -382,35 +411,38 @@ public class BatteryUtilsTest {
|
|||||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||||
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
|
mHighApplicationInfo.flags = ApplicationInfo.FLAG_SYSTEM;
|
||||||
|
|
||||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||||
mAnomalyInfo)).isTrue();
|
.isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testShouldHideAnomaly_systemUid_returnTrue() {
|
public void testShouldHideAnomaly_systemUid_returnTrue() {
|
||||||
final int systemUid = Process.ROOT_UID;
|
final int systemUid = Process.ROOT_UID;
|
||||||
doReturn(new String[]{HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(systemUid);
|
doReturn(new String[] {HIGH_SDK_PACKAGE})
|
||||||
|
.when(mPackageManager)
|
||||||
|
.getPackagesForUid(systemUid);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, systemUid,
|
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, systemUid, mAnomalyInfo))
|
||||||
mAnomalyInfo)).isTrue();
|
.isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testShouldHideAnomaly_AppInDozeList_returnTrue() {
|
public void testShouldHideAnomaly_AppInDozeList_returnTrue() {
|
||||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||||
doReturn(true).when(mPowerAllowlistBackend)
|
doReturn(true)
|
||||||
|
.when(mPowerAllowlistBackend)
|
||||||
.isAllowlisted(new String[] {HIGH_SDK_PACKAGE}, UID);
|
.isAllowlisted(new String[] {HIGH_SDK_PACKAGE}, UID);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||||
mAnomalyInfo)).isTrue();
|
.isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testShouldHideAnomaly_normalApp_returnFalse() {
|
public void testShouldHideAnomaly_normalApp_returnFalse() {
|
||||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||||
mAnomalyInfo)).isFalse();
|
.isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -418,8 +450,8 @@ public class BatteryUtilsTest {
|
|||||||
doReturn(new String[] {LOW_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
doReturn(new String[] {LOW_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||||
mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
|
mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||||
mAnomalyInfo)).isFalse();
|
.isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -427,19 +459,24 @@ public class BatteryUtilsTest {
|
|||||||
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
doReturn(new String[] {HIGH_SDK_PACKAGE}).when(mPackageManager).getPackagesForUid(UID);
|
||||||
mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
|
mAnomalyInfo = new AnomalyInfo(INFO_EXCESSIVE);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID,
|
assertThat(mBatteryUtils.shouldHideAnomaly(mPowerAllowlistBackend, UID, mAnomalyInfo))
|
||||||
mAnomalyInfo)).isTrue();
|
.isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void clearForceAppStandby_appRestricted_clearAndReturnTrue() {
|
public void clearForceAppStandby_appRestricted_clearAndReturnTrue() {
|
||||||
when(mBatteryUtils.getPackageUid(HIGH_SDK_PACKAGE)).thenReturn(UID);
|
when(mBatteryUtils.getPackageUid(HIGH_SDK_PACKAGE)).thenReturn(UID);
|
||||||
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
when(mAppOpsManager.checkOpNoThrow(
|
||||||
HIGH_SDK_PACKAGE)).thenReturn(AppOpsManager.MODE_IGNORED);
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, HIGH_SDK_PACKAGE))
|
||||||
|
.thenReturn(AppOpsManager.MODE_IGNORED);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.clearForceAppStandby(HIGH_SDK_PACKAGE)).isTrue();
|
assertThat(mBatteryUtils.clearForceAppStandby(HIGH_SDK_PACKAGE)).isTrue();
|
||||||
verify(mAppOpsManager).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
verify(mAppOpsManager)
|
||||||
HIGH_SDK_PACKAGE, AppOpsManager.MODE_ALLOWED);
|
.setMode(
|
||||||
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||||
|
UID,
|
||||||
|
HIGH_SDK_PACKAGE,
|
||||||
|
AppOpsManager.MODE_ALLOWED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -447,27 +484,36 @@ public class BatteryUtilsTest {
|
|||||||
when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(BatteryUtils.UID_NULL);
|
when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(BatteryUtils.UID_NULL);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse();
|
assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse();
|
||||||
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
verify(mAppOpsManager, never())
|
||||||
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
|
.setMode(
|
||||||
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||||
|
UID,
|
||||||
|
PACKAGE_NAME,
|
||||||
|
AppOpsManager.MODE_ALLOWED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void clearForceAppStandby_appUnrestricted_returnFalse() {
|
public void clearForceAppStandby_appUnrestricted_returnFalse() {
|
||||||
when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(UID);
|
when(mBatteryUtils.getPackageUid(PACKAGE_NAME)).thenReturn(UID);
|
||||||
when(mAppOpsManager.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
when(mAppOpsManager.checkOpNoThrow(
|
||||||
PACKAGE_NAME)).thenReturn(AppOpsManager.MODE_ALLOWED);
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID, PACKAGE_NAME))
|
||||||
|
.thenReturn(AppOpsManager.MODE_ALLOWED);
|
||||||
|
|
||||||
assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse();
|
assertThat(mBatteryUtils.clearForceAppStandby(PACKAGE_NAME)).isFalse();
|
||||||
verify(mAppOpsManager, never()).setMode(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UID,
|
verify(mAppOpsManager, never())
|
||||||
PACKAGE_NAME, AppOpsManager.MODE_ALLOWED);
|
.setMode(
|
||||||
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||||
|
UID,
|
||||||
|
PACKAGE_NAME,
|
||||||
|
AppOpsManager.MODE_ALLOWED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getBatteryInfo_providerNull_shouldNotCrash() {
|
public void getBatteryInfo_providerNull_shouldNotCrash() {
|
||||||
when(mProvider.isEnhancedBatteryPredictionEnabled(mContext)).thenReturn(true);
|
when(mProvider.isEnhancedBatteryPredictionEnabled(mContext)).thenReturn(true);
|
||||||
when(mProvider.getEnhancedBatteryPrediction(mContext)).thenReturn(null);
|
when(mProvider.getEnhancedBatteryPrediction(mContext)).thenReturn(null);
|
||||||
when(mContext.registerReceiver(nullable(BroadcastReceiver.class),
|
when(mContext.registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class)))
|
||||||
any(IntentFilter.class))).thenReturn(new Intent());
|
.thenReturn(new Intent());
|
||||||
|
|
||||||
// Should not crash
|
// Should not crash
|
||||||
assertThat(mBatteryUtils.getBatteryInfo(TAG)).isNotNull();
|
assertThat(mBatteryUtils.getBatteryInfo(TAG)).isNotNull();
|
||||||
|
|||||||
@@ -51,10 +51,8 @@ public class HighPowerDetailTest {
|
|||||||
private HighPowerDetail mFragment;
|
private HighPowerDetail mFragment;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
@Mock private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||||
private PowerAllowlistBackend mPowerAllowlistBackend;
|
@Mock private BatteryUtils mBatteryUtils;
|
||||||
@Mock
|
|
||||||
private BatteryUtils mBatteryUtils;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -73,13 +71,19 @@ public class HighPowerDetailTest {
|
|||||||
public void logSpecialPermissionChange() {
|
public void logSpecialPermissionChange() {
|
||||||
// Deny means app is allowlisted to opt out of power save restrictions
|
// Deny means app is allowlisted to opt out of power save restrictions
|
||||||
HighPowerDetail.logSpecialPermissionChange(true, "app", RuntimeEnvironment.application);
|
HighPowerDetail.logSpecialPermissionChange(true, "app", RuntimeEnvironment.application);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_DENY), eq("app"));
|
.action(
|
||||||
|
any(Context.class),
|
||||||
|
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_DENY),
|
||||||
|
eq("app"));
|
||||||
|
|
||||||
// Allow means app is NOT allowlisted to opt out of power save restrictions
|
// Allow means app is NOT allowlisted to opt out of power save restrictions
|
||||||
HighPowerDetail.logSpecialPermissionChange(false, "app", RuntimeEnvironment.application);
|
HighPowerDetail.logSpecialPermissionChange(false, "app", RuntimeEnvironment.application);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW), eq("app"));
|
.action(
|
||||||
|
any(Context.class),
|
||||||
|
eq(MetricsProto.MetricsEvent.APP_SPECIAL_PERMISSION_BATTERY_ALLOW),
|
||||||
|
eq("app"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -87,15 +91,17 @@ public class HighPowerDetailTest {
|
|||||||
mFragment.mIsEnabled = true;
|
mFragment.mIsEnabled = true;
|
||||||
when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE, TEST_UID)).thenReturn(false);
|
when(mPowerAllowlistBackend.isAllowlisted(TEST_PACKAGE, TEST_UID)).thenReturn(false);
|
||||||
mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
|
mFragment.onClick(null, DialogInterface.BUTTON_POSITIVE);
|
||||||
verify(mBatteryUtils).setForceAppStandby(TEST_UID, TEST_PACKAGE,
|
verify(mBatteryUtils)
|
||||||
AppOpsManager.MODE_ALLOWED);
|
.setForceAppStandby(TEST_UID, TEST_PACKAGE, AppOpsManager.MODE_ALLOWED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getSummary_defaultActivePackage_returnUnavailable() {
|
public void getSummary_defaultActivePackage_returnUnavailable() {
|
||||||
doReturn(true).when(mPowerAllowlistBackend).isDefaultActiveApp(TEST_PACKAGE, TEST_UID);
|
doReturn(true).when(mPowerAllowlistBackend).isDefaultActiveApp(TEST_PACKAGE, TEST_UID);
|
||||||
|
|
||||||
assertThat(HighPowerDetail.getSummary(mContext, mPowerAllowlistBackend, TEST_PACKAGE,
|
assertThat(
|
||||||
TEST_UID)).isEqualTo(mContext.getString(R.string.high_power_system));
|
HighPowerDetail.getSummary(
|
||||||
|
mContext, mPowerAllowlistBackend, TEST_PACKAGE, TEST_UID))
|
||||||
|
.isEqualTo(mContext.getString(R.string.high_power_system));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ public class OptimizedPreferenceControllerTest {
|
|||||||
public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() {
|
public void testUpdateState_isSystemOrDefaultAppAndOptimizeStates_prefChecked() {
|
||||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
@@ -98,8 +98,8 @@ public class OptimizedPreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testUpdateState_isOptimizedStates_prefChecked() {
|
public void testUpdateState_isOptimizedStates_prefChecked() {
|
||||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,8 @@ import org.robolectric.annotation.Config;
|
|||||||
import org.robolectric.util.ReflectionHelpers;
|
import org.robolectric.util.ReflectionHelpers;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {
|
@Config(
|
||||||
|
shadows = {
|
||||||
ShadowEntityHeaderController.class,
|
ShadowEntityHeaderController.class,
|
||||||
ShadowActivityManager.class,
|
ShadowActivityManager.class,
|
||||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||||
@@ -96,30 +97,19 @@ public class PowerBackgroundUsageDetailTest {
|
|||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private FragmentActivity mActivity;
|
private FragmentActivity mActivity;
|
||||||
@Mock
|
|
||||||
private EntityHeaderController mEntityHeaderController;
|
@Mock private EntityHeaderController mEntityHeaderController;
|
||||||
@Mock
|
@Mock private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
||||||
private BatteryOptimizeUtils mBatteryOptimizeUtils;
|
@Mock private LayoutPreference mHeaderPreference;
|
||||||
@Mock
|
@Mock private ApplicationsState mState;
|
||||||
private LayoutPreference mHeaderPreference;
|
@Mock private Bundle mBundle;
|
||||||
@Mock
|
@Mock private LoaderManager mLoaderManager;
|
||||||
private ApplicationsState mState;
|
@Mock private ApplicationsState.AppEntry mAppEntry;
|
||||||
@Mock
|
@Mock private BatteryEntry mBatteryEntry;
|
||||||
private Bundle mBundle;
|
@Mock private BackupManager mBackupManager;
|
||||||
@Mock
|
@Mock private PackageManager mPackageManager;
|
||||||
private LoaderManager mLoaderManager;
|
@Mock private AppOpsManager mAppOpsManager;
|
||||||
@Mock
|
@Mock private Switch mMockSwitch;
|
||||||
private ApplicationsState.AppEntry mAppEntry;
|
|
||||||
@Mock
|
|
||||||
private BatteryEntry mBatteryEntry;
|
|
||||||
@Mock
|
|
||||||
private BackupManager mBackupManager;
|
|
||||||
@Mock
|
|
||||||
private PackageManager mPackageManager;
|
|
||||||
@Mock
|
|
||||||
private AppOpsManager mAppOpsManager;
|
|
||||||
@Mock
|
|
||||||
private Switch mMockSwitch;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -137,19 +127,26 @@ public class PowerBackgroundUsageDetailTest {
|
|||||||
doReturn(mLoaderManager).when(mFragment).getLoaderManager();
|
doReturn(mLoaderManager).when(mFragment).getLoaderManager();
|
||||||
|
|
||||||
ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
|
ShadowEntityHeaderController.setUseMock(mEntityHeaderController);
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setButtonActions(anyInt(), anyInt());
|
.setButtonActions(anyInt(), anyInt());
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setIcon(nullable(Drawable.class));
|
.setIcon(nullable(Drawable.class));
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController).setIcon(nullable(
|
doReturn(mEntityHeaderController)
|
||||||
ApplicationsState.AppEntry.class));
|
.when(mEntityHeaderController)
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
.setIcon(nullable(ApplicationsState.AppEntry.class));
|
||||||
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setLabel(nullable(String.class));
|
.setLabel(nullable(String.class));
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setLabel(nullable(String.class));
|
.setLabel(nullable(String.class));
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setLabel(nullable(ApplicationsState.AppEntry.class));
|
.setLabel(nullable(ApplicationsState.AppEntry.class));
|
||||||
doReturn(mEntityHeaderController).when(mEntityHeaderController)
|
doReturn(mEntityHeaderController)
|
||||||
|
.when(mEntityHeaderController)
|
||||||
.setSummary(nullable(String.class));
|
.setSummary(nullable(String.class));
|
||||||
|
|
||||||
when(mBatteryEntry.getUid()).thenReturn(UID);
|
when(mBatteryEntry.getUid()).thenReturn(UID);
|
||||||
@@ -169,13 +166,15 @@ public class PowerBackgroundUsageDetailTest {
|
|||||||
|
|
||||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||||
|
|
||||||
Answer<Void> callable = invocation -> {
|
Answer<Void> callable =
|
||||||
|
invocation -> {
|
||||||
mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
mBundle = captor.getValue().getBundleExtra(EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||||
System.out.println("mBundle = " + mBundle);
|
System.out.println("mBundle = " + mBundle);
|
||||||
return null;
|
return null;
|
||||||
};
|
};
|
||||||
doAnswer(callable).when(mActivity).startActivityAsUser(captor.capture(),
|
doAnswer(callable)
|
||||||
nullable(UserHandle.class));
|
.when(mActivity)
|
||||||
|
.startActivityAsUser(captor.capture(), nullable(UserHandle.class));
|
||||||
doAnswer(callable).when(mActivity).startActivity(captor.capture());
|
doAnswer(callable).when(mActivity).startActivity(captor.capture());
|
||||||
|
|
||||||
mFooterPreference = spy(new FooterPreference(mContext));
|
mFooterPreference = spy(new FooterPreference(mContext));
|
||||||
@@ -207,7 +206,9 @@ public class PowerBackgroundUsageDetailTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initHeader_HasAppEntry_BuildByAppEntry() {
|
public void initHeader_HasAppEntry_BuildByAppEntry() {
|
||||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
ReflectionHelpers.setStaticField(
|
||||||
|
AppUtils.class,
|
||||||
|
"sInstantAppDataProvider",
|
||||||
new InstantAppDataProvider() {
|
new InstantAppDataProvider() {
|
||||||
@Override
|
@Override
|
||||||
public boolean isInstantApp(ApplicationInfo info) {
|
public boolean isInstantApp(ApplicationInfo info) {
|
||||||
@@ -224,7 +225,9 @@ public class PowerBackgroundUsageDetailTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void initHeader_HasAppEntry_InstantApp() {
|
public void initHeader_HasAppEntry_InstantApp() {
|
||||||
ReflectionHelpers.setStaticField(AppUtils.class, "sInstantAppDataProvider",
|
ReflectionHelpers.setStaticField(
|
||||||
|
AppUtils.class,
|
||||||
|
"sInstantAppDataProvider",
|
||||||
new InstantAppDataProvider() {
|
new InstantAppDataProvider() {
|
||||||
@Override
|
@Override
|
||||||
public boolean isInstantApp(ApplicationInfo info) {
|
public boolean isInstantApp(ApplicationInfo info) {
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ public class PowerUsageFeatureProviderImplTest {
|
|||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
|
||||||
private PackageManager mPackageManager;
|
@Mock private PackageManager mPackageManager;
|
||||||
private PowerUsageFeatureProviderImpl mPowerFeatureProvider;
|
private PowerUsageFeatureProviderImpl mPowerFeatureProvider;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -117,16 +117,18 @@ public class PowerUsageFeatureProviderImplTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsSmartBatterySupported_smartBatterySupported_returnTrue() {
|
public void testIsSmartBatterySupported_smartBatterySupported_returnTrue() {
|
||||||
when(mContext.getResources().getBoolean(
|
when(mContext.getResources()
|
||||||
com.android.internal.R.bool.config_smart_battery_available)).thenReturn(true);
|
.getBoolean(com.android.internal.R.bool.config_smart_battery_available))
|
||||||
|
.thenReturn(true);
|
||||||
|
|
||||||
assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isTrue();
|
assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsSmartBatterySupported_smartBatteryNotSupported_returnFalse() {
|
public void testIsSmartBatterySupported_smartBatteryNotSupported_returnFalse() {
|
||||||
when(mContext.getResources().getBoolean(
|
when(mContext.getResources()
|
||||||
com.android.internal.R.bool.config_smart_battery_available)).thenReturn(false);
|
.getBoolean(com.android.internal.R.bool.config_smart_battery_available))
|
||||||
|
.thenReturn(false);
|
||||||
|
|
||||||
assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isFalse();
|
assertThat(mPowerFeatureProvider.isSmartBatterySupported()).isFalse();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,12 +46,9 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
private PowerUsageTimeController mPowerUsageTimeController;
|
private PowerUsageTimeController mPowerUsageTimeController;
|
||||||
|
|
||||||
@Mock
|
@Mock private PreferenceCategory mPowerUsageTimeCategory;
|
||||||
private PreferenceCategory mPowerUsageTimeCategory;
|
@Mock private PowerUsageTimePreference mScreenTimePreference;
|
||||||
@Mock
|
@Mock private PowerUsageTimePreference mBackgroundTimePreference;
|
||||||
private PowerUsageTimePreference mScreenTimePreference;
|
|
||||||
@Mock
|
|
||||||
private PowerUsageTimePreference mBackgroundTimePreference;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -67,18 +64,24 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleScreenTimeUpdated_noInfo_prefInvisible() {
|
public void handleScreenTimeUpdated_noInfo_prefInvisible() {
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(/*slotTime=*/ null,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
/*screenOnTimeInMs=*/ 0, /*backgroundTimeInMs=*/ 0,
|
/* slotTime= */ null,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
/* screenOnTimeInMs= */ 0,
|
||||||
|
/* backgroundTimeInMs= */ 0,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(false);
|
verifyAllPreferencesVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleScreenTimeUpdated_onlySlotTime_prefInvisible() {
|
public void handleScreenTimeUpdated_onlySlotTime_prefInvisible() {
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
/*screenOnTimeInMs=*/ 0, /*backgroundTimeInMs=*/ 0,
|
SLOT_TIME,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
/* screenOnTimeInMs= */ 0,
|
||||||
|
/* backgroundTimeInMs= */ 0,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(false);
|
verifyAllPreferencesVisible(false);
|
||||||
}
|
}
|
||||||
@@ -88,9 +91,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeAMinute = 60000;
|
final long screenOnTimeAMinute = 60000;
|
||||||
final long backgroundTimeZero = 0;
|
final long backgroundTimeZero = 0;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeAMinute, backgroundTimeZero,
|
SLOT_TIME,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
screenOnTimeAMinute,
|
||||||
|
backgroundTimeZero,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyOnePreferenceInvisible(mBackgroundTimePreference);
|
verifyOnePreferenceInvisible(mBackgroundTimePreference);
|
||||||
verify(mScreenTimePreference).setTimeTitle("Screen time");
|
verify(mScreenTimePreference).setTimeTitle("Screen time");
|
||||||
@@ -103,9 +109,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeZero = 0;
|
final long screenOnTimeZero = 0;
|
||||||
final long backgroundTimeTwoMinutes = 120000;
|
final long backgroundTimeTwoMinutes = 120000;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeZero, backgroundTimeTwoMinutes,
|
SLOT_TIME,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
screenOnTimeZero,
|
||||||
|
backgroundTimeTwoMinutes,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyOnePreferenceInvisible(mScreenTimePreference);
|
verifyOnePreferenceInvisible(mScreenTimePreference);
|
||||||
verify(mBackgroundTimePreference).setTimeTitle("Background time");
|
verify(mBackgroundTimePreference).setTimeTitle("Background time");
|
||||||
@@ -118,9 +127,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeAMinute = 60000;
|
final long screenOnTimeAMinute = 60000;
|
||||||
final long backgroundTimeTwoMinutes = 120000;
|
final long backgroundTimeTwoMinutes = 120000;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeAMinute, backgroundTimeTwoMinutes,
|
SLOT_TIME,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
screenOnTimeAMinute,
|
||||||
|
backgroundTimeTwoMinutes,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(true);
|
verifyAllPreferencesVisible(true);
|
||||||
verify(mScreenTimePreference).setTimeTitle("Screen time");
|
verify(mScreenTimePreference).setTimeTitle("Screen time");
|
||||||
@@ -137,9 +149,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long backgroundTimeTwoMinutes = 120000;
|
final long backgroundTimeTwoMinutes = 120000;
|
||||||
final long screenOnTimeAMinute = 60000;
|
final long screenOnTimeAMinute = 60000;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(/*slotTime=*/ null,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeAMinute, backgroundTimeTwoMinutes,
|
/* slotTime= */ null,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
screenOnTimeAMinute,
|
||||||
|
backgroundTimeTwoMinutes,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(true);
|
verifyAllPreferencesVisible(true);
|
||||||
verify(mPowerUsageTimeCategory).setTitle("App usage since last full charge");
|
verify(mPowerUsageTimeCategory).setTitle("App usage since last full charge");
|
||||||
@@ -150,9 +165,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeAMinute = 60000;
|
final long screenOnTimeAMinute = 60000;
|
||||||
final long backgroundTimeLessThanAMinute = 59999;
|
final long backgroundTimeLessThanAMinute = 59999;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeAMinute, backgroundTimeLessThanAMinute,
|
SLOT_TIME,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
screenOnTimeAMinute,
|
||||||
|
backgroundTimeLessThanAMinute,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(true);
|
verifyAllPreferencesVisible(true);
|
||||||
verify(mScreenTimePreference).setTimeSummary("1 min");
|
verify(mScreenTimePreference).setTimeSummary("1 min");
|
||||||
@@ -164,9 +182,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeLessThanAMinute = 59999;
|
final long screenOnTimeLessThanAMinute = 59999;
|
||||||
final long backgroundTimeTwoMinutes = 120000;
|
final long backgroundTimeTwoMinutes = 120000;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeLessThanAMinute, backgroundTimeTwoMinutes,
|
SLOT_TIME,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
screenOnTimeLessThanAMinute,
|
||||||
|
backgroundTimeTwoMinutes,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(true);
|
verifyAllPreferencesVisible(true);
|
||||||
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
||||||
@@ -178,9 +199,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeLessThanAMinute = 59999;
|
final long screenOnTimeLessThanAMinute = 59999;
|
||||||
final long backgroundTimeLessThanAMinute = 59999;
|
final long backgroundTimeLessThanAMinute = 59999;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeLessThanAMinute, backgroundTimeLessThanAMinute,
|
SLOT_TIME,
|
||||||
/*anomalyHintPrefKey=*/ null, /*anomalyHintText=*/ null);
|
screenOnTimeLessThanAMinute,
|
||||||
|
backgroundTimeLessThanAMinute,
|
||||||
|
/* anomalyHintPrefKey= */ null,
|
||||||
|
/* anomalyHintText= */ null);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(true);
|
verifyAllPreferencesVisible(true);
|
||||||
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
||||||
@@ -192,9 +216,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeAMinute = 60000;
|
final long screenOnTimeAMinute = 60000;
|
||||||
final long backgroundTimeTwoMinutes = 120000;
|
final long backgroundTimeTwoMinutes = 120000;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeAMinute, backgroundTimeTwoMinutes,
|
SLOT_TIME,
|
||||||
KEY_SCREEN_ON_TIME_PREF, TEST_ANOMALY_HINT_TEXT);
|
screenOnTimeAMinute,
|
||||||
|
backgroundTimeTwoMinutes,
|
||||||
|
KEY_SCREEN_ON_TIME_PREF,
|
||||||
|
TEST_ANOMALY_HINT_TEXT);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(true);
|
verifyAllPreferencesVisible(true);
|
||||||
verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT);
|
verify(mScreenTimePreference).setAnomalyHint(TEST_ANOMALY_HINT_TEXT);
|
||||||
@@ -206,9 +233,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeAMinute = 60000;
|
final long screenOnTimeAMinute = 60000;
|
||||||
final long backgroundTimeTwoMinutes = 120000;
|
final long backgroundTimeTwoMinutes = 120000;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeAMinute, backgroundTimeTwoMinutes,
|
SLOT_TIME,
|
||||||
KEY_BACKGROUND_TIME_PREF, TEST_ANOMALY_HINT_TEXT);
|
screenOnTimeAMinute,
|
||||||
|
backgroundTimeTwoMinutes,
|
||||||
|
KEY_BACKGROUND_TIME_PREF,
|
||||||
|
TEST_ANOMALY_HINT_TEXT);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(true);
|
verifyAllPreferencesVisible(true);
|
||||||
verify(mScreenTimePreference, never()).setAnomalyHint(anyString());
|
verify(mScreenTimePreference, never()).setAnomalyHint(anyString());
|
||||||
@@ -220,9 +250,12 @@ public final class PowerUsageTimeControllerTest {
|
|||||||
final long screenOnTimeZero = 0;
|
final long screenOnTimeZero = 0;
|
||||||
final long backgroundTimeTwoMinutes = 120000;
|
final long backgroundTimeTwoMinutes = 120000;
|
||||||
|
|
||||||
mPowerUsageTimeController.handleScreenTimeUpdated(SLOT_TIME,
|
mPowerUsageTimeController.handleScreenTimeUpdated(
|
||||||
screenOnTimeZero, backgroundTimeTwoMinutes,
|
SLOT_TIME,
|
||||||
KEY_SCREEN_ON_TIME_PREF, TEST_ANOMALY_HINT_TEXT);
|
screenOnTimeZero,
|
||||||
|
backgroundTimeTwoMinutes,
|
||||||
|
KEY_SCREEN_ON_TIME_PREF,
|
||||||
|
TEST_ANOMALY_HINT_TEXT);
|
||||||
|
|
||||||
verifyAllPreferencesVisible(true);
|
verifyAllPreferencesVisible(true);
|
||||||
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
verify(mScreenTimePreference).setTimeSummary("Less than a min");
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
import android.util.Pair;
|
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
import androidx.preference.PreferenceManager;
|
import androidx.preference.PreferenceManager;
|
||||||
@@ -65,12 +64,9 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
private static final String RESTRICTED_PACKAGE_NAME = "com.android.restricted.package";
|
private static final String RESTRICTED_PACKAGE_NAME = "com.android.restricted.package";
|
||||||
private static final int OTHER_USER_UID = UserHandle.PER_USER_RANGE + RESTRICTED_UID;
|
private static final int OTHER_USER_UID = UserHandle.PER_USER_RANGE + RESTRICTED_UID;
|
||||||
|
|
||||||
@Mock
|
@Mock private AppOpsManager mAppOpsManager;
|
||||||
private AppOpsManager mAppOpsManager;
|
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||||
@Mock
|
@Mock private UserManager mUserManager;
|
||||||
private InstrumentedPreferenceFragment mFragment;
|
|
||||||
@Mock
|
|
||||||
private UserManager mUserManager;
|
|
||||||
|
|
||||||
private AppOpsManager.PackageOps mRestrictedPackageOps;
|
private AppOpsManager.PackageOps mRestrictedPackageOps;
|
||||||
private AppOpsManager.PackageOps mAllowedPackageOps;
|
private AppOpsManager.PackageOps mAllowedPackageOps;
|
||||||
@@ -84,18 +80,24 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
final List<AppOpsManager.OpEntry> allowOps = new ArrayList<>();
|
final List<AppOpsManager.OpEntry> allowOps = new ArrayList<>();
|
||||||
allowOps.add(new AppOpsManager.OpEntry(
|
allowOps.add(
|
||||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_ALLOWED,
|
new AppOpsManager.OpEntry(
|
||||||
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||||
|
AppOpsManager.MODE_ALLOWED,
|
||||||
Collections.emptyMap()));
|
Collections.emptyMap()));
|
||||||
final List<AppOpsManager.OpEntry> restrictedOps = new ArrayList<>();
|
final List<AppOpsManager.OpEntry> restrictedOps = new ArrayList<>();
|
||||||
restrictedOps.add(new AppOpsManager.OpEntry(
|
restrictedOps.add(
|
||||||
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, AppOpsManager.MODE_IGNORED,
|
new AppOpsManager.OpEntry(
|
||||||
|
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND,
|
||||||
|
AppOpsManager.MODE_IGNORED,
|
||||||
Collections.emptyMap()));
|
Collections.emptyMap()));
|
||||||
mAllowedPackageOps = new AppOpsManager.PackageOps(
|
mAllowedPackageOps =
|
||||||
ALLOWED_PACKAGE_NAME, ALLOWED_UID, allowOps);
|
new AppOpsManager.PackageOps(ALLOWED_PACKAGE_NAME, ALLOWED_UID, allowOps);
|
||||||
mRestrictedPackageOps = new AppOpsManager.PackageOps(
|
mRestrictedPackageOps =
|
||||||
|
new AppOpsManager.PackageOps(
|
||||||
RESTRICTED_PACKAGE_NAME, RESTRICTED_UID, restrictedOps);
|
RESTRICTED_PACKAGE_NAME, RESTRICTED_UID, restrictedOps);
|
||||||
mOtherUserPackageOps = new AppOpsManager.PackageOps(
|
mOtherUserPackageOps =
|
||||||
|
new AppOpsManager.PackageOps(
|
||||||
RESTRICTED_PACKAGE_NAME, OTHER_USER_UID, restrictedOps);
|
RESTRICTED_PACKAGE_NAME, OTHER_USER_UID, restrictedOps);
|
||||||
|
|
||||||
mContext = spy(ApplicationProvider.getApplicationContext());
|
mContext = spy(ApplicationProvider.getApplicationContext());
|
||||||
@@ -109,8 +111,8 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
mPreferenceScreen = spy(new PreferenceScreen(mContext, null));
|
mPreferenceScreen = spy(new PreferenceScreen(mContext, null));
|
||||||
when(mPreferenceScreen.getPreferenceManager()).thenReturn(mock(PreferenceManager.class));
|
when(mPreferenceScreen.getPreferenceManager()).thenReturn(mock(PreferenceManager.class));
|
||||||
when(mPreferenceScreen.getContext()).thenReturn(mContext);
|
when(mPreferenceScreen.getContext()).thenReturn(mContext);
|
||||||
when(mPreferenceScreen.findPreference(
|
when(mPreferenceScreen.findPreference(RestrictAppPreferenceController.KEY_RESTRICT_APP))
|
||||||
RestrictAppPreferenceController.KEY_RESTRICT_APP)).thenReturn(mPreference);
|
.thenReturn(mPreference);
|
||||||
|
|
||||||
final List<UserHandle> userHandles = new ArrayList<>();
|
final List<UserHandle> userHandles = new ArrayList<>();
|
||||||
userHandles.add(new UserHandle(0));
|
userHandles.add(new UserHandle(0));
|
||||||
@@ -122,8 +124,8 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
mPackageOpsList.add(mRestrictedPackageOps);
|
mPackageOpsList.add(mRestrictedPackageOps);
|
||||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
||||||
|
|
||||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
final RestrictAppPreferenceController controller =
|
||||||
mFragment);
|
new RestrictAppPreferenceController(mFragment);
|
||||||
controller.displayPreference(mPreferenceScreen);
|
controller.displayPreference(mPreferenceScreen);
|
||||||
controller.updateState(mPreference);
|
controller.updateState(mPreference);
|
||||||
|
|
||||||
@@ -138,8 +140,8 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
mPackageOpsList.add(mOtherUserPackageOps);
|
mPackageOpsList.add(mOtherUserPackageOps);
|
||||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
||||||
|
|
||||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
final RestrictAppPreferenceController controller =
|
||||||
mFragment);
|
new RestrictAppPreferenceController(mFragment);
|
||||||
controller.displayPreference(mPreferenceScreen);
|
controller.displayPreference(mPreferenceScreen);
|
||||||
controller.updateState(mPreference);
|
controller.updateState(mPreference);
|
||||||
|
|
||||||
@@ -154,13 +156,14 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
mPackageOpsList.add(mOtherUserPackageOps);
|
mPackageOpsList.add(mOtherUserPackageOps);
|
||||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
||||||
|
|
||||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
final RestrictAppPreferenceController controller =
|
||||||
mFragment);
|
new RestrictAppPreferenceController(mFragment);
|
||||||
controller.displayPreference(mPreferenceScreen);
|
controller.displayPreference(mPreferenceScreen);
|
||||||
controller.updateState(mPreference);
|
controller.updateState(mPreference);
|
||||||
|
|
||||||
assertThat(mPreference.getSummary()).isEqualTo("Limiting battery usage for 1 app");
|
assertThat(mPreference.getSummary()).isEqualTo("Limiting battery usage for 1 app");
|
||||||
assertThat(controller.mAppInfos).containsExactly(
|
assertThat(controller.mAppInfos)
|
||||||
|
.containsExactly(
|
||||||
new AppInfo.Builder()
|
new AppInfo.Builder()
|
||||||
.setUid(RESTRICTED_UID)
|
.setUid(RESTRICTED_UID)
|
||||||
.setPackageName(RESTRICTED_PACKAGE_NAME)
|
.setPackageName(RESTRICTED_PACKAGE_NAME)
|
||||||
@@ -172,8 +175,8 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
mPackageOpsList.add(mAllowedPackageOps);
|
mPackageOpsList.add(mAllowedPackageOps);
|
||||||
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
doReturn(mPackageOpsList).when(mAppOpsManager).getPackagesForOps(any(int[].class));
|
||||||
|
|
||||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
final RestrictAppPreferenceController controller =
|
||||||
mFragment);
|
new RestrictAppPreferenceController(mFragment);
|
||||||
controller.displayPreference(mPreferenceScreen);
|
controller.displayPreference(mPreferenceScreen);
|
||||||
controller.updateState(mPreference);
|
controller.updateState(mPreference);
|
||||||
|
|
||||||
@@ -185,8 +188,8 @@ public class RestrictAppPreferenceControllerTest {
|
|||||||
public void handlePreferenceTreeClick_startFragment() {
|
public void handlePreferenceTreeClick_startFragment() {
|
||||||
final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
|
final ArgumentCaptor<Intent> intent = ArgumentCaptor.forClass(Intent.class);
|
||||||
|
|
||||||
final RestrictAppPreferenceController controller = new RestrictAppPreferenceController(
|
final RestrictAppPreferenceController controller =
|
||||||
mFragment);
|
new RestrictAppPreferenceController(mFragment);
|
||||||
controller.handlePreferenceTreeClick(mPreference);
|
controller.handlePreferenceTreeClick(mPreference);
|
||||||
|
|
||||||
verify(mContext).startActivity(intent.capture());
|
verify(mContext).startActivity(intent.capture());
|
||||||
|
|||||||
@@ -72,17 +72,11 @@ public class RestrictedAppDetailsTest {
|
|||||||
private static final int UID = UserHandle.getUid(USER_ID, 234);
|
private static final int UID = UserHandle.getUid(USER_ID, 234);
|
||||||
private static final String APP_NAME = "app";
|
private static final String APP_NAME = "app";
|
||||||
|
|
||||||
|
@Mock private PackageManager mPackageManager;
|
||||||
@Mock
|
@Mock private ApplicationInfo mApplicationInfo;
|
||||||
private PackageManager mPackageManager;
|
@Mock private IconDrawableFactory mIconDrawableFactory;
|
||||||
@Mock
|
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||||
private ApplicationInfo mApplicationInfo;
|
@Mock private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||||
@Mock
|
|
||||||
private IconDrawableFactory mIconDrawableFactory;
|
|
||||||
@Mock
|
|
||||||
private InstrumentedPreferenceFragment mFragment;
|
|
||||||
@Mock
|
|
||||||
private BatteryDatabaseManager mBatteryDatabaseManager;
|
|
||||||
private PreferenceManager mPreferenceManager;
|
private PreferenceManager mPreferenceManager;
|
||||||
private RestrictedAppDetails mRestrictedAppDetails;
|
private RestrictedAppDetails mRestrictedAppDetails;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -96,10 +90,7 @@ public class RestrictedAppDetailsTest {
|
|||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mRestrictedAppDetails = spy(new RestrictedAppDetails());
|
mRestrictedAppDetails = spy(new RestrictedAppDetails());
|
||||||
mAppInfo = new AppInfo.Builder()
|
mAppInfo = new AppInfo.Builder().setPackageName(PACKAGE_NAME).setUid(UID).build();
|
||||||
.setPackageName(PACKAGE_NAME)
|
|
||||||
.setUid(UID)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
mPreferenceManager = new PreferenceManager(mContext);
|
mPreferenceManager = new PreferenceManager(mContext);
|
||||||
|
|
||||||
@@ -113,8 +104,9 @@ public class RestrictedAppDetailsTest {
|
|||||||
mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext));
|
mRestrictedAppDetails.mRestrictedAppListGroup = spy(new PreferenceCategory(mContext));
|
||||||
mRestrictedAppDetails.mBatteryUtils = spy(new BatteryUtils(mContext));
|
mRestrictedAppDetails.mBatteryUtils = spy(new BatteryUtils(mContext));
|
||||||
mRestrictedAppDetails.mBatteryDatabaseManager = mBatteryDatabaseManager;
|
mRestrictedAppDetails.mBatteryDatabaseManager = mBatteryDatabaseManager;
|
||||||
doReturn(mPreferenceManager).when(
|
doReturn(mPreferenceManager)
|
||||||
mRestrictedAppDetails.mRestrictedAppListGroup).getPreferenceManager();
|
.when(mRestrictedAppDetails.mRestrictedAppListGroup)
|
||||||
|
.getPreferenceManager();
|
||||||
|
|
||||||
mCheckBoxPreference = new CheckBoxPreference(mContext);
|
mCheckBoxPreference = new CheckBoxPreference(mContext);
|
||||||
mCheckBoxPreference.setKey(mRestrictedAppDetails.getKeyFromAppInfo(mAppInfo));
|
mCheckBoxPreference.setKey(mRestrictedAppDetails.getKeyFromAppInfo(mAppInfo));
|
||||||
@@ -122,14 +114,17 @@ public class RestrictedAppDetailsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void refreshUi_displayPreference() throws Exception {
|
public void refreshUi_displayPreference() throws Exception {
|
||||||
doReturn(mApplicationInfo).when(mPackageManager)
|
doReturn(mApplicationInfo)
|
||||||
|
.when(mPackageManager)
|
||||||
.getApplicationInfoAsUser(PACKAGE_NAME, 0, USER_ID);
|
.getApplicationInfoAsUser(PACKAGE_NAME, 0, USER_ID);
|
||||||
doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo);
|
doReturn(APP_NAME).when(mPackageManager).getApplicationLabel(mApplicationInfo);
|
||||||
doReturn(true).when(mRestrictedAppDetails.mBatteryUtils).isForceAppStandbyEnabled(UID,
|
doReturn(true)
|
||||||
PACKAGE_NAME);
|
.when(mRestrictedAppDetails.mBatteryUtils)
|
||||||
|
.isForceAppStandbyEnabled(UID, PACKAGE_NAME);
|
||||||
final SparseLongArray timestampArray = new SparseLongArray();
|
final SparseLongArray timestampArray = new SparseLongArray();
|
||||||
timestampArray.put(UID, System.currentTimeMillis() - TimeUnit.HOURS.toMillis(5));
|
timestampArray.put(UID, System.currentTimeMillis() - TimeUnit.HOURS.toMillis(5));
|
||||||
doReturn(timestampArray).when(mBatteryDatabaseManager)
|
doReturn(timestampArray)
|
||||||
|
.when(mBatteryDatabaseManager)
|
||||||
.queryActionTime(AnomalyDatabaseHelper.ActionType.RESTRICTION);
|
.queryActionTime(AnomalyDatabaseHelper.ActionType.RESTRICTION);
|
||||||
|
|
||||||
mRestrictedAppDetails.refreshUi();
|
mRestrictedAppDetails.refreshUi();
|
||||||
@@ -145,30 +140,32 @@ public class RestrictedAppDetailsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void startRestrictedAppDetails_startWithCorrectData() {
|
public void startRestrictedAppDetails_startWithCorrectData() {
|
||||||
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
final ArgumentCaptor<Intent> captor = ArgumentCaptor.forClass(Intent.class);
|
||||||
doAnswer(invocation -> {
|
doAnswer(
|
||||||
|
invocation -> {
|
||||||
// Get the intent in which it has the app info bundle
|
// Get the intent in which it has the app info bundle
|
||||||
mIntent = captor.getValue();
|
mIntent = captor.getValue();
|
||||||
return true;
|
return true;
|
||||||
}).when(mContext).startActivity(captor.capture());
|
})
|
||||||
|
.when(mContext)
|
||||||
|
.startActivity(captor.capture());
|
||||||
|
|
||||||
RestrictedAppDetails.startRestrictedAppDetails(mFragment,
|
RestrictedAppDetails.startRestrictedAppDetails(mFragment, mRestrictedAppDetails.mAppInfos);
|
||||||
mRestrictedAppDetails.mAppInfos);
|
|
||||||
|
|
||||||
final Bundle bundle = mIntent.getBundleExtra(
|
final Bundle bundle =
|
||||||
SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
mIntent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
|
||||||
// Verify the bundle has the correct info
|
// Verify the bundle has the correct info
|
||||||
final List<AppInfo> appInfos = bundle.getParcelableArrayList(
|
final List<AppInfo> appInfos =
|
||||||
RestrictedAppDetails.EXTRA_APP_INFO_LIST);
|
bundle.getParcelableArrayList(RestrictedAppDetails.EXTRA_APP_INFO_LIST);
|
||||||
assertThat(appInfos).containsExactly(mAppInfo);
|
assertThat(appInfos).containsExactly(mAppInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createDialogFragment_toRestrict_createRestrictDialog() {
|
public void createDialogFragment_toRestrict_createRestrictDialog() {
|
||||||
final BatteryTipDialogFragment dialogFragment = mRestrictedAppDetails.createDialogFragment(
|
final BatteryTipDialogFragment dialogFragment =
|
||||||
mAppInfo, true);
|
mRestrictedAppDetails.createDialogFragment(mAppInfo, true);
|
||||||
|
|
||||||
FragmentController.setupFragment(dialogFragment, FragmentActivity.class,
|
FragmentController.setupFragment(
|
||||||
0 /* containerViewId */, null /* bundle */);
|
dialogFragment, FragmentActivity.class, 0 /* containerViewId */, null /* bundle */);
|
||||||
|
|
||||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||||
@@ -177,11 +174,11 @@ public class RestrictedAppDetailsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void createDialogFragment_toUnrestrict_createUnrestrictDialog() {
|
public void createDialogFragment_toUnrestrict_createUnrestrictDialog() {
|
||||||
final BatteryTipDialogFragment dialogFragment = mRestrictedAppDetails.createDialogFragment(
|
final BatteryTipDialogFragment dialogFragment =
|
||||||
mAppInfo, false);
|
mRestrictedAppDetails.createDialogFragment(mAppInfo, false);
|
||||||
|
|
||||||
FragmentController.setupFragment(dialogFragment, FragmentActivity.class,
|
FragmentController.setupFragment(
|
||||||
0 /* containerViewId */, null /* bundle */);
|
dialogFragment, FragmentActivity.class, 0 /* containerViewId */, null /* bundle */);
|
||||||
|
|
||||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||||
@@ -190,8 +187,8 @@ public class RestrictedAppDetailsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onBatteryTipHandled_restrict_setChecked() {
|
public void onBatteryTipHandled_restrict_setChecked() {
|
||||||
final RestrictAppTip restrictAppTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
final RestrictAppTip restrictAppTip =
|
||||||
mAppInfo);
|
new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
|
||||||
mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference);
|
mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference);
|
||||||
|
|
||||||
mRestrictedAppDetails.onBatteryTipHandled(restrictAppTip);
|
mRestrictedAppDetails.onBatteryTipHandled(restrictAppTip);
|
||||||
@@ -201,8 +198,8 @@ public class RestrictedAppDetailsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onBatteryTipHandled_unrestrict_setUnchecked() {
|
public void onBatteryTipHandled_unrestrict_setUnchecked() {
|
||||||
final UnrestrictAppTip unrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW,
|
final UnrestrictAppTip unrestrictAppTip =
|
||||||
mAppInfo);
|
new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
|
||||||
mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference);
|
mRestrictedAppDetails.mRestrictedAppListGroup.addPreference(mCheckBoxPreference);
|
||||||
|
|
||||||
mRestrictedAppDetails.onBatteryTipHandled(unrestrictAppTip);
|
mRestrictedAppDetails.onBatteryTipHandled(unrestrictAppTip);
|
||||||
|
|||||||
@@ -54,7 +54,8 @@ public class SmartBatteryPreferenceControllerTest {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
doReturn(mock(DevicePolicyManager.class)).when(mContext)
|
doReturn(mock(DevicePolicyManager.class))
|
||||||
|
.when(mContext)
|
||||||
.getSystemService(Context.DEVICE_POLICY_SERVICE);
|
.getSystemService(Context.DEVICE_POLICY_SERVICE);
|
||||||
|
|
||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
@@ -99,26 +100,26 @@ public class SmartBatteryPreferenceControllerTest {
|
|||||||
public void testGetAvailabilityStatus_smartBatterySupported_returnAvailable() {
|
public void testGetAvailabilityStatus_smartBatterySupported_returnAvailable() {
|
||||||
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
doReturn(true).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
||||||
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
assertThat(mController.getAvailabilityStatus())
|
||||||
BasePreferenceController.AVAILABLE);
|
.isEqualTo(BasePreferenceController.AVAILABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetAvailabilityStatus_smartBatteryUnSupported_returnDisabled() {
|
public void testGetAvailabilityStatus_smartBatteryUnSupported_returnDisabled() {
|
||||||
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
doReturn(false).when(mFeatureFactory.powerUsageFeatureProvider).isSmartBatterySupported();
|
||||||
|
|
||||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(
|
assertThat(mController.getAvailabilityStatus())
|
||||||
BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
.isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void putSmartBatteryValue(int value) {
|
private void putSmartBatteryValue(int value) {
|
||||||
Settings.Global.putInt(mContentResolver,
|
Settings.Global.putInt(
|
||||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, value);
|
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int getSmartBatteryValue() {
|
private int getSmartBatteryValue() {
|
||||||
return Settings.Global.getInt(mContentResolver,
|
return Settings.Global.getInt(
|
||||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, ON);
|
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, ON);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -50,12 +50,9 @@ public class TopLevelBatteryPreferenceControllerTest {
|
|||||||
private TopLevelBatteryPreferenceController mController;
|
private TopLevelBatteryPreferenceController mController;
|
||||||
private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
|
private BatterySettingsFeatureProvider mBatterySettingsFeatureProvider;
|
||||||
|
|
||||||
@Mock
|
@Mock private UsbPort mUsbPort;
|
||||||
private UsbPort mUsbPort;
|
@Mock private UsbManager mUsbManager;
|
||||||
@Mock
|
@Mock private UsbPortStatus mUsbPortStatus;
|
||||||
private UsbManager mUsbManager;
|
|
||||||
@Mock
|
|
||||||
private UsbPortStatus mUsbPortStatus;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -125,8 +122,7 @@ public class TopLevelBatteryPreferenceControllerTest {
|
|||||||
info.discharging = false;
|
info.discharging = false;
|
||||||
info.chargeLabel = "5% - charging";
|
info.chargeLabel = "5% - charging";
|
||||||
|
|
||||||
assertThat(mController.getDashboardLabel(mContext, info, true))
|
assertThat(mController.getDashboardLabel(mContext, info, true)).isEqualTo(info.chargeLabel);
|
||||||
.isEqualTo(info.chargeLabel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -136,7 +132,8 @@ public class TopLevelBatteryPreferenceControllerTest {
|
|||||||
BatteryInfo info = new BatteryInfo();
|
BatteryInfo info = new BatteryInfo();
|
||||||
|
|
||||||
assertThat(mController.getDashboardLabel(mContext, info, true))
|
assertThat(mController.getDashboardLabel(mContext, info, true))
|
||||||
.isEqualTo(mContext.getString(
|
.isEqualTo(
|
||||||
|
mContext.getString(
|
||||||
com.android.settingslib.R.string.battery_info_status_not_charging));
|
com.android.settingslib.R.string.battery_info_status_not_charging));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,8 +144,7 @@ public class TopLevelBatteryPreferenceControllerTest {
|
|||||||
info.batteryStatus = BatteryManager.BATTERY_STATUS_NOT_CHARGING;
|
info.batteryStatus = BatteryManager.BATTERY_STATUS_NOT_CHARGING;
|
||||||
info.statusLabel = "expected returned label";
|
info.statusLabel = "expected returned label";
|
||||||
|
|
||||||
assertThat(mController.getDashboardLabel(mContext, info, true))
|
assertThat(mController.getDashboardLabel(mContext, info, true)).isEqualTo(info.statusLabel);
|
||||||
.isEqualTo(info.statusLabel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -88,8 +88,8 @@ public class UnrestrictedPreferenceControllerTest {
|
|||||||
public void testUpdateState_isSystemOrDefaultAppAndUnrestrictedStates_prefChecked() {
|
public void testUpdateState_isSystemOrDefaultAppAndUnrestrictedStates_prefChecked() {
|
||||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
.thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
@@ -100,8 +100,8 @@ public class UnrestrictedPreferenceControllerTest {
|
|||||||
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
public void testUpdateState_isSystemOrDefaultApp_prefUnchecked() {
|
||||||
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
when(mBatteryOptimizeUtils.isDisabledForOptimizeModeOnly()).thenReturn(false);
|
||||||
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isSystemOrDefaultApp()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
@@ -112,8 +112,8 @@ public class UnrestrictedPreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testUpdateState_isUnrestrictedStates_prefChecked() {
|
public void testUpdateState_isUnrestrictedStates_prefChecked() {
|
||||||
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
.thenReturn(BatteryOptimizeUtils.MODE_UNRESTRICTED);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
@@ -124,8 +124,8 @@ public class UnrestrictedPreferenceControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testUpdateState_prefUnchecked() {
|
public void testUpdateState_prefUnchecked() {
|
||||||
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
when(mBatteryOptimizeUtils.isOptimizeModeMutable()).thenReturn(true);
|
||||||
when(mBatteryOptimizeUtils.getAppOptimizationMode()).thenReturn(
|
when(mBatteryOptimizeUtils.getAppOptimizationMode())
|
||||||
BatteryOptimizeUtils.MODE_OPTIMIZED);
|
.thenReturn(BatteryOptimizeUtils.MODE_OPTIMIZED);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
|
|||||||
@@ -47,10 +47,8 @@ public class BatterySaverButtonPreferenceControllerTest {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
private MainSwitchPreference mPreference;
|
private MainSwitchPreference mPreference;
|
||||||
|
|
||||||
@Mock
|
@Mock private PowerManager mPowerManager;
|
||||||
private PowerManager mPowerManager;
|
@Mock private PreferenceScreen mPreferenceScreen;
|
||||||
@Mock
|
|
||||||
private PreferenceScreen mPreferenceScreen;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
|||||||
@@ -59,10 +59,12 @@ public class BatterySaverSchedulePreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPreference_lowPowerLevelZero_percentageMode_summaryNoSchedule() {
|
public void testPreference_lowPowerLevelZero_percentageMode_summaryNoSchedule() {
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
mContext.getContentResolver(), Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
mContext.getContentResolver(),
|
||||||
|
Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||||
|
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
@@ -71,10 +73,14 @@ public class BatterySaverSchedulePreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testPreference_lowPowerLevelNonZero_percentageMode_summaryPercentage() {
|
public void testPreference_lowPowerLevelNonZero_percentageMode_summaryPercentage() {
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, TRIGGER_LEVEL);
|
mContext.getContentResolver(),
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
|
||||||
Global.AUTOMATIC_POWER_SAVE_MODE, PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
TRIGGER_LEVEL);
|
||||||
|
Settings.Global.putInt(
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||||
|
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||||
|
|
||||||
mController.updateState(mPreference);
|
mController.updateState(mPreference);
|
||||||
|
|
||||||
|
|||||||
@@ -34,8 +34,7 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
private ContentResolver mResolver;
|
private ContentResolver mResolver;
|
||||||
private BatterySaverScheduleSeekBarController mController;
|
private BatterySaverScheduleSeekBarController mController;
|
||||||
@Mock
|
@Mock private PreferenceScreen mScreen;
|
||||||
private PreferenceScreen mScreen;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -83,7 +82,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateSeekBar_routineMode_hasCorrectProperties() {
|
public void updateSeekBar_routineMode_hasCorrectProperties() {
|
||||||
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
|
Settings.Global.putInt(
|
||||||
|
mResolver,
|
||||||
|
Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||||
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
|
PowerManager.POWER_SAVE_MODE_TRIGGER_DYNAMIC);
|
||||||
|
|
||||||
mController.updateSeekBar();
|
mController.updateSeekBar();
|
||||||
@@ -95,7 +96,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void updateSeekBar_percentageMode_hasCorrectProperties() {
|
public void updateSeekBar_percentageMode_hasCorrectProperties() {
|
||||||
final CharSequence expectedTitle = "10%";
|
final CharSequence expectedTitle = "10%";
|
||||||
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
|
Settings.Global.putInt(
|
||||||
|
mResolver,
|
||||||
|
Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||||
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||||
setTriggerLevel(10);
|
setTriggerLevel(10);
|
||||||
|
|
||||||
@@ -108,7 +111,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateSeekBar_noneMode_hasCorrectProperties() {
|
public void updateSeekBar_noneMode_hasCorrectProperties() {
|
||||||
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
|
Settings.Global.putInt(
|
||||||
|
mResolver,
|
||||||
|
Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||||
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||||
setTriggerLevel(0);
|
setTriggerLevel(0);
|
||||||
|
|
||||||
@@ -120,7 +125,9 @@ public class BatterySaverScheduleSeekBarControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void addToScreen_addsToEnd() {
|
public void addToScreen_addsToEnd() {
|
||||||
Settings.Global.putInt(mResolver, Global.AUTOMATIC_POWER_SAVE_MODE,
|
Settings.Global.putInt(
|
||||||
|
mResolver,
|
||||||
|
Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||||
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
PowerManager.POWER_SAVE_MODE_TRIGGER_PERCENTAGE);
|
||||||
setTriggerLevel(15);
|
setTriggerLevel(15);
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package com.android.settings.fuelgauge.batterysaver;
|
package com.android.settings.fuelgauge.batterysaver;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||||
@@ -90,18 +91,25 @@ public final class BatterySaverScheduleSettingsTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setSchedule(int scheduleType, int schedulePercentage) {
|
private void setSchedule(int scheduleType, int schedulePercentage) {
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.AUTOMATIC_POWER_SAVE_MODE, scheduleType);
|
mContext.getContentResolver(),
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.AUTOMATIC_POWER_SAVE_MODE,
|
||||||
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL, schedulePercentage);
|
scheduleType);
|
||||||
|
Settings.Global.putInt(
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL,
|
||||||
|
schedulePercentage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifySchedule(String scheduleTypeKey, int schedulePercentage) {
|
private void verifySchedule(String scheduleTypeKey, int schedulePercentage) {
|
||||||
waitAWhile();
|
waitAWhile();
|
||||||
verify(mMetricsFeatureProvider).action(SettingsEnums.FUELGAUGE_BATTERY_SAVER,
|
verify(mMetricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
SettingsEnums.FUELGAUGE_BATTERY_SAVER,
|
||||||
SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
|
SettingsEnums.FIELD_BATTERY_SAVER_SCHEDULE_TYPE,
|
||||||
SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
|
SettingsEnums.FIELD_BATTERY_SAVER_PERCENTAGE_VALUE,
|
||||||
scheduleTypeKey, schedulePercentage);
|
scheduleTypeKey,
|
||||||
|
schedulePercentage);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void waitAWhile() {
|
private void waitAWhile() {
|
||||||
|
|||||||
@@ -34,13 +34,13 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {
|
@Config(
|
||||||
|
shadows = {
|
||||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||||
})
|
})
|
||||||
public class BatterySaverSettingsTest {
|
public class BatterySaverSettingsTest {
|
||||||
BatterySaverSettings mFragment;
|
BatterySaverSettings mFragment;
|
||||||
@Mock
|
@Mock PreferenceScreen mScreen;
|
||||||
PreferenceScreen mScreen;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -50,7 +50,6 @@ public class BatterySaverSettingsTest {
|
|||||||
doReturn(mScreen).when(mFragment).getPreferenceScreen();
|
doReturn(mScreen).when(mFragment).getPreferenceScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void setupFooter_linkAddedWhenAppropriate() {
|
public void setupFooter_linkAddedWhenAppropriate() {
|
||||||
doReturn("").when(mFragment).getText(anyInt());
|
doReturn("").when(mFragment).getText(anyInt());
|
||||||
|
|||||||
@@ -63,16 +63,15 @@ public class AnomalyCleanupJobServiceTest {
|
|||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private JobScheduler mJobScheduler;
|
private JobScheduler mJobScheduler;
|
||||||
@Mock
|
@Mock private JobParameters mParams;
|
||||||
private JobParameters mParams;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mJobScheduler = spy(new JobSchedulerImpl(mContext,
|
mJobScheduler =
|
||||||
IJobScheduler.Stub.asInterface(new Binder())));
|
spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
|
||||||
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -108,22 +107,28 @@ public class AnomalyCleanupJobServiceTest {
|
|||||||
@Ignore
|
@Ignore
|
||||||
public void onStartJob_cleanUpDataBefore30days() {
|
public void onStartJob_cleanUpDataBefore30days() {
|
||||||
final BatteryDatabaseManager databaseManager = BatteryDatabaseManager.getInstance(mContext);
|
final BatteryDatabaseManager databaseManager = BatteryDatabaseManager.getInstance(mContext);
|
||||||
final AnomalyCleanupJobService service = spy(Robolectric.setupService(
|
final AnomalyCleanupJobService service =
|
||||||
AnomalyCleanupJobService.class));
|
spy(Robolectric.setupService(AnomalyCleanupJobService.class));
|
||||||
doNothing().when(service).jobFinished(any(), anyBoolean());
|
doNothing().when(service).jobFinished(any(), anyBoolean());
|
||||||
|
|
||||||
// Insert two records, one is current and the other one is 31 days before
|
// Insert two records, one is current and the other one is 31 days before
|
||||||
databaseManager.insertAnomaly(UID, PACKAGE_NAME, ANOMALY_TYPE,
|
databaseManager.insertAnomaly(
|
||||||
AnomalyDatabaseHelper.State.NEW, TIMESTAMP_NOW);
|
UID, PACKAGE_NAME, ANOMALY_TYPE, AnomalyDatabaseHelper.State.NEW, TIMESTAMP_NOW);
|
||||||
databaseManager.insertAnomaly(UID, PACKAGE_NAME_OLD, ANOMALY_TYPE,
|
databaseManager.insertAnomaly(
|
||||||
AnomalyDatabaseHelper.State.NEW, TIMESTAMP_31_DAYS_BEFORE);
|
UID,
|
||||||
|
PACKAGE_NAME_OLD,
|
||||||
|
ANOMALY_TYPE,
|
||||||
|
AnomalyDatabaseHelper.State.NEW,
|
||||||
|
TIMESTAMP_31_DAYS_BEFORE);
|
||||||
|
|
||||||
service.onStartJob(mParams);
|
service.onStartJob(mParams);
|
||||||
|
|
||||||
// In database, it only contains the current record
|
// In database, it only contains the current record
|
||||||
final List<AppInfo> appInfos = databaseManager.queryAllAnomalies(0,
|
final List<AppInfo> appInfos =
|
||||||
AnomalyDatabaseHelper.State.NEW);
|
databaseManager.queryAllAnomalies(0, AnomalyDatabaseHelper.State.NEW);
|
||||||
assertThat(appInfos).containsExactly(new AppInfo.Builder()
|
assertThat(appInfos)
|
||||||
|
.containsExactly(
|
||||||
|
new AppInfo.Builder()
|
||||||
.setUid(UID)
|
.setUid(UID)
|
||||||
.setPackageName(PACKAGE_NAME)
|
.setPackageName(PACKAGE_NAME)
|
||||||
.addAnomalyType(ANOMALY_TYPE)
|
.addAnomalyType(ANOMALY_TYPE)
|
||||||
|
|||||||
@@ -57,8 +57,7 @@ public class AnomalyConfigJobServiceTest {
|
|||||||
|
|
||||||
private static final int ANOMALY_CONFIG_VERSION = 1;
|
private static final int ANOMALY_CONFIG_VERSION = 1;
|
||||||
private static final String ANOMALY_CONFIG = "X64s";
|
private static final String ANOMALY_CONFIG = "X64s";
|
||||||
@Mock
|
@Mock private StatsManager mStatsManager;
|
||||||
private StatsManager mStatsManager;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private JobScheduler mJobScheduler;
|
private JobScheduler mJobScheduler;
|
||||||
@@ -69,14 +68,16 @@ public class AnomalyConfigJobServiceTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mJobScheduler = spy(new JobSchedulerImpl(mContext,
|
mJobScheduler =
|
||||||
IJobScheduler.Stub.asInterface(new Binder())));
|
spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
|
||||||
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
||||||
|
|
||||||
mJobService = spy(new AnomalyConfigJobService());
|
mJobService = spy(new AnomalyConfigJobService());
|
||||||
doReturn(application.getSharedPreferences(AnomalyConfigJobService.PREF_DB,
|
doReturn(
|
||||||
Context.MODE_PRIVATE)).when(mJobService).getSharedPreferences(anyString(),
|
application.getSharedPreferences(
|
||||||
anyInt());
|
AnomalyConfigJobService.PREF_DB, Context.MODE_PRIVATE))
|
||||||
|
.when(mJobService)
|
||||||
|
.getSharedPreferences(anyString(), anyInt());
|
||||||
doReturn(application.getContentResolver()).when(mJobService).getContentResolver();
|
doReturn(application.getContentResolver()).when(mJobService).getContentResolver();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -106,10 +107,12 @@ public class AnomalyConfigJobServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void checkAnomalyConfig_newConfigExist_removeOldConfig()
|
public void checkAnomalyConfig_newConfigExist_removeOldConfig()
|
||||||
throws StatsManager.StatsUnavailableException {
|
throws StatsManager.StatsUnavailableException {
|
||||||
Settings.Global.putInt(application.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.ANOMALY_CONFIG_VERSION, ANOMALY_CONFIG_VERSION);
|
application.getContentResolver(),
|
||||||
Settings.Global.putString(application.getContentResolver(), Settings.Global.ANOMALY_CONFIG,
|
Settings.Global.ANOMALY_CONFIG_VERSION,
|
||||||
ANOMALY_CONFIG);
|
ANOMALY_CONFIG_VERSION);
|
||||||
|
Settings.Global.putString(
|
||||||
|
application.getContentResolver(), Settings.Global.ANOMALY_CONFIG, ANOMALY_CONFIG);
|
||||||
|
|
||||||
mJobService.checkAnomalyConfig(mStatsManager);
|
mJobService.checkAnomalyConfig(mStatsManager);
|
||||||
|
|
||||||
@@ -119,10 +122,12 @@ public class AnomalyConfigJobServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void checkAnomalyConfig_newConfigExist_uploadNewConfig()
|
public void checkAnomalyConfig_newConfigExist_uploadNewConfig()
|
||||||
throws StatsManager.StatsUnavailableException {
|
throws StatsManager.StatsUnavailableException {
|
||||||
Settings.Global.putInt(application.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
Settings.Global.ANOMALY_CONFIG_VERSION, ANOMALY_CONFIG_VERSION);
|
application.getContentResolver(),
|
||||||
Settings.Global.putString(application.getContentResolver(), Settings.Global.ANOMALY_CONFIG,
|
Settings.Global.ANOMALY_CONFIG_VERSION,
|
||||||
ANOMALY_CONFIG);
|
ANOMALY_CONFIG_VERSION);
|
||||||
|
Settings.Global.putString(
|
||||||
|
application.getContentResolver(), Settings.Global.ANOMALY_CONFIG, ANOMALY_CONFIG);
|
||||||
|
|
||||||
mJobService.checkAnomalyConfig(mStatsManager);
|
mJobService.checkAnomalyConfig(mStatsManager);
|
||||||
|
|
||||||
|
|||||||
@@ -86,20 +86,13 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
"anomaly_type=6,auto_restriction=false";
|
"anomaly_type=6,auto_restriction=false";
|
||||||
private static final int ANOMALY_TYPE = 6;
|
private static final int ANOMALY_TYPE = 6;
|
||||||
private static final long VERSION_CODE = 15;
|
private static final long VERSION_CODE = 15;
|
||||||
@Mock
|
@Mock private UserManager mUserManager;
|
||||||
private UserManager mUserManager;
|
@Mock private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||||
@Mock
|
@Mock private BatteryUtils mBatteryUtils;
|
||||||
private BatteryDatabaseManager mBatteryDatabaseManager;
|
@Mock private PowerAllowlistBackend mPowerAllowlistBackend;
|
||||||
@Mock
|
@Mock private StatsDimensionsValue mStatsDimensionsValue;
|
||||||
private BatteryUtils mBatteryUtils;
|
@Mock private JobParameters mJobParameters;
|
||||||
@Mock
|
@Mock private JobWorkItem mJobWorkItem;
|
||||||
private PowerAllowlistBackend mPowerAllowlistBackend;
|
|
||||||
@Mock
|
|
||||||
private StatsDimensionsValue mStatsDimensionsValue;
|
|
||||||
@Mock
|
|
||||||
private JobParameters mJobParameters;
|
|
||||||
@Mock
|
|
||||||
private JobWorkItem mJobWorkItem;
|
|
||||||
|
|
||||||
private BatteryTipPolicy mPolicy;
|
private BatteryTipPolicy mPolicy;
|
||||||
private Bundle mBundle;
|
private Bundle mBundle;
|
||||||
@@ -113,8 +106,8 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mJobScheduler = spy(new JobSchedulerImpl(mContext,
|
mJobScheduler =
|
||||||
IJobScheduler.Stub.asInterface(new Binder())));
|
spy(new JobSchedulerImpl(mContext, IJobScheduler.Stub.asInterface(new Binder())));
|
||||||
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
when(mContext.getSystemService(JobScheduler.class)).thenReturn(mJobScheduler);
|
||||||
|
|
||||||
mPolicy = new BatteryTipPolicy(mContext);
|
mPolicy = new BatteryTipPolicy(mContext);
|
||||||
@@ -146,17 +139,24 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
@Test
|
@Test
|
||||||
public void saveAnomalyToDatabase_systemAllowlisted_doNotSave() {
|
public void saveAnomalyToDatabase_systemAllowlisted_doNotSave() {
|
||||||
doReturn(UID).when(mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
doReturn(UID).when(mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
||||||
doReturn(true).when(mPowerAllowlistBackend)
|
doReturn(true)
|
||||||
|
.when(mPowerAllowlistBackend)
|
||||||
.isAllowlisted(any(String[].class), any(Integer.class));
|
.isAllowlisted(any(String[].class), any(Integer.class));
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
mContext,
|
||||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
mUserManager,
|
||||||
|
mBatteryDatabaseManager,
|
||||||
|
mBatteryUtils,
|
||||||
|
mPolicy,
|
||||||
|
mPowerAllowlistBackend,
|
||||||
|
mContext.getContentResolver(),
|
||||||
mFeatureFactory.powerUsageFeatureProvider,
|
mFeatureFactory.powerUsageFeatureProvider,
|
||||||
mFeatureFactory.metricsFeatureProvider, mBundle);
|
mFeatureFactory.metricsFeatureProvider,
|
||||||
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
verify(mBatteryDatabaseManager, never())
|
||||||
anyInt(), anyLong());
|
.insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -166,19 +166,28 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
||||||
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
||||||
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
||||||
doReturn(Process.FIRST_APPLICATION_UID).when(
|
doReturn(Process.FIRST_APPLICATION_UID)
|
||||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
.when(mAnomalyDetectionJobService)
|
||||||
|
.extractUidFromStatsDimensionsValue(any());
|
||||||
doReturn(true).when(mBatteryUtils).shouldHideAnomaly(any(), anyInt(), any());
|
doReturn(true).when(mBatteryUtils).shouldHideAnomaly(any(), anyInt(), any());
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
mContext,
|
||||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
mUserManager,
|
||||||
|
mBatteryDatabaseManager,
|
||||||
|
mBatteryUtils,
|
||||||
|
mPolicy,
|
||||||
|
mPowerAllowlistBackend,
|
||||||
|
mContext.getContentResolver(),
|
||||||
mFeatureFactory.powerUsageFeatureProvider,
|
mFeatureFactory.powerUsageFeatureProvider,
|
||||||
mFeatureFactory.metricsFeatureProvider, mBundle);
|
mFeatureFactory.metricsFeatureProvider,
|
||||||
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
verify(mBatteryDatabaseManager, never())
|
||||||
anyInt(), anyLong());
|
.insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
MetricsProto.MetricsEvent.ACTION_ANOMALY_IGNORED,
|
MetricsProto.MetricsEvent.ACTION_ANOMALY_IGNORED,
|
||||||
SettingsEnums.PAGE_UNKNOWN,
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
||||||
@@ -187,32 +196,46 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void saveAnomalyToDatabase_systemUid_doNotSave() {
|
public void saveAnomalyToDatabase_systemUid_doNotSave() {
|
||||||
doReturn(Process.SYSTEM_UID).when(
|
doReturn(Process.SYSTEM_UID)
|
||||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
.when(mAnomalyDetectionJobService)
|
||||||
|
.extractUidFromStatsDimensionsValue(any());
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
mContext,
|
||||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
mUserManager,
|
||||||
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
mBatteryDatabaseManager,
|
||||||
|
mBatteryUtils,
|
||||||
|
mPolicy,
|
||||||
|
mPowerAllowlistBackend,
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider,
|
||||||
|
mFeatureFactory.metricsFeatureProvider,
|
||||||
mBundle);
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
verify(mBatteryDatabaseManager, never())
|
||||||
anyInt(), anyLong());
|
.insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void saveAnomalyToDatabase_uidNull_doNotSave() {
|
public void saveAnomalyToDatabase_uidNull_doNotSave() {
|
||||||
doReturn(AnomalyDetectionJobService.UID_NULL).when(
|
doReturn(AnomalyDetectionJobService.UID_NULL)
|
||||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
.when(mAnomalyDetectionJobService)
|
||||||
|
.extractUidFromStatsDimensionsValue(any());
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
mContext,
|
||||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
mUserManager,
|
||||||
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
mBatteryDatabaseManager,
|
||||||
|
mBatteryUtils,
|
||||||
|
mPolicy,
|
||||||
|
mPowerAllowlistBackend,
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider,
|
||||||
|
mFeatureFactory.metricsFeatureProvider,
|
||||||
mBundle);
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager, never()).insertAnomaly(anyInt(), anyString(), anyInt(),
|
verify(mBatteryDatabaseManager, never())
|
||||||
anyInt(), anyLong());
|
.insertAnomaly(anyInt(), anyString(), anyInt(), anyInt(), anyLong());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -222,18 +245,32 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
||||||
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
||||||
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
||||||
doReturn(Process.FIRST_APPLICATION_UID).when(
|
doReturn(Process.FIRST_APPLICATION_UID)
|
||||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
.when(mAnomalyDetectionJobService)
|
||||||
|
.extractUidFromStatsDimensionsValue(any());
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
mContext,
|
||||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
mUserManager,
|
||||||
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
mBatteryDatabaseManager,
|
||||||
|
mBatteryUtils,
|
||||||
|
mPolicy,
|
||||||
|
mPowerAllowlistBackend,
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider,
|
||||||
|
mFeatureFactory.metricsFeatureProvider,
|
||||||
mBundle);
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
|
verify(mBatteryDatabaseManager)
|
||||||
eq(AnomalyDatabaseHelper.State.AUTO_HANDLED), anyLong());
|
.insertAnomaly(
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
anyInt(),
|
||||||
|
anyString(),
|
||||||
|
eq(6),
|
||||||
|
eq(AnomalyDatabaseHelper.State.AUTO_HANDLED),
|
||||||
|
anyLong());
|
||||||
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
|
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
|
||||||
SettingsEnums.PAGE_UNKNOWN,
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
||||||
@@ -247,18 +284,32 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
mBundle.putStringArrayList(StatsManager.EXTRA_STATS_BROADCAST_SUBSCRIBER_COOKIES, cookies);
|
||||||
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
doReturn(SYSTEM_PACKAGE).when(mBatteryUtils).getPackageName(anyInt());
|
||||||
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
doReturn(false).when(mPowerAllowlistBackend).isSysAllowlisted(SYSTEM_PACKAGE);
|
||||||
doReturn(Process.FIRST_APPLICATION_UID).when(
|
doReturn(Process.FIRST_APPLICATION_UID)
|
||||||
mAnomalyDetectionJobService).extractUidFromStatsDimensionsValue(any());
|
.when(mAnomalyDetectionJobService)
|
||||||
|
.extractUidFromStatsDimensionsValue(any());
|
||||||
|
|
||||||
mAnomalyDetectionJobService.saveAnomalyToDatabase(mContext,
|
mAnomalyDetectionJobService.saveAnomalyToDatabase(
|
||||||
mUserManager, mBatteryDatabaseManager, mBatteryUtils, mPolicy,
|
mContext,
|
||||||
mPowerAllowlistBackend, mContext.getContentResolver(),
|
mUserManager,
|
||||||
mFeatureFactory.powerUsageFeatureProvider, mFeatureFactory.metricsFeatureProvider,
|
mBatteryDatabaseManager,
|
||||||
|
mBatteryUtils,
|
||||||
|
mPolicy,
|
||||||
|
mPowerAllowlistBackend,
|
||||||
|
mContext.getContentResolver(),
|
||||||
|
mFeatureFactory.powerUsageFeatureProvider,
|
||||||
|
mFeatureFactory.metricsFeatureProvider,
|
||||||
mBundle);
|
mBundle);
|
||||||
|
|
||||||
verify(mBatteryDatabaseManager).insertAnomaly(anyInt(), anyString(), eq(6),
|
verify(mBatteryDatabaseManager)
|
||||||
eq(AnomalyDatabaseHelper.State.NEW), anyLong());
|
.insertAnomaly(
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
anyInt(),
|
||||||
|
anyString(),
|
||||||
|
eq(6),
|
||||||
|
eq(AnomalyDatabaseHelper.State.NEW),
|
||||||
|
anyLong());
|
||||||
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
|
MetricsProto.MetricsEvent.ACTION_ANOMALY_TRIGGERED,
|
||||||
SettingsEnums.PAGE_UNKNOWN,
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
SYSTEM_PACKAGE + "/" + VERSION_CODE,
|
||||||
@@ -280,8 +331,8 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
statsDimensionsValues.add(intValue);
|
statsDimensionsValues.add(intValue);
|
||||||
when(tupleValue.getTupleValueList()).thenReturn(statsDimensionsValues);
|
when(tupleValue.getTupleValueList()).thenReturn(statsDimensionsValues);
|
||||||
|
|
||||||
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(
|
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(tupleValue))
|
||||||
tupleValue)).isEqualTo(UID);
|
.isEqualTo(UID);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -292,8 +343,8 @@ public class AnomalyDetectionJobServiceTest {
|
|||||||
when(floatValue.getField()).thenReturn(AnomalyDetectionJobService.STATSD_UID_FILED);
|
when(floatValue.getField()).thenReturn(AnomalyDetectionJobService.STATSD_UID_FILED);
|
||||||
when(floatValue.getFloatValue()).thenReturn(0f);
|
when(floatValue.getFloatValue()).thenReturn(0f);
|
||||||
|
|
||||||
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(
|
assertThat(mAnomalyDetectionJobService.extractUidFromStatsDimensionsValue(floatValue))
|
||||||
floatValue)).isEqualTo(AnomalyDetectionJobService.UID_NULL);
|
.isEqualTo(AnomalyDetectionJobService.UID_NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ package com.android.settings.fuelgauge.batterytip;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.Mockito.doReturn;
|
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@@ -39,7 +38,6 @@ import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
|
|||||||
import com.android.settings.testutils.FakeFeatureFactory;
|
import com.android.settings.testutils.FakeFeatureFactory;
|
||||||
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
|
||||||
import com.android.settings.testutils.shadow.ShadowUtils;
|
import com.android.settings.testutils.shadow.ShadowUtils;
|
||||||
import com.android.settingslib.fuelgauge.EstimateKt;
|
|
||||||
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
@@ -98,7 +96,8 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
mPackageManager.setApplicationIcon(PACKAGE_NAME, new ColorDrawable());
|
mPackageManager.setApplicationIcon(PACKAGE_NAME, new ColorDrawable());
|
||||||
|
|
||||||
List<AppInfo> highUsageTips = new ArrayList<>();
|
List<AppInfo> highUsageTips = new ArrayList<>();
|
||||||
mAppInfo = new AppInfo.Builder()
|
mAppInfo =
|
||||||
|
new AppInfo.Builder()
|
||||||
.setScreenOnTimeMs(SCREEN_TIME_MS)
|
.setScreenOnTimeMs(SCREEN_TIME_MS)
|
||||||
.setPackageName(PACKAGE_NAME)
|
.setPackageName(PACKAGE_NAME)
|
||||||
.build();
|
.build();
|
||||||
@@ -107,11 +106,11 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
|
|
||||||
final List<AppInfo> restrictApps = new ArrayList<>();
|
final List<AppInfo> restrictApps = new ArrayList<>();
|
||||||
restrictApps.add(mAppInfo);
|
restrictApps.add(mAppInfo);
|
||||||
mRestrictedOneAppTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
mRestrictedOneAppTip =
|
||||||
new ArrayList<>(restrictApps));
|
new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>(restrictApps));
|
||||||
restrictApps.add(mAppInfo);
|
restrictApps.add(mAppInfo);
|
||||||
mRestrictTwoAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
mRestrictTwoAppsTip =
|
||||||
new ArrayList<>(restrictApps));
|
new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>(restrictApps));
|
||||||
|
|
||||||
mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
|
mUnrestrictAppTip = new UnrestrictAppTip(BatteryTip.StateType.NEW, mAppInfo);
|
||||||
mDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */);
|
mDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */);
|
||||||
@@ -128,24 +127,30 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
|
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mHighUsageTip, METRICS_KEY);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mHighUsageTip, METRICS_KEY);
|
||||||
|
|
||||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
FragmentController.setupFragment(
|
||||||
0 /* containerViewId */, null /* bundle */);
|
mDialogFragment,
|
||||||
|
FragmentActivity.class,
|
||||||
|
0 /* containerViewId */,
|
||||||
|
null /* bundle */);
|
||||||
|
|
||||||
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
||||||
|
|
||||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||||
|
|
||||||
assertThat(shadowDialog.getMessage()).isEqualTo(
|
assertThat(shadowDialog.getMessage())
|
||||||
mContext.getString(R.string.battery_tip_dialog_message, 1));
|
.isEqualTo(mContext.getString(R.string.battery_tip_dialog_message, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testOnCreateDialog_restrictOneAppTip_fireRestrictOneAppDialog() {
|
public void testOnCreateDialog_restrictOneAppTip_fireRestrictOneAppDialog() {
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictedOneAppTip, METRICS_KEY);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictedOneAppTip, METRICS_KEY);
|
||||||
|
|
||||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
FragmentController.setupFragment(
|
||||||
0 /* containerViewId */, null /* bundle */);
|
mDialogFragment,
|
||||||
|
FragmentActivity.class,
|
||||||
|
0 /* containerViewId */,
|
||||||
|
null /* bundle */);
|
||||||
|
|
||||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||||
@@ -163,9 +168,11 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
|
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictTwoAppsTip, METRICS_KEY);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mRestrictTwoAppsTip, METRICS_KEY);
|
||||||
|
|
||||||
|
FragmentController.setupFragment(
|
||||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
mDialogFragment,
|
||||||
0 /* containerViewId */, null /* bundle */);
|
FragmentActivity.class,
|
||||||
|
0 /* containerViewId */,
|
||||||
|
null /* bundle */);
|
||||||
|
|
||||||
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
||||||
|
|
||||||
@@ -189,13 +196,16 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
for (int i = 0; i < 6; i++) {
|
for (int i = 0; i < 6; i++) {
|
||||||
appInfos.add(mAppInfo);
|
appInfos.add(mAppInfo);
|
||||||
}
|
}
|
||||||
final RestrictAppTip restrictSixAppsTip = new RestrictAppTip(BatteryTip.StateType.NEW,
|
final RestrictAppTip restrictSixAppsTip =
|
||||||
appInfos);
|
new RestrictAppTip(BatteryTip.StateType.NEW, appInfos);
|
||||||
|
|
||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(restrictSixAppsTip, METRICS_KEY);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(restrictSixAppsTip, METRICS_KEY);
|
||||||
|
|
||||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
FragmentController.setupFragment(
|
||||||
0 /* containerViewId */, null /* bundle */);
|
mDialogFragment,
|
||||||
|
FragmentActivity.class,
|
||||||
|
0 /* containerViewId */,
|
||||||
|
null /* bundle */);
|
||||||
|
|
||||||
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
Robolectric.getForegroundThreadScheduler().advanceToLastPostedRunnable();
|
||||||
|
|
||||||
@@ -215,8 +225,11 @@ public class BatteryTipDialogFragmentTest {
|
|||||||
mDialogFragment = BatteryTipDialogFragment.newInstance(mUnrestrictAppTip, METRICS_KEY);
|
mDialogFragment = BatteryTipDialogFragment.newInstance(mUnrestrictAppTip, METRICS_KEY);
|
||||||
ShadowUtils.setApplicationLabel(PACKAGE_NAME, DISPLAY_NAME);
|
ShadowUtils.setApplicationLabel(PACKAGE_NAME, DISPLAY_NAME);
|
||||||
|
|
||||||
FragmentController.setupFragment(mDialogFragment, FragmentActivity.class,
|
FragmentController.setupFragment(
|
||||||
0 /* containerViewId */, null /* bundle */);
|
mDialogFragment,
|
||||||
|
FragmentActivity.class,
|
||||||
|
0 /* containerViewId */,
|
||||||
|
null /* bundle */);
|
||||||
|
|
||||||
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
final AlertDialog dialog = ShadowAlertDialogCompat.getLatestAlertDialog();
|
||||||
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
ShadowAlertDialogCompat shadowDialog = ShadowAlertDialogCompat.shadowOf(dialog);
|
||||||
|
|||||||
@@ -54,17 +54,16 @@ public class BatteryTipLoaderTest {
|
|||||||
BatteryTip.TipType.BATTERY_DEFENDER,
|
BatteryTip.TipType.BATTERY_DEFENDER,
|
||||||
BatteryTip.TipType.DOCK_DEFENDER,
|
BatteryTip.TipType.DOCK_DEFENDER,
|
||||||
BatteryTip.TipType.INCOMPATIBLE_CHARGER,
|
BatteryTip.TipType.INCOMPATIBLE_CHARGER,
|
||||||
BatteryTip.TipType.HIGH_DEVICE_USAGE};
|
BatteryTip.TipType.HIGH_DEVICE_USAGE
|
||||||
|
};
|
||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
private BatteryUsageStats mBatteryUsageStats;
|
||||||
@Mock
|
|
||||||
private PowerManager mPowerManager;
|
@Mock private PowerManager mPowerManager;
|
||||||
@Mock
|
@Mock private Intent mIntent;
|
||||||
private Intent mIntent;
|
@Mock private BatteryUtils mBatteryUtils;
|
||||||
@Mock
|
@Mock private BatteryInfo mBatteryInfo;
|
||||||
private BatteryUtils mBatteryUtils;
|
|
||||||
@Mock
|
|
||||||
private BatteryInfo mBatteryInfo;
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private BatteryTipLoader mBatteryTipLoader;
|
private BatteryTipLoader mBatteryTipLoader;
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.fuelgauge.batterytip;
|
package com.android.settings.fuelgauge.batterytip;
|
||||||
|
|
||||||
import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType
|
import static com.android.settings.fuelgauge.batterytip.tips.BatteryTip.TipType.SMART_BATTERY_MANAGER;
|
||||||
.SMART_BATTERY_MANAGER;
|
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@@ -31,8 +30,6 @@ import android.text.format.DateUtils;
|
|||||||
|
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.internal.logging.nano.MetricsProto;
|
|
||||||
import com.android.settings.R;
|
|
||||||
import com.android.settings.SettingsActivity;
|
import com.android.settings.SettingsActivity;
|
||||||
import com.android.settings.core.BasePreferenceController;
|
import com.android.settings.core.BasePreferenceController;
|
||||||
import com.android.settings.core.InstrumentedPreferenceFragment;
|
import com.android.settings.core.InstrumentedPreferenceFragment;
|
||||||
@@ -58,16 +55,11 @@ public class BatteryTipPreferenceControllerTest {
|
|||||||
private static final String KEY_TIP = "key_battery_tip";
|
private static final String KEY_TIP = "key_battery_tip";
|
||||||
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
private static final long AVERAGE_TIME_MS = DateUtils.HOUR_IN_MILLIS;
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener;
|
||||||
private BatteryTipPreferenceController.BatteryTipListener mBatteryTipListener;
|
@Mock private PreferenceScreen mPreferenceScreen;
|
||||||
@Mock
|
@Mock private BatteryTip mBatteryTip;
|
||||||
private PreferenceScreen mPreferenceScreen;
|
@Mock private SettingsActivity mSettingsActivity;
|
||||||
@Mock
|
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||||
private BatteryTip mBatteryTip;
|
|
||||||
@Mock
|
|
||||||
private SettingsActivity mSettingsActivity;
|
|
||||||
@Mock
|
|
||||||
private InstrumentedPreferenceFragment mFragment;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private CardPreference mCardPreference;
|
private CardPreference mCardPreference;
|
||||||
@@ -147,13 +139,13 @@ public class BatteryTipPreferenceControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAvailabilityStatus_returnAvailableUnsearchable() {
|
public void getAvailabilityStatus_returnAvailableUnsearchable() {
|
||||||
assertThat(mBatteryTipPreferenceController.getAvailabilityStatus()).isEqualTo(
|
assertThat(mBatteryTipPreferenceController.getAvailabilityStatus())
|
||||||
BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
.isEqualTo(BasePreferenceController.AVAILABLE_UNSEARCHABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BatteryTipPreferenceController buildBatteryTipPreferenceController() {
|
private BatteryTipPreferenceController buildBatteryTipPreferenceController() {
|
||||||
final BatteryTipPreferenceController controller = new BatteryTipPreferenceController(
|
final BatteryTipPreferenceController controller =
|
||||||
mContext, KEY_PREF);
|
new BatteryTipPreferenceController(mContext, KEY_PREF);
|
||||||
controller.setActivity(mSettingsActivity);
|
controller.setActivity(mSettingsActivity);
|
||||||
controller.setFragment(mFragment);
|
controller.setFragment(mFragment);
|
||||||
controller.setBatteryTipListener(mBatteryTipListener);
|
controller.setBatteryTipListener(mBatteryTipListener);
|
||||||
|
|||||||
@@ -45,10 +45,8 @@ import java.util.ArrayList;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class BatteryTipUtilsTest {
|
public class BatteryTipUtilsTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private SettingsActivity mSettingsActivity;
|
||||||
private SettingsActivity mSettingsActivity;
|
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||||
@Mock
|
|
||||||
private InstrumentedPreferenceFragment mFragment;
|
|
||||||
private RestrictAppTip mRestrictAppTip;
|
private RestrictAppTip mRestrictAppTip;
|
||||||
private LowBatteryTip mLowBatteryTip;
|
private LowBatteryTip mLowBatteryTip;
|
||||||
private BatteryDefenderTip mBatteryDefenderTip;
|
private BatteryDefenderTip mBatteryDefenderTip;
|
||||||
@@ -61,42 +59,49 @@ public class BatteryTipUtilsTest {
|
|||||||
when(mSettingsActivity.getApplicationContext()).thenReturn(RuntimeEnvironment.application);
|
when(mSettingsActivity.getApplicationContext()).thenReturn(RuntimeEnvironment.application);
|
||||||
when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application);
|
when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application);
|
||||||
mRestrictAppTip = spy(new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>()));
|
mRestrictAppTip = spy(new RestrictAppTip(BatteryTip.StateType.NEW, new ArrayList<>()));
|
||||||
mLowBatteryTip = spy(
|
mLowBatteryTip =
|
||||||
new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */));
|
spy(new LowBatteryTip(BatteryTip.StateType.NEW, false /* powerSaveModeOn */));
|
||||||
mBatteryDefenderTip = spy(new BatteryDefenderTip(BatteryTip.StateType.NEW,
|
mBatteryDefenderTip =
|
||||||
false /* isPluggedIn */));
|
spy(new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetActionForBatteryTip_typeRestrictStateNew_returnActionRestrict() {
|
public void testGetActionForBatteryTip_typeRestrictStateNew_returnActionRestrict() {
|
||||||
when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
||||||
|
|
||||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity,
|
assertThat(
|
||||||
mFragment)).isInstanceOf(RestrictAppAction.class);
|
BatteryTipUtils.getActionForBatteryTip(
|
||||||
|
mRestrictAppTip, mSettingsActivity, mFragment))
|
||||||
|
.isInstanceOf(RestrictAppAction.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetActionForBatteryTip_typeRestrictStateHandled_returnActionOpen() {
|
public void testGetActionForBatteryTip_typeRestrictStateHandled_returnActionOpen() {
|
||||||
when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.HANDLED);
|
when(mRestrictAppTip.getState()).thenReturn(BatteryTip.StateType.HANDLED);
|
||||||
|
|
||||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mRestrictAppTip, mSettingsActivity,
|
assertThat(
|
||||||
mFragment)).isInstanceOf(OpenRestrictAppFragmentAction.class);
|
BatteryTipUtils.getActionForBatteryTip(
|
||||||
|
mRestrictAppTip, mSettingsActivity, mFragment))
|
||||||
|
.isInstanceOf(OpenRestrictAppFragmentAction.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetActionForBatteryTip_typeLowBatteryStateNew_returnActionOpen() {
|
public void testGetActionForBatteryTip_typeLowBatteryStateNew_returnActionOpen() {
|
||||||
when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
when(mLowBatteryTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
||||||
|
|
||||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mLowBatteryTip, mSettingsActivity,
|
assertThat(
|
||||||
mFragment)).isInstanceOf(OpenBatterySaverAction.class);
|
BatteryTipUtils.getActionForBatteryTip(
|
||||||
|
mLowBatteryTip, mSettingsActivity, mFragment))
|
||||||
|
.isInstanceOf(OpenBatterySaverAction.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void
|
public void testGetActionForBatteryTip_typeBatteryDefenderStateNew_returnNullAction() {
|
||||||
testGetActionForBatteryTip_typeBatteryDefenderStateNew_returnNullAction() {
|
|
||||||
when(mBatteryDefenderTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
when(mBatteryDefenderTip.getState()).thenReturn(BatteryTip.StateType.NEW);
|
||||||
|
|
||||||
assertThat(BatteryTipUtils.getActionForBatteryTip(mBatteryDefenderTip, mSettingsActivity,
|
assertThat(
|
||||||
mFragment)).isNull();
|
BatteryTipUtils.getActionForBatteryTip(
|
||||||
|
mBatteryDefenderTip, mSettingsActivity, mFragment))
|
||||||
|
.isNull();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,9 +24,9 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class HighUsageDataParserTest {
|
public class HighUsageDataParserTest {
|
||||||
|
|||||||
@@ -39,10 +39,10 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.RobolectricTestRunner;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.robolectric.RobolectricTestRunner;
|
|
||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class OpenRestrictAppFragmentActionTest {
|
public class OpenRestrictAppFragmentActionTest {
|
||||||
@@ -53,10 +53,8 @@ public class OpenRestrictAppFragmentActionTest {
|
|||||||
private static final int ANOMALY_BT = 1;
|
private static final int ANOMALY_BT = 1;
|
||||||
private static final int METRICS_KEY = 1;
|
private static final int METRICS_KEY = 1;
|
||||||
|
|
||||||
@Mock
|
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||||
private InstrumentedPreferenceFragment mFragment;
|
@Mock private BatteryDatabaseManager mBatteryDatabaseManager;
|
||||||
@Mock
|
|
||||||
private BatteryDatabaseManager mBatteryDatabaseManager;
|
|
||||||
private OpenRestrictAppFragmentAction mAction;
|
private OpenRestrictAppFragmentAction mAction;
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -67,19 +65,22 @@ public class OpenRestrictAppFragmentActionTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = ApplicationProvider.getApplicationContext();
|
mContext = ApplicationProvider.getApplicationContext();
|
||||||
mAppInfos = new ArrayList<>();
|
mAppInfos = new ArrayList<>();
|
||||||
mAppInfos.add(new AppInfo.Builder()
|
mAppInfos.add(
|
||||||
|
new AppInfo.Builder()
|
||||||
.setPackageName(PACKAGE_NAME_1)
|
.setPackageName(PACKAGE_NAME_1)
|
||||||
.addAnomalyType(ANOMALY_BT)
|
.addAnomalyType(ANOMALY_BT)
|
||||||
.build());
|
.build());
|
||||||
mAppInfos.add(new AppInfo.Builder()
|
mAppInfos.add(
|
||||||
|
new AppInfo.Builder()
|
||||||
.setPackageName(PACKAGE_NAME_2)
|
.setPackageName(PACKAGE_NAME_2)
|
||||||
.addAnomalyType(ANOMALY_WAKEUP)
|
.addAnomalyType(ANOMALY_WAKEUP)
|
||||||
.build());
|
.build());
|
||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
when(mFragment.getContext()).thenReturn(mContext);
|
when(mFragment.getContext()).thenReturn(mContext);
|
||||||
|
|
||||||
mAction = new OpenRestrictAppFragmentAction(mFragment,
|
mAction =
|
||||||
new RestrictAppTip(BatteryTip.StateType.HANDLED, mAppInfos));
|
new OpenRestrictAppFragmentAction(
|
||||||
|
mFragment, new RestrictAppTip(BatteryTip.StateType.HANDLED, mAppInfos));
|
||||||
mAction.mBatteryDatabaseManager = mBatteryDatabaseManager;
|
mAction.mBatteryDatabaseManager = mBatteryDatabaseManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,9 +94,12 @@ public class OpenRestrictAppFragmentActionTest {
|
|||||||
public void testHandlePositiveAction() {
|
public void testHandlePositiveAction() {
|
||||||
mAction.handlePositiveAction(METRICS_KEY);
|
mAction.handlePositiveAction(METRICS_KEY);
|
||||||
|
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(mContext,
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
MetricsProto.MetricsEvent.ACTION_TIP_OPEN_APP_RESTRICTION_PAGE, METRICS_KEY);
|
.action(
|
||||||
verify(mBatteryDatabaseManager).updateAnomalies(mAppInfos,
|
mContext,
|
||||||
AnomalyDatabaseHelper.State.HANDLED);
|
MetricsProto.MetricsEvent.ACTION_TIP_OPEN_APP_RESTRICTION_PAGE,
|
||||||
|
METRICS_KEY);
|
||||||
|
verify(mBatteryDatabaseManager)
|
||||||
|
.updateAnomalies(mAppInfos, AnomalyDatabaseHelper.State.HANDLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,8 +52,7 @@ public class RestrictAppActionTest {
|
|||||||
private static final int ANOMALY_BT = 1;
|
private static final int ANOMALY_BT = 1;
|
||||||
private static final int METRICS_KEY = 1;
|
private static final int METRICS_KEY = 1;
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryUtils mBatteryUtils;
|
||||||
private BatteryUtils mBatteryUtils;
|
|
||||||
private RestrictAppAction mRestrictAppAction;
|
private RestrictAppAction mRestrictAppAction;
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
|
|
||||||
@@ -62,11 +61,9 @@ public class RestrictAppActionTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
final List<AppInfo> mAppInfos = new ArrayList<>();
|
final List<AppInfo> mAppInfos = new ArrayList<>();
|
||||||
mAppInfos.add(new AppInfo.Builder()
|
mAppInfos.add(new AppInfo.Builder().setUid(UID_1).setPackageName(PACKAGE_NAME_1).build());
|
||||||
.setUid(UID_1)
|
mAppInfos.add(
|
||||||
.setPackageName(PACKAGE_NAME_1)
|
new AppInfo.Builder()
|
||||||
.build());
|
|
||||||
mAppInfos.add(new AppInfo.Builder()
|
|
||||||
.setUid(UID_2)
|
.setUid(UID_2)
|
||||||
.setPackageName(PACKAGE_NAME_2)
|
.setPackageName(PACKAGE_NAME_2)
|
||||||
.addAnomalyType(ANOMALY_BT)
|
.addAnomalyType(ANOMALY_BT)
|
||||||
@@ -74,7 +71,9 @@ public class RestrictAppActionTest {
|
|||||||
.build());
|
.build());
|
||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
|
|
||||||
mRestrictAppAction = new RestrictAppAction(RuntimeEnvironment.application,
|
mRestrictAppAction =
|
||||||
|
new RestrictAppAction(
|
||||||
|
RuntimeEnvironment.application,
|
||||||
new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfos));
|
new RestrictAppTip(BatteryTip.StateType.NEW, mAppInfos));
|
||||||
mRestrictAppAction.mBatteryUtils = mBatteryUtils;
|
mRestrictAppAction.mBatteryUtils = mBatteryUtils;
|
||||||
}
|
}
|
||||||
@@ -89,17 +88,28 @@ public class RestrictAppActionTest {
|
|||||||
public void testHandlePositiveAction() {
|
public void testHandlePositiveAction() {
|
||||||
mRestrictAppAction.handlePositiveAction(METRICS_KEY);
|
mRestrictAppAction.handlePositiveAction(METRICS_KEY);
|
||||||
|
|
||||||
verify(mBatteryUtils)
|
verify(mBatteryUtils).setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_IGNORED);
|
||||||
.setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_IGNORED);
|
verify(mBatteryUtils).setForceAppStandby(UID_2, PACKAGE_NAME_2, AppOpsManager.MODE_IGNORED);
|
||||||
verify(mBatteryUtils)
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
.setForceAppStandby(UID_2, PACKAGE_NAME_2, AppOpsManager.MODE_IGNORED);
|
.action(
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_1, 0);
|
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
METRICS_KEY,
|
||||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_2,
|
PACKAGE_NAME_1,
|
||||||
|
0);
|
||||||
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
|
||||||
|
METRICS_KEY,
|
||||||
|
PACKAGE_NAME_2,
|
||||||
ANOMALY_WAKEUP);
|
ANOMALY_WAKEUP);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP, METRICS_KEY, PACKAGE_NAME_2,
|
.action(
|
||||||
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_TIP_RESTRICT_APP,
|
||||||
|
METRICS_KEY,
|
||||||
|
PACKAGE_NAME_2,
|
||||||
ANOMALY_BT);
|
ANOMALY_BT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,8 +44,7 @@ public class UnrestrictAppActionTest {
|
|||||||
private static final String PACKAGE_NAME_1 = "com.android.app1";
|
private static final String PACKAGE_NAME_1 = "com.android.app1";
|
||||||
private static final int METRICS_KEY = 1;
|
private static final int METRICS_KEY = 1;
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryUtils mBatteryUtils;
|
||||||
private BatteryUtils mBatteryUtils;
|
|
||||||
private UnrestrictAppAction mUnrestrictAppAction;
|
private UnrestrictAppAction mUnrestrictAppAction;
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
|
|
||||||
@@ -53,13 +52,13 @@ public class UnrestrictAppActionTest {
|
|||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
final AppInfo appInfo = new AppInfo.Builder()
|
final AppInfo appInfo =
|
||||||
.setUid(UID_1)
|
new AppInfo.Builder().setUid(UID_1).setPackageName(PACKAGE_NAME_1).build();
|
||||||
.setPackageName(PACKAGE_NAME_1)
|
|
||||||
.build();
|
|
||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
|
|
||||||
mUnrestrictAppAction = new UnrestrictAppAction(RuntimeEnvironment.application,
|
mUnrestrictAppAction =
|
||||||
|
new UnrestrictAppAction(
|
||||||
|
RuntimeEnvironment.application,
|
||||||
new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo));
|
new UnrestrictAppTip(BatteryTip.StateType.NEW, appInfo));
|
||||||
mUnrestrictAppAction.mBatteryUtils = mBatteryUtils;
|
mUnrestrictAppAction.mBatteryUtils = mBatteryUtils;
|
||||||
}
|
}
|
||||||
@@ -73,9 +72,9 @@ public class UnrestrictAppActionTest {
|
|||||||
public void testHandlePositiveAction() {
|
public void testHandlePositiveAction() {
|
||||||
mUnrestrictAppAction.handlePositiveAction(METRICS_KEY);
|
mUnrestrictAppAction.handlePositiveAction(METRICS_KEY);
|
||||||
|
|
||||||
verify(mBatteryUtils)
|
verify(mBatteryUtils).setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_ALLOWED);
|
||||||
.setForceAppStandby(UID_1, PACKAGE_NAME_1, AppOpsManager.MODE_ALLOWED);
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
.action(
|
||||||
SettingsEnums.PAGE_UNKNOWN,
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP,
|
MetricsProto.MetricsEvent.ACTION_TIP_UNRESTRICT_APP,
|
||||||
METRICS_KEY,
|
METRICS_KEY,
|
||||||
|
|||||||
@@ -38,8 +38,7 @@ import org.robolectric.RobolectricTestRunner;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class BatteryDefenderDetectorTest {
|
public class BatteryDefenderDetectorTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryInfo mBatteryInfo;
|
||||||
private BatteryInfo mBatteryInfo;
|
|
||||||
private BatteryDefenderDetector mBatteryDefenderDetector;
|
private BatteryDefenderDetector mBatteryDefenderDetector;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@@ -53,8 +52,7 @@ public class BatteryDefenderDetectorTest {
|
|||||||
|
|
||||||
mContext = ApplicationProvider.getApplicationContext();
|
mContext = ApplicationProvider.getApplicationContext();
|
||||||
|
|
||||||
mBatteryDefenderDetector = new BatteryDefenderDetector(
|
mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, mContext);
|
||||||
mBatteryInfo, mContext);
|
|
||||||
|
|
||||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,25 +59,35 @@ public class DockDefenderDetectorTest {
|
|||||||
mBatteryInfo = new BatteryInfo();
|
mBatteryInfo = new BatteryInfo();
|
||||||
mBatteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_DOCK;
|
mBatteryInfo.pluggedStatus = BatteryManager.BATTERY_PLUGGED_DOCK;
|
||||||
mDockDefenderDetector = new DockDefenderDetector(mBatteryInfo, mContext);
|
mDockDefenderDetector = new DockDefenderDetector(mBatteryInfo, mContext);
|
||||||
Intent intent = BatteryTestUtils.getCustomBatteryIntent(BatteryManager.BATTERY_PLUGGED_DOCK,
|
Intent intent =
|
||||||
50 /* level */, 100 /* scale */, BatteryManager.BATTERY_STATUS_CHARGING);
|
BatteryTestUtils.getCustomBatteryIntent(
|
||||||
doReturn(intent).when(mContext).registerReceiver(eq(null),
|
BatteryManager.BATTERY_PLUGGED_DOCK,
|
||||||
refEq(new IntentFilter(Intent.ACTION_BATTERY_CHANGED)));
|
50 /* level */,
|
||||||
|
100 /* scale */,
|
||||||
|
BatteryManager.BATTERY_STATUS_CHARGING);
|
||||||
|
doReturn(intent)
|
||||||
|
.when(mContext)
|
||||||
|
.registerReceiver(eq(null), refEq(new IntentFilter(Intent.ACTION_BATTERY_CHANGED)));
|
||||||
|
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 0);
|
mContext.getContentResolver(),
|
||||||
|
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
|
||||||
|
0);
|
||||||
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDetect_dockDefenderTemporarilyBypassed() {
|
public void testDetect_dockDefenderTemporarilyBypassed() {
|
||||||
Settings.Global.putInt(mContext.getContentResolver(),
|
Settings.Global.putInt(
|
||||||
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS, 1);
|
mContext.getContentResolver(),
|
||||||
|
BatteryUtils.SETTINGS_GLOBAL_DOCK_DEFENDER_BYPASS,
|
||||||
|
1);
|
||||||
|
|
||||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||||
|
|
||||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
assertEquals(
|
||||||
|
((DockDefenderTip) batteryTip).getMode(),
|
||||||
BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED);
|
BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,8 +99,8 @@ public class DockDefenderDetectorTest {
|
|||||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||||
|
|
||||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
assertEquals(
|
||||||
BatteryUtils.DockDefenderMode.ACTIVE);
|
((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.ACTIVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -101,7 +111,8 @@ public class DockDefenderDetectorTest {
|
|||||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||||
|
|
||||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
assertEquals(
|
||||||
|
((DockDefenderTip) batteryTip).getMode(),
|
||||||
BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
|
BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -113,8 +124,8 @@ public class DockDefenderDetectorTest {
|
|||||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||||
|
|
||||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
assertEquals(
|
||||||
BatteryUtils.DockDefenderMode.DISABLED);
|
((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -124,8 +135,8 @@ public class DockDefenderDetectorTest {
|
|||||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||||
|
|
||||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
assertEquals(
|
||||||
BatteryUtils.DockDefenderMode.DISABLED);
|
((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -136,7 +147,7 @@ public class DockDefenderDetectorTest {
|
|||||||
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
BatteryTip batteryTip = mDockDefenderDetector.detect();
|
||||||
|
|
||||||
assertTrue(batteryTip instanceof DockDefenderTip);
|
assertTrue(batteryTip instanceof DockDefenderTip);
|
||||||
assertEquals(((DockDefenderTip) batteryTip).getMode(),
|
assertEquals(
|
||||||
BatteryUtils.DockDefenderMode.DISABLED);
|
((DockDefenderTip) batteryTip).getMode(), BatteryUtils.DockDefenderMode.DISABLED);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,18 +62,12 @@ public class HighUsageDetectorTest {
|
|||||||
private static final double POWER_LOW = 10000;
|
private static final double POWER_LOW = 10000;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
@Mock private UidBatteryConsumer mHighBatteryConsumer;
|
||||||
private UidBatteryConsumer mHighBatteryConsumer;
|
@Mock private UidBatteryConsumer mLowBatteryConsumer;
|
||||||
@Mock
|
@Mock private UidBatteryConsumer mSystemBatteryConsumer;
|
||||||
private UidBatteryConsumer mLowBatteryConsumer;
|
@Mock private HighUsageDataParser mDataParser;
|
||||||
@Mock
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
private UidBatteryConsumer mSystemBatteryConsumer;
|
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||||
@Mock
|
|
||||||
private HighUsageDataParser mDataParser;
|
|
||||||
@Mock
|
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
|
||||||
@Mock
|
|
||||||
private BatteryStatsManager mBatteryStatsManager;
|
|
||||||
|
|
||||||
private AppInfo mHighAppInfo;
|
private AppInfo mHighAppInfo;
|
||||||
private AppInfo mLowAppInfo;
|
private AppInfo mLowAppInfo;
|
||||||
@@ -94,10 +88,16 @@ public class HighUsageDetectorTest {
|
|||||||
when(mBatteryStatsManager.getBatteryUsageStats(any(BatteryUsageStatsQuery.class)))
|
when(mBatteryStatsManager.getBatteryUsageStats(any(BatteryUsageStatsQuery.class)))
|
||||||
.thenReturn(mBatteryUsageStats);
|
.thenReturn(mBatteryUsageStats);
|
||||||
|
|
||||||
mContext.sendStickyBroadcast(new Intent(Intent.ACTION_BATTERY_CHANGED)
|
mContext.sendStickyBroadcast(
|
||||||
|
new Intent(Intent.ACTION_BATTERY_CHANGED)
|
||||||
.putExtra(BatteryManager.EXTRA_PLUGGED, 0));
|
.putExtra(BatteryManager.EXTRA_PLUGGED, 0));
|
||||||
|
|
||||||
mHighUsageDetector = spy(new HighUsageDetector(mContext, mPolicy, mBatteryUsageStats,
|
mHighUsageDetector =
|
||||||
|
spy(
|
||||||
|
new HighUsageDetector(
|
||||||
|
mContext,
|
||||||
|
mPolicy,
|
||||||
|
mBatteryUsageStats,
|
||||||
mBatteryUtils.getBatteryInfo(TAG)));
|
mBatteryUtils.getBatteryInfo(TAG)));
|
||||||
mHighUsageDetector.mBatteryUtils = mBatteryUtils;
|
mHighUsageDetector.mBatteryUtils = mBatteryUtils;
|
||||||
mHighUsageDetector.mDataParser = mDataParser;
|
mHighUsageDetector.mDataParser = mDataParser;
|
||||||
@@ -111,12 +111,8 @@ public class HighUsageDetectorTest {
|
|||||||
when(mBatteryUsageStats.getDischargePercentage()).thenReturn(100);
|
when(mBatteryUsageStats.getDischargePercentage()).thenReturn(100);
|
||||||
when(mBatteryUsageStats.getConsumedPower()).thenReturn(POWER_HIGH + POWER_LOW);
|
when(mBatteryUsageStats.getConsumedPower()).thenReturn(POWER_HIGH + POWER_LOW);
|
||||||
|
|
||||||
mHighAppInfo = new AppInfo.Builder()
|
mHighAppInfo = new AppInfo.Builder().setUid(UID_HIGH).build();
|
||||||
.setUid(UID_HIGH)
|
mLowAppInfo = new AppInfo.Builder().setUid(UID_LOW).build();
|
||||||
.build();
|
|
||||||
mLowAppInfo = new AppInfo.Builder()
|
|
||||||
.setUid(UID_LOW)
|
|
||||||
.build();
|
|
||||||
|
|
||||||
ArrayList<UidBatteryConsumer> consumers = new ArrayList<>();
|
ArrayList<UidBatteryConsumer> consumers = new ArrayList<>();
|
||||||
consumers.add(mSystemBatteryConsumer);
|
consumers.add(mSystemBatteryConsumer);
|
||||||
|
|||||||
@@ -40,8 +40,7 @@ import java.util.concurrent.TimeUnit;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class LowBatteryDetectorTest {
|
public class LowBatteryDetectorTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryInfo mBatteryInfo;
|
||||||
private BatteryInfo mBatteryInfo;
|
|
||||||
private BatteryTipPolicy mPolicy;
|
private BatteryTipPolicy mPolicy;
|
||||||
private LowBatteryDetector mLowBatteryDetector;
|
private LowBatteryDetector mLowBatteryDetector;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@@ -55,15 +54,16 @@ public class LowBatteryDetectorTest {
|
|||||||
ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", true);
|
ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", true);
|
||||||
mBatteryInfo.discharging = true;
|
mBatteryInfo.discharging = true;
|
||||||
|
|
||||||
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
mLowBatteryDetector =
|
||||||
false /* isPowerSaveMode */);
|
new LowBatteryDetector(
|
||||||
|
mContext, mPolicy, mBatteryInfo, false /* isPowerSaveMode */);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDetect_disabledByPolicy_tipInvisible() {
|
public void testDetect_disabledByPolicy_tipInvisible() {
|
||||||
ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", false);
|
ReflectionHelpers.setField(mPolicy, "lowBatteryEnabled", false);
|
||||||
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
mLowBatteryDetector =
|
||||||
true /* isPowerSaveMode */);
|
new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, true /* isPowerSaveMode */);
|
||||||
|
|
||||||
assertThat(mLowBatteryDetector.detect().isVisible()).isFalse();
|
assertThat(mLowBatteryDetector.detect().isVisible()).isFalse();
|
||||||
}
|
}
|
||||||
@@ -84,8 +84,8 @@ public class LowBatteryDetectorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDetect_batterySaverOn_tipInvisible() {
|
public void testDetect_batterySaverOn_tipInvisible() {
|
||||||
mLowBatteryDetector = new LowBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
mLowBatteryDetector =
|
||||||
true /* isPowerSaveMode */);
|
new LowBatteryDetector(mContext, mPolicy, mBatteryInfo, true /* isPowerSaveMode */);
|
||||||
|
|
||||||
assertThat(mLowBatteryDetector.detect().getState())
|
assertThat(mLowBatteryDetector.detect().getState())
|
||||||
.isEqualTo(BatteryTip.StateType.INVISIBLE);
|
.isEqualTo(BatteryTip.StateType.INVISIBLE);
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import static org.mockito.Mockito.spy;
|
|||||||
|
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.PowerManager;
|
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
|
|
||||||
import com.android.settings.fuelgauge.BatteryInfo;
|
import com.android.settings.fuelgauge.BatteryInfo;
|
||||||
@@ -49,8 +48,7 @@ public class SmartBatteryDetectorTest {
|
|||||||
private SmartBatteryDetector mSmartBatteryDetector;
|
private SmartBatteryDetector mSmartBatteryDetector;
|
||||||
private BatteryTipPolicy mPolicy;
|
private BatteryTipPolicy mPolicy;
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryInfo mBatteryInfo;
|
||||||
private BatteryInfo mBatteryInfo;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -59,8 +57,13 @@ public class SmartBatteryDetectorTest {
|
|||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mContentResolver = mContext.getContentResolver();
|
mContentResolver = mContext.getContentResolver();
|
||||||
mPolicy = spy(new BatteryTipPolicy(mContext));
|
mPolicy = spy(new BatteryTipPolicy(mContext));
|
||||||
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
mSmartBatteryDetector =
|
||||||
mContentResolver, false /* isPowerSaveMode */);
|
new SmartBatteryDetector(
|
||||||
|
mContext,
|
||||||
|
mPolicy,
|
||||||
|
mBatteryInfo,
|
||||||
|
mContentResolver,
|
||||||
|
false /* isPowerSaveMode */);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -72,8 +75,8 @@ public class SmartBatteryDetectorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDetect_smartBatteryOff_tipVisible() {
|
public void testDetect_smartBatteryOff_tipVisible() {
|
||||||
Settings.Global.putInt(mContentResolver,
|
Settings.Global.putInt(
|
||||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||||
|
|
||||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isTrue();
|
assertThat(mSmartBatteryDetector.detect().isVisible()).isTrue();
|
||||||
@@ -81,30 +84,40 @@ public class SmartBatteryDetectorTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDetect_batterySaverOn_tipInvisible() {
|
public void testDetect_batterySaverOn_tipInvisible() {
|
||||||
Settings.Global.putInt(mContentResolver,
|
Settings.Global.putInt(
|
||||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||||
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
mSmartBatteryDetector =
|
||||||
mContentResolver, true /* isPowerSaveMode */);
|
new SmartBatteryDetector(
|
||||||
|
mContext,
|
||||||
|
mPolicy,
|
||||||
|
mBatteryInfo,
|
||||||
|
mContentResolver,
|
||||||
|
true /* isPowerSaveMode */);
|
||||||
|
|
||||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDetect_unexpectedBatteryLevel_tipInvisible() {
|
public void testDetect_unexpectedBatteryLevel_tipInvisible() {
|
||||||
Settings.Global.putInt(mContentResolver,
|
Settings.Global.putInt(
|
||||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 0);
|
||||||
mBatteryInfo.batteryLevel = UNEXPECTED_BATTERY_LEVEL;
|
mBatteryInfo.batteryLevel = UNEXPECTED_BATTERY_LEVEL;
|
||||||
mSmartBatteryDetector = new SmartBatteryDetector(mContext, mPolicy, mBatteryInfo,
|
mSmartBatteryDetector =
|
||||||
mContentResolver, true /* isPowerSaveMode */);
|
new SmartBatteryDetector(
|
||||||
|
mContext,
|
||||||
|
mPolicy,
|
||||||
|
mBatteryInfo,
|
||||||
|
mContentResolver,
|
||||||
|
true /* isPowerSaveMode */);
|
||||||
|
|
||||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDetect_smartBatteryOn_tipInvisible() {
|
public void testDetect_smartBatteryOn_tipInvisible() {
|
||||||
Settings.Global.putInt(mContentResolver,
|
Settings.Global.putInt(
|
||||||
Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1);
|
mContentResolver, Settings.Global.ADAPTIVE_BATTERY_MANAGEMENT_ENABLED, 1);
|
||||||
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
mBatteryInfo.batteryLevel = EXPECTED_BATTERY_LEVEL;
|
||||||
|
|
||||||
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
assertThat(mSmartBatteryDetector.detect().isVisible()).isFalse();
|
||||||
|
|||||||
@@ -17,9 +17,7 @@ package com.android.settings.fuelgauge.batterytip.tips;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.ArgumentMatchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
@@ -63,8 +61,8 @@ public class BatteryDefenderTipTest {
|
|||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mBatteryDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW,
|
mBatteryDefenderTip =
|
||||||
false /* isPluggedIn */);
|
new BatteryDefenderTip(BatteryTip.StateType.NEW, false /* isPluggedIn */);
|
||||||
|
|
||||||
when(mPreference.getContext()).thenReturn(mContext);
|
when(mPreference.getContext()).thenReturn(mContext);
|
||||||
when(mCardPreference.getContext()).thenReturn(mContext);
|
when(mCardPreference.getContext()).thenReturn(mContext);
|
||||||
@@ -93,8 +91,8 @@ public class BatteryDefenderTipTest {
|
|||||||
mBatteryDefenderTip.updateState(mBatteryTip);
|
mBatteryDefenderTip.updateState(mBatteryTip);
|
||||||
mBatteryDefenderTip.log(mContext, mMetricsFeatureProvider);
|
mBatteryDefenderTip.log(mContext, mMetricsFeatureProvider);
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider).action(mContext,
|
verify(mMetricsFeatureProvider)
|
||||||
SettingsEnums.ACTION_BATTERY_DEFENDER_TIP, mBatteryTip.mState);
|
.action(mContext, SettingsEnums.ACTION_BATTERY_DEFENDER_TIP, mBatteryTip.mState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -131,8 +129,8 @@ public class BatteryDefenderTipTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updatePreference_whenCharging_setPrimaryButtonVisibleToBeTrue() {
|
public void updatePreference_whenCharging_setPrimaryButtonVisibleToBeTrue() {
|
||||||
mBatteryDefenderTip = new BatteryDefenderTip(BatteryTip.StateType.NEW,
|
mBatteryDefenderTip =
|
||||||
true /* isPluggedIn */);
|
new BatteryDefenderTip(BatteryTip.StateType.NEW, true /* isPluggedIn */);
|
||||||
|
|
||||||
mBatteryDefenderTip.updatePreference(mCardPreference);
|
mBatteryDefenderTip.updatePreference(mCardPreference);
|
||||||
|
|
||||||
|
|||||||
@@ -45,8 +45,7 @@ public class BatteryTipTest {
|
|||||||
|
|
||||||
private static final String TITLE = "title";
|
private static final String TITLE = "title";
|
||||||
private static final String SUMMARY = "summary";
|
private static final String SUMMARY = "summary";
|
||||||
@DrawableRes
|
@DrawableRes private static final int ICON_ID = R.drawable.ic_fingerprint;
|
||||||
private static final int ICON_ID = R.drawable.ic_fingerprint;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private TestBatteryTip mBatteryTip;
|
private TestBatteryTip mBatteryTip;
|
||||||
@@ -86,8 +85,10 @@ public class BatteryTipTest {
|
|||||||
@Test
|
@Test
|
||||||
public void updatePreference_resetLayoutState() {
|
public void updatePreference_resetLayoutState() {
|
||||||
mContext.setTheme(R.style.Theme_Settings);
|
mContext.setTheme(R.style.Theme_Settings);
|
||||||
PreferenceViewHolder holder = PreferenceViewHolder.createInstanceForTests(
|
PreferenceViewHolder holder =
|
||||||
View.inflate(mContext, R.layout.card_preference_layout, /* parent= */ null));
|
PreferenceViewHolder.createInstanceForTests(
|
||||||
|
View.inflate(
|
||||||
|
mContext, R.layout.card_preference_layout, /* parent= */ null));
|
||||||
CardPreference cardPreference = new CardPreference(mContext);
|
CardPreference cardPreference = new CardPreference(mContext);
|
||||||
cardPreference.onBindViewHolder(holder);
|
cardPreference.onBindViewHolder(holder);
|
||||||
cardPreference.setPrimaryButtonVisible(true);
|
cardPreference.setPrimaryButtonVisible(true);
|
||||||
@@ -113,9 +114,7 @@ public class BatteryTipTest {
|
|||||||
assertThat(mBatteryTip.toString()).isEqualTo("type=6 state=0");
|
assertThat(mBatteryTip.toString()).isEqualTo("type=6 state=0");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/** Used to test the non abstract methods in {@link TestBatteryTip} */
|
||||||
* Used to test the non abstract methods in {@link TestBatteryTip}
|
|
||||||
*/
|
|
||||||
public static class TestBatteryTip extends BatteryTip {
|
public static class TestBatteryTip extends BatteryTip {
|
||||||
TestBatteryTip() {
|
TestBatteryTip() {
|
||||||
super(TipType.SUMMARY, StateType.NEW, true);
|
super(TipType.SUMMARY, StateType.NEW, true);
|
||||||
@@ -150,7 +149,8 @@ public class BatteryTipTest {
|
|||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Parcelable.Creator CREATOR = new Parcelable.Creator() {
|
public final Parcelable.Creator CREATOR =
|
||||||
|
new Parcelable.Creator() {
|
||||||
public BatteryTip createFromParcel(Parcel in) {
|
public BatteryTip createFromParcel(Parcel in) {
|
||||||
return new TestBatteryTip(in);
|
return new TestBatteryTip(in);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,10 +54,8 @@ public class DockDefenderTipTest {
|
|||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
|
|
||||||
@Mock
|
@Mock private Preference mPreference;
|
||||||
private Preference mPreference;
|
@Mock private CardPreference mCardPreference;
|
||||||
@Mock
|
|
||||||
private CardPreference mCardPreference;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -67,14 +65,18 @@ public class DockDefenderTipTest {
|
|||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
mMetricsFeatureProvider = mFeatureFactory.metricsFeatureProvider;
|
||||||
|
|
||||||
mDockDefenderTipFutureBypass = new DockDefenderTip(BatteryTip.StateType.NEW,
|
mDockDefenderTipFutureBypass =
|
||||||
BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
|
new DockDefenderTip(
|
||||||
mDockDefenderTipActive = new DockDefenderTip(BatteryTip.StateType.NEW,
|
BatteryTip.StateType.NEW, BatteryUtils.DockDefenderMode.FUTURE_BYPASS);
|
||||||
BatteryUtils.DockDefenderMode.ACTIVE);
|
mDockDefenderTipActive =
|
||||||
mDockDefenderTipTemporarilyBypassed = new DockDefenderTip(BatteryTip.StateType.NEW,
|
new DockDefenderTip(BatteryTip.StateType.NEW, BatteryUtils.DockDefenderMode.ACTIVE);
|
||||||
|
mDockDefenderTipTemporarilyBypassed =
|
||||||
|
new DockDefenderTip(
|
||||||
|
BatteryTip.StateType.NEW,
|
||||||
BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED);
|
BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED);
|
||||||
mDockDefenderTipDisabled = new DockDefenderTip(BatteryTip.StateType.INVISIBLE,
|
mDockDefenderTipDisabled =
|
||||||
BatteryUtils.DockDefenderMode.DISABLED);
|
new DockDefenderTip(
|
||||||
|
BatteryTip.StateType.INVISIBLE, BatteryUtils.DockDefenderMode.DISABLED);
|
||||||
|
|
||||||
doReturn(mContext).when(mPreference).getContext();
|
doReturn(mContext).when(mPreference).getContext();
|
||||||
doReturn(mContext).when(mCardPreference).getContext();
|
doReturn(mContext).when(mCardPreference).getContext();
|
||||||
@@ -82,22 +84,28 @@ public class DockDefenderTipTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetTitle() {
|
public void testGetTitle() {
|
||||||
assertThat(mDockDefenderTipFutureBypass.getTitle(mContext).toString()).isEqualTo(
|
assertThat(mDockDefenderTipFutureBypass.getTitle(mContext).toString())
|
||||||
|
.isEqualTo(
|
||||||
mContext.getString(R.string.battery_tip_dock_defender_future_bypass_title));
|
mContext.getString(R.string.battery_tip_dock_defender_future_bypass_title));
|
||||||
assertThat(mDockDefenderTipActive.getTitle(mContext).toString()).isEqualTo(
|
assertThat(mDockDefenderTipActive.getTitle(mContext).toString())
|
||||||
mContext.getString(R.string.battery_tip_dock_defender_active_title));
|
.isEqualTo(mContext.getString(R.string.battery_tip_dock_defender_active_title));
|
||||||
assertThat(mDockDefenderTipTemporarilyBypassed.getTitle(mContext).toString()).isEqualTo(
|
assertThat(mDockDefenderTipTemporarilyBypassed.getTitle(mContext).toString())
|
||||||
mContext.getString(R.string.battery_tip_dock_defender_temporarily_bypassed_title));
|
.isEqualTo(
|
||||||
|
mContext.getString(
|
||||||
|
R.string.battery_tip_dock_defender_temporarily_bypassed_title));
|
||||||
assertThat(mDockDefenderTipDisabled.getTitle(mContext)).isNull();
|
assertThat(mDockDefenderTipDisabled.getTitle(mContext)).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetSummary() {
|
public void testGetSummary() {
|
||||||
assertThat(mDockDefenderTipFutureBypass.getSummary(mContext).toString()).isEqualTo(
|
assertThat(mDockDefenderTipFutureBypass.getSummary(mContext).toString())
|
||||||
mContext.getString(R.string.battery_tip_dock_defender_future_bypass_summary));
|
.isEqualTo(
|
||||||
assertThat(mDockDefenderTipActive.getSummary(mContext).toString()).isEqualTo(
|
mContext.getString(
|
||||||
mContext.getString(R.string.battery_tip_dock_defender_active_summary));
|
R.string.battery_tip_dock_defender_future_bypass_summary));
|
||||||
assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString()).isEqualTo(
|
assertThat(mDockDefenderTipActive.getSummary(mContext).toString())
|
||||||
|
.isEqualTo(mContext.getString(R.string.battery_tip_dock_defender_active_summary));
|
||||||
|
assertThat(mDockDefenderTipTemporarilyBypassed.getSummary(mContext).toString())
|
||||||
|
.isEqualTo(
|
||||||
mContext.getString(
|
mContext.getString(
|
||||||
R.string.battery_tip_dock_defender_temporarily_bypassed_summary));
|
R.string.battery_tip_dock_defender_temporarily_bypassed_summary));
|
||||||
assertThat(mDockDefenderTipDisabled.getSummary(mContext)).isNull();
|
assertThat(mDockDefenderTipDisabled.getSummary(mContext)).isNull();
|
||||||
@@ -105,45 +113,48 @@ public class DockDefenderTipTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetIconId_dockDefenderActive_getProtectedIcon() {
|
public void testGetIconId_dockDefenderActive_getProtectedIcon() {
|
||||||
assertThat(mDockDefenderTipActive.getIconId()).isEqualTo(
|
assertThat(mDockDefenderTipActive.getIconId())
|
||||||
R.drawable.ic_battery_status_protected_24dp);
|
.isEqualTo(R.drawable.ic_battery_status_protected_24dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetIconId_dockDefenderNotActive_getUntriggeredIcon() {
|
public void testGetIconId_dockDefenderNotActive_getUntriggeredIcon() {
|
||||||
assertThat(mDockDefenderTipFutureBypass.getIconId()).isEqualTo(
|
assertThat(mDockDefenderTipFutureBypass.getIconId())
|
||||||
R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
.isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||||
assertThat(mDockDefenderTipTemporarilyBypassed.getIconId()).isEqualTo(
|
assertThat(mDockDefenderTipTemporarilyBypassed.getIconId())
|
||||||
R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
.isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||||
assertThat(mDockDefenderTipDisabled.getIconId()).isEqualTo(
|
assertThat(mDockDefenderTipDisabled.getIconId())
|
||||||
R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
.isEqualTo(R.drawable.ic_battery_dock_defender_untriggered_24dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdateState() {
|
public void testUpdateState() {
|
||||||
mDockDefenderTipTemporarilyBypassed.updateState(mDockDefenderTipDisabled);
|
mDockDefenderTipTemporarilyBypassed.updateState(mDockDefenderTipDisabled);
|
||||||
|
|
||||||
assertThat(mDockDefenderTipTemporarilyBypassed.getState()).isEqualTo(
|
assertThat(mDockDefenderTipTemporarilyBypassed.getState())
|
||||||
BatteryTip.StateType.INVISIBLE);
|
.isEqualTo(BatteryTip.StateType.INVISIBLE);
|
||||||
assertThat(mDockDefenderTipTemporarilyBypassed.getMode()).isEqualTo(
|
assertThat(mDockDefenderTipTemporarilyBypassed.getMode())
|
||||||
BatteryUtils.DockDefenderMode.DISABLED);
|
.isEqualTo(BatteryUtils.DockDefenderMode.DISABLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLog() {
|
public void testLog() {
|
||||||
mDockDefenderTipActive.log(mContext, mMetricsFeatureProvider);
|
mDockDefenderTipActive.log(mContext, mMetricsFeatureProvider);
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider).action(mContext, SettingsEnums.ACTION_DOCK_DEFENDER_TIP,
|
verify(mMetricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
mContext,
|
||||||
|
SettingsEnums.ACTION_DOCK_DEFENDER_TIP,
|
||||||
mDockDefenderTipActive.getState());
|
mDockDefenderTipActive.getState());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testUpdatePreference_dockDefenderTipFutureBypass() {
|
public void testUpdatePreference_dockDefenderTipFutureBypass() {
|
||||||
mDockDefenderTipFutureBypass.updatePreference(mCardPreference);
|
mDockDefenderTipFutureBypass.updatePreference(mCardPreference);
|
||||||
|
|
||||||
verify(mCardPreference).setPrimaryButtonVisible(true);
|
verify(mCardPreference).setPrimaryButtonVisible(true);
|
||||||
verify(mCardPreference).setPrimaryButtonText(
|
verify(mCardPreference)
|
||||||
|
.setPrimaryButtonText(
|
||||||
mContext.getString(R.string.battery_tip_charge_to_full_button));
|
mContext.getString(R.string.battery_tip_charge_to_full_button));
|
||||||
verifySecondaryButton();
|
verifySecondaryButton();
|
||||||
}
|
}
|
||||||
@@ -153,7 +164,8 @@ public class DockDefenderTipTest {
|
|||||||
mDockDefenderTipActive.updatePreference(mCardPreference);
|
mDockDefenderTipActive.updatePreference(mCardPreference);
|
||||||
|
|
||||||
verify(mCardPreference).setPrimaryButtonVisible(true);
|
verify(mCardPreference).setPrimaryButtonVisible(true);
|
||||||
verify(mCardPreference).setPrimaryButtonText(
|
verify(mCardPreference)
|
||||||
|
.setPrimaryButtonText(
|
||||||
mContext.getString(R.string.battery_tip_charge_to_full_button));
|
mContext.getString(R.string.battery_tip_charge_to_full_button));
|
||||||
verifySecondaryButton();
|
verifySecondaryButton();
|
||||||
}
|
}
|
||||||
@@ -170,8 +182,10 @@ public class DockDefenderTipTest {
|
|||||||
private void verifySecondaryButton() {
|
private void verifySecondaryButton() {
|
||||||
verify(mCardPreference).setSecondaryButtonText(mContext.getString(R.string.learn_more));
|
verify(mCardPreference).setSecondaryButtonText(mContext.getString(R.string.learn_more));
|
||||||
verify(mCardPreference).setSecondaryButtonVisible(true);
|
verify(mCardPreference).setSecondaryButtonVisible(true);
|
||||||
verify(mCardPreference).setSecondaryButtonContentDescription(mContext.getString(
|
final String expectedContent =
|
||||||
R.string.battery_tip_limited_temporarily_sec_button_content_description));
|
mContext.getString(
|
||||||
|
R.string.battery_tip_limited_temporarily_sec_button_content_description);
|
||||||
|
verify(mCardPreference).setSecondaryButtonContentDescription(expectedContent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -182,9 +196,11 @@ public class DockDefenderTipTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String getLastErrorLog() {
|
private String getLastErrorLog() {
|
||||||
return ShadowLog.getLogsForTag(DockDefenderTip.class.getSimpleName()).stream().filter(
|
return ShadowLog.getLogsForTag(DockDefenderTip.class.getSimpleName()).stream()
|
||||||
log -> log.type == Log.ERROR).reduce((first, second) -> second).orElse(
|
.filter(log -> log.type == Log.ERROR)
|
||||||
createErrorLog("No Error Log")).msg;
|
.reduce((first, second) -> second)
|
||||||
|
.orElse(createErrorLog("No Error Log"))
|
||||||
|
.msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
private ShadowLog.LogItem createErrorLog(String msg) {
|
private ShadowLog.LogItem createErrorLog(String msg) {
|
||||||
|
|||||||
@@ -45,8 +45,7 @@ public class HighUsageTipTest {
|
|||||||
private static final long SCREEN_TIME = 30 * DateUtils.MINUTE_IN_MILLIS;
|
private static final long SCREEN_TIME = 30 * DateUtils.MINUTE_IN_MILLIS;
|
||||||
private static final long LAST_FULL_CHARGE_TIME = 20 * DateUtils.MINUTE_IN_MILLIS;
|
private static final long LAST_FULL_CHARGE_TIME = 20 * DateUtils.MINUTE_IN_MILLIS;
|
||||||
|
|
||||||
@Mock
|
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private HighUsageTip mBatteryTip;
|
private HighUsageTip mBatteryTip;
|
||||||
private List<AppInfo> mUsageAppList;
|
private List<AppInfo> mUsageAppList;
|
||||||
@@ -57,7 +56,8 @@ public class HighUsageTipTest {
|
|||||||
|
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mUsageAppList = new ArrayList<>();
|
mUsageAppList = new ArrayList<>();
|
||||||
mUsageAppList.add(new AppInfo.Builder()
|
mUsageAppList.add(
|
||||||
|
new AppInfo.Builder()
|
||||||
.setPackageName(PACKAGE_NAME)
|
.setPackageName(PACKAGE_NAME)
|
||||||
.setScreenOnTimeMs(SCREEN_TIME)
|
.setScreenOnTimeMs(SCREEN_TIME)
|
||||||
.build());
|
.build());
|
||||||
@@ -86,18 +86,24 @@ public class HighUsageTipTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void toString_containsAppData() {
|
public void toString_containsAppData() {
|
||||||
assertThat(mBatteryTip.toString()).isEqualTo(
|
assertThat(mBatteryTip.toString())
|
||||||
"type=2 state=0 { packageName=com.android.app,anomalyTypes={},screenTime=1800000 "
|
.isEqualTo(
|
||||||
+ "}");
|
"type=2 state=0 {"
|
||||||
|
+ " packageName=com.android.app,anomalyTypes={},screenTime=1800000 }");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLog_logAppInfo() {
|
public void testLog_logAppInfo() {
|
||||||
mBatteryTip.log(mContext, mMetricsFeatureProvider);
|
mBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||||
verify(mMetricsFeatureProvider).action(mContext,
|
verify(mMetricsFeatureProvider)
|
||||||
MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP, BatteryTip.StateType.NEW);
|
.action(
|
||||||
|
mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP,
|
||||||
|
BatteryTip.StateType.NEW);
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider).action(mContext,
|
verify(mMetricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
mContext,
|
||||||
MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP_LIST,
|
MetricsProto.MetricsEvent.ACTION_HIGH_USAGE_TIP_LIST,
|
||||||
PACKAGE_NAME);
|
PACKAGE_NAME);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,16 +17,11 @@ package com.android.settings.fuelgauge.batterytip.tips;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.any;
|
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
|
||||||
import static org.mockito.ArgumentMatchers.eq;
|
|
||||||
import static org.mockito.Mockito.mock;
|
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.app.settings.SettingsEnums;
|
import android.app.settings.SettingsEnums;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -72,20 +67,19 @@ public final class IncompatibleChargerTipTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getTitle_showTitle() {
|
public void getTitle_showTitle() {
|
||||||
assertThat(mIncompatibleChargerTip.getTitle(mContext)).isEqualTo(
|
assertThat(mIncompatibleChargerTip.getTitle(mContext))
|
||||||
mContext.getString(R.string.battery_tip_incompatible_charging_title));
|
.isEqualTo(mContext.getString(R.string.battery_tip_incompatible_charging_title));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getSummary_showSummary() {
|
public void getSummary_showSummary() {
|
||||||
assertThat(mIncompatibleChargerTip.getSummary(mContext)).isEqualTo(
|
assertThat(mIncompatibleChargerTip.getSummary(mContext))
|
||||||
mContext.getString(R.string.battery_tip_incompatible_charging_message));
|
.isEqualTo(mContext.getString(R.string.battery_tip_incompatible_charging_message));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getIcon_showIcon() {
|
public void getIcon_showIcon() {
|
||||||
assertThat(mIncompatibleChargerTip.getIconId())
|
assertThat(mIncompatibleChargerTip.getIconId()).isEqualTo(R.drawable.ic_battery_charger);
|
||||||
.isEqualTo(R.drawable.ic_battery_charger);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -93,8 +87,11 @@ public final class IncompatibleChargerTipTest {
|
|||||||
mIncompatibleChargerTip.updateState(mBatteryTip);
|
mIncompatibleChargerTip.updateState(mBatteryTip);
|
||||||
mIncompatibleChargerTip.log(mContext, mMetricsFeatureProvider);
|
mIncompatibleChargerTip.log(mContext, mMetricsFeatureProvider);
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider).action(mContext,
|
verify(mMetricsFeatureProvider)
|
||||||
SettingsEnums.ACTION_INCOMPATIBLE_CHARGING_TIP, mBatteryTip.mState);
|
.action(
|
||||||
|
mContext,
|
||||||
|
SettingsEnums.ACTION_INCOMPATIBLE_CHARGING_TIP,
|
||||||
|
mBatteryTip.mState);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -37,8 +37,7 @@ import org.robolectric.RuntimeEnvironment;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class LowBatteryTipTest {
|
public class LowBatteryTipTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private LowBatteryTip mLowBatteryTip;
|
private LowBatteryTip mLowBatteryTip;
|
||||||
|
|
||||||
@@ -58,25 +57,25 @@ public class LowBatteryTipTest {
|
|||||||
final LowBatteryTip parcelTip = new LowBatteryTip(parcel);
|
final LowBatteryTip parcelTip = new LowBatteryTip(parcel);
|
||||||
|
|
||||||
assertThat(parcelTip.isPowerSaveModeOn()).isFalse();
|
assertThat(parcelTip.isPowerSaveModeOn()).isFalse();
|
||||||
assertThat(parcelTip.getSummary(mContext)).isEqualTo(
|
assertThat(parcelTip.getSummary(mContext))
|
||||||
mContext.getString(R.string.battery_tip_low_battery_summary));
|
.isEqualTo(mContext.getString(R.string.battery_tip_low_battery_summary));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateState_stateNew_showExpectedInformation() {
|
public void updateState_stateNew_showExpectedInformation() {
|
||||||
mLowBatteryTip.mState = BatteryTip.StateType.NEW;
|
mLowBatteryTip.mState = BatteryTip.StateType.NEW;
|
||||||
|
|
||||||
assertThat(mLowBatteryTip.getTitle(mContext)).isEqualTo(
|
assertThat(mLowBatteryTip.getTitle(mContext))
|
||||||
mContext.getString(R.string.battery_tip_low_battery_title));
|
.isEqualTo(mContext.getString(R.string.battery_tip_low_battery_title));
|
||||||
assertThat(mLowBatteryTip.getSummary(mContext)).isEqualTo(
|
assertThat(mLowBatteryTip.getSummary(mContext))
|
||||||
mContext.getString(R.string.battery_tip_low_battery_summary));
|
.isEqualTo(mContext.getString(R.string.battery_tip_low_battery_summary));
|
||||||
assertThat(mLowBatteryTip.getIconId()).isEqualTo(R.drawable.ic_battery_saver_accent_24dp);
|
assertThat(mLowBatteryTip.getIconId()).isEqualTo(R.drawable.ic_battery_saver_accent_24dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void updateState_powerSaveModeOn_notShowTipItem() {
|
public void updateState_powerSaveModeOn_notShowTipItem() {
|
||||||
final LowBatteryTip tip = new LowBatteryTip(
|
final LowBatteryTip tip =
|
||||||
BatteryTip.StateType.NEW, true /* powerSaveModeOn */);
|
new LowBatteryTip(BatteryTip.StateType.NEW, true /* powerSaveModeOn */);
|
||||||
|
|
||||||
tip.updateState(tip);
|
tip.updateState(tip);
|
||||||
|
|
||||||
@@ -87,7 +86,10 @@ public class LowBatteryTipTest {
|
|||||||
public void log_lowBatteryActionWithCorrectState() {
|
public void log_lowBatteryActionWithCorrectState() {
|
||||||
mLowBatteryTip.log(mContext, mMetricsFeatureProvider);
|
mLowBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider).action(mContext,
|
verify(mMetricsFeatureProvider)
|
||||||
MetricsProto.MetricsEvent.ACTION_LOW_BATTERY_TIP, BatteryTip.StateType.NEW);
|
.action(
|
||||||
|
mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_LOW_BATTERY_TIP,
|
||||||
|
BatteryTip.StateType.NEW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,12 +65,9 @@ public class RestrictAppTipTest {
|
|||||||
private List<AppInfo> mUsageAppList;
|
private List<AppInfo> mUsageAppList;
|
||||||
private AppInfo mAppInfo;
|
private AppInfo mAppInfo;
|
||||||
private AppInfo mUninstallAppInfo;
|
private AppInfo mUninstallAppInfo;
|
||||||
@Mock
|
@Mock private ApplicationInfo mApplicationInfo;
|
||||||
private ApplicationInfo mApplicationInfo;
|
@Mock private PackageManager mPackageManager;
|
||||||
@Mock
|
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
private PackageManager mPackageManager;
|
|
||||||
@Mock
|
|
||||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
@@ -79,19 +76,26 @@ public class RestrictAppTipTest {
|
|||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mContext).when(mContext).getApplicationContext();
|
doReturn(mContext).when(mContext).getApplicationContext();
|
||||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||||
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(PACKAGE_NAME,
|
doReturn(mApplicationInfo)
|
||||||
|
.when(mPackageManager)
|
||||||
|
.getApplicationInfo(
|
||||||
|
PACKAGE_NAME,
|
||||||
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
|
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
|
||||||
doThrow(new PackageManager.NameNotFoundException()).when(mPackageManager)
|
doThrow(new PackageManager.NameNotFoundException())
|
||||||
.getApplicationInfo(UNINSTALL_PACKAGE_NAME,
|
.when(mPackageManager)
|
||||||
|
.getApplicationInfo(
|
||||||
|
UNINSTALL_PACKAGE_NAME,
|
||||||
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
|
PackageManager.MATCH_DISABLED_COMPONENTS | PackageManager.MATCH_ANY_USER);
|
||||||
doReturn(DISPLAY_NAME).when(mApplicationInfo).loadLabel(mPackageManager);
|
doReturn(DISPLAY_NAME).when(mApplicationInfo).loadLabel(mPackageManager);
|
||||||
|
|
||||||
mAppInfo = new AppInfo.Builder()
|
mAppInfo =
|
||||||
|
new AppInfo.Builder()
|
||||||
.setPackageName(PACKAGE_NAME)
|
.setPackageName(PACKAGE_NAME)
|
||||||
.addAnomalyType(ANOMALY_WAKEUP)
|
.addAnomalyType(ANOMALY_WAKEUP)
|
||||||
.addAnomalyType(ANOMALY_WAKELOCK)
|
.addAnomalyType(ANOMALY_WAKELOCK)
|
||||||
.build();
|
.build();
|
||||||
mUninstallAppInfo = new AppInfo.Builder()
|
mUninstallAppInfo =
|
||||||
|
new AppInfo.Builder()
|
||||||
.setPackageName(UNINSTALL_PACKAGE_NAME)
|
.setPackageName(UNINSTALL_PACKAGE_NAME)
|
||||||
.addAnomalyType(ANOMALY_WAKEUP)
|
.addAnomalyType(ANOMALY_WAKEUP)
|
||||||
.build();
|
.build();
|
||||||
@@ -99,8 +103,8 @@ public class RestrictAppTipTest {
|
|||||||
mUsageAppList.add(mAppInfo);
|
mUsageAppList.add(mAppInfo);
|
||||||
mNewBatteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, mUsageAppList);
|
mNewBatteryTip = new RestrictAppTip(BatteryTip.StateType.NEW, mUsageAppList);
|
||||||
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
|
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
|
||||||
mInvisibleBatteryTip = new RestrictAppTip(BatteryTip.StateType.INVISIBLE,
|
mInvisibleBatteryTip =
|
||||||
new ArrayList<>());
|
new RestrictAppTip(BatteryTip.StateType.INVISIBLE, new ArrayList<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
@@ -149,8 +153,9 @@ public class RestrictAppTipTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getSummary_oneAppHandled_showHandledSummary() {
|
public void getSummary_oneAppHandled_showHandledSummary() {
|
||||||
assertThat(mHandledBatteryTip.getSummary(mContext).toString())
|
assertThat(mHandledBatteryTip.getSummary(mContext).toString())
|
||||||
.isEqualTo(StringUtil.getIcuPluralsString(mContext, 1,
|
.isEqualTo(
|
||||||
R.string.battery_tip_restrict_handled_summary));
|
StringUtil.getIcuPluralsString(
|
||||||
|
mContext, 1, R.string.battery_tip_restrict_handled_summary));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -158,8 +163,9 @@ public class RestrictAppTipTest {
|
|||||||
mUsageAppList.add(new AppInfo.Builder().build());
|
mUsageAppList.add(new AppInfo.Builder().build());
|
||||||
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
|
mHandledBatteryTip = new RestrictAppTip(BatteryTip.StateType.HANDLED, mUsageAppList);
|
||||||
assertThat(mHandledBatteryTip.getSummary(mContext))
|
assertThat(mHandledBatteryTip.getSummary(mContext))
|
||||||
.isEqualTo(StringUtil.getIcuPluralsString(mContext, 2,
|
.isEqualTo(
|
||||||
R.string.battery_tip_restrict_handled_summary));
|
StringUtil.getIcuPluralsString(
|
||||||
|
mContext, 2, R.string.battery_tip_restrict_handled_summary));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -217,22 +223,31 @@ public class RestrictAppTipTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void toString_containsAppData() {
|
public void toString_containsAppData() {
|
||||||
assertThat(mNewBatteryTip.toString()).isEqualTo(
|
assertThat(mNewBatteryTip.toString())
|
||||||
"type=1 state=0 { packageName=com.android.app,anomalyTypes={0, 1},screenTime=0 }");
|
.isEqualTo(
|
||||||
|
"type=1 state=0 { packageName=com.android.app,anomalyTypes={0,"
|
||||||
|
+ " 1},screenTime=0 }");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLog_stateNew_logAppInfo() {
|
public void testLog_stateNew_logAppInfo() {
|
||||||
mNewBatteryTip.log(mContext, mMetricsFeatureProvider);
|
mNewBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider).action(mContext,
|
verify(mMetricsFeatureProvider)
|
||||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, BatteryTip.StateType.NEW);
|
.action(
|
||||||
verify(mMetricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP,
|
||||||
|
BatteryTip.StateType.NEW);
|
||||||
|
verify(mMetricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST,
|
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST,
|
||||||
SettingsEnums.PAGE_UNKNOWN,
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
PACKAGE_NAME,
|
PACKAGE_NAME,
|
||||||
ANOMALY_WAKEUP);
|
ANOMALY_WAKEUP);
|
||||||
verify(mMetricsFeatureProvider).action(SettingsEnums.PAGE_UNKNOWN,
|
verify(mMetricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST,
|
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP_LIST,
|
||||||
SettingsEnums.PAGE_UNKNOWN,
|
SettingsEnums.PAGE_UNKNOWN,
|
||||||
PACKAGE_NAME,
|
PACKAGE_NAME,
|
||||||
@@ -243,9 +258,12 @@ public class RestrictAppTipTest {
|
|||||||
public void testLog_stateHandled_doNotLogAppInfo() {
|
public void testLog_stateHandled_doNotLogAppInfo() {
|
||||||
mHandledBatteryTip.log(mContext, mMetricsFeatureProvider);
|
mHandledBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider).action(mContext,
|
verify(mMetricsFeatureProvider)
|
||||||
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP, BatteryTip.StateType.HANDLED);
|
.action(
|
||||||
verify(mMetricsFeatureProvider, never()).action(
|
mContext,
|
||||||
anyInt(), anyInt(), anyInt(), anyString(), anyInt());
|
MetricsProto.MetricsEvent.ACTION_APP_RESTRICTION_TIP,
|
||||||
|
BatteryTip.StateType.HANDLED);
|
||||||
|
verify(mMetricsFeatureProvider, never())
|
||||||
|
.action(anyInt(), anyInt(), anyInt(), anyString(), anyInt());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,7 @@ import org.robolectric.RuntimeEnvironment;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class SmartBatteryTipTest {
|
public class SmartBatteryTipTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private MetricsFeatureProvider mMetricsFeatureProvider;
|
||||||
private MetricsFeatureProvider mMetricsFeatureProvider;
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private SmartBatteryTip mSmartBatteryTip;
|
private SmartBatteryTip mSmartBatteryTip;
|
||||||
|
|
||||||
@@ -50,7 +49,10 @@ public class SmartBatteryTipTest {
|
|||||||
public void testLog() {
|
public void testLog() {
|
||||||
mSmartBatteryTip.log(mContext, mMetricsFeatureProvider);
|
mSmartBatteryTip.log(mContext, mMetricsFeatureProvider);
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider).action(mContext,
|
verify(mMetricsFeatureProvider)
|
||||||
MetricsProto.MetricsEvent.ACTION_SMART_BATTERY_TIP, BatteryTip.StateType.NEW);
|
.action(
|
||||||
|
mContext,
|
||||||
|
MetricsProto.MetricsEvent.ACTION_SMART_BATTERY_TIP,
|
||||||
|
BatteryTip.StateType.NEW);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,19 +45,18 @@ public class AnomalyEventWrapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getDismissRecordKey_returnExpectedResult() {
|
public void getDismissRecordKey_returnExpectedResult() {
|
||||||
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext,
|
mAnomalyEventWrapper =
|
||||||
BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
|
new AnomalyEventWrapper(
|
||||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey())
|
mContext, BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
|
||||||
.isEqualTo("KEY_BRIGHTNESS");
|
assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_BRIGHTNESS");
|
||||||
|
|
||||||
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext,
|
mAnomalyEventWrapper =
|
||||||
BatteryTestUtils.createScreenTimeoutAnomalyEvent());
|
new AnomalyEventWrapper(
|
||||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey())
|
mContext, BatteryTestUtils.createScreenTimeoutAnomalyEvent());
|
||||||
.isEqualTo("KEY_SCREEN_TIMEOUT");
|
assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_SCREEN_TIMEOUT");
|
||||||
|
|
||||||
mAnomalyEventWrapper = new AnomalyEventWrapper(mContext,
|
mAnomalyEventWrapper =
|
||||||
BatteryTestUtils.createAppAnomalyEvent());
|
new AnomalyEventWrapper(mContext, BatteryTestUtils.createAppAnomalyEvent());
|
||||||
assertThat(mAnomalyEventWrapper.getDismissRecordKey())
|
assertThat(mAnomalyEventWrapper.getDismissRecordKey()).isEqualTo("KEY_APP_1");
|
||||||
.isEqualTo("KEY_APP_1");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,22 +66,14 @@ import java.util.TimeZone;
|
|||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public final class BatteryChartPreferenceControllerTest {
|
public final class BatteryChartPreferenceControllerTest {
|
||||||
@Mock
|
@Mock private Intent mIntent;
|
||||||
private Intent mIntent;
|
@Mock private UserManager mUserManager;
|
||||||
@Mock
|
@Mock private SettingsActivity mSettingsActivity;
|
||||||
private UserManager mUserManager;
|
@Mock private TextView mChartSummaryTextView;
|
||||||
@Mock
|
@Mock private BatteryChartView mDailyChartView;
|
||||||
private SettingsActivity mSettingsActivity;
|
@Mock private BatteryChartView mHourlyChartView;
|
||||||
@Mock
|
@Mock private ViewPropertyAnimator mViewPropertyAnimator;
|
||||||
private TextView mChartSummaryTextView;
|
@Mock private LinearLayout.LayoutParams mLayoutParams;
|
||||||
@Mock
|
|
||||||
private BatteryChartView mDailyChartView;
|
|
||||||
@Mock
|
|
||||||
private BatteryChartView mHourlyChartView;
|
|
||||||
@Mock
|
|
||||||
private ViewPropertyAnimator mViewPropertyAnimator;
|
|
||||||
@Mock
|
|
||||||
private LinearLayout.LayoutParams mLayoutParams;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
@@ -97,9 +89,7 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mContext).when(mContext).getApplicationContext();
|
doReturn(mContext).when(mContext).getApplicationContext();
|
||||||
doReturn(mUserManager)
|
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||||
.when(mContext)
|
|
||||||
.getSystemService(UserManager.class);
|
|
||||||
doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
|
doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
|
||||||
doReturn(new int[] {0}).when(mUserManager).getProfileIdsWithDisabled(anyInt());
|
doReturn(new int[] {0}).when(mUserManager).getProfileIdsWithDisabled(anyInt());
|
||||||
final Resources resources = spy(mContext.getResources());
|
final Resources resources = spy(mContext.getResources());
|
||||||
@@ -156,9 +146,12 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE);
|
verify(mDailyChartView, atLeastOnce()).setVisibility(View.GONE);
|
||||||
// Ignore fast refresh ui from the data processor callback.
|
// Ignore fast refresh ui from the data processor callback.
|
||||||
verify(mHourlyChartView, atLeast(0)).setViewModel(null);
|
verify(mHourlyChartView, atLeast(0)).setViewModel(null);
|
||||||
verify(mHourlyChartView, atLeastOnce()).setViewModel(new BatteryChartViewModel(
|
verify(mHourlyChartView, atLeastOnce())
|
||||||
|
.setViewModel(
|
||||||
|
new BatteryChartViewModel(
|
||||||
List.of(100, 99, 97, 95, 66),
|
List.of(100, 99, 97, 95, 66),
|
||||||
List.of(1619247660000L /* 7:01 AM */,
|
List.of(
|
||||||
|
1619247660000L /* 7:01 AM */,
|
||||||
1619251200000L /* 8 AM */,
|
1619251200000L /* 8 AM */,
|
||||||
1619258400000L /* 10 AM */,
|
1619258400000L /* 10 AM */,
|
||||||
1619265600000L /* 12 PM */,
|
1619265600000L /* 12 PM */,
|
||||||
@@ -173,10 +166,12 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
reset(mHourlyChartView);
|
reset(mHourlyChartView);
|
||||||
setupHourlyChartViewAnimationMock();
|
setupHourlyChartViewAnimationMock();
|
||||||
|
|
||||||
BatteryChartViewModel expectedDailyViewModel = new BatteryChartViewModel(
|
BatteryChartViewModel expectedDailyViewModel =
|
||||||
|
new BatteryChartViewModel(
|
||||||
List.of(100, 83, 59, 66),
|
List.of(100, 83, 59, 66),
|
||||||
// "Sat", "Sun", "Mon", "Mon"
|
// "Sat", "Sun", "Mon", "Mon"
|
||||||
List.of(1619247660000L /* Sat */,
|
List.of(
|
||||||
|
1619247660000L /* Sat */,
|
||||||
1619308800000L /* Sun */,
|
1619308800000L /* Sun */,
|
||||||
1619395200000L /* Mon */,
|
1619395200000L /* Mon */,
|
||||||
1619460120000L /* Mon */),
|
1619460120000L /* Mon */),
|
||||||
@@ -202,9 +197,12 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
|
|
||||||
expectedDailyViewModel.setSelectedIndex(0);
|
expectedDailyViewModel.setSelectedIndex(0);
|
||||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
verify(mHourlyChartView)
|
||||||
|
.setViewModel(
|
||||||
|
new BatteryChartViewModel(
|
||||||
List.of(100, 99, 97, 95, 93, 91, 89, 87, 85, 83),
|
List.of(100, 99, 97, 95, 93, 91, 89, 87, 85, 83),
|
||||||
List.of(1619247660000L /* 7:01 AM */,
|
List.of(
|
||||||
|
1619247660000L /* 7:01 AM */,
|
||||||
1619251200000L /* 8 AM */,
|
1619251200000L /* 8 AM */,
|
||||||
1619258400000L /* 10 AM */,
|
1619258400000L /* 10 AM */,
|
||||||
1619265600000L /* 12 PM */,
|
1619265600000L /* 12 PM */,
|
||||||
@@ -228,9 +226,11 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
||||||
expectedDailyViewModel.setSelectedIndex(1);
|
expectedDailyViewModel.setSelectedIndex(1);
|
||||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||||
BatteryChartViewModel expectedHourlyViewModel = new BatteryChartViewModel(
|
BatteryChartViewModel expectedHourlyViewModel =
|
||||||
|
new BatteryChartViewModel(
|
||||||
List.of(83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59),
|
List.of(83, 81, 79, 77, 75, 73, 71, 69, 67, 65, 63, 61, 59),
|
||||||
List.of(1619308800000L /* 12 AM */,
|
List.of(
|
||||||
|
1619308800000L /* 12 AM */,
|
||||||
1619316000000L /* 2 AM */,
|
1619316000000L /* 2 AM */,
|
||||||
1619323200000L /* 4 AM */,
|
1619323200000L /* 4 AM */,
|
||||||
1619330400000L /* 6 AM */,
|
1619330400000L /* 6 AM */,
|
||||||
@@ -259,9 +259,12 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
verify(mViewPropertyAnimator, atLeastOnce()).alpha(1f);
|
||||||
expectedDailyViewModel.setSelectedIndex(2);
|
expectedDailyViewModel.setSelectedIndex(2);
|
||||||
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
verify(mDailyChartView).setViewModel(expectedDailyViewModel);
|
||||||
verify(mHourlyChartView).setViewModel(new BatteryChartViewModel(
|
verify(mHourlyChartView)
|
||||||
|
.setViewModel(
|
||||||
|
new BatteryChartViewModel(
|
||||||
List.of(59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 66),
|
List.of(59, 57, 55, 53, 51, 49, 47, 45, 43, 41, 66),
|
||||||
List.of(1619395200000L /* 12 AM */,
|
List.of(
|
||||||
|
1619395200000L /* 12 AM */,
|
||||||
1619402400000L /* 2 AM */,
|
1619402400000L /* 2 AM */,
|
||||||
1619409600000L /* 4 AM */,
|
1619409600000L /* 4 AM */,
|
||||||
1619416800000L /* 6 AM */,
|
1619416800000L /* 6 AM */,
|
||||||
@@ -274,7 +277,6 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
1619460120000L /* now (6:02 PM) */),
|
1619460120000L /* now (6:02 PM) */),
|
||||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
|
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
|
||||||
mBatteryChartPreferenceController.mHourlyChartLabelTextGenerator));
|
mBatteryChartPreferenceController.mHourlyChartLabelTextGenerator));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -408,8 +410,8 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||||
mBatteryChartPreferenceController.mHourlyChartIndex = 2;
|
mBatteryChartPreferenceController.mHourlyChartIndex = 2;
|
||||||
|
|
||||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
assertThat(mBatteryChartPreferenceController.getSlotInformation())
|
||||||
"10 AM - 12 PM");
|
.isEqualTo("10 AM - 12 PM");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -418,8 +420,8 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
mBatteryChartPreferenceController.mDailyChartIndex = 1;
|
mBatteryChartPreferenceController.mDailyChartIndex = 1;
|
||||||
mBatteryChartPreferenceController.mHourlyChartIndex = 8;
|
mBatteryChartPreferenceController.mHourlyChartIndex = 8;
|
||||||
|
|
||||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
assertThat(mBatteryChartPreferenceController.getSlotInformation())
|
||||||
"Sunday 4 PM - 6 PM");
|
.isEqualTo("Sunday 4 PM - 6 PM");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -428,8 +430,8 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||||
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
|
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
|
||||||
|
|
||||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
assertThat(mBatteryChartPreferenceController.getSlotInformation())
|
||||||
"7:01 AM - 8 AM");
|
.isEqualTo("7:01 AM - 8 AM");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -438,8 +440,7 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||||
mBatteryChartPreferenceController.mHourlyChartIndex = 3;
|
mBatteryChartPreferenceController.mHourlyChartIndex = 3;
|
||||||
|
|
||||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo("12 PM - now");
|
||||||
"12 PM - now");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -448,8 +449,8 @@ public final class BatteryChartPreferenceControllerTest {
|
|||||||
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
mBatteryChartPreferenceController.mDailyChartIndex = 0;
|
||||||
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
|
mBatteryChartPreferenceController.mHourlyChartIndex = 0;
|
||||||
|
|
||||||
assertThat(mBatteryChartPreferenceController.getSlotInformation()).isEqualTo(
|
assertThat(mBatteryChartPreferenceController.getSlotInformation())
|
||||||
"7:01 AM - now");
|
.isEqualTo("7:01 AM - now");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -45,8 +45,7 @@ public final class BatteryChartViewTest {
|
|||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
private PowerUsageFeatureProvider mPowerUsageFeatureProvider;
|
||||||
|
|
||||||
@Mock
|
@Mock private View mMockView;
|
||||||
private View mMockView;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -54,17 +53,19 @@ public final class BatteryChartViewTest {
|
|||||||
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
mFeatureFactory = FakeFeatureFactory.setupForTest();
|
||||||
mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
|
mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider;
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
mContext.getResources().getConfiguration().setLocales(
|
mContext.getResources().getConfiguration().setLocales(new LocaleList(new Locale("en_US")));
|
||||||
new LocaleList(new Locale("en_US")));
|
|
||||||
mBatteryChartView = new BatteryChartView(mContext);
|
mBatteryChartView = new BatteryChartView(mContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void onClick_invokesCallback() {
|
public void onClick_invokesCallback() {
|
||||||
final int originalSelectedIndex = 2;
|
final int originalSelectedIndex = 2;
|
||||||
BatteryChartViewModel batteryChartViewModel = new BatteryChartViewModel(
|
BatteryChartViewModel batteryChartViewModel =
|
||||||
List.of(90, 80, 70, 60), List.of(0L, 0L, 0L, 0L),
|
new BatteryChartViewModel(
|
||||||
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS, null);
|
List.of(90, 80, 70, 60),
|
||||||
|
List.of(0L, 0L, 0L, 0L),
|
||||||
|
BatteryChartViewModel.AxisLabelPosition.BETWEEN_TRAPEZOIDS,
|
||||||
|
null);
|
||||||
batteryChartViewModel.setSelectedIndex(originalSelectedIndex);
|
batteryChartViewModel.setSelectedIndex(originalSelectedIndex);
|
||||||
mBatteryChartView.setViewModel(batteryChartViewModel);
|
mBatteryChartView.setViewModel(batteryChartViewModel);
|
||||||
for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) {
|
for (int i = 0; i < mBatteryChartView.mTrapezoidSlots.length; i++) {
|
||||||
|
|||||||
@@ -149,16 +149,12 @@ public class BatteryDiffDataTest {
|
|||||||
createBatteryDiffEntry(mContext, /* consumePower= */ 28.5, /* key= */ "APP_1"));
|
createBatteryDiffEntry(mContext, /* consumePower= */ 28.5, /* key= */ "APP_1"));
|
||||||
batteryDiffEntries.add(
|
batteryDiffEntries.add(
|
||||||
createBatteryDiffEntry(
|
createBatteryDiffEntry(
|
||||||
mContext,
|
mContext, /* consumePower= */ 20, BatteryDiffEntry.UNINSTALLED_APPS_KEY));
|
||||||
/* consumePower= */ 20,
|
|
||||||
BatteryDiffEntry.UNINSTALLED_APPS_KEY));
|
|
||||||
batteryDiffEntries.add(
|
batteryDiffEntries.add(
|
||||||
createBatteryDiffEntry(mContext, /* consumePower= */ 3, /* key= */ "APP_2"));
|
createBatteryDiffEntry(mContext, /* consumePower= */ 3, /* key= */ "APP_2"));
|
||||||
batteryDiffEntries.add(
|
batteryDiffEntries.add(
|
||||||
createBatteryDiffEntry(
|
createBatteryDiffEntry(
|
||||||
mContext,
|
mContext, /* consumePower= */ 28.5, BatteryDiffEntry.SYSTEM_APPS_KEY));
|
||||||
/* consumePower= */ 28.5,
|
|
||||||
BatteryDiffEntry.SYSTEM_APPS_KEY));
|
|
||||||
batteryDiffEntries.add(
|
batteryDiffEntries.add(
|
||||||
createBatteryDiffEntry(mContext, /* consumePower= */ 20, /* key= */ "APP_3"));
|
createBatteryDiffEntry(mContext, /* consumePower= */ 20, /* key= */ "APP_3"));
|
||||||
|
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ public final class BatteryDiffEntryTest {
|
|||||||
private static final String UNINSTALLED_PACKAGE_NAME = "com.android.testing.uninstalled";
|
private static final String UNINSTALLED_PACKAGE_NAME = "com.android.testing.uninstalled";
|
||||||
private static final String UID_ZERO_PACKAGE_NAME = "com.android.testing.uid.zero";
|
private static final String UID_ZERO_PACKAGE_NAME = "com.android.testing.uid.zero";
|
||||||
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@Mock private ApplicationInfo mMockAppInfo;
|
@Mock private ApplicationInfo mMockAppInfo;
|
||||||
@@ -451,7 +450,6 @@ public final class BatteryDiffEntryTest {
|
|||||||
assertThat(entry.isUninstalledEntry()).isFalse();
|
assertThat(entry.isUninstalledEntry()).isFalse();
|
||||||
assertThat(BatteryDiffEntry.sPackageNameAndUidCache.containsKey(PACKAGE_NAME)).isTrue();
|
assertThat(BatteryDiffEntry.sPackageNameAndUidCache.containsKey(PACKAGE_NAME)).isTrue();
|
||||||
assertThat(BatteryDiffEntry.sPackageNameAndUidCache.get(PACKAGE_NAME)).isEqualTo(UID);
|
assertThat(BatteryDiffEntry.sPackageNameAndUidCache.get(PACKAGE_NAME)).isEqualTo(UID);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -61,18 +61,15 @@ public class BatteryEntryTest {
|
|||||||
private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen";
|
private static final String HIGH_DRAIN_PACKAGE = "com.android.test.screen";
|
||||||
private static final String ANDROID_PACKAGE = "android";
|
private static final String ANDROID_PACKAGE = "android";
|
||||||
|
|
||||||
@Rule
|
@Rule public MockitoRule mocks = MockitoJUnit.rule();
|
||||||
public MockitoRule mocks = MockitoJUnit.rule();
|
|
||||||
|
|
||||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||||
private Context mMockContext;
|
private Context mMockContext;
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
@Mock private PackageManager mMockPackageManager;
|
||||||
private PackageManager mMockPackageManager;
|
@Mock private UserManager mMockUserManager;
|
||||||
@Mock
|
@Mock private UidBatteryConsumer mUidBatteryConsumer;
|
||||||
private UserManager mMockUserManager;
|
|
||||||
@Mock
|
|
||||||
private UidBatteryConsumer mUidBatteryConsumer;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void stubContextToReturnMockPackageManager() {
|
public void stubContextToReturnMockPackageManager() {
|
||||||
@@ -83,23 +80,27 @@ public class BatteryEntryTest {
|
|||||||
@Before
|
@Before
|
||||||
public void stubPackageManagerToReturnAppPackageAndName() throws NameNotFoundException {
|
public void stubPackageManagerToReturnAppPackageAndName() throws NameNotFoundException {
|
||||||
when(mMockPackageManager.getApplicationInfo(anyString(), eq(0) /* no flags */))
|
when(mMockPackageManager.getApplicationInfo(anyString(), eq(0) /* no flags */))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(
|
||||||
|
invocation -> {
|
||||||
ApplicationInfo info = new ApplicationInfo();
|
ApplicationInfo info = new ApplicationInfo();
|
||||||
info.packageName = invocation.getArgument(0);
|
info.packageName = invocation.getArgument(0);
|
||||||
return info;
|
return info;
|
||||||
});
|
});
|
||||||
when(mMockPackageManager.getApplicationLabel(any(ApplicationInfo.class)))
|
when(mMockPackageManager.getApplicationLabel(any(ApplicationInfo.class)))
|
||||||
.thenAnswer(invocation -> LABEL_PREFIX
|
.thenAnswer(
|
||||||
+ ((ApplicationInfo) invocation.getArgument(0)).packageName);
|
invocation ->
|
||||||
|
LABEL_PREFIX
|
||||||
|
+ ((ApplicationInfo) invocation.getArgument(0))
|
||||||
|
.packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BatteryEntry createBatteryEntryForApp(String[] packages, String packageName,
|
private BatteryEntry createBatteryEntryForApp(
|
||||||
String highDrainPackage) {
|
String[] packages, String packageName, String highDrainPackage) {
|
||||||
UidBatteryConsumer consumer = mock(UidBatteryConsumer.class);
|
UidBatteryConsumer consumer = mock(UidBatteryConsumer.class);
|
||||||
when(consumer.getUid()).thenReturn(APP_UID);
|
when(consumer.getUid()).thenReturn(APP_UID);
|
||||||
when(consumer.getPackageWithHighestDrain()).thenReturn(highDrainPackage);
|
when(consumer.getPackageWithHighestDrain()).thenReturn(highDrainPackage);
|
||||||
return new BatteryEntry(mMockContext, mMockUserManager,
|
return new BatteryEntry(
|
||||||
consumer, false, APP_UID, packages, packageName);
|
mMockContext, mMockUserManager, consumer, false, APP_UID, packages, packageName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BatteryEntry createAggregateBatteryEntry(int powerComponentId) {
|
private BatteryEntry createAggregateBatteryEntry(int powerComponentId) {
|
||||||
@@ -122,14 +123,13 @@ public class BatteryEntryTest {
|
|||||||
private BatteryEntry createUserBatteryConsumer(int userId) {
|
private BatteryEntry createUserBatteryConsumer(int userId) {
|
||||||
UserBatteryConsumer consumer = mock(UserBatteryConsumer.class);
|
UserBatteryConsumer consumer = mock(UserBatteryConsumer.class);
|
||||||
when(consumer.getUserId()).thenReturn(userId);
|
when(consumer.getUserId()).thenReturn(userId);
|
||||||
return new BatteryEntry(mMockContext, mMockUserManager,
|
return new BatteryEntry(mMockContext, mMockUserManager, consumer, false, 0, null, null);
|
||||||
consumer, false, 0, null, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception {
|
public void batteryEntryForApp_shouldSetDefaultPackageNameAndLabel() throws Exception {
|
||||||
BatteryEntry entry = createBatteryEntryForApp(null, APP_DEFAULT_PACKAGE_NAME,
|
BatteryEntry entry =
|
||||||
HIGH_DRAIN_PACKAGE);
|
createBatteryEntryForApp(null, APP_DEFAULT_PACKAGE_NAME, HIGH_DRAIN_PACKAGE);
|
||||||
|
|
||||||
assertThat(entry.getDefaultPackageName()).isEqualTo(APP_DEFAULT_PACKAGE_NAME);
|
assertThat(entry.getDefaultPackageName()).isEqualTo(APP_DEFAULT_PACKAGE_NAME);
|
||||||
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + APP_DEFAULT_PACKAGE_NAME);
|
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + APP_DEFAULT_PACKAGE_NAME);
|
||||||
@@ -157,8 +157,10 @@ public class BatteryEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void batteryEntryForApp_shouldSetHighestDrainPackage_whenMultiplePackagesFoundForUid() {
|
public void batteryEntryForApp_shouldSetHighestDrainPackage_whenMultiplePackagesFoundForUid() {
|
||||||
BatteryEntry entry = createBatteryEntryForApp(
|
BatteryEntry entry =
|
||||||
new String[]{APP_DEFAULT_PACKAGE_NAME, "package2", "package3"}, null,
|
createBatteryEntryForApp(
|
||||||
|
new String[] {APP_DEFAULT_PACKAGE_NAME, "package2", "package3"},
|
||||||
|
null,
|
||||||
HIGH_DRAIN_PACKAGE);
|
HIGH_DRAIN_PACKAGE);
|
||||||
|
|
||||||
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + HIGH_DRAIN_PACKAGE);
|
assertThat(entry.getLabel()).isEqualTo(LABEL_PREFIX + HIGH_DRAIN_PACKAGE);
|
||||||
@@ -166,7 +168,9 @@ public class BatteryEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void batteryEntryForAOD_containCorrectInfo() {
|
public void batteryEntryForAOD_containCorrectInfo() {
|
||||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
final BatteryEntry entry =
|
||||||
|
new BatteryEntry(
|
||||||
|
RuntimeEnvironment.application,
|
||||||
BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
|
BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
|
||||||
/* devicePowerMah= */ 200,
|
/* devicePowerMah= */ 200,
|
||||||
/* usageDurationMs= */ 1000,
|
/* usageDurationMs= */ 1000,
|
||||||
@@ -178,7 +182,9 @@ public class BatteryEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void batteryEntryForCustomComponent_containCorrectInfo() {
|
public void batteryEntryForCustomComponent_containCorrectInfo() {
|
||||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
final BatteryEntry entry =
|
||||||
|
new BatteryEntry(
|
||||||
|
RuntimeEnvironment.application,
|
||||||
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42,
|
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42,
|
||||||
/* powerComponentName= */ "ABC",
|
/* powerComponentName= */ "ABC",
|
||||||
/* devicePowerMah= */ 200);
|
/* devicePowerMah= */ 200);
|
||||||
@@ -192,15 +198,24 @@ public class BatteryEntryTest {
|
|||||||
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND))
|
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_FOREGROUND))
|
||||||
.thenReturn(100L);
|
.thenReturn(100L);
|
||||||
|
|
||||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
final BatteryEntry entry =
|
||||||
mMockUserManager, mUidBatteryConsumer, false, 0, null, null);
|
new BatteryEntry(
|
||||||
|
RuntimeEnvironment.application,
|
||||||
|
mMockUserManager,
|
||||||
|
mUidBatteryConsumer,
|
||||||
|
false,
|
||||||
|
0,
|
||||||
|
null,
|
||||||
|
null);
|
||||||
|
|
||||||
assertThat(entry.getTimeInForegroundMs()).isEqualTo(100L);
|
assertThat(entry.getTimeInForegroundMs()).isEqualTo(100L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getTimeInForegroundMs_aggregateBatteryConsumer() {
|
public void getTimeInForegroundMs_aggregateBatteryConsumer() {
|
||||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
final BatteryEntry entry =
|
||||||
|
new BatteryEntry(
|
||||||
|
RuntimeEnvironment.application,
|
||||||
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
||||||
/* devicePowerMah= */ 10,
|
/* devicePowerMah= */ 10,
|
||||||
/* usageDurationMs= */ 100,
|
/* usageDurationMs= */ 100,
|
||||||
@@ -214,15 +229,24 @@ public class BatteryEntryTest {
|
|||||||
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
|
when(mUidBatteryConsumer.getTimeInStateMs(UidBatteryConsumer.STATE_BACKGROUND))
|
||||||
.thenReturn(100L);
|
.thenReturn(100L);
|
||||||
|
|
||||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
final BatteryEntry entry =
|
||||||
mMockUserManager, mUidBatteryConsumer, false, 0, null, null);
|
new BatteryEntry(
|
||||||
|
RuntimeEnvironment.application,
|
||||||
|
mMockUserManager,
|
||||||
|
mUidBatteryConsumer,
|
||||||
|
false,
|
||||||
|
0,
|
||||||
|
null,
|
||||||
|
null);
|
||||||
|
|
||||||
assertThat(entry.getTimeInBackgroundMs()).isEqualTo(100L);
|
assertThat(entry.getTimeInBackgroundMs()).isEqualTo(100L);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getTimeInBackgroundMs_systemConsumer() {
|
public void getTimeInBackgroundMs_systemConsumer() {
|
||||||
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
|
final BatteryEntry entry =
|
||||||
|
new BatteryEntry(
|
||||||
|
RuntimeEnvironment.application,
|
||||||
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
||||||
/* devicePowerMah= */ 100,
|
/* devicePowerMah= */ 100,
|
||||||
/* usageDurationMs= */ 1000,
|
/* usageDurationMs= */ 1000,
|
||||||
@@ -241,15 +265,16 @@ public class BatteryEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getKey_AggregateBatteryConsumer_returnComponentId() {
|
public void getKey_AggregateBatteryConsumer_returnComponentId() {
|
||||||
final BatteryEntry entry = createAggregateBatteryEntry(
|
final BatteryEntry entry =
|
||||||
BatteryConsumer.POWER_COMPONENT_BLUETOOTH);
|
createAggregateBatteryEntry(BatteryConsumer.POWER_COMPONENT_BLUETOOTH);
|
||||||
final String key = entry.getKey();
|
final String key = entry.getKey();
|
||||||
assertThat(key).isEqualTo("S|2");
|
assertThat(key).isEqualTo("S|2");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getKey_CustomAggregateBatteryConsumer_returnComponentId() {
|
public void getKey_CustomAggregateBatteryConsumer_returnComponentId() {
|
||||||
final BatteryEntry entry = createCustomAggregateBatteryEntry(
|
final BatteryEntry entry =
|
||||||
|
createCustomAggregateBatteryEntry(
|
||||||
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42);
|
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42);
|
||||||
final String key = entry.getKey();
|
final String key = entry.getKey();
|
||||||
assertThat(key).isEqualTo("S|1042");
|
assertThat(key).isEqualTo("S|1042");
|
||||||
@@ -269,19 +294,18 @@ public class BatteryEntryTest {
|
|||||||
doReturn(mMockUserManager).when(mContext).getSystemService(UserManager.class);
|
doReturn(mMockUserManager).when(mContext).getSystemService(UserManager.class);
|
||||||
doReturn(null).when(mMockUserManager).getUserInfo(userId);
|
doReturn(null).when(mMockUserManager).getUserInfo(userId);
|
||||||
|
|
||||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId(
|
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUserId(mContext, userId);
|
||||||
mContext, userId);
|
assertThat(nameAndIcon.mName)
|
||||||
assertThat(nameAndIcon.mName).isEqualTo(getString(
|
.isEqualTo(getString(R.string.running_process_item_removed_user_label));
|
||||||
R.string.running_process_item_removed_user_label));
|
|
||||||
assertThat(nameAndIcon.mIcon).isNull();
|
assertThat(nameAndIcon.mIcon).isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getNameAndIconFromUid_rerturnExpectedName() {
|
public void getNameAndIconFromUid_rerturnExpectedName() {
|
||||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
|
final NameAndIcon nameAndIcon =
|
||||||
mContext, /* name */ null, /* uid */ 0);
|
BatteryEntry.getNameAndIconFromUid(mContext, /* name */ null, /* uid */ 0);
|
||||||
assertThat(nameAndIcon.mName).isEqualTo(
|
assertThat(nameAndIcon.mName)
|
||||||
getString(com.android.settingslib.R.string.process_kernel_label));
|
.isEqualTo(getString(com.android.settingslib.R.string.process_kernel_label));
|
||||||
|
|
||||||
assertNameAndIcon("mediaserver", R.string.process_mediaserver_label);
|
assertNameAndIcon("mediaserver", R.string.process_mediaserver_label);
|
||||||
assertNameAndIcon("dex2oat32", R.string.process_dex2oat_label);
|
assertNameAndIcon("dex2oat32", R.string.process_dex2oat_label);
|
||||||
@@ -291,7 +315,8 @@ public class BatteryEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getNameAndIconFromUid_tetheringUid_rerturnExpectedName() {
|
public void getNameAndIconFromUid_tetheringUid_rerturnExpectedName() {
|
||||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
|
final NameAndIcon nameAndIcon =
|
||||||
|
BatteryEntry.getNameAndIconFromUid(
|
||||||
mContext, /* name */ null, /* uid */ BatteryUtils.UID_TETHERING);
|
mContext, /* name */ null, /* uid */ BatteryUtils.UID_TETHERING);
|
||||||
|
|
||||||
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_network_tethering));
|
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_network_tethering));
|
||||||
@@ -299,7 +324,8 @@ public class BatteryEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getNameAndIconFromUid_removedAppsUid_rerturnExpectedName() {
|
public void getNameAndIconFromUid_removedAppsUid_rerturnExpectedName() {
|
||||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
|
final NameAndIcon nameAndIcon =
|
||||||
|
BatteryEntry.getNameAndIconFromUid(
|
||||||
mContext, /* name */ null, /* uid */ BatteryUtils.UID_REMOVED_APPS);
|
mContext, /* name */ null, /* uid */ BatteryUtils.UID_REMOVED_APPS);
|
||||||
|
|
||||||
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_removed_apps));
|
assertThat(nameAndIcon.mName).isEqualTo(getString(R.string.process_removed_apps));
|
||||||
@@ -307,47 +333,57 @@ public class BatteryEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getNameAndIconFromPowerComponent_rerturnExpectedNameAndIcon() {
|
public void getNameAndIconFromPowerComponent_rerturnExpectedNameAndIcon() {
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_SCREEN,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_SCREEN,
|
||||||
R.string.power_screen,
|
R.string.power_screen,
|
||||||
R.drawable.ic_settings_display);
|
R.drawable.ic_settings_display);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_CPU,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_CPU,
|
||||||
R.string.power_cpu,
|
R.string.power_cpu,
|
||||||
R.drawable.ic_settings_cpu);
|
R.drawable.ic_settings_cpu);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
|
||||||
R.string.power_bluetooth,
|
R.string.power_bluetooth,
|
||||||
R.drawable.ic_settings_bluetooth);
|
R.drawable.ic_settings_bluetooth);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_CAMERA,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_CAMERA,
|
||||||
R.string.power_camera,
|
R.string.power_camera,
|
||||||
R.drawable.ic_settings_camera);
|
R.drawable.ic_settings_camera);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
|
||||||
R.string.power_flashlight,
|
R.string.power_flashlight,
|
||||||
R.drawable.ic_settings_flashlight);
|
R.drawable.ic_settings_flashlight);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
|
||||||
R.string.power_cell,
|
R.string.power_cell,
|
||||||
R.drawable.ic_settings_cellular);
|
R.drawable.ic_settings_cellular);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_GNSS,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_GNSS,
|
||||||
R.string.power_gps,
|
R.string.power_gps,
|
||||||
R.drawable.ic_settings_gps);
|
R.drawable.ic_settings_gps);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_WIFI,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_WIFI,
|
||||||
R.string.power_wifi,
|
R.string.power_wifi,
|
||||||
R.drawable.ic_settings_wireless_no_theme);
|
R.drawable.ic_settings_wireless_no_theme);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_PHONE,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_PHONE,
|
||||||
R.string.power_phone,
|
R.string.power_phone,
|
||||||
R.drawable.ic_settings_voice_calls);
|
R.drawable.ic_settings_voice_calls);
|
||||||
assertNameAndIcon(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
|
assertNameAndIcon(
|
||||||
|
BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
|
||||||
R.string.ambient_display_screen_title,
|
R.string.ambient_display_screen_title,
|
||||||
R.drawable.ic_settings_aod);
|
R.drawable.ic_settings_aod);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertNameAndIcon(String name, int stringId) {
|
private void assertNameAndIcon(String name, int stringId) {
|
||||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromUid(
|
final NameAndIcon nameAndIcon =
|
||||||
mContext, name, /* uid */ 1000);
|
BatteryEntry.getNameAndIconFromUid(mContext, name, /* uid */ 1000);
|
||||||
assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
|
assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertNameAndIcon(int powerComponentId, int stringId, int iconId) {
|
private void assertNameAndIcon(int powerComponentId, int stringId, int iconId) {
|
||||||
final NameAndIcon nameAndIcon = BatteryEntry.getNameAndIconFromPowerComponent(
|
final NameAndIcon nameAndIcon =
|
||||||
mContext, powerComponentId);
|
BatteryEntry.getNameAndIconFromPowerComponent(mContext, powerComponentId);
|
||||||
assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
|
assertThat(nameAndIcon.mName).isEqualTo(getString(stringId));
|
||||||
assertThat(nameAndIcon.mIconId).isEqualTo(iconId);
|
assertThat(nameAndIcon.mIconId).isEqualTo(iconId);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,10 +41,8 @@ import java.util.TimeZone;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public final class BatteryHistEntryTest {
|
public final class BatteryHistEntryTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryEntry mMockBatteryEntry;
|
||||||
private BatteryEntry mMockBatteryEntry;
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
@Mock
|
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -115,8 +113,8 @@ public final class BatteryHistEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetKey_consumerUidType_returnExpectedString() {
|
public void testGetKey_consumerUidType_returnExpectedString() {
|
||||||
final ContentValues values = getContentValuesWithType(
|
final ContentValues values =
|
||||||
ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
|
getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
|
||||||
values.put(BatteryHistEntry.KEY_UID, 3);
|
values.put(BatteryHistEntry.KEY_UID, 3);
|
||||||
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
||||||
|
|
||||||
@@ -125,8 +123,8 @@ public final class BatteryHistEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetKey_consumerUserType_returnExpectedString() {
|
public void testGetKey_consumerUserType_returnExpectedString() {
|
||||||
final ContentValues values = getContentValuesWithType(
|
final ContentValues values =
|
||||||
ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
|
getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
|
||||||
values.put(BatteryHistEntry.KEY_USER_ID, 2);
|
values.put(BatteryHistEntry.KEY_USER_ID, 2);
|
||||||
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
||||||
|
|
||||||
@@ -135,14 +133,12 @@ public final class BatteryHistEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testGetKey_consumerSystemType_returnExpectedString() {
|
public void testGetKey_consumerSystemType_returnExpectedString() {
|
||||||
final ContentValues values = getContentValuesWithType(
|
final ContentValues values =
|
||||||
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
getContentValuesWithType(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||||
final BatteryInformation batteryInformation =
|
final BatteryInformation batteryInformation =
|
||||||
BatteryInformation
|
BatteryInformation.newBuilder().setDrainType(1).build();
|
||||||
.newBuilder()
|
values.put(
|
||||||
.setDrainType(1)
|
BatteryHistEntry.KEY_BATTERY_INFORMATION,
|
||||||
.build();
|
|
||||||
values.put(BatteryHistEntry.KEY_BATTERY_INFORMATION,
|
|
||||||
ConvertUtils.convertBatteryInformationToString(batteryInformation));
|
ConvertUtils.convertBatteryInformationToString(batteryInformation));
|
||||||
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
|
||||||
|
|
||||||
@@ -151,32 +147,51 @@ public final class BatteryHistEntryTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsAppEntry_returnExpectedResult() {
|
public void testIsAppEntry_returnExpectedResult() {
|
||||||
assertThat(isUidConsumer(
|
assertThat(
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isFalse();
|
isUidConsumer(
|
||||||
assertThat(isUidConsumer(
|
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isFalse();
|
.mConsumerType))
|
||||||
assertThat(isUidConsumer(
|
.isFalse();
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isTrue();
|
assertThat(
|
||||||
|
isUidConsumer(
|
||||||
|
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
|
||||||
|
.isFalse();
|
||||||
|
assertThat(isUidConsumer(createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
|
||||||
|
.isTrue();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsUserEntry_returnExpectedResult() {
|
public void testIsUserEntry_returnExpectedResult() {
|
||||||
assertThat(isUserConsumer(
|
assertThat(
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isFalse();
|
isUserConsumer(
|
||||||
assertThat(isUserConsumer(
|
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isTrue();
|
.mConsumerType))
|
||||||
assertThat(isUserConsumer(
|
.isFalse();
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isFalse();
|
assertThat(
|
||||||
|
isUserConsumer(
|
||||||
|
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
|
||||||
|
.isTrue();
|
||||||
|
assertThat(
|
||||||
|
isUserConsumer(
|
||||||
|
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
|
||||||
|
.isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsSystemEntry_returnExpectedResult() {
|
public void testIsSystemEntry_returnExpectedResult() {
|
||||||
assertThat(isSystemConsumer(
|
assertThat(
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY).mConsumerType)).isTrue();
|
isSystemConsumer(
|
||||||
assertThat(isSystemConsumer(
|
createEntry(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY)
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType)).isFalse();
|
.mConsumerType))
|
||||||
assertThat(isSystemConsumer(
|
.isTrue();
|
||||||
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType)).isFalse();
|
assertThat(
|
||||||
|
isSystemConsumer(
|
||||||
|
createEntry(ConvertUtils.CONSUMER_TYPE_USER_BATTERY).mConsumerType))
|
||||||
|
.isFalse();
|
||||||
|
assertThat(
|
||||||
|
isSystemConsumer(
|
||||||
|
createEntry(ConvertUtils.CONSUMER_TYPE_UID_BATTERY).mConsumerType))
|
||||||
|
.isFalse();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -185,7 +200,8 @@ public final class BatteryHistEntryTest {
|
|||||||
final long upperTimestamp = 300L;
|
final long upperTimestamp = 300L;
|
||||||
final long lowerTimestamp = 100L;
|
final long lowerTimestamp = 100L;
|
||||||
final double ratio = 0.5;
|
final double ratio = 0.5;
|
||||||
final BatteryHistEntry lowerHistEntry = createBatteryHistEntry(
|
final BatteryHistEntry lowerHistEntry =
|
||||||
|
createBatteryHistEntry(
|
||||||
/* bootTimestamp= */ 1000L,
|
/* bootTimestamp= */ 1000L,
|
||||||
lowerTimestamp,
|
lowerTimestamp,
|
||||||
/* totalPower= */ 50,
|
/* totalPower= */ 50,
|
||||||
@@ -197,7 +213,8 @@ public final class BatteryHistEntryTest {
|
|||||||
/* foregroundUsageTimeInMs= */ 100,
|
/* foregroundUsageTimeInMs= */ 100,
|
||||||
/* backgroundUsageTimeInMs= */ 200,
|
/* backgroundUsageTimeInMs= */ 200,
|
||||||
/* batteryLevel= */ 90);
|
/* batteryLevel= */ 90);
|
||||||
final BatteryHistEntry upperHistEntry = createBatteryHistEntry(
|
final BatteryHistEntry upperHistEntry =
|
||||||
|
createBatteryHistEntry(
|
||||||
/* bootTimestamp= */ 1200L,
|
/* bootTimestamp= */ 1200L,
|
||||||
upperTimestamp,
|
upperTimestamp,
|
||||||
/* totalPower= */ 80,
|
/* totalPower= */ 80,
|
||||||
@@ -212,14 +229,12 @@ public final class BatteryHistEntryTest {
|
|||||||
|
|
||||||
final BatteryHistEntry newEntry =
|
final BatteryHistEntry newEntry =
|
||||||
BatteryHistEntry.interpolate(
|
BatteryHistEntry.interpolate(
|
||||||
slotTimestamp,
|
slotTimestamp, upperTimestamp, ratio, lowerHistEntry, upperHistEntry);
|
||||||
upperTimestamp,
|
|
||||||
ratio,
|
|
||||||
lowerHistEntry,
|
|
||||||
upperHistEntry);
|
|
||||||
|
|
||||||
assertBatteryHistEntry(
|
assertBatteryHistEntry(
|
||||||
newEntry, 3, upperHistEntry.mPercentOfTotal,
|
newEntry,
|
||||||
|
3,
|
||||||
|
upperHistEntry.mPercentOfTotal,
|
||||||
/* bootTimestamp= */ 1200 - 100,
|
/* bootTimestamp= */ 1200 - 100,
|
||||||
/* timestamp= */ slotTimestamp,
|
/* timestamp= */ slotTimestamp,
|
||||||
/* totalPower= */ 50 + 0.5 * (80 - 50),
|
/* totalPower= */ 50 + 0.5 * (80 - 50),
|
||||||
@@ -238,7 +253,8 @@ public final class BatteryHistEntryTest {
|
|||||||
final long slotTimestamp = 200L;
|
final long slotTimestamp = 200L;
|
||||||
final long upperTimestamp = 300L;
|
final long upperTimestamp = 300L;
|
||||||
final double ratio = 0.5;
|
final double ratio = 0.5;
|
||||||
final BatteryHistEntry upperHistEntry = createBatteryHistEntry(
|
final BatteryHistEntry upperHistEntry =
|
||||||
|
createBatteryHistEntry(
|
||||||
/* bootTimestamp= */ 1200L,
|
/* bootTimestamp= */ 1200L,
|
||||||
upperTimestamp,
|
upperTimestamp,
|
||||||
/* totalPower= */ 80,
|
/* totalPower= */ 80,
|
||||||
@@ -260,7 +276,9 @@ public final class BatteryHistEntryTest {
|
|||||||
upperHistEntry);
|
upperHistEntry);
|
||||||
|
|
||||||
assertBatteryHistEntry(
|
assertBatteryHistEntry(
|
||||||
newEntry, 3, upperHistEntry.mPercentOfTotal,
|
newEntry,
|
||||||
|
3,
|
||||||
|
upperHistEntry.mPercentOfTotal,
|
||||||
/* bootTimestamp= */ 1200 - 100,
|
/* bootTimestamp= */ 1200 - 100,
|
||||||
/* timestamp= */ slotTimestamp,
|
/* timestamp= */ slotTimestamp,
|
||||||
/* totalPower= */ 0.5 * 80,
|
/* totalPower= */ 0.5 * 80,
|
||||||
@@ -280,15 +298,16 @@ public final class BatteryHistEntryTest {
|
|||||||
|
|
||||||
private static ContentValues getContentValuesWithType(int consumerType) {
|
private static ContentValues getContentValuesWithType(int consumerType) {
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE,
|
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf(consumerType));
|
||||||
Integer.valueOf(consumerType));
|
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void assertBatteryHistEntry(
|
private void assertBatteryHistEntry(
|
||||||
BatteryHistEntry entry, int drainType, double percentOfTotal) {
|
BatteryHistEntry entry, int drainType, double percentOfTotal) {
|
||||||
assertBatteryHistEntry(
|
assertBatteryHistEntry(
|
||||||
entry, drainType, percentOfTotal,
|
entry,
|
||||||
|
drainType,
|
||||||
|
percentOfTotal,
|
||||||
/* bootTimestamp= */ 101L,
|
/* bootTimestamp= */ 101L,
|
||||||
/* timestamp= */ 10001L,
|
/* timestamp= */ 10001L,
|
||||||
/* totalPower= */ 5.1,
|
/* totalPower= */ 5.1,
|
||||||
@@ -321,8 +340,7 @@ public final class BatteryHistEntryTest {
|
|||||||
assertThat(entry.mUid).isEqualTo(1001);
|
assertThat(entry.mUid).isEqualTo(1001);
|
||||||
assertThat(entry.mUserId).isEqualTo(UserHandle.getUserId(1001));
|
assertThat(entry.mUserId).isEqualTo(UserHandle.getUserId(1001));
|
||||||
assertThat(entry.mAppLabel).isEqualTo("Settings");
|
assertThat(entry.mAppLabel).isEqualTo("Settings");
|
||||||
assertThat(entry.mPackageName)
|
assertThat(entry.mPackageName).isEqualTo("com.google.android.settings.battery");
|
||||||
.isEqualTo("com.google.android.settings.battery");
|
|
||||||
assertThat(entry.mIsHidden).isTrue();
|
assertThat(entry.mIsHidden).isTrue();
|
||||||
assertThat(entry.mBootTimestamp).isEqualTo(bootTimestamp);
|
assertThat(entry.mBootTimestamp).isEqualTo(bootTimestamp);
|
||||||
assertThat(entry.mTimestamp).isEqualTo(timestamp);
|
assertThat(entry.mTimestamp).isEqualTo(timestamp);
|
||||||
@@ -338,13 +356,10 @@ public final class BatteryHistEntryTest {
|
|||||||
assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
|
assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(foregroundUsageTimeInMs);
|
||||||
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
|
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(backgroundUsageTimeInMs);
|
||||||
assertThat(entry.mDrainType).isEqualTo(drainType);
|
assertThat(entry.mDrainType).isEqualTo(drainType);
|
||||||
assertThat(entry.mConsumerType)
|
assertThat(entry.mConsumerType).isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||||
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
|
||||||
assertThat(entry.mBatteryLevel).isEqualTo(batteryLevel);
|
assertThat(entry.mBatteryLevel).isEqualTo(batteryLevel);
|
||||||
assertThat(entry.mBatteryStatus)
|
assertThat(entry.mBatteryStatus).isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||||
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
assertThat(entry.mBatteryHealth).isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
||||||
assertThat(entry.mBatteryHealth)
|
|
||||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private BatteryHistEntry createBatteryHistEntry(
|
private BatteryHistEntry createBatteryHistEntry(
|
||||||
@@ -359,24 +374,24 @@ public final class BatteryHistEntryTest {
|
|||||||
long foregroundUsageTimeInMs,
|
long foregroundUsageTimeInMs,
|
||||||
long backgroundUsageTimeInMs,
|
long backgroundUsageTimeInMs,
|
||||||
int batteryLevel) {
|
int batteryLevel) {
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
BatteryHistEntry.KEY_UID,
|
BatteryHistEntry.KEY_UID,
|
||||||
BatteryHistEntry.KEY_USER_ID,
|
BatteryHistEntry.KEY_USER_ID,
|
||||||
BatteryHistEntry.KEY_PACKAGE_NAME,
|
BatteryHistEntry.KEY_PACKAGE_NAME,
|
||||||
BatteryHistEntry.KEY_TIMESTAMP,
|
BatteryHistEntry.KEY_TIMESTAMP,
|
||||||
BatteryHistEntry.KEY_CONSUMER_TYPE,
|
BatteryHistEntry.KEY_CONSUMER_TYPE,
|
||||||
BatteryHistEntry.KEY_BATTERY_INFORMATION});
|
BatteryHistEntry.KEY_BATTERY_INFORMATION
|
||||||
|
});
|
||||||
DeviceBatteryState deviceBatteryState =
|
DeviceBatteryState deviceBatteryState =
|
||||||
DeviceBatteryState
|
DeviceBatteryState.newBuilder()
|
||||||
.newBuilder()
|
|
||||||
.setBatteryLevel(batteryLevel)
|
.setBatteryLevel(batteryLevel)
|
||||||
.setBatteryStatus(BatteryManager.BATTERY_STATUS_FULL)
|
.setBatteryStatus(BatteryManager.BATTERY_STATUS_FULL)
|
||||||
.setBatteryHealth(BatteryManager.BATTERY_HEALTH_COLD)
|
.setBatteryHealth(BatteryManager.BATTERY_HEALTH_COLD)
|
||||||
.build();
|
.build();
|
||||||
BatteryInformation batteryInformation =
|
BatteryInformation batteryInformation =
|
||||||
BatteryInformation
|
BatteryInformation.newBuilder()
|
||||||
.newBuilder()
|
|
||||||
.setDeviceBatteryState(deviceBatteryState)
|
.setDeviceBatteryState(deviceBatteryState)
|
||||||
.setIsHidden(true)
|
.setIsHidden(true)
|
||||||
.setBootTimestamp(bootTimestamp)
|
.setBootTimestamp(bootTimestamp)
|
||||||
@@ -400,7 +415,8 @@ public final class BatteryHistEntryTest {
|
|||||||
"com.google.android.settings.battery",
|
"com.google.android.settings.battery",
|
||||||
Long.valueOf(timestamp),
|
Long.valueOf(timestamp),
|
||||||
Integer.valueOf(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY),
|
Integer.valueOf(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY),
|
||||||
ConvertUtils.convertBatteryInformationToString(batteryInformation)});
|
ConvertUtils.convertBatteryInformationToString(batteryInformation)
|
||||||
|
});
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
return new BatteryHistEntry(cursor);
|
return new BatteryHistEntry(cursor);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,14 +38,10 @@ import org.robolectric.RuntimeEnvironment;
|
|||||||
|
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class BatteryHistoryPreferenceTest {
|
public class BatteryHistoryPreferenceTest {
|
||||||
@Mock
|
@Mock private PreferenceViewHolder mViewHolder;
|
||||||
private PreferenceViewHolder mViewHolder;
|
@Mock private TextView mTextView;
|
||||||
@Mock
|
@Mock private BatteryChartView mDailyChartView;
|
||||||
private TextView mTextView;
|
@Mock private BatteryChartView mHourlyChartView;
|
||||||
@Mock
|
|
||||||
private BatteryChartView mDailyChartView;
|
|
||||||
@Mock
|
|
||||||
private BatteryChartView mHourlyChartView;
|
|
||||||
private BatteryHistoryPreference mBatteryHistoryPreference;
|
private BatteryHistoryPreference mBatteryHistoryPreference;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
|
|||||||
@@ -42,12 +42,14 @@ public class BatteryLevelDataTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getDailyTimestamps_allDataInOneHour_returnExpectedList() {
|
public void getDailyTimestamps_allDataInOneHour_returnExpectedList() {
|
||||||
// Timezone GMT+8
|
// Timezone GMT+8
|
||||||
final List<Long> timestamps = List.of(
|
final List<Long> timestamps =
|
||||||
|
List.of(
|
||||||
1640970006000L, // 2022-01-01 01:00:06
|
1640970006000L, // 2022-01-01 01:00:06
|
||||||
1640973608000L // 2022-01-01 01:00:08
|
1640973608000L // 2022-01-01 01:00:08
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<Long> expectedTimestamps = List.of(
|
final List<Long> expectedTimestamps =
|
||||||
|
List.of(
|
||||||
1640970006000L, // 2022-01-01 01:00:06
|
1640970006000L, // 2022-01-01 01:00:06
|
||||||
1640973608000L // 2022-01-01 01:00:08
|
1640973608000L // 2022-01-01 01:00:08
|
||||||
);
|
);
|
||||||
@@ -57,13 +59,15 @@ public class BatteryLevelDataTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getDailyTimestamps_OneHourDataPerDay_returnExpectedList() {
|
public void getDailyTimestamps_OneHourDataPerDay_returnExpectedList() {
|
||||||
// Timezone GMT+8
|
// Timezone GMT+8
|
||||||
final List<Long> timestamps = List.of(
|
final List<Long> timestamps =
|
||||||
|
List.of(
|
||||||
1641049200000L, // 2022-01-01 23:00:00
|
1641049200000L, // 2022-01-01 23:00:00
|
||||||
1641052800000L, // 2022-01-02 00:00:00
|
1641052800000L, // 2022-01-02 00:00:00
|
||||||
1641056400000L // 2022-01-02 01:00:00
|
1641056400000L // 2022-01-02 01:00:00
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<Long> expectedTimestamps = List.of(
|
final List<Long> expectedTimestamps =
|
||||||
|
List.of(
|
||||||
1641049200000L, // 2022-01-01 23:00:00
|
1641049200000L, // 2022-01-01 23:00:00
|
||||||
1641052800000L, // 2022-01-02 00:00:00
|
1641052800000L, // 2022-01-02 00:00:00
|
||||||
1641056400000L // 2022-01-02 01:00:00
|
1641056400000L // 2022-01-02 01:00:00
|
||||||
@@ -74,7 +78,8 @@ public class BatteryLevelDataTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getDailyTimestamps_OneDayData_returnExpectedList() {
|
public void getDailyTimestamps_OneDayData_returnExpectedList() {
|
||||||
// Timezone GMT+8
|
// Timezone GMT+8
|
||||||
final List<Long> timestamps = List.of(
|
final List<Long> timestamps =
|
||||||
|
List.of(
|
||||||
1640966400000L, // 2022-01-01 00:00:00
|
1640966400000L, // 2022-01-01 00:00:00
|
||||||
1640970000000L, // 2022-01-01 01:00:00
|
1640970000000L, // 2022-01-01 01:00:00
|
||||||
1640973600000L, // 2022-01-01 02:00:00
|
1640973600000L, // 2022-01-01 02:00:00
|
||||||
@@ -82,7 +87,8 @@ public class BatteryLevelDataTest {
|
|||||||
1640980800000L // 2022-01-01 04:00:00
|
1640980800000L // 2022-01-01 04:00:00
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<Long> expectedTimestamps = List.of(
|
final List<Long> expectedTimestamps =
|
||||||
|
List.of(
|
||||||
1640966400000L, // 2022-01-01 00:00:00
|
1640966400000L, // 2022-01-01 00:00:00
|
||||||
1640980800000L // 2022-01-01 04:00:00
|
1640980800000L // 2022-01-01 04:00:00
|
||||||
);
|
);
|
||||||
@@ -92,14 +98,16 @@ public class BatteryLevelDataTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
|
public void getDailyTimestamps_MultipleDaysData_returnExpectedList() {
|
||||||
// Timezone GMT+8
|
// Timezone GMT+8
|
||||||
final List<Long> timestamps = List.of(
|
final List<Long> timestamps =
|
||||||
|
List.of(
|
||||||
1641045600000L, // 2022-01-01 22:00:00
|
1641045600000L, // 2022-01-01 22:00:00
|
||||||
1641060000000L, // 2022-01-02 02:00:00
|
1641060000000L, // 2022-01-02 02:00:00
|
||||||
1641160800000L, // 2022-01-03 06:00:00
|
1641160800000L, // 2022-01-03 06:00:00
|
||||||
1641232800000L // 2022-01-04 02:00:00
|
1641232800000L // 2022-01-04 02:00:00
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<Long> expectedTimestamps = List.of(
|
final List<Long> expectedTimestamps =
|
||||||
|
List.of(
|
||||||
1641045600000L, // 2022-01-01 22:00:00
|
1641045600000L, // 2022-01-01 22:00:00
|
||||||
1641052800000L, // 2022-01-02 00:00:00
|
1641052800000L, // 2022-01-02 00:00:00
|
||||||
1641139200000L, // 2022-01-03 00:00:00
|
1641139200000L, // 2022-01-03 00:00:00
|
||||||
@@ -112,14 +120,16 @@ public class BatteryLevelDataTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getDailyTimestamps_FirstDayOneHourData_returnExpectedList() {
|
public void getDailyTimestamps_FirstDayOneHourData_returnExpectedList() {
|
||||||
// Timezone GMT+8
|
// Timezone GMT+8
|
||||||
final List<Long> timestamps = List.of(
|
final List<Long> timestamps =
|
||||||
|
List.of(
|
||||||
1641049200000L, // 2022-01-01 23:00:00
|
1641049200000L, // 2022-01-01 23:00:00
|
||||||
1641060000000L, // 2022-01-02 02:00:00
|
1641060000000L, // 2022-01-02 02:00:00
|
||||||
1641160800000L, // 2022-01-03 06:00:00
|
1641160800000L, // 2022-01-03 06:00:00
|
||||||
1641254400000L // 2022-01-04 08:00:00
|
1641254400000L // 2022-01-04 08:00:00
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<Long> expectedTimestamps = List.of(
|
final List<Long> expectedTimestamps =
|
||||||
|
List.of(
|
||||||
1641049200000L, // 2022-01-01 23:00:00
|
1641049200000L, // 2022-01-01 23:00:00
|
||||||
1641052800000L, // 2022-01-02 00:00:00
|
1641052800000L, // 2022-01-02 00:00:00
|
||||||
1641139200000L, // 2022-01-03 00:00:00
|
1641139200000L, // 2022-01-03 00:00:00
|
||||||
@@ -132,14 +142,16 @@ public class BatteryLevelDataTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getDailyTimestamps_LastDayNoData_returnExpectedList() {
|
public void getDailyTimestamps_LastDayNoData_returnExpectedList() {
|
||||||
// Timezone GMT+8
|
// Timezone GMT+8
|
||||||
final List<Long> timestamps = List.of(
|
final List<Long> timestamps =
|
||||||
|
List.of(
|
||||||
1640988000000L, // 2022-01-01 06:00:00
|
1640988000000L, // 2022-01-01 06:00:00
|
||||||
1641060000000L, // 2022-01-02 02:00:00
|
1641060000000L, // 2022-01-02 02:00:00
|
||||||
1641160800000L, // 2022-01-03 06:00:00
|
1641160800000L, // 2022-01-03 06:00:00
|
||||||
1641225600000L // 2022-01-04 00:00:00
|
1641225600000L // 2022-01-04 00:00:00
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<Long> expectedTimestamps = List.of(
|
final List<Long> expectedTimestamps =
|
||||||
|
List.of(
|
||||||
1640988000000L, // 2022-01-01 06:00:00
|
1640988000000L, // 2022-01-01 06:00:00
|
||||||
1641052800000L, // 2022-01-02 00:00:00
|
1641052800000L, // 2022-01-02 00:00:00
|
||||||
1641139200000L, // 2022-01-03 00:00:00
|
1641139200000L, // 2022-01-03 00:00:00
|
||||||
@@ -151,14 +163,16 @@ public class BatteryLevelDataTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getDailyTimestamps_LastDayOneHourData_returnExpectedList() {
|
public void getDailyTimestamps_LastDayOneHourData_returnExpectedList() {
|
||||||
// Timezone GMT+8
|
// Timezone GMT+8
|
||||||
final List<Long> timestamps = List.of(
|
final List<Long> timestamps =
|
||||||
|
List.of(
|
||||||
1640988000000L, // 2022-01-01 06:00:00
|
1640988000000L, // 2022-01-01 06:00:00
|
||||||
1641060000000L, // 2022-01-02 02:00:00
|
1641060000000L, // 2022-01-02 02:00:00
|
||||||
1641160800000L, // 2022-01-03 06:00:00
|
1641160800000L, // 2022-01-03 06:00:00
|
||||||
1641229200000L // 2022-01-04 01:00:00
|
1641229200000L // 2022-01-04 01:00:00
|
||||||
);
|
);
|
||||||
|
|
||||||
final List<Long> expectedTimestamps = List.of(
|
final List<Long> expectedTimestamps =
|
||||||
|
List.of(
|
||||||
1640988000000L, // 2022-01-01 06:00:00
|
1640988000000L, // 2022-01-01 06:00:00
|
||||||
1641052800000L, // 2022-01-02 00:00:00
|
1641052800000L, // 2022-01-02 00:00:00
|
||||||
1641139200000L, // 2022-01-03 00:00:00
|
1641139200000L, // 2022-01-03 00:00:00
|
||||||
@@ -172,21 +186,26 @@ public class BatteryLevelDataTest {
|
|||||||
public void combine_normalFlow_returnExpectedResult() {
|
public void combine_normalFlow_returnExpectedResult() {
|
||||||
final BatteryLevelData batteryLevelData =
|
final BatteryLevelData batteryLevelData =
|
||||||
new BatteryLevelData(Map.of(1691596800000L, 90, 1691604000000L, 80));
|
new BatteryLevelData(Map.of(1691596800000L, 90, 1691604000000L, 80));
|
||||||
final List<BatteryEvent> batteryLevelRecordEvents = List.of(
|
final List<BatteryEvent> batteryLevelRecordEvents =
|
||||||
BatteryEvent.newBuilder().setTimestamp(1691586000166L).setBatteryLevel(100)
|
List.of(
|
||||||
.setType(BatteryEventType.FULL_CHARGED).build(),
|
BatteryEvent.newBuilder()
|
||||||
BatteryEvent.newBuilder().setTimestamp(1691589600000L).setBatteryLevel(98)
|
.setTimestamp(1691586000166L)
|
||||||
.setType(BatteryEventType.EVEN_HOUR).build());
|
.setBatteryLevel(100)
|
||||||
|
.setType(BatteryEventType.FULL_CHARGED)
|
||||||
|
.build(),
|
||||||
|
BatteryEvent.newBuilder()
|
||||||
|
.setTimestamp(1691589600000L)
|
||||||
|
.setBatteryLevel(98)
|
||||||
|
.setType(BatteryEventType.EVEN_HOUR)
|
||||||
|
.build());
|
||||||
|
|
||||||
BatteryLevelData result =
|
BatteryLevelData result =
|
||||||
BatteryLevelData.combine(batteryLevelData, batteryLevelRecordEvents);
|
BatteryLevelData.combine(batteryLevelData, batteryLevelRecordEvents);
|
||||||
|
|
||||||
assertThat(result.getDailyBatteryLevels().getTimestamps())
|
assertThat(result.getDailyBatteryLevels().getTimestamps())
|
||||||
.isEqualTo(List.of(1691586000166L, 1691596800000L, 1691604000000L));
|
.isEqualTo(List.of(1691586000166L, 1691596800000L, 1691604000000L));
|
||||||
assertThat(result.getDailyBatteryLevels().getLevels())
|
assertThat(result.getDailyBatteryLevels().getLevels()).isEqualTo(List.of(100, 90, 80));
|
||||||
.isEqualTo(List.of(100, 90, 80));
|
assertThat(result.getHourlyBatteryLevelsPerDay()).hasSize(2);
|
||||||
assertThat(result.getHourlyBatteryLevelsPerDay())
|
|
||||||
.hasSize(2);
|
|
||||||
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps())
|
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps())
|
||||||
.isEqualTo(List.of(1691586000166L, 1691589600000L, 1691596800000L));
|
.isEqualTo(List.of(1691586000166L, 1691589600000L, 1691596800000L));
|
||||||
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels())
|
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels())
|
||||||
@@ -199,17 +218,22 @@ public class BatteryLevelDataTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void combine_existingBatteryLevelDataIsNull_returnExpectedResult() {
|
public void combine_existingBatteryLevelDataIsNull_returnExpectedResult() {
|
||||||
final List<BatteryEvent> batteryLevelRecordEvents = List.of(
|
final List<BatteryEvent> batteryLevelRecordEvents =
|
||||||
BatteryEvent.newBuilder().setTimestamp(1691586000166L).setBatteryLevel(100)
|
List.of(
|
||||||
.setType(BatteryEventType.FULL_CHARGED).build(),
|
BatteryEvent.newBuilder()
|
||||||
BatteryEvent.newBuilder().setTimestamp(1691589600000L).setBatteryLevel(98)
|
.setTimestamp(1691586000166L)
|
||||||
.setType(BatteryEventType.EVEN_HOUR).build());
|
.setBatteryLevel(100)
|
||||||
|
.setType(BatteryEventType.FULL_CHARGED)
|
||||||
|
.build(),
|
||||||
|
BatteryEvent.newBuilder()
|
||||||
|
.setTimestamp(1691589600000L)
|
||||||
|
.setBatteryLevel(98)
|
||||||
|
.setType(BatteryEventType.EVEN_HOUR)
|
||||||
|
.build());
|
||||||
|
|
||||||
BatteryLevelData result =
|
BatteryLevelData result = BatteryLevelData.combine(null, batteryLevelRecordEvents);
|
||||||
BatteryLevelData.combine(null, batteryLevelRecordEvents);
|
|
||||||
|
|
||||||
assertThat(result.getHourlyBatteryLevelsPerDay())
|
assertThat(result.getHourlyBatteryLevelsPerDay()).hasSize(1);
|
||||||
.hasSize(1);
|
|
||||||
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps())
|
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getTimestamps())
|
||||||
.isEqualTo(List.of(1691586000166L, 1691589600000L));
|
.isEqualTo(List.of(1691586000166L, 1691589600000L));
|
||||||
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels())
|
assertThat(result.getHourlyBatteryLevelsPerDay().get(0).getLevels())
|
||||||
@@ -219,23 +243,29 @@ public class BatteryLevelDataTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getIndexByTimestamps_returnExpectedResult() {
|
public void getIndexByTimestamps_returnExpectedResult() {
|
||||||
final BatteryLevelData batteryLevelData =
|
final BatteryLevelData batteryLevelData =
|
||||||
new BatteryLevelData(Map.of(
|
new BatteryLevelData(
|
||||||
|
Map.of(
|
||||||
1694354400000L, 1, // 2023-09-10 22:00:00
|
1694354400000L, 1, // 2023-09-10 22:00:00
|
||||||
1694361600000L, 2, // 2023-09-11 00:00:00
|
1694361600000L, 2, // 2023-09-11 00:00:00
|
||||||
1694368800000L, 3)); // 2023-09-11 02:00:00
|
1694368800000L, 3)); // 2023-09-11 02:00:00
|
||||||
final PowerAnomalyEvent event = BatteryTestUtils.createAppAnomalyEvent();
|
final PowerAnomalyEvent event = BatteryTestUtils.createAppAnomalyEvent();
|
||||||
|
|
||||||
assertThat(batteryLevelData.getIndexByTimestamps(0L, 0L))
|
assertThat(batteryLevelData.getIndexByTimestamps(0L, 0L))
|
||||||
.isEqualTo(Pair.create(BatteryChartViewModel.SELECTED_INDEX_INVALID,
|
.isEqualTo(
|
||||||
|
Pair.create(
|
||||||
|
BatteryChartViewModel.SELECTED_INDEX_INVALID,
|
||||||
BatteryChartViewModel.SELECTED_INDEX_INVALID));
|
BatteryChartViewModel.SELECTED_INDEX_INVALID));
|
||||||
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L + 1L))
|
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L + 1L))
|
||||||
.isEqualTo(Pair.create(BatteryChartViewModel.SELECTED_INDEX_INVALID,
|
.isEqualTo(
|
||||||
|
Pair.create(
|
||||||
|
BatteryChartViewModel.SELECTED_INDEX_INVALID,
|
||||||
BatteryChartViewModel.SELECTED_INDEX_INVALID));
|
BatteryChartViewModel.SELECTED_INDEX_INVALID));
|
||||||
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L, 1694368800000L))
|
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L, 1694368800000L))
|
||||||
.isEqualTo(Pair.create(1, 0));
|
.isEqualTo(Pair.create(1, 0));
|
||||||
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L - 1L))
|
assertThat(batteryLevelData.getIndexByTimestamps(1694361600000L + 1L, 1694368800000L - 1L))
|
||||||
.isEqualTo(Pair.create(1, 0));
|
.isEqualTo(Pair.create(1, 0));
|
||||||
assertThat(batteryLevelData.getIndexByTimestamps(
|
assertThat(
|
||||||
|
batteryLevelData.getIndexByTimestamps(
|
||||||
event.getWarningItemInfo().getStartTimestamp(),
|
event.getWarningItemInfo().getStartTimestamp(),
|
||||||
event.getWarningItemInfo().getEndTimestamp()))
|
event.getWarningItemInfo().getEndTimestamp()))
|
||||||
.isEqualTo(Pair.create(1, 0));
|
.isEqualTo(Pair.create(1, 0));
|
||||||
|
|||||||
@@ -61,12 +61,9 @@ public final class BatteryTipsCardPreferenceTest {
|
|||||||
private BatteryTipsController mBatteryTipsController;
|
private BatteryTipsController mBatteryTipsController;
|
||||||
private BatteryChartPreferenceController mBatteryChartPreferenceController;
|
private BatteryChartPreferenceController mBatteryChartPreferenceController;
|
||||||
|
|
||||||
@Mock
|
@Mock private View mFakeView;
|
||||||
private View mFakeView;
|
@Mock private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
|
||||||
@Mock
|
@Mock private BatteryDiffEntry mFakeEntry;
|
||||||
private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
|
|
||||||
@Mock
|
|
||||||
private BatteryDiffEntry mFakeEntry;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -85,7 +82,10 @@ public final class BatteryTipsCardPreferenceTest {
|
|||||||
mPowerUsageAdvanced.mBatteryTipsController = mBatteryTipsController;
|
mPowerUsageAdvanced.mBatteryTipsController = mBatteryTipsController;
|
||||||
mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController;
|
mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController;
|
||||||
mPowerUsageAdvanced.mBatteryUsageBreakdownController = mBatteryUsageBreakdownController;
|
mPowerUsageAdvanced.mBatteryUsageBreakdownController = mBatteryUsageBreakdownController;
|
||||||
mPowerUsageAdvanced.mBatteryLevelData = Optional.of(new BatteryLevelData(Map.of(
|
mPowerUsageAdvanced.mBatteryLevelData =
|
||||||
|
Optional.of(
|
||||||
|
new BatteryLevelData(
|
||||||
|
Map.of(
|
||||||
1694354400000L, 1, // 2023-09-10 22:00:00
|
1694354400000L, 1, // 2023-09-10 22:00:00
|
||||||
1694361600000L, 2, // 2023-09-11 00:00:00
|
1694361600000L, 2, // 2023-09-11 00:00:00
|
||||||
1694368800000L, 3))); // 2023-09-11 02:00:00
|
1694368800000L, 3))); // 2023-09-11 02:00:00
|
||||||
@@ -94,8 +94,8 @@ public final class BatteryTipsCardPreferenceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void constructor_returnExpectedResult() {
|
public void constructor_returnExpectedResult() {
|
||||||
assertThat(mBatteryTipsCardPreference.getLayoutResource()).isEqualTo(
|
assertThat(mBatteryTipsCardPreference.getLayoutResource())
|
||||||
R.layout.battery_tips_card);
|
.isEqualTo(R.layout.battery_tips_card);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -118,10 +118,13 @@ public final class BatteryTipsCardPreferenceTest {
|
|||||||
.isEqualTo(DisplaySettings.class.getName());
|
.isEqualTo(DisplaySettings.class.getName());
|
||||||
assertThat(intent.getIntExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, -1))
|
assertThat(intent.getIntExtra(MetricsFeatureProvider.EXTRA_SOURCE_METRICS_CATEGORY, -1))
|
||||||
.isEqualTo(SettingsEnums.DISPLAY);
|
.isEqualTo(SettingsEnums.DISPLAY);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "BrightnessAnomaly");
|
.action(
|
||||||
|
mContext,
|
||||||
|
SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT,
|
||||||
|
"BrightnessAnomaly");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -140,10 +143,16 @@ public final class BatteryTipsCardPreferenceTest {
|
|||||||
assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext)).hasSize(1);
|
assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext)).hasSize(1);
|
||||||
assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext))
|
assertThat(DatabaseUtils.getDismissedPowerAnomalyKeys(mContext))
|
||||||
.contains(PowerAnomalyKey.KEY_SCREEN_TIMEOUT.name());
|
.contains(PowerAnomalyKey.KEY_SCREEN_TIMEOUT.name());
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
.action(
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
mContext,
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "ScreenTimeoutAnomaly");
|
SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
|
||||||
|
"ScreenTimeoutAnomaly");
|
||||||
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
|
.action(
|
||||||
|
mContext,
|
||||||
|
SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS,
|
||||||
|
"ScreenTimeoutAnomaly");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -159,13 +168,12 @@ public final class BatteryTipsCardPreferenceTest {
|
|||||||
|
|
||||||
assertThat(mBatteryTipsCardPreference.isVisible()).isFalse();
|
assertThat(mBatteryTipsCardPreference.isVisible()).isFalse();
|
||||||
verify(mContext, never()).startActivity(any(Intent.class));
|
verify(mContext, never()).startActivity(any(Intent.class));
|
||||||
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(
|
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
|
||||||
eq(1), eq(0));
|
|
||||||
verify(mBatteryChartPreferenceController).selectHighlightSlotIndex();
|
verify(mBatteryChartPreferenceController).selectHighlightSlotIndex();
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "AppAnomaly");
|
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_ACCEPT, "AppAnomaly");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -180,12 +188,11 @@ public final class BatteryTipsCardPreferenceTest {
|
|||||||
|
|
||||||
assertThat(mBatteryTipsCardPreference.isVisible()).isFalse();
|
assertThat(mBatteryTipsCardPreference.isVisible()).isFalse();
|
||||||
verify(mContext, never()).startActivity(any(Intent.class));
|
verify(mContext, never()).startActivity(any(Intent.class));
|
||||||
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(
|
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
|
||||||
eq(1), eq(0));
|
|
||||||
verify(mBatteryChartPreferenceController, never()).selectHighlightSlotIndex();
|
verify(mBatteryChartPreferenceController, never()).selectHighlightSlotIndex();
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "AppAnomaly");
|
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, "AppAnomaly");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ public final class BatteryTipsControllerTest {
|
|||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
private BatteryTipsController mBatteryTipsController;
|
private BatteryTipsController mBatteryTipsController;
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryTipsCardPreference mBatteryTipsCardPreference;
|
||||||
private BatteryTipsCardPreference mBatteryTipsCardPreference;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -82,17 +81,17 @@ public final class BatteryTipsControllerTest {
|
|||||||
new AnomalyEventWrapper(mContext, event), false);
|
new AnomalyEventWrapper(mContext, event), false);
|
||||||
|
|
||||||
// Check pre-defined string
|
// Check pre-defined string
|
||||||
verify(mBatteryTipsCardPreference).setTitle(
|
verify(mBatteryTipsCardPreference)
|
||||||
"Turn on adaptive brightness to extend battery life");
|
.setTitle("Turn on adaptive brightness to extend battery life");
|
||||||
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId(
|
verify(mBatteryTipsCardPreference)
|
||||||
R.color.color_accent_selector);
|
.setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
||||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||||
// Check proto info
|
// Check proto info
|
||||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "BrightnessAnomaly");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -105,20 +104,24 @@ public final class BatteryTipsControllerTest {
|
|||||||
|
|
||||||
verify(mBatteryTipsCardPreference).setTitle("Reduce screen timeout to extend battery life");
|
verify(mBatteryTipsCardPreference).setTitle("Reduce screen timeout to extend battery life");
|
||||||
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId(
|
verify(mBatteryTipsCardPreference)
|
||||||
R.color.color_accent_selector);
|
.setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
||||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
.action(
|
||||||
|
mContext,
|
||||||
|
SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
|
||||||
|
"ScreenTimeoutAnomaly");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleBatteryTipsCardUpdated_screenTimeoutAnomalyHasTitle_showAnomaly() {
|
public void handleBatteryTipsCardUpdated_screenTimeoutAnomalyHasTitle_showAnomaly() {
|
||||||
PowerAnomalyEvent event = BatteryTestUtils.createScreenTimeoutAnomalyEvent();
|
PowerAnomalyEvent event = BatteryTestUtils.createScreenTimeoutAnomalyEvent();
|
||||||
String testTitle = "TestTitle";
|
String testTitle = "TestTitle";
|
||||||
event = event.toBuilder()
|
event =
|
||||||
|
event.toBuilder()
|
||||||
.setWarningBannerInfo(
|
.setWarningBannerInfo(
|
||||||
event.getWarningBannerInfo().toBuilder()
|
event.getWarningBannerInfo().toBuilder()
|
||||||
.setTitleString(testTitle)
|
.setTitleString(testTitle)
|
||||||
@@ -131,13 +134,16 @@ public final class BatteryTipsControllerTest {
|
|||||||
|
|
||||||
verify(mBatteryTipsCardPreference).setTitle(testTitle);
|
verify(mBatteryTipsCardPreference).setTitle(testTitle);
|
||||||
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
verify(mBatteryTipsCardPreference).setIconResourceId(R.drawable.ic_battery_tips_lightbulb);
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId(
|
verify(mBatteryTipsCardPreference)
|
||||||
R.color.color_accent_selector);
|
.setMainButtonStrokeColorResourceId(R.color.color_accent_selector);
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
verify(mBatteryTipsCardPreference).setMainButtonLabel("View Settings");
|
||||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "ScreenTimeoutAnomaly");
|
.action(
|
||||||
|
mContext,
|
||||||
|
SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW,
|
||||||
|
"ScreenTimeoutAnomaly");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -146,20 +152,18 @@ public final class BatteryTipsControllerTest {
|
|||||||
when(mFeatureFactory.powerUsageFeatureProvider.isBatteryTipsEnabled()).thenReturn(true);
|
when(mFeatureFactory.powerUsageFeatureProvider.isBatteryTipsEnabled()).thenReturn(true);
|
||||||
|
|
||||||
AnomalyEventWrapper eventWrapper = new AnomalyEventWrapper(mContext, event);
|
AnomalyEventWrapper eventWrapper = new AnomalyEventWrapper(mContext, event);
|
||||||
eventWrapper.setRelatedBatteryDiffEntry(
|
eventWrapper.setRelatedBatteryDiffEntry(new BatteryDiffEntry(mContext, "", "Chrome", 0));
|
||||||
new BatteryDiffEntry(mContext, "", "Chrome", 0));
|
|
||||||
mBatteryTipsController.handleBatteryTipsCardUpdated(eventWrapper, false);
|
mBatteryTipsController.handleBatteryTipsCardUpdated(eventWrapper, false);
|
||||||
|
|
||||||
verify(mBatteryTipsCardPreference).setTitle(
|
verify(mBatteryTipsCardPreference).setTitle("Chrome used more battery than usual");
|
||||||
"Chrome used more battery than usual");
|
verify(mBatteryTipsCardPreference)
|
||||||
verify(mBatteryTipsCardPreference).setIconResourceId(
|
.setIconResourceId(R.drawable.ic_battery_tips_warning_icon);
|
||||||
R.drawable.ic_battery_tips_warning_icon);
|
verify(mBatteryTipsCardPreference)
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonStrokeColorResourceId(
|
.setMainButtonStrokeColorResourceId(R.color.color_battery_anomaly_yellow_selector);
|
||||||
R.color.color_battery_anomaly_yellow_selector);
|
|
||||||
verify(mBatteryTipsCardPreference).setMainButtonLabel("Check");
|
verify(mBatteryTipsCardPreference).setMainButtonLabel("Check");
|
||||||
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
verify(mBatteryTipsCardPreference).setDismissButtonLabel("Got it");
|
||||||
verify(mBatteryTipsCardPreference).setVisible(true);
|
verify(mBatteryTipsCardPreference).setVisible(true);
|
||||||
verify(mFeatureFactory.metricsFeatureProvider).action(
|
verify(mFeatureFactory.metricsFeatureProvider)
|
||||||
mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
.action(mContext, SettingsEnums.ACTION_BATTERY_TIPS_CARD_SHOW, "AppAnomaly");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,18 +58,12 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
private static final String PREF_KEY2 = "pref_key2";
|
private static final String PREF_KEY2 = "pref_key2";
|
||||||
private static final String PREF_SUMMARY = "fake preference summary";
|
private static final String PREF_SUMMARY = "fake preference summary";
|
||||||
|
|
||||||
@Mock
|
@Mock private InstrumentedPreferenceFragment mFragment;
|
||||||
private InstrumentedPreferenceFragment mFragment;
|
@Mock private SettingsActivity mSettingsActivity;
|
||||||
@Mock
|
@Mock private PreferenceGroup mAppListPreferenceGroup;
|
||||||
private SettingsActivity mSettingsActivity;
|
@Mock private Drawable mDrawable;
|
||||||
@Mock
|
@Mock private BatteryHistEntry mBatteryHistEntry;
|
||||||
private PreferenceGroup mAppListPreferenceGroup;
|
@Mock private AnomalyAppItemPreference mAnomalyAppItemPreference;
|
||||||
@Mock
|
|
||||||
private Drawable mDrawable;
|
|
||||||
@Mock
|
|
||||||
private BatteryHistEntry mBatteryHistEntry;
|
|
||||||
@Mock
|
|
||||||
private AnomalyAppItemPreference mAnomalyAppItemPreference;
|
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
private FakeFeatureFactory mFeatureFactory;
|
private FakeFeatureFactory mFeatureFactory;
|
||||||
@@ -94,7 +88,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
.getHideApplicationSet();
|
.getHideApplicationSet();
|
||||||
mBatteryUsageBreakdownController = createController();
|
mBatteryUsageBreakdownController = createController();
|
||||||
mBatteryUsageBreakdownController.mAppListPreferenceGroup = mAppListPreferenceGroup;
|
mBatteryUsageBreakdownController.mAppListPreferenceGroup = mAppListPreferenceGroup;
|
||||||
mBatteryDiffEntry = new BatteryDiffEntry(
|
mBatteryDiffEntry =
|
||||||
|
new BatteryDiffEntry(
|
||||||
mContext,
|
mContext,
|
||||||
/* uid= */ 0L,
|
/* uid= */ 0L,
|
||||||
/* userId= */ 0L,
|
/* userId= */ 0L,
|
||||||
@@ -114,10 +109,18 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
/* cachedUsageConsumePower= */ 0);
|
/* cachedUsageConsumePower= */ 0);
|
||||||
mBatteryDiffEntry = spy(mBatteryDiffEntry);
|
mBatteryDiffEntry = spy(mBatteryDiffEntry);
|
||||||
mBatteryUsageBreakdownController.mBatteryDiffData =
|
mBatteryUsageBreakdownController.mBatteryDiffData =
|
||||||
new BatteryDiffData(mContext, /* startTimestamp= */ 0L, /* endTimestamp= */ 0L,
|
new BatteryDiffData(
|
||||||
/* startBatteryLevel= */ 0, /* endBatteryLevel= */ 0,
|
mContext,
|
||||||
/* screenOnTime= */ 0L, Arrays.asList(mBatteryDiffEntry), Arrays.asList(),
|
/* startTimestamp= */ 0L,
|
||||||
Set.of(), Set.of(), /* isAccumulated= */ false);
|
/* endTimestamp= */ 0L,
|
||||||
|
/* startBatteryLevel= */ 0,
|
||||||
|
/* endBatteryLevel= */ 0,
|
||||||
|
/* screenOnTime= */ 0L,
|
||||||
|
Arrays.asList(mBatteryDiffEntry),
|
||||||
|
Arrays.asList(),
|
||||||
|
Set.of(),
|
||||||
|
Set.of(),
|
||||||
|
/* isAccumulated= */ false);
|
||||||
BatteryDiffEntry.clearCache();
|
BatteryDiffEntry.clearCache();
|
||||||
// Adds fake testing data.
|
// Adds fake testing data.
|
||||||
BatteryDiffEntry.sResourceCache.put(
|
BatteryDiffEntry.sResourceCache.put(
|
||||||
@@ -129,8 +132,7 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void onDestroy_clearPreferenceCacheAndPreferenceGroupRemoveAll() {
|
public void onDestroy_clearPreferenceCacheAndPreferenceGroupRemoveAll() {
|
||||||
// Ensures the testing environment is correct.
|
// Ensures the testing environment is correct.
|
||||||
mBatteryUsageBreakdownController.mPreferenceCache.put(
|
mBatteryUsageBreakdownController.mPreferenceCache.put(PREF_KEY, mAnomalyAppItemPreference);
|
||||||
PREF_KEY, mAnomalyAppItemPreference);
|
|
||||||
assertThat(mBatteryUsageBreakdownController.mPreferenceCache).hasSize(1);
|
assertThat(mBatteryUsageBreakdownController.mPreferenceCache).hasSize(1);
|
||||||
|
|
||||||
mBatteryUsageBreakdownController.onDestroy();
|
mBatteryUsageBreakdownController.onDestroy();
|
||||||
@@ -158,8 +160,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
|
|
||||||
// Verifies the preference cache.
|
// Verifies the preference cache.
|
||||||
final PowerGaugePreference pref =
|
final PowerGaugePreference pref =
|
||||||
(PowerGaugePreference) mBatteryUsageBreakdownController.mPreferenceCache
|
(PowerGaugePreference)
|
||||||
.get(PREF_KEY);
|
mBatteryUsageBreakdownController.mPreferenceCache.get(PREF_KEY);
|
||||||
assertThat(pref).isNotNull();
|
assertThat(pref).isNotNull();
|
||||||
// Verifies the added preference configuration.
|
// Verifies the added preference configuration.
|
||||||
verify(mAppListPreferenceGroup).addPreference(pref);
|
verify(mAppListPreferenceGroup).addPreference(pref);
|
||||||
@@ -218,8 +220,10 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
|
public void handlePreferenceTreeClick_notPowerGaugePreference_returnFalse() {
|
||||||
assertThat(mBatteryUsageBreakdownController
|
assertThat(
|
||||||
.handlePreferenceTreeClick(mAppListPreferenceGroup)).isFalse();
|
mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
||||||
|
mAppListPreferenceGroup))
|
||||||
|
.isFalse();
|
||||||
|
|
||||||
verify(mMetricsFeatureProvider, never())
|
verify(mMetricsFeatureProvider, never())
|
||||||
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM);
|
.action(mContext, SettingsEnums.ACTION_BATTERY_USAGE_APP_ITEM);
|
||||||
@@ -232,8 +236,10 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
|
mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
|
||||||
doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
|
doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
|
||||||
|
|
||||||
assertThat(mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
assertThat(
|
||||||
mAnomalyAppItemPreference)).isTrue();
|
mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
||||||
|
mAnomalyAppItemPreference))
|
||||||
|
.isTrue();
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(
|
.action(
|
||||||
SettingsEnums.OPEN_BATTERY_USAGE,
|
SettingsEnums.OPEN_BATTERY_USAGE,
|
||||||
@@ -248,8 +254,10 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_UID_BATTERY;
|
mBatteryDiffEntry.mConsumerType = ConvertUtils.CONSUMER_TYPE_UID_BATTERY;
|
||||||
doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
|
doReturn(mBatteryDiffEntry).when(mAnomalyAppItemPreference).getBatteryDiffEntry();
|
||||||
|
|
||||||
assertThat(mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
assertThat(
|
||||||
mAnomalyAppItemPreference)).isTrue();
|
mBatteryUsageBreakdownController.handlePreferenceTreeClick(
|
||||||
|
mAnomalyAppItemPreference))
|
||||||
|
.isTrue();
|
||||||
verify(mMetricsFeatureProvider)
|
verify(mMetricsFeatureProvider)
|
||||||
.action(
|
.action(
|
||||||
SettingsEnums.OPEN_BATTERY_USAGE,
|
SettingsEnums.OPEN_BATTERY_USAGE,
|
||||||
@@ -262,7 +270,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void setPreferencePercent_lessThanThreshold_expectedFormat() {
|
public void setPreferencePercent_lessThanThreshold_expectedFormat() {
|
||||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||||
final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry(
|
final BatteryDiffEntry batteryDiffEntry =
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ true,
|
/* isSystem= */ true,
|
||||||
/* screenOnTimeInMs= */ 0,
|
/* screenOnTimeInMs= */ 0,
|
||||||
/* foregroundUsageTimeInMs= */ 0,
|
/* foregroundUsageTimeInMs= */ 0,
|
||||||
@@ -279,7 +288,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void setPreferencePercent_greaterThanThreshold_expectedFormat() {
|
public void setPreferencePercent_greaterThanThreshold_expectedFormat() {
|
||||||
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
final PowerGaugePreference pref = new PowerGaugePreference(mContext);
|
||||||
final BatteryDiffEntry batteryDiffEntry = createBatteryDiffEntry(
|
final BatteryDiffEntry batteryDiffEntry =
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ true,
|
/* isSystem= */ true,
|
||||||
/* screenOnTimeInMs= */ 0,
|
/* screenOnTimeInMs= */ 0,
|
||||||
/* foregroundUsageTimeInMs= */ 0,
|
/* foregroundUsageTimeInMs= */ 0,
|
||||||
@@ -299,7 +309,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
pref.setSummary(PREF_SUMMARY);
|
pref.setSummary(PREF_SUMMARY);
|
||||||
|
|
||||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||||
pref, createBatteryDiffEntry(
|
pref,
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ true,
|
/* isSystem= */ true,
|
||||||
/* screenOnTimeInMs= */ 0,
|
/* screenOnTimeInMs= */ 0,
|
||||||
/* foregroundUsageTimeInMs= */ 0,
|
/* foregroundUsageTimeInMs= */ 0,
|
||||||
@@ -313,7 +324,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
pref.setSummary(PREF_SUMMARY);
|
pref.setSummary(PREF_SUMMARY);
|
||||||
|
|
||||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||||
pref, createBatteryDiffEntry(
|
pref,
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ true,
|
/* isSystem= */ true,
|
||||||
/* screenOnTimeInMs= */ 0,
|
/* screenOnTimeInMs= */ 0,
|
||||||
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
||||||
@@ -327,7 +339,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
pref.setSummary(PREF_SUMMARY);
|
pref.setSummary(PREF_SUMMARY);
|
||||||
|
|
||||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||||
pref, createBatteryDiffEntry(
|
pref,
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ true,
|
/* isSystem= */ true,
|
||||||
/* screenOnTimeInMs= */ 0,
|
/* screenOnTimeInMs= */ 0,
|
||||||
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS * 2,
|
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS * 2,
|
||||||
@@ -341,7 +354,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
pref.setSummary(PREF_SUMMARY);
|
pref.setSummary(PREF_SUMMARY);
|
||||||
|
|
||||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||||
pref, createBatteryDiffEntry(
|
pref,
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ false,
|
/* isSystem= */ false,
|
||||||
/* screenOnTimeInMs= */ 0,
|
/* screenOnTimeInMs= */ 0,
|
||||||
/* foregroundUsageTimeInMs= */ 0,
|
/* foregroundUsageTimeInMs= */ 0,
|
||||||
@@ -355,7 +369,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
pref.setSummary(PREF_SUMMARY);
|
pref.setSummary(PREF_SUMMARY);
|
||||||
|
|
||||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||||
pref, createBatteryDiffEntry(
|
pref,
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ false,
|
/* isSystem= */ false,
|
||||||
/* screenOnTimeInMs= */ 0,
|
/* screenOnTimeInMs= */ 0,
|
||||||
/* foregroundUsageTimeInMs= */ 0,
|
/* foregroundUsageTimeInMs= */ 0,
|
||||||
@@ -369,7 +384,8 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
pref.setSummary(PREF_SUMMARY);
|
pref.setSummary(PREF_SUMMARY);
|
||||||
|
|
||||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||||
pref, createBatteryDiffEntry(
|
pref,
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ false,
|
/* isSystem= */ false,
|
||||||
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS,
|
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS,
|
||||||
/* foregroundUsageTimeInMs= */ 0,
|
/* foregroundUsageTimeInMs= */ 0,
|
||||||
@@ -383,20 +399,27 @@ public final class BatteryUsageBreakdownControllerTest {
|
|||||||
pref.setSummary(PREF_SUMMARY);
|
pref.setSummary(PREF_SUMMARY);
|
||||||
|
|
||||||
mBatteryUsageBreakdownController.setPreferenceSummary(
|
mBatteryUsageBreakdownController.setPreferenceSummary(
|
||||||
pref, createBatteryDiffEntry(
|
pref,
|
||||||
|
createBatteryDiffEntry(
|
||||||
/* isSystem= */ false,
|
/* isSystem= */ false,
|
||||||
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
/* screenOnTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
||||||
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
/* foregroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1,
|
||||||
/* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1));
|
/* backgroundUsageTimeInMs= */ DateUtils.MINUTE_IN_MILLIS - 1));
|
||||||
assertThat(pref.getSummary().toString()).isEqualTo(
|
assertThat(pref.getSummary().toString())
|
||||||
"Screen time: less than a min\nBackground: less than a min");
|
.isEqualTo("Screen time: less than a min\nBackground: less than a min");
|
||||||
}
|
}
|
||||||
|
|
||||||
private BatteryDiffEntry createBatteryDiffEntry(boolean isSystem, long screenOnTimeInMs,
|
private BatteryDiffEntry createBatteryDiffEntry(
|
||||||
long foregroundUsageTimeInMs, long backgroundUsageTimeInMs) {
|
boolean isSystem,
|
||||||
|
long screenOnTimeInMs,
|
||||||
|
long foregroundUsageTimeInMs,
|
||||||
|
long backgroundUsageTimeInMs) {
|
||||||
final ContentValues contentValues = new ContentValues();
|
final ContentValues contentValues = new ContentValues();
|
||||||
contentValues.put(BatteryHistEntry.KEY_CONSUMER_TYPE, Integer.valueOf(
|
contentValues.put(
|
||||||
isSystem ? ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY
|
BatteryHistEntry.KEY_CONSUMER_TYPE,
|
||||||
|
Integer.valueOf(
|
||||||
|
isSystem
|
||||||
|
? ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY
|
||||||
: ConvertUtils.CONSUMER_TYPE_UID_BATTERY));
|
: ConvertUtils.CONSUMER_TYPE_UID_BATTERY));
|
||||||
contentValues.put(BatteryHistEntry.KEY_USER_ID, Integer.valueOf(1001));
|
contentValues.put(BatteryHistEntry.KEY_USER_ID, Integer.valueOf(1001));
|
||||||
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(contentValues);
|
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(contentValues);
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
private BatteryUsageBroadcastReceiver mBatteryUsageBroadcastReceiver;
|
private BatteryUsageBroadcastReceiver mBatteryUsageBroadcastReceiver;
|
||||||
private FakeFeatureFactory mFakeFeatureFactory;
|
private FakeFeatureFactory mFakeFeatureFactory;
|
||||||
|
|
||||||
@Mock
|
@Mock private PackageManager mPackageManager;
|
||||||
private PackageManager mPackageManager;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -72,8 +71,8 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
public void onReceive_workProfile_doNothing() {
|
public void onReceive_workProfile_doNothing() {
|
||||||
BatteryTestUtils.setWorkProfile(mContext);
|
BatteryTestUtils.setWorkProfile(mContext);
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||||
}
|
}
|
||||||
@@ -85,10 +84,11 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting())
|
when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting())
|
||||||
.thenReturn(true);
|
.thenReturn(true);
|
||||||
doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||||
.when(mContext).registerReceiver(any(), any());
|
.when(mContext)
|
||||||
|
.registerReceiver(any(), any());
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||||
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||||
@@ -102,13 +102,14 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
.thenReturn(true);
|
.thenReturn(true);
|
||||||
// Make sure isCharged returns true.
|
// Make sure isCharged returns true.
|
||||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_FULL))
|
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_FULL))
|
||||||
.when(mContext).registerReceiver(any(), any());
|
.when(mContext)
|
||||||
|
.registerReceiver(any(), any());
|
||||||
// Make sure broadcast will be sent with delay.
|
// Make sure broadcast will be sent with delay.
|
||||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||||
SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS;
|
SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||||
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||||
@@ -122,12 +123,13 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
.thenReturn(true);
|
.thenReturn(true);
|
||||||
// Make sure isCharged returns true.
|
// Make sure isCharged returns true.
|
||||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||||
.when(mContext).registerReceiver(any(), any());
|
.when(mContext)
|
||||||
|
.registerReceiver(any(), any());
|
||||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||||
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||||
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||||
@@ -141,12 +143,13 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
.thenReturn(true);
|
.thenReturn(true);
|
||||||
// Make sure isCharged returns true.
|
// Make sure isCharged returns true.
|
||||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||||
.when(mContext).registerReceiver(any(), any());
|
.when(mContext)
|
||||||
|
.registerReceiver(any(), any());
|
||||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||||
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
mContext, new Intent(Intent.ACTION_BATTERY_LEVEL_CHANGED));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
||||||
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
assertSharedPreferences(Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||||
@@ -159,10 +162,11 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting())
|
when(mFakeFeatureFactory.powerUsageFeatureProvider.delayHourlyJobWhenBooting())
|
||||||
.thenReturn(false);
|
.thenReturn(false);
|
||||||
doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
doReturn(getBatteryIntent(/* level= */ 20, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||||
.when(mContext).registerReceiver(any(), any());
|
.when(mContext)
|
||||||
|
.registerReceiver(any(), any());
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||||
@@ -176,13 +180,14 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
.thenReturn(false);
|
.thenReturn(false);
|
||||||
// Make sure isCharged returns true.
|
// Make sure isCharged returns true.
|
||||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_FULL))
|
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_FULL))
|
||||||
.when(mContext).registerReceiver(any(), any());
|
.when(mContext)
|
||||||
|
.registerReceiver(any(), any());
|
||||||
// Make sure broadcast will be sent with delay.
|
// Make sure broadcast will be sent with delay.
|
||||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||||
SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS;
|
SystemClock.elapsedRealtime() + 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
||||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||||
@@ -196,12 +201,13 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
.thenReturn(false);
|
.thenReturn(false);
|
||||||
// Make sure isCharged returns true.
|
// Make sure isCharged returns true.
|
||||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||||
.when(mContext).registerReceiver(any(), any());
|
.when(mContext)
|
||||||
|
.registerReceiver(any(), any());
|
||||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||||
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse();
|
||||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||||
@@ -215,12 +221,13 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
.thenReturn(false);
|
.thenReturn(false);
|
||||||
// Make sure isCharged returns true.
|
// Make sure isCharged returns true.
|
||||||
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
doReturn(getBatteryIntent(/* level= */ 100, BatteryManager.BATTERY_STATUS_UNKNOWN))
|
||||||
.when(mContext).registerReceiver(any(), any());
|
.when(mContext)
|
||||||
|
.registerReceiver(any(), any());
|
||||||
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
BatteryUsageBroadcastReceiver.sBroadcastDelayFromBoot =
|
||||||
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
SystemClock.elapsedRealtime() - 5 * DateUtils.MINUTE_IN_MILLIS;
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING));
|
||||||
|
|
||||||
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isTrue();
|
||||||
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||||
@@ -234,12 +241,12 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
/*packageName*/ "com.android.testing_package", Boolean.valueOf(true));
|
/*packageName*/ "com.android.testing_package", Boolean.valueOf(true));
|
||||||
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
|
mContext,
|
||||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA));
|
new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA));
|
||||||
|
|
||||||
assertThat(BatteryDiffEntry.sValidForRestriction).isEmpty();
|
assertThat(BatteryDiffEntry.sValidForRestriction).isEmpty();
|
||||||
assertSharedPreferences(
|
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
|
||||||
BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -250,12 +257,12 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
/*packageName*/ "com.android.testing_package", Boolean.valueOf(true));
|
/*packageName*/ "com.android.testing_package", Boolean.valueOf(true));
|
||||||
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
||||||
|
|
||||||
mBatteryUsageBroadcastReceiver.onReceive(mContext,
|
mBatteryUsageBroadcastReceiver.onReceive(
|
||||||
|
mContext,
|
||||||
new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA));
|
new Intent(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA));
|
||||||
|
|
||||||
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty();
|
||||||
assertSharedPreferences(
|
assertSharedPreferences(BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
|
||||||
BatteryUsageBroadcastReceiver.ACTION_CLEAR_BATTERY_CACHE_DATA);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Intent getBatteryIntent(int level, int status) {
|
private static Intent getBatteryIntent(int level, int status) {
|
||||||
@@ -267,7 +274,6 @@ public final class BatteryUsageBroadcastReceiverTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void assertSharedPreferences(String preferenceKey) {
|
private void assertSharedPreferences(String preferenceKey) {
|
||||||
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey))
|
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey)).isTrue();
|
||||||
.isTrue();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -95,7 +95,10 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
mProvider.query(
|
mProvider.query(
|
||||||
uri, /*strings=*/ null, /*s=*/ null, /*strings1=*/ null,
|
uri,
|
||||||
|
/* strings= */ null,
|
||||||
|
/* s= */ null,
|
||||||
|
/* strings1= */ null,
|
||||||
/* s1= */ null));
|
/* s1= */ null));
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
@@ -116,7 +119,10 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
() ->
|
() ->
|
||||||
mProvider.query(
|
mProvider.query(
|
||||||
uri, /*strings=*/ null, /*s=*/ null, /*strings1=*/ null,
|
uri,
|
||||||
|
/* strings= */ null,
|
||||||
|
/* s= */ null,
|
||||||
|
/* strings1= */ null,
|
||||||
/* s1= */ null));
|
/* s1= */ null));
|
||||||
assertThrows(
|
assertThrows(
|
||||||
IllegalArgumentException.class,
|
IllegalArgumentException.class,
|
||||||
@@ -128,7 +134,8 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
mProvider.onCreate();
|
mProvider.onCreate();
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
|
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
|
||||||
values.put(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
values.put(
|
||||||
|
BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
||||||
BatteryEventType.FULL_CHARGED.getNumber());
|
BatteryEventType.FULL_CHARGED.getNumber());
|
||||||
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 100);
|
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 100);
|
||||||
mProvider.insert(DatabaseUtils.BATTERY_EVENT_URI, values);
|
mProvider.insert(DatabaseUtils.BATTERY_EVENT_URI, values);
|
||||||
@@ -263,15 +270,13 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
public void insert_batteryState_returnsExpectedResult() {
|
public void insert_batteryState_returnsExpectedResult() {
|
||||||
mProvider.onCreate();
|
mProvider.onCreate();
|
||||||
final DeviceBatteryState deviceBatteryState =
|
final DeviceBatteryState deviceBatteryState =
|
||||||
DeviceBatteryState
|
DeviceBatteryState.newBuilder()
|
||||||
.newBuilder()
|
|
||||||
.setBatteryLevel(51)
|
.setBatteryLevel(51)
|
||||||
.setBatteryStatus(2)
|
.setBatteryStatus(2)
|
||||||
.setBatteryHealth(3)
|
.setBatteryHealth(3)
|
||||||
.build();
|
.build();
|
||||||
final BatteryInformation batteryInformation =
|
final BatteryInformation batteryInformation =
|
||||||
BatteryInformation
|
BatteryInformation.newBuilder()
|
||||||
.newBuilder()
|
|
||||||
.setDeviceBatteryState(deviceBatteryState)
|
.setDeviceBatteryState(deviceBatteryState)
|
||||||
.setAppLabel("Settings")
|
.setAppLabel("Settings")
|
||||||
.setIsHidden(true)
|
.setIsHidden(true)
|
||||||
@@ -318,17 +323,13 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
public void insert_partialFieldsContentValues_returnsExpectedResult() {
|
public void insert_partialFieldsContentValues_returnsExpectedResult() {
|
||||||
mProvider.onCreate();
|
mProvider.onCreate();
|
||||||
final DeviceBatteryState deviceBatteryState =
|
final DeviceBatteryState deviceBatteryState =
|
||||||
DeviceBatteryState
|
DeviceBatteryState.newBuilder()
|
||||||
.newBuilder()
|
|
||||||
.setBatteryLevel(52)
|
.setBatteryLevel(52)
|
||||||
.setBatteryStatus(3)
|
.setBatteryStatus(3)
|
||||||
.setBatteryHealth(2)
|
.setBatteryHealth(2)
|
||||||
.build();
|
.build();
|
||||||
final BatteryInformation batteryInformation =
|
final BatteryInformation batteryInformation =
|
||||||
BatteryInformation
|
BatteryInformation.newBuilder().setDeviceBatteryState(deviceBatteryState).build();
|
||||||
.newBuilder()
|
|
||||||
.setDeviceBatteryState(deviceBatteryState)
|
|
||||||
.build();
|
|
||||||
final String expectedBatteryInformationString =
|
final String expectedBatteryInformationString =
|
||||||
ConvertUtils.convertBatteryInformationToString(batteryInformation);
|
ConvertUtils.convertBatteryInformationToString(batteryInformation);
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
@@ -381,7 +382,8 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
mProvider.onCreate();
|
mProvider.onCreate();
|
||||||
ContentValues values = new ContentValues();
|
ContentValues values = new ContentValues();
|
||||||
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
|
values.put(BatteryEventEntity.KEY_TIMESTAMP, 10001L);
|
||||||
values.put(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
values.put(
|
||||||
|
BatteryEventEntity.KEY_BATTERY_EVENT_TYPE,
|
||||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
BatteryEventType.POWER_CONNECTED.getNumber());
|
||||||
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 66);
|
values.put(BatteryEventEntity.KEY_BATTERY_LEVEL, 66);
|
||||||
|
|
||||||
@@ -393,23 +395,25 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
BatteryStateDatabase.getInstance(mContext).batteryEventDao().getAll();
|
BatteryStateDatabase.getInstance(mContext).batteryEventDao().getAll();
|
||||||
assertThat(entities).hasSize(1);
|
assertThat(entities).hasSize(1);
|
||||||
assertThat(entities.get(0).timestamp).isEqualTo(10001L);
|
assertThat(entities.get(0).timestamp).isEqualTo(10001L);
|
||||||
assertThat(entities.get(0).batteryEventType).isEqualTo(
|
assertThat(entities.get(0).batteryEventType)
|
||||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||||
assertThat(entities.get(0).batteryLevel).isEqualTo(66);
|
assertThat(entities.get(0).batteryLevel).isEqualTo(66);
|
||||||
|
|
||||||
final Cursor cursor1 = getCursorOfBatteryEvents(
|
final Cursor cursor1 =
|
||||||
0L, List.of(BatteryEventType.POWER_CONNECTED.getNumber()));
|
getCursorOfBatteryEvents(0L, List.of(BatteryEventType.POWER_CONNECTED.getNumber()));
|
||||||
assertThat(cursor1.getCount()).isEqualTo(1);
|
assertThat(cursor1.getCount()).isEqualTo(1);
|
||||||
cursor1.moveToFirst();
|
cursor1.moveToFirst();
|
||||||
assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryEventEntity.KEY_TIMESTAMP)))
|
assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryEventEntity.KEY_TIMESTAMP)))
|
||||||
.isEqualTo(10001L);
|
.isEqualTo(10001L);
|
||||||
assertThat(
|
assertThat(
|
||||||
cursor1.getInt(cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)))
|
cursor1.getInt(
|
||||||
|
cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)))
|
||||||
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||||
assertThat(cursor1.getInt(cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_LEVEL)))
|
assertThat(cursor1.getInt(cursor1.getColumnIndex(BatteryEventEntity.KEY_BATTERY_LEVEL)))
|
||||||
.isEqualTo(66);
|
.isEqualTo(66);
|
||||||
|
|
||||||
final Cursor cursor2 = getCursorOfBatteryEvents(
|
final Cursor cursor2 =
|
||||||
|
getCursorOfBatteryEvents(
|
||||||
0L, List.of(BatteryEventType.POWER_DISCONNECTED.getNumber()));
|
0L, List.of(BatteryEventType.POWER_DISCONNECTED.getNumber()));
|
||||||
assertThat(cursor2.getCount()).isEqualTo(0);
|
assertThat(cursor2.getCount()).isEqualTo(0);
|
||||||
}
|
}
|
||||||
@@ -435,8 +439,11 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
cursor1.moveToFirst();
|
cursor1.moveToFirst();
|
||||||
assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryUsageSlotEntity.KEY_TIMESTAMP)))
|
assertThat(cursor1.getLong(cursor1.getColumnIndex(BatteryUsageSlotEntity.KEY_TIMESTAMP)))
|
||||||
.isEqualTo(10001L);
|
.isEqualTo(10001L);
|
||||||
assertThat(cursor1.getString(cursor1.getColumnIndex(
|
assertThat(
|
||||||
BatteryUsageSlotEntity.KEY_BATTERY_USAGE_SLOT))).isEqualTo("TEST_STRING");
|
cursor1.getString(
|
||||||
|
cursor1.getColumnIndex(
|
||||||
|
BatteryUsageSlotEntity.KEY_BATTERY_USAGE_SLOT)))
|
||||||
|
.isEqualTo("TEST_STRING");
|
||||||
|
|
||||||
final Cursor cursor2 = getCursorOfBatteryUsageSlots(10002L);
|
final Cursor cursor2 = getCursorOfBatteryUsageSlots(10002L);
|
||||||
assertThat(cursor2.getCount()).isEqualTo(0);
|
assertThat(cursor2.getCount()).isEqualTo(0);
|
||||||
@@ -455,13 +462,13 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
UnsupportedOperationException.class,
|
UnsupportedOperationException.class,
|
||||||
() ->
|
() ->
|
||||||
mProvider.update(
|
mProvider.update(
|
||||||
/*uri=*/ null, /*contentValues=*/ null, /*s=*/ null,
|
/* uri= */ null,
|
||||||
|
/* contentValues= */ null,
|
||||||
|
/* s= */ null,
|
||||||
/* strings= */ null));
|
/* strings= */ null));
|
||||||
}
|
}
|
||||||
|
|
||||||
private Cursor insertBatteryState(
|
private Cursor insertBatteryState(Duration currentTime, String queryTimestamp)
|
||||||
Duration currentTime,
|
|
||||||
String queryTimestamp)
|
|
||||||
throws Exception {
|
throws Exception {
|
||||||
mProvider.onCreate();
|
mProvider.onCreate();
|
||||||
final FakeClock fakeClock = new FakeClock();
|
final FakeClock fakeClock = new FakeClock();
|
||||||
@@ -470,20 +477,17 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
final long currentTimestamp = currentTime.toMillis();
|
final long currentTimestamp = currentTime.toMillis();
|
||||||
// Inserts some valid testing data.
|
// Inserts some valid testing data.
|
||||||
BatteryTestUtils.insertDataToBatteryStateTable(
|
BatteryTestUtils.insertDataToBatteryStateTable(
|
||||||
mContext, currentTimestamp - 6, PACKAGE_NAME1,
|
mContext, currentTimestamp - 6, PACKAGE_NAME1, /* isFullChargeStart= */ true);
|
||||||
/*isFullChargeStart=*/ true);
|
|
||||||
BatteryTestUtils.insertDataToBatteryStateTable(
|
BatteryTestUtils.insertDataToBatteryStateTable(
|
||||||
mContext, currentTimestamp - 2, PACKAGE_NAME2);
|
mContext, currentTimestamp - 2, PACKAGE_NAME2);
|
||||||
BatteryTestUtils.insertDataToBatteryStateTable(
|
BatteryTestUtils.insertDataToBatteryStateTable(mContext, currentTimestamp, PACKAGE_NAME3);
|
||||||
mContext, currentTimestamp, PACKAGE_NAME3);
|
|
||||||
|
|
||||||
final Uri batteryStateQueryContentUri =
|
final Uri batteryStateQueryContentUri =
|
||||||
new Uri.Builder()
|
new Uri.Builder()
|
||||||
.scheme(ContentResolver.SCHEME_CONTENT)
|
.scheme(ContentResolver.SCHEME_CONTENT)
|
||||||
.authority(DatabaseUtils.AUTHORITY)
|
.authority(DatabaseUtils.AUTHORITY)
|
||||||
.appendPath(DatabaseUtils.BATTERY_STATE_TABLE)
|
.appendPath(DatabaseUtils.BATTERY_STATE_TABLE)
|
||||||
.appendQueryParameter(
|
.appendQueryParameter(DatabaseUtils.QUERY_KEY_TIMESTAMP, queryTimestamp)
|
||||||
DatabaseUtils.QUERY_KEY_TIMESTAMP, queryTimestamp)
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
final Cursor cursor = query(batteryStateQueryContentUri);
|
final Cursor cursor = query(batteryStateQueryContentUri);
|
||||||
@@ -532,15 +536,15 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
.scheme(ContentResolver.SCHEME_CONTENT)
|
.scheme(ContentResolver.SCHEME_CONTENT)
|
||||||
.authority(DatabaseUtils.AUTHORITY)
|
.authority(DatabaseUtils.AUTHORITY)
|
||||||
.appendPath(DatabaseUtils.APP_USAGE_LATEST_TIMESTAMP_PATH)
|
.appendPath(DatabaseUtils.APP_USAGE_LATEST_TIMESTAMP_PATH)
|
||||||
.appendQueryParameter(
|
.appendQueryParameter(DatabaseUtils.QUERY_KEY_USERID, Long.toString(userId))
|
||||||
DatabaseUtils.QUERY_KEY_USERID, Long.toString(userId))
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
return query(appUsageLatestTimestampQueryContentUri);
|
return query(appUsageLatestTimestampQueryContentUri);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Cursor getCursorOfAppUsage(final List<Long> userIds, final long queryTimestamp) {
|
private Cursor getCursorOfAppUsage(final List<Long> userIds, final long queryTimestamp) {
|
||||||
final String queryUserIdString = userIds.stream()
|
final String queryUserIdString =
|
||||||
|
userIds.stream()
|
||||||
.map(userId -> String.valueOf(userId))
|
.map(userId -> String.valueOf(userId))
|
||||||
.collect(Collectors.joining(","));
|
.collect(Collectors.joining(","));
|
||||||
final Uri appUsageEventUri =
|
final Uri appUsageEventUri =
|
||||||
@@ -558,7 +562,8 @@ public final class BatteryUsageContentProviderTest {
|
|||||||
|
|
||||||
private Cursor getCursorOfBatteryEvents(
|
private Cursor getCursorOfBatteryEvents(
|
||||||
final long queryTimestamp, final List<Integer> batteryEventTypes) {
|
final long queryTimestamp, final List<Integer> batteryEventTypes) {
|
||||||
final String batteryEventTypesString = batteryEventTypes.stream()
|
final String batteryEventTypesString =
|
||||||
|
batteryEventTypes.stream()
|
||||||
.map(type -> String.valueOf(type))
|
.map(type -> String.valueOf(type))
|
||||||
.collect(Collectors.joining(","));
|
.collect(Collectors.joining(","));
|
||||||
final Uri batteryEventUri =
|
final Uri batteryEventUri =
|
||||||
|
|||||||
@@ -52,28 +52,22 @@ import java.util.List;
|
|||||||
public final class BatteryUsageDataLoaderTest {
|
public final class BatteryUsageDataLoaderTest {
|
||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
@Mock private ContentResolver mMockContentResolver;
|
||||||
private ContentResolver mMockContentResolver;
|
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||||
@Mock
|
@Mock private PackageManager mPackageManager;
|
||||||
private BatteryStatsManager mBatteryStatsManager;
|
@Mock private UserManager mUserManager;
|
||||||
@Mock
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
private PackageManager mPackageManager;
|
@Mock private BatteryEntry mMockBatteryEntry;
|
||||||
@Mock
|
@Captor private ArgumentCaptor<BatteryUsageStatsQuery> mStatsQueryCaptor;
|
||||||
private UserManager mUserManager;
|
|
||||||
@Mock
|
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
|
||||||
@Mock
|
|
||||||
private BatteryEntry mMockBatteryEntry;
|
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<BatteryUsageStatsQuery> mStatsQueryCaptor;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mContext).when(mContext).getApplicationContext();
|
doReturn(mContext).when(mContext).getApplicationContext();
|
||||||
doReturn(mBatteryStatsManager).when(mContext).getSystemService(
|
doReturn(mBatteryStatsManager)
|
||||||
Context.BATTERY_STATS_SERVICE);
|
.when(mContext)
|
||||||
|
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
||||||
doReturn(mPackageManager).when(mContext).getPackageManager();
|
doReturn(mPackageManager).when(mContext).getPackageManager();
|
||||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||||
doReturn(mMockContentResolver).when(mContext).getContentResolver();
|
doReturn(mMockContentResolver).when(mContext).getContentResolver();
|
||||||
@@ -91,8 +85,7 @@ public final class BatteryUsageDataLoaderTest {
|
|||||||
BatteryUsageDataLoader.loadBatteryStatsData(mContext, /* isFullChargeStart= */ false);
|
BatteryUsageDataLoader.loadBatteryStatsData(mContext, /* isFullChargeStart= */ false);
|
||||||
|
|
||||||
final int queryFlags = mStatsQueryCaptor.getValue().getFlags();
|
final int queryFlags = mStatsQueryCaptor.getValue().getFlags();
|
||||||
assertThat(queryFlags
|
assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
|
||||||
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
|
|
||||||
.isNotEqualTo(0);
|
.isNotEqualTo(0);
|
||||||
verify(mMockContentResolver).insert(any(), any());
|
verify(mMockContentResolver).insert(any(), any());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,25 +39,23 @@ import org.robolectric.RuntimeEnvironment;
|
|||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
public class BatteryUsageStatsLoaderTest {
|
public class BatteryUsageStatsLoaderTest {
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
@Mock
|
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||||
private BatteryStatsManager mBatteryStatsManager;
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
@Mock
|
@Captor private ArgumentCaptor<BatteryUsageStatsQuery> mUsageStatsQueryCaptor;
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<BatteryUsageStatsQuery> mUsageStatsQueryCaptor;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mBatteryStatsManager).when(mContext).getSystemService(
|
doReturn(mBatteryStatsManager)
|
||||||
Context.BATTERY_STATS_SERVICE);
|
.when(mContext)
|
||||||
|
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLoadInBackground_loadWithoutHistory() {
|
public void testLoadInBackground_loadWithoutHistory() {
|
||||||
BatteryUsageStatsLoader loader = new BatteryUsageStatsLoader(
|
BatteryUsageStatsLoader loader =
|
||||||
mContext, /* includeBatteryHistory */ false);
|
new BatteryUsageStatsLoader(mContext, /* includeBatteryHistory */ false);
|
||||||
|
|
||||||
when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture()))
|
when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture()))
|
||||||
.thenReturn(mBatteryUsageStats);
|
.thenReturn(mBatteryUsageStats);
|
||||||
@@ -65,14 +63,14 @@ public class BatteryUsageStatsLoaderTest {
|
|||||||
loader.loadInBackground();
|
loader.loadInBackground();
|
||||||
|
|
||||||
final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags();
|
final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags();
|
||||||
assertThat(queryFlags
|
assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
|
||||||
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY).isEqualTo(0);
|
.isEqualTo(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testLoadInBackground_loadWithHistory() {
|
public void testLoadInBackground_loadWithHistory() {
|
||||||
BatteryUsageStatsLoader loader = new BatteryUsageStatsLoader(
|
BatteryUsageStatsLoader loader =
|
||||||
mContext, /* includeBatteryHistory */ true);
|
new BatteryUsageStatsLoader(mContext, /* includeBatteryHistory */ true);
|
||||||
|
|
||||||
when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture()))
|
when(mBatteryStatsManager.getBatteryUsageStats(mUsageStatsQueryCaptor.capture()))
|
||||||
.thenReturn(mBatteryUsageStats);
|
.thenReturn(mBatteryUsageStats);
|
||||||
@@ -80,7 +78,7 @@ public class BatteryUsageStatsLoaderTest {
|
|||||||
loader.loadInBackground();
|
loader.loadInBackground();
|
||||||
|
|
||||||
final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags();
|
final int queryFlags = mUsageStatsQueryCaptor.getValue().getFlags();
|
||||||
assertThat(queryFlags
|
assertThat(queryFlags & BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY)
|
||||||
& BatteryUsageStatsQuery.FLAG_BATTERY_USAGE_STATS_INCLUDE_HISTORY).isNotEqualTo(0);
|
.isNotEqualTo(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,7 +88,8 @@ public final class BootBroadcastReceiverTest {
|
|||||||
final SharedPreferences sharedPreferences = DatabaseUtils.getSharedPreferences(mContext);
|
final SharedPreferences sharedPreferences = DatabaseUtils.getSharedPreferences(mContext);
|
||||||
sharedPreferences
|
sharedPreferences
|
||||||
.edit()
|
.edit()
|
||||||
.putInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE,
|
.putInt(
|
||||||
|
DatabaseUtils.KEY_LAST_USAGE_SOURCE,
|
||||||
UsageStatsManager.USAGE_SOURCE_CURRENT_ACTIVITY)
|
UsageStatsManager.USAGE_SOURCE_CURRENT_ACTIVITY)
|
||||||
.apply();
|
.apply();
|
||||||
|
|
||||||
@@ -96,8 +97,7 @@ public final class BootBroadcastReceiverTest {
|
|||||||
|
|
||||||
assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNotNull();
|
assertThat(mShadowAlarmManager.peekNextScheduledAlarm()).isNotNull();
|
||||||
assertThat(
|
assertThat(
|
||||||
DatabaseUtils
|
DatabaseUtils.getSharedPreferences(mContext)
|
||||||
.getSharedPreferences(mContext)
|
|
||||||
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
||||||
.isFalse();
|
.isFalse();
|
||||||
}
|
}
|
||||||
@@ -142,11 +142,10 @@ public final class BootBroadcastReceiverTest {
|
|||||||
public void invokeJobRecheck_broadcastsIntent() {
|
public void invokeJobRecheck_broadcastsIntent() {
|
||||||
BootBroadcastReceiver.invokeJobRecheck(mContext);
|
BootBroadcastReceiver.invokeJobRecheck(mContext);
|
||||||
|
|
||||||
final List<Intent> intents =
|
final List<Intent> intents = Shadows.shadowOf((Application) mContext).getBroadcastIntents();
|
||||||
Shadows.shadowOf((Application) mContext).getBroadcastIntents();
|
|
||||||
assertThat(intents).hasSize(1);
|
assertThat(intents).hasSize(1);
|
||||||
assertThat(intents.get(0).getAction()).isEqualTo(
|
assertThat(intents.get(0).getAction())
|
||||||
BootBroadcastReceiver.ACTION_PERIODIC_JOB_RECHECK);
|
.isEqualTo(BootBroadcastReceiver.ACTION_PERIODIC_JOB_RECHECK);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearSharedPreferences() {
|
private void clearSharedPreferences() {
|
||||||
|
|||||||
@@ -61,14 +61,10 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
|
||||||
@Mock
|
@Mock private PackageManager mMockPackageManager;
|
||||||
private PackageManager mMockPackageManager;
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
@Mock
|
@Mock private BatteryEntry mMockBatteryEntry;
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
@Mock private IUsageStatsManager mUsageStatsManager;
|
||||||
@Mock
|
|
||||||
private BatteryEntry mMockBatteryEntry;
|
|
||||||
@Mock
|
|
||||||
private IUsageStatsManager mUsageStatsManager;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -150,8 +146,8 @@ public final class ConvertUtilsTest {
|
|||||||
when(mMockBatteryEntry.getUid()).thenReturn(-1);
|
when(mMockBatteryEntry.getUid()).thenReturn(-1);
|
||||||
when(mMockBatteryEntry.getLabel()).thenReturn("CPU");
|
when(mMockBatteryEntry.getLabel()).thenReturn("CPU");
|
||||||
when(mMockBatteryEntry.getDefaultPackageName()).thenReturn(null);
|
when(mMockBatteryEntry.getDefaultPackageName()).thenReturn(null);
|
||||||
when(mMockBatteryEntry.getPowerComponentId()).thenReturn(
|
when(mMockBatteryEntry.getPowerComponentId())
|
||||||
BatteryConsumer.POWER_COMPONENT_CPU);
|
.thenReturn(BatteryConsumer.POWER_COMPONENT_CPU);
|
||||||
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
|
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
|
||||||
when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
|
when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
|
||||||
when(mMockBatteryEntry.getConsumedPowerInForeground()).thenReturn(1.2);
|
when(mMockBatteryEntry.getConsumedPowerInForeground()).thenReturn(1.2);
|
||||||
@@ -200,8 +196,8 @@ public final class ConvertUtilsTest {
|
|||||||
assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3);
|
assertThat(batteryInformation.getPercentOfTotal()).isEqualTo(0.3);
|
||||||
assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L);
|
assertThat(batteryInformation.getForegroundUsageTimeInMs()).isEqualTo(1234L);
|
||||||
assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L);
|
assertThat(batteryInformation.getBackgroundUsageTimeInMs()).isEqualTo(5689L);
|
||||||
assertThat(batteryInformation.getDrainType()).isEqualTo(
|
assertThat(batteryInformation.getDrainType())
|
||||||
BatteryConsumer.POWER_COMPONENT_CPU);
|
.isEqualTo(BatteryConsumer.POWER_COMPONENT_CPU);
|
||||||
assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12);
|
assertThat(deviceBatteryState.getBatteryLevel()).isEqualTo(12);
|
||||||
assertThat(deviceBatteryState.getBatteryStatus())
|
assertThat(deviceBatteryState.getBatteryStatus())
|
||||||
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||||
@@ -234,8 +230,7 @@ public final class ConvertUtilsTest {
|
|||||||
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||||
assertThat(deviceBatteryState.getBatteryHealth())
|
assertThat(deviceBatteryState.getBatteryHealth())
|
||||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
||||||
assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP))
|
assertThat(values.getAsLong(BatteryHistEntry.KEY_TIMESTAMP)).isEqualTo(10001L);
|
||||||
.isEqualTo(10001L);
|
|
||||||
assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME))
|
assertThat(values.getAsString(BatteryHistEntry.KEY_PACKAGE_NAME))
|
||||||
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
||||||
}
|
}
|
||||||
@@ -273,11 +268,10 @@ public final class ConvertUtilsTest {
|
|||||||
.setType(BatteryEventType.POWER_CONNECTED)
|
.setType(BatteryEventType.POWER_CONNECTED)
|
||||||
.setBatteryLevel(66)
|
.setBatteryLevel(66)
|
||||||
.build();
|
.build();
|
||||||
final ContentValues values =
|
final ContentValues values = ConvertUtils.convertBatteryEventToContentValues(batteryEvent);
|
||||||
ConvertUtils.convertBatteryEventToContentValues(batteryEvent);
|
|
||||||
assertThat(values.getAsLong(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L);
|
assertThat(values.getAsLong(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L);
|
||||||
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE)).isEqualTo(
|
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))
|
||||||
BatteryEventType.POWER_CONNECTED.getNumber());
|
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||||
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66);
|
assertThat(values.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,8 +296,7 @@ public final class ConvertUtilsTest {
|
|||||||
final int expectedType = 3;
|
final int expectedType = 3;
|
||||||
when(mMockBatteryEntry.getUid()).thenReturn(1001);
|
when(mMockBatteryEntry.getUid()).thenReturn(1001);
|
||||||
when(mMockBatteryEntry.getLabel()).thenReturn("Settings");
|
when(mMockBatteryEntry.getLabel()).thenReturn("Settings");
|
||||||
when(mMockBatteryEntry.getDefaultPackageName())
|
when(mMockBatteryEntry.getDefaultPackageName()).thenReturn("com.android.settings.battery");
|
||||||
.thenReturn("com.android.settings.battery");
|
|
||||||
when(mMockBatteryEntry.isHidden()).thenReturn(true);
|
when(mMockBatteryEntry.isHidden()).thenReturn(true);
|
||||||
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
|
when(mBatteryUsageStats.getConsumedPower()).thenReturn(5.1);
|
||||||
when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
|
when(mMockBatteryEntry.getConsumedPower()).thenReturn(1.1);
|
||||||
@@ -319,23 +312,16 @@ public final class ConvertUtilsTest {
|
|||||||
.thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
.thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||||
|
|
||||||
final BatteryHistEntry batteryHistEntry =
|
final BatteryHistEntry batteryHistEntry =
|
||||||
ConvertUtils.convertToBatteryHistEntry(
|
ConvertUtils.convertToBatteryHistEntry(mMockBatteryEntry, mBatteryUsageStats);
|
||||||
mMockBatteryEntry,
|
|
||||||
mBatteryUsageStats);
|
|
||||||
|
|
||||||
assertThat(batteryHistEntry.mUid).isEqualTo(1001L);
|
assertThat(batteryHistEntry.mUid).isEqualTo(1001L);
|
||||||
assertThat(batteryHistEntry.mUserId)
|
assertThat(batteryHistEntry.mUserId).isEqualTo(UserHandle.getUserId(1001));
|
||||||
.isEqualTo(UserHandle.getUserId(1001));
|
assertThat(batteryHistEntry.mAppLabel).isEqualTo("Settings");
|
||||||
assertThat(batteryHistEntry.mAppLabel)
|
assertThat(batteryHistEntry.mPackageName).isEqualTo("com.android.settings.battery");
|
||||||
.isEqualTo("Settings");
|
|
||||||
assertThat(batteryHistEntry.mPackageName)
|
|
||||||
.isEqualTo("com.android.settings.battery");
|
|
||||||
assertThat(batteryHistEntry.mIsHidden).isTrue();
|
assertThat(batteryHistEntry.mIsHidden).isTrue();
|
||||||
assertThat(batteryHistEntry.mBootTimestamp)
|
assertThat(batteryHistEntry.mBootTimestamp).isEqualTo(0L);
|
||||||
.isEqualTo(0L);
|
|
||||||
assertThat(batteryHistEntry.mTimestamp).isEqualTo(0L);
|
assertThat(batteryHistEntry.mTimestamp).isEqualTo(0L);
|
||||||
assertThat(batteryHistEntry.mZoneId)
|
assertThat(batteryHistEntry.mZoneId).isEqualTo(TimeZone.getDefault().getID());
|
||||||
.isEqualTo(TimeZone.getDefault().getID());
|
|
||||||
assertThat(batteryHistEntry.mTotalPower).isEqualTo(5.1);
|
assertThat(batteryHistEntry.mTotalPower).isEqualTo(5.1);
|
||||||
assertThat(batteryHistEntry.mConsumePower).isEqualTo(1.1);
|
assertThat(batteryHistEntry.mConsumePower).isEqualTo(1.1);
|
||||||
assertThat(batteryHistEntry.mForegroundUsageConsumePower).isEqualTo(1.2);
|
assertThat(batteryHistEntry.mForegroundUsageConsumePower).isEqualTo(1.2);
|
||||||
@@ -343,10 +329,8 @@ public final class ConvertUtilsTest {
|
|||||||
assertThat(batteryHistEntry.mBackgroundUsageConsumePower).isEqualTo(1.4);
|
assertThat(batteryHistEntry.mBackgroundUsageConsumePower).isEqualTo(1.4);
|
||||||
assertThat(batteryHistEntry.mCachedUsageConsumePower).isEqualTo(1.5);
|
assertThat(batteryHistEntry.mCachedUsageConsumePower).isEqualTo(1.5);
|
||||||
assertThat(batteryHistEntry.mPercentOfTotal).isEqualTo(0.3);
|
assertThat(batteryHistEntry.mPercentOfTotal).isEqualTo(0.3);
|
||||||
assertThat(batteryHistEntry.mForegroundUsageTimeInMs)
|
assertThat(batteryHistEntry.mForegroundUsageTimeInMs).isEqualTo(1234L);
|
||||||
.isEqualTo(1234L);
|
assertThat(batteryHistEntry.mBackgroundUsageTimeInMs).isEqualTo(5689L);
|
||||||
assertThat(batteryHistEntry.mBackgroundUsageTimeInMs)
|
|
||||||
.isEqualTo(5689L);
|
|
||||||
assertThat(batteryHistEntry.mDrainType).isEqualTo(expectedType);
|
assertThat(batteryHistEntry.mDrainType).isEqualTo(expectedType);
|
||||||
assertThat(batteryHistEntry.mConsumerType)
|
assertThat(batteryHistEntry.mConsumerType)
|
||||||
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
|
||||||
@@ -359,20 +343,15 @@ public final class ConvertUtilsTest {
|
|||||||
public void convertToBatteryHistEntry_nullBatteryEntry_returnsExpectedResult() {
|
public void convertToBatteryHistEntry_nullBatteryEntry_returnsExpectedResult() {
|
||||||
final BatteryHistEntry batteryHistEntry =
|
final BatteryHistEntry batteryHistEntry =
|
||||||
ConvertUtils.convertToBatteryHistEntry(
|
ConvertUtils.convertToBatteryHistEntry(
|
||||||
/*entry=*/ null,
|
/* entry= */ null, /* batteryUsageStats= */ null);
|
||||||
/*batteryUsageStats=*/ null);
|
|
||||||
|
|
||||||
assertThat(batteryHistEntry.mBootTimestamp)
|
assertThat(batteryHistEntry.mBootTimestamp).isEqualTo(0L);
|
||||||
.isEqualTo(0L);
|
assertThat(batteryHistEntry.mTimestamp).isEqualTo(0);
|
||||||
assertThat(batteryHistEntry.mTimestamp)
|
assertThat(batteryHistEntry.mZoneId).isEqualTo(TimeZone.getDefault().getID());
|
||||||
.isEqualTo(0);
|
|
||||||
assertThat(batteryHistEntry.mZoneId)
|
|
||||||
.isEqualTo(TimeZone.getDefault().getID());
|
|
||||||
assertThat(batteryHistEntry.mBatteryLevel).isEqualTo(0);
|
assertThat(batteryHistEntry.mBatteryLevel).isEqualTo(0);
|
||||||
assertThat(batteryHistEntry.mBatteryStatus).isEqualTo(0);
|
assertThat(batteryHistEntry.mBatteryStatus).isEqualTo(0);
|
||||||
assertThat(batteryHistEntry.mBatteryHealth).isEqualTo(0);
|
assertThat(batteryHistEntry.mBatteryHealth).isEqualTo(0);
|
||||||
assertThat(batteryHistEntry.mPackageName)
|
assertThat(batteryHistEntry.mPackageName).isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
||||||
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -387,8 +366,8 @@ public final class ConvertUtilsTest {
|
|||||||
when(mMockPackageManager.getPackageUidAsUser(any(), anyInt())).thenReturn(1001);
|
when(mMockPackageManager.getPackageUidAsUser(any(), anyInt())).thenReturn(1001);
|
||||||
|
|
||||||
final long userId = 2;
|
final long userId = 2;
|
||||||
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(
|
final AppUsageEvent appUsageEvent =
|
||||||
mContext, mUsageStatsManager, event, userId);
|
ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId);
|
||||||
assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
|
assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L);
|
||||||
assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED);
|
assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED);
|
||||||
assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
|
assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1");
|
||||||
@@ -449,7 +428,8 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertToAppUsageEvent_returnExpectedResult() {
|
public void convertToAppUsageEvent_returnExpectedResult() {
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
AppUsageEventEntity.KEY_UID,
|
AppUsageEventEntity.KEY_UID,
|
||||||
AppUsageEventEntity.KEY_USER_ID,
|
AppUsageEventEntity.KEY_USER_ID,
|
||||||
@@ -457,7 +437,8 @@ public final class ConvertUtilsTest {
|
|||||||
AppUsageEventEntity.KEY_TIMESTAMP,
|
AppUsageEventEntity.KEY_TIMESTAMP,
|
||||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE,
|
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE,
|
||||||
AppUsageEventEntity.KEY_TASK_ROOT_PACKAGE_NAME,
|
AppUsageEventEntity.KEY_TASK_ROOT_PACKAGE_NAME,
|
||||||
AppUsageEventEntity.KEY_INSTANCE_ID});
|
AppUsageEventEntity.KEY_INSTANCE_ID
|
||||||
|
});
|
||||||
cursor.addRow(
|
cursor.addRow(
|
||||||
new Object[] {
|
new Object[] {
|
||||||
101L,
|
101L,
|
||||||
@@ -466,7 +447,8 @@ public final class ConvertUtilsTest {
|
|||||||
10001L,
|
10001L,
|
||||||
AppUsageEventType.DEVICE_SHUTDOWN.getNumber(),
|
AppUsageEventType.DEVICE_SHUTDOWN.getNumber(),
|
||||||
"com.android.settings2",
|
"com.android.settings2",
|
||||||
100001L});
|
100001L
|
||||||
|
});
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
|
|
||||||
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor);
|
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor);
|
||||||
@@ -482,20 +464,23 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertToAppUsageEvent_emptyInstanceIdAndRootName_returnExpectedResult() {
|
public void convertToAppUsageEvent_emptyInstanceIdAndRootName_returnExpectedResult() {
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
AppUsageEventEntity.KEY_UID,
|
AppUsageEventEntity.KEY_UID,
|
||||||
AppUsageEventEntity.KEY_USER_ID,
|
AppUsageEventEntity.KEY_USER_ID,
|
||||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||||
AppUsageEventEntity.KEY_TIMESTAMP,
|
AppUsageEventEntity.KEY_TIMESTAMP,
|
||||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE});
|
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE
|
||||||
|
});
|
||||||
cursor.addRow(
|
cursor.addRow(
|
||||||
new Object[] {
|
new Object[] {
|
||||||
101L,
|
101L,
|
||||||
1001L,
|
1001L,
|
||||||
"com.android.settings1",
|
"com.android.settings1",
|
||||||
10001L,
|
10001L,
|
||||||
AppUsageEventType.DEVICE_SHUTDOWN.getNumber()});
|
AppUsageEventType.DEVICE_SHUTDOWN.getNumber()
|
||||||
|
});
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
|
|
||||||
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor);
|
final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent(cursor);
|
||||||
@@ -511,8 +496,8 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertToBatteryEvent_normalCase_returnsExpectedResult() {
|
public void convertToBatteryEvent_normalCase_returnsExpectedResult() {
|
||||||
final BatteryEvent batteryEvent = ConvertUtils.convertToBatteryEvent(
|
final BatteryEvent batteryEvent =
|
||||||
666L, BatteryEventType.POWER_DISCONNECTED, 88);
|
ConvertUtils.convertToBatteryEvent(666L, BatteryEventType.POWER_DISCONNECTED, 88);
|
||||||
assertThat(batteryEvent.getTimestamp()).isEqualTo(666L);
|
assertThat(batteryEvent.getTimestamp()).isEqualTo(666L);
|
||||||
assertThat(batteryEvent.getType()).isEqualTo(BatteryEventType.POWER_DISCONNECTED);
|
assertThat(batteryEvent.getType()).isEqualTo(BatteryEventType.POWER_DISCONNECTED);
|
||||||
assertThat(batteryEvent.getBatteryLevel()).isEqualTo(88);
|
assertThat(batteryEvent.getBatteryLevel()).isEqualTo(88);
|
||||||
@@ -520,8 +505,9 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertToBatteryEventList_normalCase_returnsExpectedResult() {
|
public void convertToBatteryEventList_normalCase_returnsExpectedResult() {
|
||||||
final BatteryLevelData batteryLevelData = new BatteryLevelData(Map.of(
|
final BatteryLevelData batteryLevelData =
|
||||||
1691589600000L, 98, 1691596800000L, 90, 1691596812345L, 80));
|
new BatteryLevelData(
|
||||||
|
Map.of(1691589600000L, 98, 1691596800000L, 90, 1691596812345L, 80));
|
||||||
|
|
||||||
final List<BatteryEvent> batteryEventList =
|
final List<BatteryEvent> batteryEventList =
|
||||||
ConvertUtils.convertToBatteryEventList(batteryLevelData);
|
ConvertUtils.convertToBatteryEventList(batteryLevelData);
|
||||||
@@ -537,14 +523,20 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void convertToBatteryUsageSlotList_normalCase_returnsExpectedResult() {
|
public void convertToBatteryUsageSlotList_normalCase_returnsExpectedResult() {
|
||||||
BatteryDiffData batteryDiffData1 = new BatteryDiffData(
|
BatteryDiffData batteryDiffData1 =
|
||||||
mContext, 11L, 12L, 13, 14, 15, List.of(), List.of(), Set.of(), Set.of(), false);
|
new BatteryDiffData(
|
||||||
BatteryDiffData batteryDiffData2 = new BatteryDiffData(
|
mContext, 11L, 12L, 13, 14, 15, List.of(), List.of(), Set.of(), Set.of(),
|
||||||
mContext, 21L, 22L, 23, 24, 25, List.of(), List.of(), Set.of(), Set.of(), false);
|
false);
|
||||||
BatteryDiffData batteryDiffData3 = new BatteryDiffData(
|
BatteryDiffData batteryDiffData2 =
|
||||||
mContext, 31L, 32L, 33, 34, 35, List.of(), List.of(), Set.of(), Set.of(), false);
|
new BatteryDiffData(
|
||||||
final Map<Long, BatteryDiffData> batteryDiffDataMap = Map.of(
|
mContext, 21L, 22L, 23, 24, 25, List.of(), List.of(), Set.of(), Set.of(),
|
||||||
11L, batteryDiffData1, 21L, batteryDiffData2, 31L, batteryDiffData3);
|
false);
|
||||||
|
BatteryDiffData batteryDiffData3 =
|
||||||
|
new BatteryDiffData(
|
||||||
|
mContext, 31L, 32L, 33, 34, 35, List.of(), List.of(), Set.of(), Set.of(),
|
||||||
|
false);
|
||||||
|
final Map<Long, BatteryDiffData> batteryDiffDataMap =
|
||||||
|
Map.of(11L, batteryDiffData1, 21L, batteryDiffData2, 31L, batteryDiffData3);
|
||||||
|
|
||||||
final List<BatteryUsageSlot> batteryUsageSlotList =
|
final List<BatteryUsageSlot> batteryUsageSlotList =
|
||||||
ConvertUtils.convertToBatteryUsageSlotList(batteryDiffDataMap);
|
ConvertUtils.convertToBatteryUsageSlotList(batteryDiffDataMap);
|
||||||
@@ -556,8 +548,7 @@ public final class ConvertUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getLocale_nullContext_returnDefaultLocale() {
|
public void getLocale_nullContext_returnDefaultLocale() {
|
||||||
assertThat(ConvertUtils.getLocale(/*context=*/ null))
|
assertThat(ConvertUtils.getLocale(/* context= */ null)).isEqualTo(Locale.getDefault());
|
||||||
.isEqualTo(Locale.getDefault());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -578,7 +569,8 @@ public final class ConvertUtilsTest {
|
|||||||
final String packageName = "com.android.settings1";
|
final String packageName = "com.android.settings1";
|
||||||
final String taskRootPackageName = "com.android.settings2";
|
final String taskRootPackageName = "com.android.settings2";
|
||||||
|
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(
|
||||||
|
ConvertUtils.getEffectivePackageName(
|
||||||
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||||
.isEqualTo(packageName);
|
.isEqualTo(packageName);
|
||||||
}
|
}
|
||||||
@@ -588,7 +580,8 @@ public final class ConvertUtilsTest {
|
|||||||
final String packageName = "com.android.settings1";
|
final String packageName = "com.android.settings1";
|
||||||
final String taskRootPackageName = "com.android.settings2";
|
final String taskRootPackageName = "com.android.settings2";
|
||||||
|
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(
|
||||||
|
ConvertUtils.getEffectivePackageName(
|
||||||
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||||
.isEqualTo(packageName);
|
.isEqualTo(packageName);
|
||||||
}
|
}
|
||||||
@@ -599,7 +592,8 @@ public final class ConvertUtilsTest {
|
|||||||
final String packageName = "com.android.settings1";
|
final String packageName = "com.android.settings1";
|
||||||
final String taskRootPackageName = "com.android.settings2";
|
final String taskRootPackageName = "com.android.settings2";
|
||||||
|
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(
|
||||||
|
ConvertUtils.getEffectivePackageName(
|
||||||
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
mContext, mUsageStatsManager, packageName, taskRootPackageName))
|
||||||
.isEqualTo(taskRootPackageName);
|
.isEqualTo(taskRootPackageName);
|
||||||
}
|
}
|
||||||
@@ -609,11 +603,19 @@ public final class ConvertUtilsTest {
|
|||||||
ConvertUtils.sUsageSource = USAGE_SOURCE_TASK_ROOT_ACTIVITY;
|
ConvertUtils.sUsageSource = USAGE_SOURCE_TASK_ROOT_ACTIVITY;
|
||||||
final String packageName = "com.android.settings1";
|
final String packageName = "com.android.settings1";
|
||||||
|
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(
|
||||||
mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ null))
|
ConvertUtils.getEffectivePackageName(
|
||||||
|
mContext,
|
||||||
|
mUsageStatsManager,
|
||||||
|
packageName,
|
||||||
|
/* taskRootPackageName= */ null))
|
||||||
.isEqualTo(packageName);
|
.isEqualTo(packageName);
|
||||||
assertThat(ConvertUtils.getEffectivePackageName(
|
assertThat(
|
||||||
mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ ""))
|
ConvertUtils.getEffectivePackageName(
|
||||||
|
mContext,
|
||||||
|
mUsageStatsManager,
|
||||||
|
packageName,
|
||||||
|
/* taskRootPackageName= */ ""))
|
||||||
.isEqualTo(packageName);
|
.isEqualTo(packageName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,18 +70,12 @@ public final class DataProcessManagerTest {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
private DataProcessManager mDataProcessManager;
|
private DataProcessManager mDataProcessManager;
|
||||||
|
|
||||||
@Mock
|
@Mock private IUsageStatsManager mUsageStatsManager;
|
||||||
private IUsageStatsManager mUsageStatsManager;
|
@Mock private UserManager mUserManager;
|
||||||
@Mock
|
@Mock private BatteryStatsManager mBatteryStatsManager;
|
||||||
private UserManager mUserManager;
|
@Mock private BatteryUsageStats mBatteryUsageStats;
|
||||||
@Mock
|
@Mock private Intent mIntent;
|
||||||
private BatteryStatsManager mBatteryStatsManager;
|
@Captor private ArgumentCaptor<BatteryUsageStatsQuery> mBatteryUsageStatsQueryCaptor;
|
||||||
@Mock
|
|
||||||
private BatteryUsageStats mBatteryUsageStats;
|
|
||||||
@Mock
|
|
||||||
private Intent mIntent;
|
|
||||||
@Captor
|
|
||||||
private ArgumentCaptor<BatteryUsageStatsQuery> mBatteryUsageStatsQueryCaptor;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -91,20 +85,24 @@ public final class DataProcessManagerTest {
|
|||||||
DataProcessor.sTestSystemAppsPackageNames = Set.of();
|
DataProcessor.sTestSystemAppsPackageNames = Set.of();
|
||||||
DataProcessor.sUsageStatsManager = mUsageStatsManager;
|
DataProcessor.sUsageStatsManager = mUsageStatsManager;
|
||||||
doReturn(mContext).when(mContext).getApplicationContext();
|
doReturn(mContext).when(mContext).getApplicationContext();
|
||||||
doReturn(mUserManager)
|
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||||
|
doReturn(mBatteryStatsManager)
|
||||||
.when(mContext)
|
.when(mContext)
|
||||||
.getSystemService(UserManager.class);
|
.getSystemService(Context.BATTERY_STATS_SERVICE);
|
||||||
doReturn(mBatteryStatsManager).when(mContext).getSystemService(
|
doReturn(mBatteryUsageStats)
|
||||||
Context.BATTERY_STATS_SERVICE);
|
.when(mBatteryStatsManager)
|
||||||
doReturn(mBatteryUsageStats).when(
|
.getBatteryUsageStats(mBatteryUsageStatsQueryCaptor.capture());
|
||||||
mBatteryStatsManager).getBatteryUsageStats(mBatteryUsageStatsQueryCaptor.capture());
|
|
||||||
doReturn(mIntent).when(mContext).registerReceiver(any(), any());
|
doReturn(mIntent).when(mContext).registerReceiver(any(), any());
|
||||||
doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt());
|
doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt());
|
||||||
doReturn(66).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_LEVEL), anyInt());
|
doReturn(66).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_LEVEL), anyInt());
|
||||||
|
|
||||||
mDataProcessManager = new DataProcessManager(
|
mDataProcessManager =
|
||||||
mContext, /*handler=*/ null, /*rawStartTimestamp=*/ 0L,
|
new DataProcessManager(
|
||||||
/*lastFullChargeTimestamp=*/ 0L, /*callbackFunction=*/ null,
|
mContext,
|
||||||
|
/* handler= */ null,
|
||||||
|
/* rawStartTimestamp= */ 0L,
|
||||||
|
/* lastFullChargeTimestamp= */ 0L,
|
||||||
|
/* callbackFunction= */ null,
|
||||||
/* hourlyBatteryLevelsPerDay= */ new ArrayList<>(),
|
/* hourlyBatteryLevelsPerDay= */ new ArrayList<>(),
|
||||||
/* batteryHistoryMap= */ new HashMap<>());
|
/* batteryHistoryMap= */ new HashMap<>());
|
||||||
}
|
}
|
||||||
@@ -126,11 +124,13 @@ public final class DataProcessManagerTest {
|
|||||||
@Test
|
@Test
|
||||||
@LooperMode(LooperMode.Mode.LEGACY)
|
@LooperMode(LooperMode.Mode.LEGACY)
|
||||||
public void start_loadEmptyDatabaseAppUsageData() {
|
public void start_loadEmptyDatabaseAppUsageData() {
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
AppUsageEventEntity.KEY_UID,
|
AppUsageEventEntity.KEY_UID,
|
||||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||||
AppUsageEventEntity.KEY_TIMESTAMP});
|
AppUsageEventEntity.KEY_TIMESTAMP
|
||||||
|
});
|
||||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||||
doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
|
doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
|
||||||
|
|
||||||
@@ -182,7 +182,8 @@ public final class DataProcessManagerTest {
|
|||||||
doReturn(new ArrayList<>()).when(mUserManager).getUserProfiles();
|
doReturn(new ArrayList<>()).when(mUserManager).getUserProfiles();
|
||||||
|
|
||||||
// Fake database usage data.
|
// Fake database usage data.
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE,
|
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE,
|
||||||
AppUsageEventEntity.KEY_TIMESTAMP,
|
AppUsageEventEntity.KEY_TIMESTAMP,
|
||||||
@@ -191,20 +192,42 @@ public final class DataProcessManagerTest {
|
|||||||
AppUsageEventEntity.KEY_PACKAGE_NAME
|
AppUsageEventEntity.KEY_PACKAGE_NAME
|
||||||
});
|
});
|
||||||
// Adds fake data into the cursor.
|
// Adds fake data into the cursor.
|
||||||
cursor.addRow(new Object[] {
|
cursor.addRow(
|
||||||
AppUsageEventType.ACTIVITY_RESUMED.getNumber(), /*timestamp=*/ 3, /*userId=*/ 1,
|
new Object[] {
|
||||||
/*instanceId=*/ 2, packageName});
|
AppUsageEventType.ACTIVITY_RESUMED.getNumber(),
|
||||||
cursor.addRow(new Object[] {
|
/* timestamp= */ 3,
|
||||||
AppUsageEventType.ACTIVITY_STOPPED.getNumber(), /*timestamp=*/ 4, /*userId=*/ 1,
|
/* userId= */ 1,
|
||||||
/*instanceId=*/ 2, packageName});
|
/* instanceId= */ 2,
|
||||||
cursor.addRow(new Object[] {
|
packageName
|
||||||
AppUsageEventType.ACTIVITY_RESUMED.getNumber(), /*timestamp=*/ 5, /*userId=*/ 1,
|
});
|
||||||
/*instanceId=*/ 2, packageName});
|
cursor.addRow(
|
||||||
cursor.addRow(new Object[] {
|
new Object[] {
|
||||||
AppUsageEventType.ACTIVITY_STOPPED.getNumber(), /*timestamp=*/ 6, /*userId=*/ 1,
|
AppUsageEventType.ACTIVITY_STOPPED.getNumber(),
|
||||||
/*instanceId=*/ 2, packageName});
|
/* timestamp= */ 4,
|
||||||
DatabaseUtils.sFakeSupplier = new Supplier<>() {
|
/* userId= */ 1,
|
||||||
|
/* instanceId= */ 2,
|
||||||
|
packageName
|
||||||
|
});
|
||||||
|
cursor.addRow(
|
||||||
|
new Object[] {
|
||||||
|
AppUsageEventType.ACTIVITY_RESUMED.getNumber(),
|
||||||
|
/* timestamp= */ 5,
|
||||||
|
/* userId= */ 1,
|
||||||
|
/* instanceId= */ 2,
|
||||||
|
packageName
|
||||||
|
});
|
||||||
|
cursor.addRow(
|
||||||
|
new Object[] {
|
||||||
|
AppUsageEventType.ACTIVITY_STOPPED.getNumber(),
|
||||||
|
/* timestamp= */ 6,
|
||||||
|
/* userId= */ 1,
|
||||||
|
/* instanceId= */ 2,
|
||||||
|
packageName
|
||||||
|
});
|
||||||
|
DatabaseUtils.sFakeSupplier =
|
||||||
|
new Supplier<>() {
|
||||||
private int mTimes = 0;
|
private int mTimes = 0;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Cursor get() {
|
public Cursor get() {
|
||||||
mTimes++;
|
mTimes++;
|
||||||
@@ -212,10 +235,15 @@ public final class DataProcessManagerTest {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
final DataProcessManager dataProcessManager = new DataProcessManager(
|
final DataProcessManager dataProcessManager =
|
||||||
mContext, /*handler=*/ null, /*rawStartTimestamp=*/ 2L,
|
new DataProcessManager(
|
||||||
/*lastFullChargeTimestamp=*/ 1L, /*callbackFunction=*/ null,
|
mContext,
|
||||||
hourlyBatteryLevelsPerDay, /*batteryHistoryMap=*/ new HashMap<>());
|
/* handler= */ null,
|
||||||
|
/* rawStartTimestamp= */ 2L,
|
||||||
|
/* lastFullChargeTimestamp= */ 1L,
|
||||||
|
/* callbackFunction= */ null,
|
||||||
|
hourlyBatteryLevelsPerDay,
|
||||||
|
/* batteryHistoryMap= */ new HashMap<>());
|
||||||
dataProcessManager.start();
|
dataProcessManager.start();
|
||||||
|
|
||||||
assertThat(dataProcessManager.getIsCurrentAppUsageLoaded()).isTrue();
|
assertThat(dataProcessManager.getIsCurrentAppUsageLoaded()).isTrue();
|
||||||
@@ -274,11 +302,13 @@ public final class DataProcessManagerTest {
|
|||||||
.when(mUsageStatsManager)
|
.when(mUsageStatsManager)
|
||||||
.queryEventsForUser(anyLong(), anyLong(), anyInt(), any());
|
.queryEventsForUser(anyLong(), anyLong(), anyInt(), any());
|
||||||
doReturn(false).when(mUserManager).isUserUnlocked(anyInt());
|
doReturn(false).when(mUserManager).isUserUnlocked(anyInt());
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
AppUsageEventEntity.KEY_UID,
|
AppUsageEventEntity.KEY_UID,
|
||||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||||
AppUsageEventEntity.KEY_TIMESTAMP});
|
AppUsageEventEntity.KEY_TIMESTAMP
|
||||||
|
});
|
||||||
// Adds fake data into the cursor.
|
// Adds fake data into the cursor.
|
||||||
cursor.addRow(new Object[] {101L, "app name1", 1001L});
|
cursor.addRow(new Object[] {101L, "app name1", 1001L});
|
||||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||||
@@ -293,16 +323,20 @@ public final class DataProcessManagerTest {
|
|||||||
@Test
|
@Test
|
||||||
@LooperMode(LooperMode.Mode.LEGACY)
|
@LooperMode(LooperMode.Mode.LEGACY)
|
||||||
public void getBatteryLevelData_emptyHistoryMap_returnNull() {
|
public void getBatteryLevelData_emptyHistoryMap_returnNull() {
|
||||||
assertThat(DataProcessManager.getBatteryLevelData(
|
assertThat(
|
||||||
|
DataProcessManager.getBatteryLevelData(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
/* handler= */ null,
|
||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
/*asyncResponseDelegate=*/ null)).isNull();
|
/* asyncResponseDelegate= */ null))
|
||||||
assertThat(DataProcessManager.getBatteryLevelData(
|
.isNull();
|
||||||
|
assertThat(
|
||||||
|
DataProcessManager.getBatteryLevelData(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
/* handler= */ null,
|
||||||
/* isFromPeriodJob= */ true,
|
/* isFromPeriodJob= */ true,
|
||||||
/*asyncResponseDelegate=*/ null)).isNull();
|
/* asyncResponseDelegate= */ null))
|
||||||
|
.isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -311,7 +345,8 @@ public final class DataProcessManagerTest {
|
|||||||
final long[] timestamps = {
|
final long[] timestamps = {
|
||||||
DateUtils.HOUR_IN_MILLIS * 2 - 300L,
|
DateUtils.HOUR_IN_MILLIS * 2 - 300L,
|
||||||
DateUtils.HOUR_IN_MILLIS * 2 - 200L,
|
DateUtils.HOUR_IN_MILLIS * 2 - 200L,
|
||||||
DateUtils.HOUR_IN_MILLIS * 2 - 100L};
|
DateUtils.HOUR_IN_MILLIS * 2 - 100L
|
||||||
|
};
|
||||||
final int[] levels = {100, 99, 98};
|
final int[] levels = {100, 99, 98};
|
||||||
DataProcessManager.sFakeBatteryHistoryMap = createHistoryMap(timestamps, levels);
|
DataProcessManager.sFakeBatteryHistoryMap = createHistoryMap(timestamps, levels);
|
||||||
DataProcessor.sTestCurrentTimeMillis = timestamps[timestamps.length - 1];
|
DataProcessor.sTestCurrentTimeMillis = timestamps[timestamps.length - 1];
|
||||||
@@ -323,9 +358,8 @@ public final class DataProcessManagerTest {
|
|||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
/* asyncResponseDelegate= */ null);
|
/* asyncResponseDelegate= */ null);
|
||||||
|
|
||||||
final List<Long> expectedDailyTimestamps = List.of(
|
final List<Long> expectedDailyTimestamps =
|
||||||
DateUtils.HOUR_IN_MILLIS * 2 - 300L,
|
List.of(DateUtils.HOUR_IN_MILLIS * 2 - 300L, DateUtils.HOUR_IN_MILLIS * 2 - 100L);
|
||||||
DateUtils.HOUR_IN_MILLIS * 2 - 100L);
|
|
||||||
final List<Integer> expectedDailyLevels = List.of(100, 66);
|
final List<Integer> expectedDailyLevels = List.of(100, 66);
|
||||||
final List<List<Long>> expectedHourlyTimestamps = List.of(expectedDailyTimestamps);
|
final List<List<Long>> expectedHourlyTimestamps = List.of(expectedDailyTimestamps);
|
||||||
final List<List<Integer>> expectedHourlyLevels = List.of(expectedDailyLevels);
|
final List<List<Integer>> expectedHourlyLevels = List.of(expectedDailyLevels);
|
||||||
@@ -352,7 +386,8 @@ public final class DataProcessManagerTest {
|
|||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
/* asyncResponseDelegate= */ null);
|
/* asyncResponseDelegate= */ null);
|
||||||
|
|
||||||
final List<Long> expectedDailyTimestamps = List.of(
|
final List<Long> expectedDailyTimestamps =
|
||||||
|
List.of(
|
||||||
1640966400000L, // 2022-01-01 00:00:00
|
1640966400000L, // 2022-01-01 00:00:00
|
||||||
1640970000000L); // 2022-01-01 01:00:00
|
1640970000000L); // 2022-01-01 01:00:00
|
||||||
final List<Integer> expectedDailyLevels = List.of(100, 66);
|
final List<Integer> expectedDailyLevels = List.of(100, 66);
|
||||||
@@ -400,16 +435,11 @@ public final class DataProcessManagerTest {
|
|||||||
private static ContentValues getContentValuesWithBatteryLevel(final int level) {
|
private static ContentValues getContentValuesWithBatteryLevel(final int level) {
|
||||||
final ContentValues values = new ContentValues();
|
final ContentValues values = new ContentValues();
|
||||||
final DeviceBatteryState deviceBatteryState =
|
final DeviceBatteryState deviceBatteryState =
|
||||||
DeviceBatteryState
|
DeviceBatteryState.newBuilder().setBatteryLevel(level).build();
|
||||||
.newBuilder()
|
|
||||||
.setBatteryLevel(level)
|
|
||||||
.build();
|
|
||||||
final BatteryInformation batteryInformation =
|
final BatteryInformation batteryInformation =
|
||||||
BatteryInformation
|
BatteryInformation.newBuilder().setDeviceBatteryState(deviceBatteryState).build();
|
||||||
.newBuilder()
|
values.put(
|
||||||
.setDeviceBatteryState(deviceBatteryState)
|
BatteryHistEntry.KEY_BATTERY_INFORMATION,
|
||||||
.build();
|
|
||||||
values.put(BatteryHistEntry.KEY_BATTERY_INFORMATION,
|
|
||||||
ConvertUtils.convertBatteryInformationToString(batteryInformation));
|
ConvertUtils.convertBatteryInformationToString(batteryInformation));
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -117,9 +117,7 @@ public final class DatabaseUtilsTest {
|
|||||||
.setType(AppUsageEventType.ACTIVITY_STOPPED)
|
.setType(AppUsageEventType.ACTIVITY_STOPPED)
|
||||||
.build();
|
.build();
|
||||||
final AppUsageEvent appUsageEvent3 =
|
final AppUsageEvent appUsageEvent3 =
|
||||||
AppUsageEvent.newBuilder()
|
AppUsageEvent.newBuilder().setType(AppUsageEventType.DEVICE_SHUTDOWN).build();
|
||||||
.setType(AppUsageEventType.DEVICE_SHUTDOWN)
|
|
||||||
.build();
|
|
||||||
appUsageEventList.add(appUsageEvent1);
|
appUsageEventList.add(appUsageEvent1);
|
||||||
appUsageEventList.add(appUsageEvent2);
|
appUsageEventList.add(appUsageEvent2);
|
||||||
appUsageEventList.add(appUsageEvent3);
|
appUsageEventList.add(appUsageEvent3);
|
||||||
@@ -135,10 +133,9 @@ public final class DatabaseUtilsTest {
|
|||||||
// Verifies the inserted ContentValues into content provider.
|
// Verifies the inserted ContentValues into content provider.
|
||||||
final ContentValues[] valuesArray =
|
final ContentValues[] valuesArray =
|
||||||
new ContentValues[] {valuesList.get(0), valuesList.get(1)};
|
new ContentValues[] {valuesList.get(0), valuesList.get(1)};
|
||||||
verify(mMockContentResolver).bulkInsert(
|
verify(mMockContentResolver).bulkInsert(DatabaseUtils.APP_USAGE_EVENT_URI, valuesArray);
|
||||||
DatabaseUtils.APP_USAGE_EVENT_URI, valuesArray);
|
verify(mMockContentResolver)
|
||||||
verify(mMockContentResolver).notifyChange(
|
.notifyChange(DatabaseUtils.APP_USAGE_EVENT_URI, /* observer= */ null);
|
||||||
DatabaseUtils.APP_USAGE_EVENT_URI, /*observer=*/ null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -161,12 +158,10 @@ public final class DatabaseUtilsTest {
|
|||||||
final ContentValues contentValues =
|
final ContentValues contentValues =
|
||||||
DatabaseUtils.sendBatteryEventData(mContext, batteryEvent);
|
DatabaseUtils.sendBatteryEventData(mContext, batteryEvent);
|
||||||
|
|
||||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_TIMESTAMP))
|
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_TIMESTAMP)).isEqualTo(10001L);
|
||||||
.isEqualTo(10001L);
|
|
||||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))
|
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_EVENT_TYPE))
|
||||||
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
.isEqualTo(BatteryEventType.POWER_CONNECTED.getNumber());
|
||||||
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL))
|
assertThat(contentValues.getAsInteger(BatteryEventEntity.KEY_BATTERY_LEVEL)).isEqualTo(66);
|
||||||
.isEqualTo(66);
|
|
||||||
// Verifies the inserted ContentValues into content provider.
|
// Verifies the inserted ContentValues into content provider.
|
||||||
verify(mMockContentResolver).insert(DatabaseUtils.BATTERY_EVENT_URI, contentValues);
|
verify(mMockContentResolver).insert(DatabaseUtils.BATTERY_EVENT_URI, contentValues);
|
||||||
}
|
}
|
||||||
@@ -176,8 +171,11 @@ public final class DatabaseUtilsTest {
|
|||||||
doReturn(null).when(mContext).registerReceiver(any(), any());
|
doReturn(null).when(mContext).registerReceiver(any(), any());
|
||||||
assertThat(
|
assertThat(
|
||||||
DatabaseUtils.sendBatteryEntryData(
|
DatabaseUtils.sendBatteryEntryData(
|
||||||
mContext, System.currentTimeMillis(), /*batteryEntryList=*/ null,
|
mContext,
|
||||||
mBatteryUsageStats, /*isFullChargeStart=*/ false))
|
System.currentTimeMillis(),
|
||||||
|
/* batteryEntryList= */ null,
|
||||||
|
mBatteryUsageStats,
|
||||||
|
/* isFullChargeStart= */ false))
|
||||||
.isNull();
|
.isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -209,10 +207,9 @@ public final class DatabaseUtilsTest {
|
|||||||
// Verifies the inserted ContentValues into content provider.
|
// Verifies the inserted ContentValues into content provider.
|
||||||
final ContentValues[] valuesArray =
|
final ContentValues[] valuesArray =
|
||||||
new ContentValues[] {valuesList.get(0), valuesList.get(1)};
|
new ContentValues[] {valuesList.get(0), valuesList.get(1)};
|
||||||
verify(mMockContentResolver).bulkInsert(
|
verify(mMockContentResolver).bulkInsert(DatabaseUtils.BATTERY_CONTENT_URI, valuesArray);
|
||||||
DatabaseUtils.BATTERY_CONTENT_URI, valuesArray);
|
verify(mMockContentResolver)
|
||||||
verify(mMockContentResolver).notifyChange(
|
.notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
|
||||||
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -231,8 +228,8 @@ public final class DatabaseUtilsTest {
|
|||||||
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
||||||
// Verifies the inserted ContentValues into content provider.
|
// Verifies the inserted ContentValues into content provider.
|
||||||
verify(mMockContentResolver).insert(any(), any());
|
verify(mMockContentResolver).insert(any(), any());
|
||||||
verify(mMockContentResolver).notifyChange(
|
verify(mMockContentResolver)
|
||||||
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
|
.notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -251,8 +248,8 @@ public final class DatabaseUtilsTest {
|
|||||||
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
||||||
// Verifies the inserted ContentValues into content provider.
|
// Verifies the inserted ContentValues into content provider.
|
||||||
verify(mMockContentResolver).insert(any(), any());
|
verify(mMockContentResolver).insert(any(), any());
|
||||||
verify(mMockContentResolver).notifyChange(
|
verify(mMockContentResolver)
|
||||||
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
|
.notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -271,8 +268,8 @@ public final class DatabaseUtilsTest {
|
|||||||
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
verifyFakeBatteryEntryContentValues(valuesList.get(0));
|
||||||
// Verifies the inserted ContentValues into content provider.
|
// Verifies the inserted ContentValues into content provider.
|
||||||
verify(mMockContentResolver).insert(any(), any());
|
verify(mMockContentResolver).insert(any(), any());
|
||||||
verify(mMockContentResolver).notifyChange(
|
verify(mMockContentResolver)
|
||||||
DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null);
|
.notifyChange(DatabaseUtils.BATTERY_CONTENT_URI, /* observer= */ null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -282,16 +279,20 @@ public final class DatabaseUtilsTest {
|
|||||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||||
|
|
||||||
final long earliestTimestamp = 10001L;
|
final long earliestTimestamp = 10001L;
|
||||||
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
|
assertThat(
|
||||||
mContext, /*userId=*/ 0, earliestTimestamp)).isEqualTo(earliestTimestamp);
|
DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||||
|
mContext, /* userId= */ 0, earliestTimestamp))
|
||||||
|
.isEqualTo(earliestTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAppUsageStartTimestampOfUser_nullCursor_returnEarliestTimestamp() {
|
public void getAppUsageStartTimestampOfUser_nullCursor_returnEarliestTimestamp() {
|
||||||
DatabaseUtils.sFakeSupplier = () -> null;
|
DatabaseUtils.sFakeSupplier = () -> null;
|
||||||
final long earliestTimestamp = 10001L;
|
final long earliestTimestamp = 10001L;
|
||||||
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
|
assertThat(
|
||||||
mContext, /*userId=*/ 0, earliestTimestamp)).isEqualTo(earliestTimestamp);
|
DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||||
|
mContext, /* userId= */ 0, earliestTimestamp))
|
||||||
|
.isEqualTo(earliestTimestamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -304,50 +305,62 @@ public final class DatabaseUtilsTest {
|
|||||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||||
|
|
||||||
final long earliestTimestamp1 = 1001L;
|
final long earliestTimestamp1 = 1001L;
|
||||||
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
|
assertThat(
|
||||||
mContext, /*userId=*/ 0, earliestTimestamp1)).isEqualTo(returnedTimestamp + 1);
|
DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||||
|
mContext, /* userId= */ 0, earliestTimestamp1))
|
||||||
|
.isEqualTo(returnedTimestamp + 1);
|
||||||
final long earliestTimestamp2 = 100001L;
|
final long earliestTimestamp2 = 100001L;
|
||||||
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
|
assertThat(
|
||||||
mContext, /*userId=*/ 0, earliestTimestamp2)).isEqualTo(earliestTimestamp2);
|
DatabaseUtils.getAppUsageStartTimestampOfUser(
|
||||||
|
mContext, /* userId= */ 0, earliestTimestamp2))
|
||||||
|
.isEqualTo(earliestTimestamp2);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAppUsageEventForUsers_emptyCursorContent_returnEmptyMap() {
|
public void getAppUsageEventForUsers_emptyCursorContent_returnEmptyMap() {
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
AppUsageEventEntity.KEY_UID,
|
AppUsageEventEntity.KEY_UID,
|
||||||
AppUsageEventEntity.KEY_USER_ID,
|
AppUsageEventEntity.KEY_USER_ID,
|
||||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||||
AppUsageEventEntity.KEY_TIMESTAMP,
|
AppUsageEventEntity.KEY_TIMESTAMP,
|
||||||
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE});
|
AppUsageEventEntity.KEY_APP_USAGE_EVENT_TYPE
|
||||||
|
});
|
||||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||||
|
|
||||||
assertThat(DatabaseUtils.getAppUsageEventForUsers(
|
assertThat(
|
||||||
|
DatabaseUtils.getAppUsageEventForUsers(
|
||||||
mContext,
|
mContext,
|
||||||
/* calendar= */ null,
|
/* calendar= */ null,
|
||||||
/* userIds= */ new ArrayList<>(),
|
/* userIds= */ new ArrayList<>(),
|
||||||
/*startTimestampOfLevelData=*/ 0)).isEmpty();
|
/* startTimestampOfLevelData= */ 0))
|
||||||
|
.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAppUsageEventForUsers_nullCursor_returnEmptyMap() {
|
public void getAppUsageEventForUsers_nullCursor_returnEmptyMap() {
|
||||||
DatabaseUtils.sFakeSupplier = () -> null;
|
DatabaseUtils.sFakeSupplier = () -> null;
|
||||||
assertThat(DatabaseUtils.getAppUsageEventForUsers(
|
assertThat(
|
||||||
|
DatabaseUtils.getAppUsageEventForUsers(
|
||||||
mContext,
|
mContext,
|
||||||
/* calendar= */ null,
|
/* calendar= */ null,
|
||||||
/* userIds= */ new ArrayList<>(),
|
/* userIds= */ new ArrayList<>(),
|
||||||
/*startTimestampOfLevelData=*/ 0)).isEmpty();
|
/* startTimestampOfLevelData= */ 0))
|
||||||
|
.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAppUsageEventForUsers_returnExpectedMap() {
|
public void getAppUsageEventForUsers_returnExpectedMap() {
|
||||||
final Long timestamp1 = 1001L;
|
final Long timestamp1 = 1001L;
|
||||||
final Long timestamp2 = 1002L;
|
final Long timestamp2 = 1002L;
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
AppUsageEventEntity.KEY_UID,
|
AppUsageEventEntity.KEY_UID,
|
||||||
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
AppUsageEventEntity.KEY_PACKAGE_NAME,
|
||||||
AppUsageEventEntity.KEY_TIMESTAMP});
|
AppUsageEventEntity.KEY_TIMESTAMP
|
||||||
|
});
|
||||||
// Adds fake data into the cursor.
|
// Adds fake data into the cursor.
|
||||||
cursor.addRow(new Object[] {101L, "app name1", timestamp1});
|
cursor.addRow(new Object[] {101L, "app name1", timestamp1});
|
||||||
cursor.addRow(new Object[] {101L, "app name2", timestamp2});
|
cursor.addRow(new Object[] {101L, "app name2", timestamp2});
|
||||||
@@ -355,7 +368,8 @@ public final class DatabaseUtilsTest {
|
|||||||
cursor.addRow(new Object[] {101L, "app name4", timestamp2});
|
cursor.addRow(new Object[] {101L, "app name4", timestamp2});
|
||||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||||
|
|
||||||
final List<AppUsageEvent> appUsageEventList = DatabaseUtils.getAppUsageEventForUsers(
|
final List<AppUsageEvent> appUsageEventList =
|
||||||
|
DatabaseUtils.getAppUsageEventForUsers(
|
||||||
mContext,
|
mContext,
|
||||||
/* calendar= */ null,
|
/* calendar= */ null,
|
||||||
/* userIds= */ new ArrayList<>(),
|
/* userIds= */ new ArrayList<>(),
|
||||||
@@ -369,11 +383,13 @@ public final class DatabaseUtilsTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getHistoryMap_emptyCursorContent_returnEmptyMap() {
|
public void getHistoryMap_emptyCursorContent_returnEmptyMap() {
|
||||||
final MatrixCursor cursor = new MatrixCursor(
|
final MatrixCursor cursor =
|
||||||
|
new MatrixCursor(
|
||||||
new String[] {
|
new String[] {
|
||||||
BatteryHistEntry.KEY_UID,
|
BatteryHistEntry.KEY_UID,
|
||||||
BatteryHistEntry.KEY_USER_ID,
|
BatteryHistEntry.KEY_USER_ID,
|
||||||
BatteryHistEntry.KEY_TIMESTAMP});
|
BatteryHistEntry.KEY_TIMESTAMP
|
||||||
|
});
|
||||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||||
|
|
||||||
assertThat(DatabaseUtils.getHistoryMapSinceQueryTimestamp(mContext, 0)).isEmpty();
|
assertThat(DatabaseUtils.getHistoryMapSinceQueryTimestamp(mContext, 0)).isEmpty();
|
||||||
@@ -391,14 +407,22 @@ public final class DatabaseUtilsTest {
|
|||||||
final Long timestamp2 = Long.valueOf(1002L);
|
final Long timestamp2 = Long.valueOf(1002L);
|
||||||
final MatrixCursor cursor = getMatrixCursor();
|
final MatrixCursor cursor = getMatrixCursor();
|
||||||
// Adds fake data into the cursor.
|
// Adds fake data into the cursor.
|
||||||
cursor.addRow(new Object[] {
|
cursor.addRow(
|
||||||
"app name1", timestamp1, 1, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, true});
|
new Object[] {
|
||||||
cursor.addRow(new Object[] {
|
"app name1", timestamp1, 1, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, true
|
||||||
"app name2", timestamp2, 2, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false});
|
});
|
||||||
cursor.addRow(new Object[] {
|
cursor.addRow(
|
||||||
"app name3", timestamp2, 3, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false});
|
new Object[] {
|
||||||
cursor.addRow(new Object[] {
|
"app name2", timestamp2, 2, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false
|
||||||
"app name4", timestamp2, 4, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false});
|
});
|
||||||
|
cursor.addRow(
|
||||||
|
new Object[] {
|
||||||
|
"app name3", timestamp2, 3, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false
|
||||||
|
});
|
||||||
|
cursor.addRow(
|
||||||
|
new Object[] {
|
||||||
|
"app name4", timestamp2, 4, ConvertUtils.CONSUMER_TYPE_UID_BATTERY, false
|
||||||
|
});
|
||||||
DatabaseUtils.sFakeSupplier = () -> cursor;
|
DatabaseUtils.sFakeSupplier = () -> cursor;
|
||||||
|
|
||||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap =
|
final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap =
|
||||||
@@ -421,8 +445,9 @@ public final class DatabaseUtilsTest {
|
|||||||
public void getHistoryMap_withWorkProfile_returnExpectedMap()
|
public void getHistoryMap_withWorkProfile_returnExpectedMap()
|
||||||
throws PackageManager.NameNotFoundException {
|
throws PackageManager.NameNotFoundException {
|
||||||
doReturn("com.fake.package").when(mContext).getPackageName();
|
doReturn("com.fake.package").when(mContext).getPackageName();
|
||||||
doReturn(mMockContext).when(mContext).createPackageContextAsUser(
|
doReturn(mMockContext)
|
||||||
"com.fake.package", /*flags=*/ 0, UserHandle.OWNER);
|
.when(mContext)
|
||||||
|
.createPackageContextAsUser("com.fake.package", /* flags= */ 0, UserHandle.OWNER);
|
||||||
doReturn(UserHandle.CURRENT).when(mContext).getUser();
|
doReturn(UserHandle.CURRENT).when(mContext).getUser();
|
||||||
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
|
||||||
doReturn(true).when(mUserManager).isManagedProfile();
|
doReturn(true).when(mUserManager).isManagedProfile();
|
||||||
@@ -440,8 +465,7 @@ public final class DatabaseUtilsTest {
|
|||||||
public void removeUsageSource_hasNoData() {
|
public void removeUsageSource_hasNoData() {
|
||||||
DatabaseUtils.removeUsageSource(mContext);
|
DatabaseUtils.removeUsageSource(mContext);
|
||||||
assertThat(
|
assertThat(
|
||||||
DatabaseUtils
|
DatabaseUtils.getSharedPreferences(mContext)
|
||||||
.getSharedPreferences(mContext)
|
|
||||||
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
||||||
.isFalse();
|
.isFalse();
|
||||||
}
|
}
|
||||||
@@ -457,8 +481,7 @@ public final class DatabaseUtilsTest {
|
|||||||
DatabaseUtils.removeUsageSource(mContext);
|
DatabaseUtils.removeUsageSource(mContext);
|
||||||
|
|
||||||
assertThat(
|
assertThat(
|
||||||
DatabaseUtils
|
DatabaseUtils.getSharedPreferences(mContext)
|
||||||
.getSharedPreferences(mContext)
|
|
||||||
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
.contains(DatabaseUtils.KEY_LAST_USAGE_SOURCE))
|
||||||
.isFalse();
|
.isFalse();
|
||||||
}
|
}
|
||||||
@@ -482,9 +505,10 @@ public final class DatabaseUtilsTest {
|
|||||||
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
||||||
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
||||||
assertThat(
|
assertThat(
|
||||||
DatabaseUtils
|
DatabaseUtils.getSharedPreferences(mContext)
|
||||||
.getSharedPreferences(mContext)
|
.getInt(
|
||||||
.getInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_CURRENT_ACTIVITY))
|
DatabaseUtils.KEY_LAST_USAGE_SOURCE,
|
||||||
|
USAGE_SOURCE_CURRENT_ACTIVITY))
|
||||||
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
.isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -495,9 +519,10 @@ public final class DatabaseUtilsTest {
|
|||||||
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager))
|
||||||
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
|
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
|
||||||
assertThat(
|
assertThat(
|
||||||
DatabaseUtils
|
DatabaseUtils.getSharedPreferences(mContext)
|
||||||
.getSharedPreferences(mContext)
|
.getInt(
|
||||||
.getInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_CURRENT_ACTIVITY))
|
DatabaseUtils.KEY_LAST_USAGE_SOURCE,
|
||||||
|
USAGE_SOURCE_CURRENT_ACTIVITY))
|
||||||
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
|
.isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -506,20 +531,16 @@ public final class DatabaseUtilsTest {
|
|||||||
final String preferenceKey = "test_preference_key";
|
final String preferenceKey = "test_preference_key";
|
||||||
DatabaseUtils.recordDateTime(mContext, preferenceKey);
|
DatabaseUtils.recordDateTime(mContext, preferenceKey);
|
||||||
|
|
||||||
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey))
|
assertThat(DatabaseUtils.getSharedPreferences(mContext).contains(preferenceKey)).isTrue();
|
||||||
.isTrue();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void dump_dumpExpectedData() {
|
public void dump_dumpExpectedData() {
|
||||||
DatabaseUtils.recordDateTime(mContext,
|
DatabaseUtils.recordDateTime(mContext, Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
||||||
Intent.ACTION_BATTERY_LEVEL_CHANGED);
|
DatabaseUtils.recordDateTime(
|
||||||
DatabaseUtils.recordDateTime(mContext,
|
mContext, BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
||||||
BatteryUsageBroadcastReceiver.ACTION_BATTERY_UNPLUGGING);
|
DatabaseUtils.recordDateTime(mContext, DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME);
|
||||||
DatabaseUtils.recordDateTime(mContext,
|
DatabaseUtils.recordDateTime(mContext, DatabaseUtils.KEY_LAST_UPLOAD_FULL_CHARGE_TIME);
|
||||||
DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME);
|
|
||||||
DatabaseUtils.recordDateTime(mContext,
|
|
||||||
DatabaseUtils.KEY_LAST_UPLOAD_FULL_CHARGE_TIME);
|
|
||||||
final StringWriter stringWriter = new StringWriter();
|
final StringWriter stringWriter = new StringWriter();
|
||||||
final PrintWriter printWriter = new PrintWriter(stringWriter);
|
final PrintWriter printWriter = new PrintWriter(stringWriter);
|
||||||
|
|
||||||
@@ -570,8 +591,7 @@ public final class DatabaseUtilsTest {
|
|||||||
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
.isEqualTo(BatteryManager.BATTERY_STATUS_FULL);
|
||||||
assertThat(deviceBatteryState.getBatteryHealth())
|
assertThat(deviceBatteryState.getBatteryHealth())
|
||||||
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
.isEqualTo(BatteryManager.BATTERY_HEALTH_COLD);
|
||||||
assertThat(values.getAsString("packageName"))
|
assertThat(values.getAsString("packageName")).isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
||||||
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Intent getBatteryIntent() {
|
private static Intent getBatteryIntent() {
|
||||||
@@ -590,6 +610,7 @@ public final class DatabaseUtilsTest {
|
|||||||
BatteryHistEntry.KEY_TIMESTAMP,
|
BatteryHistEntry.KEY_TIMESTAMP,
|
||||||
BatteryHistEntry.KEY_UID,
|
BatteryHistEntry.KEY_UID,
|
||||||
BatteryHistEntry.KEY_CONSUMER_TYPE,
|
BatteryHistEntry.KEY_CONSUMER_TYPE,
|
||||||
BatteryHistEntry.KEY_IS_FULL_CHARGE_CYCLE_START});
|
BatteryHistEntry.KEY_IS_FULL_CHARGE_CYCLE_START
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,12 +71,13 @@ public final class PeriodicJobManagerTest {
|
|||||||
public void getTriggerAtMillis_withoutOffset_returnsExpectedResult() {
|
public void getTriggerAtMillis_withoutOffset_returnsExpectedResult() {
|
||||||
long timeSlotUnit = PeriodicJobManager.DATA_FETCH_INTERVAL_MINUTE;
|
long timeSlotUnit = PeriodicJobManager.DATA_FETCH_INTERVAL_MINUTE;
|
||||||
// Sets the current time.
|
// Sets the current time.
|
||||||
Duration currentTimeDuration =
|
Duration currentTimeDuration = Duration.ofMinutes(timeSlotUnit * 2);
|
||||||
Duration.ofMinutes(timeSlotUnit * 2);
|
|
||||||
FakeClock fakeClock = new FakeClock();
|
FakeClock fakeClock = new FakeClock();
|
||||||
fakeClock.setCurrentTime(currentTimeDuration);
|
fakeClock.setCurrentTime(currentTimeDuration);
|
||||||
|
|
||||||
assertThat(PeriodicJobManager.getTriggerAtMillis(mContext, fakeClock, /*fromBoot=*/ false))
|
assertThat(
|
||||||
|
PeriodicJobManager.getTriggerAtMillis(
|
||||||
|
mContext, fakeClock, /* fromBoot= */ false))
|
||||||
.isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis());
|
.isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -86,8 +87,7 @@ public final class PeriodicJobManagerTest {
|
|||||||
// Sets the current time.
|
// Sets the current time.
|
||||||
Duration currentTimeDuration = Duration.ofMinutes(timeSlotUnit * 2);
|
Duration currentTimeDuration = Duration.ofMinutes(timeSlotUnit * 2);
|
||||||
FakeClock fakeClock = new FakeClock();
|
FakeClock fakeClock = new FakeClock();
|
||||||
fakeClock.setCurrentTime(
|
fakeClock.setCurrentTime(currentTimeDuration.plusMinutes(1L).plusMillis(51L));
|
||||||
currentTimeDuration.plusMinutes(1L).plusMillis(51L));
|
|
||||||
|
|
||||||
assertThat(PeriodicJobManager.getTriggerAtMillis(mContext, fakeClock, /* fromBoot= */ true))
|
assertThat(PeriodicJobManager.getTriggerAtMillis(mContext, fakeClock, /* fromBoot= */ true))
|
||||||
.isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis());
|
.isEqualTo(currentTimeDuration.plusMinutes(timeSlotUnit).toMillis());
|
||||||
|
|||||||
@@ -129,5 +129,4 @@ public final class PeriodicJobReceiverTest {
|
|||||||
// Ensures the testing environment is correct.
|
// Ensures the testing environment is correct.
|
||||||
assertThat(mDao.getAllAfter(0)).hasSize(3);
|
assertThat(mDao.getAllAfter(0)).hasSize(3);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,8 +53,12 @@ public class PowerGaugePreferenceTest {
|
|||||||
MockitoAnnotations.initMocks(this);
|
MockitoAnnotations.initMocks(this);
|
||||||
|
|
||||||
mContext = RuntimeEnvironment.application;
|
mContext = RuntimeEnvironment.application;
|
||||||
mRootView = LayoutInflater.from(mContext)
|
mRootView =
|
||||||
.inflate(com.android.settingslib.widget.preference.app.R.layout.preference_app, null);
|
LayoutInflater.from(mContext)
|
||||||
|
.inflate(
|
||||||
|
com.android.settingslib.widget.preference.app.R.layout
|
||||||
|
.preference_app,
|
||||||
|
null);
|
||||||
mWidgetView =
|
mWidgetView =
|
||||||
LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null);
|
LayoutInflater.from(mContext).inflate(R.layout.preference_widget_summary, null);
|
||||||
final LinearLayout widgetFrame = mRootView.findViewById(android.R.id.widget_frame);
|
final LinearLayout widgetFrame = mRootView.findViewById(android.R.id.widget_frame);
|
||||||
|
|||||||
@@ -55,14 +55,10 @@ public final class PowerUsageAdvancedTest {
|
|||||||
private Predicate<PowerAnomalyEvent> mCardFilterPredicate;
|
private Predicate<PowerAnomalyEvent> mCardFilterPredicate;
|
||||||
private Predicate<PowerAnomalyEvent> mSlotFilterPredicate;
|
private Predicate<PowerAnomalyEvent> mSlotFilterPredicate;
|
||||||
|
|
||||||
@Mock
|
@Mock private BatteryTipsController mBatteryTipsController;
|
||||||
private BatteryTipsController mBatteryTipsController;
|
@Mock private BatteryChartPreferenceController mBatteryChartPreferenceController;
|
||||||
@Mock
|
@Mock private ScreenOnTimeController mScreenOnTimeController;
|
||||||
private BatteryChartPreferenceController mBatteryChartPreferenceController;
|
@Mock private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
|
||||||
@Mock
|
|
||||||
private ScreenOnTimeController mScreenOnTimeController;
|
|
||||||
@Mock
|
|
||||||
private BatteryUsageBreakdownController mBatteryUsageBreakdownController;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
@@ -75,7 +71,10 @@ public final class PowerUsageAdvancedTest {
|
|||||||
mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController;
|
mPowerUsageAdvanced.mBatteryChartPreferenceController = mBatteryChartPreferenceController;
|
||||||
mPowerUsageAdvanced.mScreenOnTimeController = mScreenOnTimeController;
|
mPowerUsageAdvanced.mScreenOnTimeController = mScreenOnTimeController;
|
||||||
mPowerUsageAdvanced.mBatteryUsageBreakdownController = mBatteryUsageBreakdownController;
|
mPowerUsageAdvanced.mBatteryUsageBreakdownController = mBatteryUsageBreakdownController;
|
||||||
mPowerUsageAdvanced.mBatteryLevelData = Optional.of(new BatteryLevelData(Map.of(
|
mPowerUsageAdvanced.mBatteryLevelData =
|
||||||
|
Optional.of(
|
||||||
|
new BatteryLevelData(
|
||||||
|
Map.of(
|
||||||
1694354400000L, 1, // 2023-09-10 22:00:00
|
1694354400000L, 1, // 2023-09-10 22:00:00
|
||||||
1694361600000L, 2, // 2023-09-11 00:00:00
|
1694361600000L, 2, // 2023-09-11 00:00:00
|
||||||
1694368800000L, 3))); // 2023-09-11 02:00:00
|
1694368800000L, 3))); // 2023-09-11 02:00:00
|
||||||
@@ -86,15 +85,17 @@ public final class PowerUsageAdvancedTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getFilterAnomalyEvent_withEmptyOrNullList_getNull() {
|
public void getFilterAnomalyEvent_withEmptyOrNullList_getNull() {
|
||||||
prepareCardFilterPredicate(null);
|
prepareCardFilterPredicate(null);
|
||||||
assertThat(PowerUsageAdvanced
|
assertThat(PowerUsageAdvanced.getAnomalyEvent(null, mCardFilterPredicate)).isNull();
|
||||||
.getAnomalyEvent(null, mCardFilterPredicate)).isNull();
|
assertThat(PowerUsageAdvanced.getAnomalyEvent(null, mSlotFilterPredicate)).isNull();
|
||||||
assertThat(PowerUsageAdvanced
|
assertThat(
|
||||||
.getAnomalyEvent(null, mSlotFilterPredicate)).isNull();
|
PowerUsageAdvanced.getAnomalyEvent(
|
||||||
assertThat(PowerUsageAdvanced.getAnomalyEvent(
|
BatteryTestUtils.createEmptyPowerAnomalyEventList(),
|
||||||
BatteryTestUtils.createEmptyPowerAnomalyEventList(), mCardFilterPredicate))
|
mCardFilterPredicate))
|
||||||
.isNull();
|
.isNull();
|
||||||
assertThat(PowerUsageAdvanced.getAnomalyEvent(
|
assertThat(
|
||||||
BatteryTestUtils.createEmptyPowerAnomalyEventList(), mSlotFilterPredicate))
|
PowerUsageAdvanced.getAnomalyEvent(
|
||||||
|
BatteryTestUtils.createEmptyPowerAnomalyEventList(),
|
||||||
|
mSlotFilterPredicate))
|
||||||
.isNull();
|
.isNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -104,12 +105,10 @@ public final class PowerUsageAdvancedTest {
|
|||||||
BatteryTestUtils.createNonEmptyPowerAnomalyEventList();
|
BatteryTestUtils.createNonEmptyPowerAnomalyEventList();
|
||||||
|
|
||||||
final PowerAnomalyEvent slotEvent =
|
final PowerAnomalyEvent slotEvent =
|
||||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
|
||||||
mSlotFilterPredicate);
|
|
||||||
prepareCardFilterPredicate(slotEvent);
|
prepareCardFilterPredicate(slotEvent);
|
||||||
final PowerAnomalyEvent cardEvent =
|
final PowerAnomalyEvent cardEvent =
|
||||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
|
||||||
mCardFilterPredicate);
|
|
||||||
|
|
||||||
assertThat(cardEvent).isEqualTo(BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
|
assertThat(cardEvent).isEqualTo(BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent());
|
||||||
assertThat(slotEvent).isNull();
|
assertThat(slotEvent).isNull();
|
||||||
@@ -123,12 +122,10 @@ public final class PowerUsageAdvancedTest {
|
|||||||
DatabaseUtils.setDismissedPowerAnomalyKeys(mContext, PowerAnomalyKey.KEY_BRIGHTNESS.name());
|
DatabaseUtils.setDismissedPowerAnomalyKeys(mContext, PowerAnomalyKey.KEY_BRIGHTNESS.name());
|
||||||
|
|
||||||
final PowerAnomalyEvent slotEvent =
|
final PowerAnomalyEvent slotEvent =
|
||||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
|
||||||
mSlotFilterPredicate);
|
|
||||||
prepareCardFilterPredicate(slotEvent);
|
prepareCardFilterPredicate(slotEvent);
|
||||||
final PowerAnomalyEvent cardEvent =
|
final PowerAnomalyEvent cardEvent =
|
||||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
|
||||||
mCardFilterPredicate);
|
|
||||||
|
|
||||||
assertThat(cardEvent).isEqualTo(BatteryTestUtils.createScreenTimeoutAnomalyEvent());
|
assertThat(cardEvent).isEqualTo(BatteryTestUtils.createScreenTimeoutAnomalyEvent());
|
||||||
assertThat(slotEvent).isNull();
|
assertThat(slotEvent).isNull();
|
||||||
@@ -144,12 +141,10 @@ public final class PowerUsageAdvancedTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
final PowerAnomalyEvent slotEvent =
|
final PowerAnomalyEvent slotEvent =
|
||||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mSlotFilterPredicate);
|
||||||
mSlotFilterPredicate);
|
|
||||||
prepareCardFilterPredicate(slotEvent);
|
prepareCardFilterPredicate(slotEvent);
|
||||||
final PowerAnomalyEvent cardEvent =
|
final PowerAnomalyEvent cardEvent =
|
||||||
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList,
|
PowerUsageAdvanced.getAnomalyEvent(powerAnomalyEventList, mCardFilterPredicate);
|
||||||
mCardFilterPredicate);
|
|
||||||
|
|
||||||
assertThat(cardEvent).isNull();
|
assertThat(cardEvent).isNull();
|
||||||
assertThat(slotEvent).isNull();
|
assertThat(slotEvent).isNull();
|
||||||
@@ -165,7 +160,8 @@ public final class PowerUsageAdvancedTest {
|
|||||||
.isEqualTo(event.getEventId());
|
.isEqualTo(event.getEventId());
|
||||||
verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyConfirmListener(isNull());
|
verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyConfirmListener(isNull());
|
||||||
verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyRejectListener(isNull());
|
verify(mPowerUsageAdvanced.mBatteryTipsController).setOnAnomalyRejectListener(isNull());
|
||||||
verify(mPowerUsageAdvanced.mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(
|
verify(mPowerUsageAdvanced.mBatteryChartPreferenceController)
|
||||||
|
.onHighlightSlotIndexUpdate(
|
||||||
eq(BatteryChartViewModel.SELECTED_INDEX_INVALID),
|
eq(BatteryChartViewModel.SELECTED_INDEX_INVALID),
|
||||||
eq(BatteryChartViewModel.SELECTED_INDEX_INVALID));
|
eq(BatteryChartViewModel.SELECTED_INDEX_INVALID));
|
||||||
}
|
}
|
||||||
@@ -180,10 +176,14 @@ public final class PowerUsageAdvancedTest {
|
|||||||
.isEqualTo(event.getEventId());
|
.isEqualTo(event.getEventId());
|
||||||
verify(mBatteryTipsController).setOnAnomalyConfirmListener(isNull());
|
verify(mBatteryTipsController).setOnAnomalyConfirmListener(isNull());
|
||||||
verify(mBatteryTipsController).setOnAnomalyRejectListener(isNull());
|
verify(mBatteryTipsController).setOnAnomalyRejectListener(isNull());
|
||||||
assertThat(mPowerUsageAdvanced.mBatteryLevelData.get().getIndexByTimestamps(
|
assertThat(
|
||||||
|
mPowerUsageAdvanced
|
||||||
|
.mBatteryLevelData
|
||||||
|
.get()
|
||||||
|
.getIndexByTimestamps(
|
||||||
event.getWarningItemInfo().getStartTimestamp(),
|
event.getWarningItemInfo().getStartTimestamp(),
|
||||||
event.getWarningItemInfo().getEndTimestamp()
|
event.getWarningItemInfo().getEndTimestamp()))
|
||||||
)).isEqualTo(Pair.create(1, 0));
|
.isEqualTo(Pair.create(1, 0));
|
||||||
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
|
verify(mBatteryChartPreferenceController).onHighlightSlotIndexUpdate(eq(1), eq(0));
|
||||||
verify(mBatteryTipsController).setOnAnomalyConfirmListener(notNull());
|
verify(mBatteryTipsController).setOnAnomalyConfirmListener(notNull());
|
||||||
}
|
}
|
||||||
@@ -192,8 +192,7 @@ public final class PowerUsageAdvancedTest {
|
|||||||
public void onDisplayAnomalyEventUpdated_withSettingsCardAndAppsSlotEvent_showExpected() {
|
public void onDisplayAnomalyEventUpdated_withSettingsCardAndAppsSlotEvent_showExpected() {
|
||||||
final PowerAnomalyEvent settingsEvent =
|
final PowerAnomalyEvent settingsEvent =
|
||||||
BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent();
|
BatteryTestUtils.createAdaptiveBrightnessAnomalyEvent();
|
||||||
final PowerAnomalyEvent appsEvent =
|
final PowerAnomalyEvent appsEvent = BatteryTestUtils.createAppAnomalyEvent();
|
||||||
BatteryTestUtils.createAppAnomalyEvent();
|
|
||||||
|
|
||||||
mPowerUsageAdvanced.onDisplayAnomalyEventUpdated(settingsEvent, appsEvent);
|
mPowerUsageAdvanced.onDisplayAnomalyEventUpdated(settingsEvent, appsEvent);
|
||||||
|
|
||||||
@@ -207,8 +206,9 @@ public final class PowerUsageAdvancedTest {
|
|||||||
private void prepareCardFilterPredicate(PowerAnomalyEvent slotEvent) {
|
private void prepareCardFilterPredicate(PowerAnomalyEvent slotEvent) {
|
||||||
final Set<String> dismissedPowerAnomalyKeys =
|
final Set<String> dismissedPowerAnomalyKeys =
|
||||||
DatabaseUtils.getDismissedPowerAnomalyKeys(mContext);
|
DatabaseUtils.getDismissedPowerAnomalyKeys(mContext);
|
||||||
mCardFilterPredicate = event -> !dismissedPowerAnomalyKeys.contains(
|
mCardFilterPredicate =
|
||||||
event.getDismissRecordKey())
|
event ->
|
||||||
|
!dismissedPowerAnomalyKeys.contains(event.getDismissRecordKey())
|
||||||
&& (event.equals(slotEvent) || !event.hasWarningItemInfo());
|
&& (event.equals(slotEvent) || !event.hasWarningItemInfo());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -52,10 +52,8 @@ import java.util.List;
|
|||||||
@Config(shadows = ShadowDashboardFragment.class)
|
@Config(shadows = ShadowDashboardFragment.class)
|
||||||
public class PowerUsageBaseTest {
|
public class PowerUsageBaseTest {
|
||||||
|
|
||||||
@Mock
|
@Mock private LoaderManager mLoaderManager;
|
||||||
private LoaderManager mLoaderManager;
|
@Mock private Loader<BatteryUsageStats> mBatteryUsageStatsLoader;
|
||||||
@Mock
|
|
||||||
private Loader<BatteryUsageStats> mBatteryUsageStatsLoader;
|
|
||||||
private TestFragment mFragment;
|
private TestFragment mFragment;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
@@ -77,16 +75,19 @@ public class PowerUsageBaseTest {
|
|||||||
final Bundle bundle = new Bundle();
|
final Bundle bundle = new Bundle();
|
||||||
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||||
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
||||||
doReturn(mBatteryUsageStatsLoader).when(mLoaderManager).getLoader(
|
doReturn(mBatteryUsageStatsLoader)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||||
doReturn(false).when(mBatteryUsageStatsLoader).isReset();
|
doReturn(false).when(mBatteryUsageStatsLoader).isReset();
|
||||||
|
|
||||||
mFragment.restartBatteryStatsLoader(
|
mFragment.restartBatteryStatsLoader(
|
||||||
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||||
|
|
||||||
verify(mLoaderManager)
|
verify(mLoaderManager)
|
||||||
.restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
.restartLoader(
|
||||||
refEq(bundle), any());
|
eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||||
|
refEq(bundle),
|
||||||
|
any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -94,16 +95,19 @@ public class PowerUsageBaseTest {
|
|||||||
final Bundle bundle = new Bundle();
|
final Bundle bundle = new Bundle();
|
||||||
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||||
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
||||||
doReturn(mBatteryUsageStatsLoader).when(mLoaderManager).getLoader(
|
doReturn(mBatteryUsageStatsLoader)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||||
doReturn(true).when(mBatteryUsageStatsLoader).isReset();
|
doReturn(true).when(mBatteryUsageStatsLoader).isReset();
|
||||||
|
|
||||||
mFragment.restartBatteryStatsLoader(
|
mFragment.restartBatteryStatsLoader(
|
||||||
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||||
|
|
||||||
verify(mLoaderManager)
|
verify(mLoaderManager)
|
||||||
.initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
.initLoader(
|
||||||
refEq(bundle), any());
|
eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||||
|
refEq(bundle),
|
||||||
|
any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -111,14 +115,18 @@ public class PowerUsageBaseTest {
|
|||||||
final Bundle bundle = new Bundle();
|
final Bundle bundle = new Bundle();
|
||||||
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
bundle.putInt(KEY_REFRESH_TYPE, BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||||
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
bundle.putBoolean(KEY_INCLUDE_HISTORY, false);
|
||||||
doReturn(null).when(mLoaderManager).getLoader(
|
doReturn(null)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER);
|
||||||
|
|
||||||
mFragment.restartBatteryStatsLoader(
|
mFragment.restartBatteryStatsLoader(
|
||||||
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
BatteryBroadcastReceiver.BatteryUpdateType.BATTERY_STATUS);
|
||||||
|
|
||||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
verify(mLoaderManager)
|
||||||
refEq(bundle), any());
|
.initLoader(
|
||||||
|
eq(PowerUsageBase.LoaderIndex.BATTERY_USAGE_STATS_LOADER),
|
||||||
|
refEq(bundle),
|
||||||
|
any());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class TestFragment extends PowerUsageBase {
|
private static class TestFragment extends PowerUsageBase {
|
||||||
|
|||||||
@@ -70,7 +70,8 @@ import java.util.List;
|
|||||||
|
|
||||||
// TODO: Improve this test class so that it starts up the real activity and fragment.
|
// TODO: Improve this test class so that it starts up the real activity and fragment.
|
||||||
@RunWith(RobolectricTestRunner.class)
|
@RunWith(RobolectricTestRunner.class)
|
||||||
@Config(shadows = {
|
@Config(
|
||||||
|
shadows = {
|
||||||
com.android.settings.testutils.shadow.ShadowFragment.class,
|
com.android.settings.testutils.shadow.ShadowFragment.class,
|
||||||
})
|
})
|
||||||
public class PowerUsageSummaryTest {
|
public class PowerUsageSummaryTest {
|
||||||
@@ -81,26 +82,16 @@ public class PowerUsageSummaryTest {
|
|||||||
sAdditionalBatteryInfoIntent = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
|
sAdditionalBatteryInfoIntent = new Intent("com.example.app.ADDITIONAL_BATTERY_INFO");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Mock
|
@Mock private SettingsActivity mSettingsActivity;
|
||||||
private SettingsActivity mSettingsActivity;
|
@Mock private LoaderManager mLoaderManager;
|
||||||
@Mock
|
@Mock private Loader<BatteryTip> mBatteryTipLoader;
|
||||||
private LoaderManager mLoaderManager;
|
@Mock private Loader<BatteryInfo> mBatteryInfoLoader;
|
||||||
@Mock
|
@Mock private ContentResolver mContentResolver;
|
||||||
private Loader<BatteryTip> mBatteryTipLoader;
|
@Mock private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
|
||||||
@Mock
|
@Mock private VisibilityLoggerMixin mVisibilityLoggerMixin;
|
||||||
private Loader<BatteryInfo> mBatteryInfoLoader;
|
@Mock private PreferenceScreen mPreferenceScreen;
|
||||||
@Mock
|
@Mock private Preference mBatteryUsagePreference;
|
||||||
private ContentResolver mContentResolver;
|
@Mock private Preference mHelpPreference;
|
||||||
@Mock
|
|
||||||
private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
|
|
||||||
@Mock
|
|
||||||
private VisibilityLoggerMixin mVisibilityLoggerMixin;
|
|
||||||
@Mock
|
|
||||||
private PreferenceScreen mPreferenceScreen;
|
|
||||||
@Mock
|
|
||||||
private Preference mBatteryUsagePreference;
|
|
||||||
@Mock
|
|
||||||
private Preference mHelpPreference;
|
|
||||||
|
|
||||||
private Context mRealContext;
|
private Context mRealContext;
|
||||||
private TestFragment mFragment;
|
private TestFragment mFragment;
|
||||||
@@ -120,8 +111,8 @@ public class PowerUsageSummaryTest {
|
|||||||
.thenReturn(sAdditionalBatteryInfoIntent);
|
.thenReturn(sAdditionalBatteryInfoIntent);
|
||||||
mFragment.mBatteryUtils = Mockito.spy(new BatteryUtils(mRealContext));
|
mFragment.mBatteryUtils = Mockito.spy(new BatteryUtils(mRealContext));
|
||||||
ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin);
|
ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin);
|
||||||
ReflectionHelpers.setField(mFragment, "mBatteryBroadcastReceiver",
|
ReflectionHelpers.setField(
|
||||||
mBatteryBroadcastReceiver);
|
mFragment, "mBatteryBroadcastReceiver", mBatteryBroadcastReceiver);
|
||||||
doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
|
doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
|
||||||
when(mFragment.getContentResolver()).thenReturn(mContentResolver);
|
when(mFragment.getContentResolver()).thenReturn(mContentResolver);
|
||||||
when(mFragment.findPreference(KEY_BATTERY_USAGE)).thenReturn(mBatteryUsagePreference);
|
when(mFragment.findPreference(KEY_BATTERY_USAGE)).thenReturn(mBatteryUsagePreference);
|
||||||
@@ -158,41 +149,45 @@ public class PowerUsageSummaryTest {
|
|||||||
@Test
|
@Test
|
||||||
public void restartBatteryTipLoader() {
|
public void restartBatteryTipLoader() {
|
||||||
// TODO: add policy logic here when BatteryTipPolicy is implemented
|
// TODO: add policy logic here when BatteryTipPolicy is implemented
|
||||||
doReturn(mBatteryTipLoader).when(mLoaderManager).getLoader(
|
doReturn(mBatteryTipLoader)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||||
doReturn(false).when(mBatteryTipLoader).isReset();
|
doReturn(false).when(mBatteryTipLoader).isReset();
|
||||||
|
|
||||||
mFragment.restartBatteryTipLoader();
|
mFragment.restartBatteryTipLoader();
|
||||||
|
|
||||||
verify(mLoaderManager).restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER),
|
verify(mLoaderManager)
|
||||||
eq(Bundle.EMPTY), any());
|
.restartLoader(
|
||||||
|
eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void restartBatteryTipLoader_nullLoader_initLoader() {
|
public void restartBatteryTipLoader_nullLoader_initLoader() {
|
||||||
doReturn(null).when(mLoaderManager).getLoader(
|
doReturn(null)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||||
|
|
||||||
mFragment.restartBatteryTipLoader();
|
mFragment.restartBatteryTipLoader();
|
||||||
|
|
||||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER),
|
verify(mLoaderManager)
|
||||||
eq(Bundle.EMPTY), any());
|
.initLoader(
|
||||||
|
eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void restartBatteryTipLoader_loaderReset_initLoader() {
|
public void restartBatteryTipLoader_loaderReset_initLoader() {
|
||||||
doReturn(mBatteryTipLoader).when(mLoaderManager).getLoader(
|
doReturn(mBatteryTipLoader)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER);
|
||||||
doReturn(true).when(mBatteryTipLoader).isReset();
|
doReturn(true).when(mBatteryTipLoader).isReset();
|
||||||
|
|
||||||
mFragment.restartBatteryTipLoader();
|
mFragment.restartBatteryTipLoader();
|
||||||
|
|
||||||
|
verify(mLoaderManager)
|
||||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER),
|
.initLoader(
|
||||||
eq(Bundle.EMPTY), any());
|
eq(PowerUsageBase.LoaderIndex.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void refreshUi_contextNull_doNothing() {
|
public void refreshUi_contextNull_doNothing() {
|
||||||
doReturn(null).when(mFragment).getContext();
|
doReturn(null).when(mFragment).getContext();
|
||||||
@@ -256,8 +251,10 @@ public class PowerUsageSummaryTest {
|
|||||||
public void onResume_registerContentObserver() {
|
public void onResume_registerContentObserver() {
|
||||||
mFragment.onResume();
|
mFragment.onResume();
|
||||||
|
|
||||||
verify(mContentResolver).registerContentObserver(
|
verify(mContentResolver)
|
||||||
Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
|
.registerContentObserver(
|
||||||
|
Settings.Global.getUriFor(
|
||||||
|
Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
|
||||||
false,
|
false,
|
||||||
mFragment.mSettingsObserver);
|
mFragment.mSettingsObserver);
|
||||||
}
|
}
|
||||||
@@ -266,8 +263,7 @@ public class PowerUsageSummaryTest {
|
|||||||
public void onPause_unregisterContentObserver() {
|
public void onPause_unregisterContentObserver() {
|
||||||
mFragment.onPause();
|
mFragment.onPause();
|
||||||
|
|
||||||
verify(mContentResolver).unregisterContentObserver(
|
verify(mContentResolver).unregisterContentObserver(mFragment.mSettingsObserver);
|
||||||
mFragment.mSettingsObserver);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -276,8 +272,10 @@ public class PowerUsageSummaryTest {
|
|||||||
|
|
||||||
mFragment.restartBatteryInfoLoader();
|
mFragment.restartBatteryInfoLoader();
|
||||||
|
|
||||||
verify(mLoaderManager, never()).restartLoader(
|
verify(mLoaderManager, never())
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER, Bundle.EMPTY,
|
.restartLoader(
|
||||||
|
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER,
|
||||||
|
Bundle.EMPTY,
|
||||||
mFragment.mBatteryInfoLoaderCallbacks);
|
mFragment.mBatteryInfoLoaderCallbacks);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,45 +285,59 @@ public class PowerUsageSummaryTest {
|
|||||||
|
|
||||||
mFragment.restartBatteryInfoLoader();
|
mFragment.restartBatteryInfoLoader();
|
||||||
|
|
||||||
verify(mLoaderManager, never()).restartLoader(
|
verify(mLoaderManager, never())
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER, Bundle.EMPTY,
|
.restartLoader(
|
||||||
|
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER,
|
||||||
|
Bundle.EMPTY,
|
||||||
mFragment.mBatteryInfoLoaderCallbacks);
|
mFragment.mBatteryInfoLoaderCallbacks);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void restartBatteryInfoLoader() {
|
public void restartBatteryInfoLoader() {
|
||||||
doReturn(mBatteryInfoLoader).when(mLoaderManager).getLoader(
|
doReturn(mBatteryInfoLoader)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||||
doReturn(false).when(mBatteryTipLoader).isReset();
|
doReturn(false).when(mBatteryTipLoader).isReset();
|
||||||
|
|
||||||
mFragment.restartBatteryInfoLoader();
|
mFragment.restartBatteryInfoLoader();
|
||||||
|
|
||||||
verify(mLoaderManager).restartLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
verify(mLoaderManager)
|
||||||
eq(Bundle.EMPTY), any());
|
.restartLoader(
|
||||||
|
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||||
|
eq(Bundle.EMPTY),
|
||||||
|
any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void restartBatteryInfoLoader_nullLoader_initLoader() {
|
public void restartBatteryInfoLoader_nullLoader_initLoader() {
|
||||||
doReturn(null).when(mLoaderManager).getLoader(
|
doReturn(null)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||||
|
|
||||||
mFragment.restartBatteryInfoLoader();
|
mFragment.restartBatteryInfoLoader();
|
||||||
|
|
||||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
verify(mLoaderManager)
|
||||||
eq(Bundle.EMPTY), any());
|
.initLoader(
|
||||||
|
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||||
|
eq(Bundle.EMPTY),
|
||||||
|
any());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void restartBatteryInfoLoader_loaderReset_initLoader() {
|
public void restartBatteryInfoLoader_loaderReset_initLoader() {
|
||||||
mFragment.setIsBatteryPresent(true);
|
mFragment.setIsBatteryPresent(true);
|
||||||
doReturn(mBatteryInfoLoader).when(mLoaderManager).getLoader(
|
doReturn(mBatteryInfoLoader)
|
||||||
PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
.when(mLoaderManager)
|
||||||
|
.getLoader(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER);
|
||||||
doReturn(true).when(mBatteryInfoLoader).isReset();
|
doReturn(true).when(mBatteryInfoLoader).isReset();
|
||||||
|
|
||||||
mFragment.restartBatteryInfoLoader();
|
mFragment.restartBatteryInfoLoader();
|
||||||
|
|
||||||
verify(mLoaderManager).initLoader(eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
verify(mLoaderManager)
|
||||||
eq(Bundle.EMPTY), any());
|
.initLoader(
|
||||||
|
eq(PowerUsageBase.LoaderIndex.BATTERY_INFO_LOADER),
|
||||||
|
eq(Bundle.EMPTY),
|
||||||
|
any());
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class TestFragment extends PowerUsageSummary {
|
private static class TestFragment extends PowerUsageSummary {
|
||||||
@@ -357,5 +369,4 @@ public class PowerUsageSummaryTest {
|
|||||||
return mLoaderManager;
|
return mLoaderManager;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,10 +46,8 @@ public final class ScreenOnTimeControllerTest {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
private ScreenOnTimeController mScreenOnTimeController;
|
private ScreenOnTimeController mScreenOnTimeController;
|
||||||
|
|
||||||
@Mock
|
@Mock private PreferenceCategory mRootPreference;
|
||||||
private PreferenceCategory mRootPreference;
|
@Mock private TextViewPreference mScreenOnTimeTextPreference;
|
||||||
@Mock
|
|
||||||
private TextViewPreference mScreenOnTimeTextPreference;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
|||||||
@@ -42,8 +42,7 @@ public final class SpinnerPreferenceTest {
|
|||||||
private Context mContext;
|
private Context mContext;
|
||||||
private SpinnerPreference mSpinnerPreference;
|
private SpinnerPreference mSpinnerPreference;
|
||||||
|
|
||||||
@Mock
|
@Mock private Spinner mMockSpinner;
|
||||||
private Spinner mMockSpinner;
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ public final class TextViewPreferenceTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void constructor_returnExpectedResult() {
|
public void constructor_returnExpectedResult() {
|
||||||
assertThat(mTextViewPreference.getLayoutResource()).isEqualTo(
|
assertThat(mTextViewPreference.getLayoutResource())
|
||||||
R.layout.preference_text_view);
|
.isEqualTo(R.layout.preference_text_view);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -36,11 +36,9 @@ public class TimestampUtilsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getNextHourTimestamp_returnExpectedResult() {
|
public void getNextHourTimestamp_returnExpectedResult() {
|
||||||
// 2021-02-28 06:00:00 => 2021-02-28 07:00:00
|
// 2021-02-28 06:00:00 => 2021-02-28 07:00:00
|
||||||
assertThat(TimestampUtils.getNextHourTimestamp(1614463200000L))
|
assertThat(TimestampUtils.getNextHourTimestamp(1614463200000L)).isEqualTo(1614466800000L);
|
||||||
.isEqualTo(1614466800000L);
|
|
||||||
// 2021-12-31 23:59:59 => 2022-01-01 00:00:00
|
// 2021-12-31 23:59:59 => 2022-01-01 00:00:00
|
||||||
assertThat(TimestampUtils.getNextHourTimestamp(16409663999999L))
|
assertThat(TimestampUtils.getNextHourTimestamp(16409663999999L)).isEqualTo(16409664000000L);
|
||||||
.isEqualTo(16409664000000L);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -66,11 +64,9 @@ public class TimestampUtilsTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getTimestampOfNextDay_returnExpectedResult() {
|
public void getTimestampOfNextDay_returnExpectedResult() {
|
||||||
// 2021-02-28 06:00:00 => 2021-03-01 00:00:00
|
// 2021-02-28 06:00:00 => 2021-03-01 00:00:00
|
||||||
assertThat(TimestampUtils.getNextDayTimestamp(1614463200000L))
|
assertThat(TimestampUtils.getNextDayTimestamp(1614463200000L)).isEqualTo(1614528000000L);
|
||||||
.isEqualTo(1614528000000L);
|
|
||||||
// 2021-12-31 16:00:00 => 2022-01-01 00:00:00
|
// 2021-12-31 16:00:00 => 2022-01-01 00:00:00
|
||||||
assertThat(TimestampUtils.getNextDayTimestamp(1640937600000L))
|
assertThat(TimestampUtils.getNextDayTimestamp(1640937600000L)).isEqualTo(1640966400000L);
|
||||||
.isEqualTo(1640966400000L);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
@@ -35,8 +35,8 @@ public final class AppUsageEventEntityTest {
|
|||||||
final int instanceId = 100001;
|
final int instanceId = 100001;
|
||||||
final String taskRootPackageName = "com.android.settings2";
|
final String taskRootPackageName = "com.android.settings2";
|
||||||
|
|
||||||
AppUsageEventEntity entity = AppUsageEventEntity
|
AppUsageEventEntity entity =
|
||||||
.newBuilder()
|
AppUsageEventEntity.newBuilder()
|
||||||
.setUid(uid)
|
.setUid(uid)
|
||||||
.setUserId(userId)
|
.setUserId(userId)
|
||||||
.setTimestamp(timestamp)
|
.setTimestamp(timestamp)
|
||||||
|
|||||||
@@ -60,15 +60,16 @@ public final class BatteryEventDaoTest {
|
|||||||
BatteryStateDatabase.setBatteryStateDatabase(/* database= */ null);
|
BatteryStateDatabase.setBatteryStateDatabase(/* database= */ null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getLastFullChargeTimestamp_normalFlow_expectedBehavior() throws Exception {
|
public void getLastFullChargeTimestamp_normalFlow_expectedBehavior() throws Exception {
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(TIMESTAMP1)
|
.setTimestamp(TIMESTAMP1)
|
||||||
.setBatteryEventType(3)
|
.setBatteryEventType(3)
|
||||||
.setBatteryLevel(100)
|
.setBatteryLevel(100)
|
||||||
.build());
|
.build());
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(TIMESTAMP2)
|
.setTimestamp(TIMESTAMP2)
|
||||||
.setBatteryEventType(4)
|
.setBatteryEventType(4)
|
||||||
.setBatteryLevel(96)
|
.setBatteryLevel(96)
|
||||||
@@ -83,7 +84,8 @@ public final class BatteryEventDaoTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getLastFullChargeTimestamp_noLastFullChargeTime_returns0() throws Exception {
|
public void getLastFullChargeTimestamp_noLastFullChargeTime_returns0() throws Exception {
|
||||||
mBatteryEventDao.clearAll();
|
mBatteryEventDao.clearAll();
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(TIMESTAMP2)
|
.setTimestamp(TIMESTAMP2)
|
||||||
.setBatteryEventType(4)
|
.setBatteryEventType(4)
|
||||||
.setBatteryLevel(96)
|
.setBatteryLevel(96)
|
||||||
@@ -98,12 +100,14 @@ public final class BatteryEventDaoTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAllAfter_normalFlow_returnExpectedResult() {
|
public void getAllAfter_normalFlow_returnExpectedResult() {
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(100L)
|
.setTimestamp(100L)
|
||||||
.setBatteryEventType(1)
|
.setBatteryEventType(1)
|
||||||
.setBatteryLevel(66)
|
.setBatteryLevel(66)
|
||||||
.build());
|
.build());
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(200L)
|
.setTimestamp(200L)
|
||||||
.setBatteryEventType(2)
|
.setBatteryEventType(2)
|
||||||
.setBatteryLevel(88)
|
.setBatteryLevel(88)
|
||||||
@@ -112,12 +116,9 @@ public final class BatteryEventDaoTest {
|
|||||||
final Cursor cursor = mBatteryEventDao.getAllAfter(160L, List.of(1, 2));
|
final Cursor cursor = mBatteryEventDao.getAllAfter(160L, List.of(1, 2));
|
||||||
assertThat(cursor.getCount()).isEqualTo(1);
|
assertThat(cursor.getCount()).isEqualTo(1);
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP)))
|
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(200L);
|
||||||
.isEqualTo(200L);
|
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(2);
|
||||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE)))
|
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(88);
|
||||||
.isEqualTo(2);
|
|
||||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
|
|
||||||
.isEqualTo(88);
|
|
||||||
|
|
||||||
mBatteryEventDao.clearAll();
|
mBatteryEventDao.clearAll();
|
||||||
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
||||||
@@ -125,12 +126,14 @@ public final class BatteryEventDaoTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAllAfter_filterBatteryTypes_returnExpectedResult() {
|
public void getAllAfter_filterBatteryTypes_returnExpectedResult() {
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(100L)
|
.setTimestamp(100L)
|
||||||
.setBatteryEventType(1)
|
.setBatteryEventType(1)
|
||||||
.setBatteryLevel(66)
|
.setBatteryLevel(66)
|
||||||
.build());
|
.build());
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(200L)
|
.setTimestamp(200L)
|
||||||
.setBatteryEventType(2)
|
.setBatteryEventType(2)
|
||||||
.setBatteryLevel(88)
|
.setBatteryLevel(88)
|
||||||
@@ -139,12 +142,9 @@ public final class BatteryEventDaoTest {
|
|||||||
final Cursor cursor = mBatteryEventDao.getAllAfter(0L, List.of(1));
|
final Cursor cursor = mBatteryEventDao.getAllAfter(0L, List.of(1));
|
||||||
assertThat(cursor.getCount()).isEqualTo(1);
|
assertThat(cursor.getCount()).isEqualTo(1);
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP)))
|
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(100L);
|
||||||
.isEqualTo(100L);
|
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(1);
|
||||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE)))
|
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(66);
|
||||||
.isEqualTo(1);
|
|
||||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
|
|
||||||
.isEqualTo(66);
|
|
||||||
|
|
||||||
mBatteryEventDao.clearAll();
|
mBatteryEventDao.clearAll();
|
||||||
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
||||||
@@ -152,12 +152,14 @@ public final class BatteryEventDaoTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getAllAfter_filterTimestamp_returnExpectedResult() {
|
public void getAllAfter_filterTimestamp_returnExpectedResult() {
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(100L)
|
.setTimestamp(100L)
|
||||||
.setBatteryEventType(1)
|
.setBatteryEventType(1)
|
||||||
.setBatteryLevel(66)
|
.setBatteryLevel(66)
|
||||||
.build());
|
.build());
|
||||||
mBatteryEventDao.insert(BatteryEventEntity.newBuilder()
|
mBatteryEventDao.insert(
|
||||||
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(200L)
|
.setTimestamp(200L)
|
||||||
.setBatteryEventType(1)
|
.setBatteryEventType(1)
|
||||||
.setBatteryLevel(88)
|
.setBatteryLevel(88)
|
||||||
@@ -166,12 +168,9 @@ public final class BatteryEventDaoTest {
|
|||||||
final Cursor cursor = mBatteryEventDao.getAllAfter(200L, List.of(1));
|
final Cursor cursor = mBatteryEventDao.getAllAfter(200L, List.of(1));
|
||||||
assertThat(cursor.getCount()).isEqualTo(1);
|
assertThat(cursor.getCount()).isEqualTo(1);
|
||||||
cursor.moveToFirst();
|
cursor.moveToFirst();
|
||||||
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP)))
|
assertThat(cursor.getLong(cursor.getColumnIndex(KEY_TIMESTAMP))).isEqualTo(200L);
|
||||||
.isEqualTo(200L);
|
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE))).isEqualTo(1);
|
||||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_EVENT_TYPE)))
|
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL))).isEqualTo(88);
|
||||||
.isEqualTo(1);
|
|
||||||
assertThat(cursor.getInt(cursor.getColumnIndex(KEY_BATTERY_LEVEL)))
|
|
||||||
.isEqualTo(88);
|
|
||||||
|
|
||||||
mBatteryEventDao.clearAll();
|
mBatteryEventDao.clearAll();
|
||||||
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
assertThat(mBatteryEventDao.getAll()).isEmpty();
|
||||||
|
|||||||
@@ -32,8 +32,8 @@ public final class BatteryEventEntityTest {
|
|||||||
final int batteryEventType = 1;
|
final int batteryEventType = 1;
|
||||||
final int batteryLevel = 66;
|
final int batteryLevel = 66;
|
||||||
|
|
||||||
BatteryEventEntity entity = BatteryEventEntity
|
BatteryEventEntity entity =
|
||||||
.newBuilder()
|
BatteryEventEntity.newBuilder()
|
||||||
.setTimestamp(timestamp)
|
.setTimestamp(timestamp)
|
||||||
.setBatteryEventType(batteryEventType)
|
.setBatteryEventType(batteryEventType)
|
||||||
.setBatteryLevel(batteryLevel)
|
.setBatteryLevel(batteryLevel)
|
||||||
|
|||||||
@@ -57,7 +57,10 @@ public final class BatteryStateDaoTest {
|
|||||||
BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP3, PACKAGE_NAME3);
|
BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP3, PACKAGE_NAME3);
|
||||||
BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP2, PACKAGE_NAME2);
|
BatteryTestUtils.insertDataToBatteryStateTable(mContext, TIMESTAMP2, PACKAGE_NAME2);
|
||||||
BatteryTestUtils.insertDataToBatteryStateTable(
|
BatteryTestUtils.insertDataToBatteryStateTable(
|
||||||
mContext, TIMESTAMP1, PACKAGE_NAME1, /*multiple=*/ true,
|
mContext,
|
||||||
|
TIMESTAMP1,
|
||||||
|
PACKAGE_NAME1,
|
||||||
|
/* multiple= */ true,
|
||||||
/* isFullChargeStart= */ true);
|
/* isFullChargeStart= */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -142,23 +145,19 @@ public final class BatteryStateDaoTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getDistinctTimestampCount_normalFlow_returnsExpectedResult() {
|
public void getDistinctTimestampCount_normalFlow_returnsExpectedResult() {
|
||||||
assertThat(mBatteryStateDao.getDistinctTimestampCount(/*timestamp=*/ 0))
|
assertThat(mBatteryStateDao.getDistinctTimestampCount(/* timestamp= */ 0)).isEqualTo(3);
|
||||||
.isEqualTo(3);
|
assertThat(mBatteryStateDao.getDistinctTimestampCount(TIMESTAMP1)).isEqualTo(2);
|
||||||
assertThat(mBatteryStateDao.getDistinctTimestampCount(TIMESTAMP1))
|
|
||||||
.isEqualTo(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getDistinctTimestamps_normalFlow_returnsExpectedResult() {
|
public void getDistinctTimestamps_normalFlow_returnsExpectedResult() {
|
||||||
final List<Long> timestamps =
|
final List<Long> timestamps = mBatteryStateDao.getDistinctTimestamps(/* timestamp= */ 0);
|
||||||
mBatteryStateDao.getDistinctTimestamps(/*timestamp=*/ 0);
|
|
||||||
|
|
||||||
assertThat(timestamps).hasSize(3);
|
assertThat(timestamps).hasSize(3);
|
||||||
assertThat(timestamps).containsExactly(TIMESTAMP1, TIMESTAMP2, TIMESTAMP3);
|
assertThat(timestamps).containsExactly(TIMESTAMP1, TIMESTAMP2, TIMESTAMP3);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void assertBatteryState(
|
private static void assertBatteryState(BatteryState state, long timestamp, String packageName) {
|
||||||
BatteryState state, long timestamp, String packageName) {
|
|
||||||
assertThat(state.timestamp).isEqualTo(timestamp);
|
assertThat(state.timestamp).isEqualTo(timestamp);
|
||||||
assertThat(state.packageName).isEqualTo(packageName);
|
assertThat(state.packageName).isEqualTo(packageName);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,15 +41,13 @@ public final class BatteryStateTest {
|
|||||||
@Before
|
@Before
|
||||||
public void setUp() {
|
public void setUp() {
|
||||||
final DeviceBatteryState deviceBatteryState =
|
final DeviceBatteryState deviceBatteryState =
|
||||||
DeviceBatteryState
|
DeviceBatteryState.newBuilder()
|
||||||
.newBuilder()
|
|
||||||
.setBatteryLevel(BATTERY_LEVEL)
|
.setBatteryLevel(BATTERY_LEVEL)
|
||||||
.setBatteryStatus(BATTERY_STATUS)
|
.setBatteryStatus(BATTERY_STATUS)
|
||||||
.setBatteryHealth(BATTERY_HEALTH)
|
.setBatteryHealth(BATTERY_HEALTH)
|
||||||
.build();
|
.build();
|
||||||
mBatteryInformation =
|
mBatteryInformation =
|
||||||
BatteryInformation
|
BatteryInformation.newBuilder()
|
||||||
.newBuilder()
|
|
||||||
.setDeviceBatteryState(deviceBatteryState)
|
.setDeviceBatteryState(deviceBatteryState)
|
||||||
.setBootTimestamp(101L)
|
.setBootTimestamp(101L)
|
||||||
.setIsHidden(true)
|
.setIsHidden(true)
|
||||||
@@ -78,8 +76,8 @@ public final class BatteryStateTest {
|
|||||||
assertThat(state.timestamp).isEqualTo(100001L);
|
assertThat(state.timestamp).isEqualTo(100001L);
|
||||||
assertThat(state.consumerType).isEqualTo(2);
|
assertThat(state.consumerType).isEqualTo(2);
|
||||||
assertThat(state.isFullChargeCycleStart).isTrue();
|
assertThat(state.isFullChargeCycleStart).isTrue();
|
||||||
assertThat(state.batteryInformation).isEqualTo(
|
assertThat(state.batteryInformation)
|
||||||
ConvertUtils.convertBatteryInformationToString(mBatteryInformation));
|
.isEqualTo(ConvertUtils.convertBatteryInformationToString(mBatteryInformation));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static BatteryState create(BatteryInformation batteryInformation) {
|
private static BatteryState create(BatteryInformation batteryInformation) {
|
||||||
|
|||||||
@@ -31,8 +31,8 @@ public final class BatteryUsageSlotEntityTest {
|
|||||||
final long timestamp = 10001L;
|
final long timestamp = 10001L;
|
||||||
final String batteryUsageSlotString = "batteryUsageSlotString";
|
final String batteryUsageSlotString = "batteryUsageSlotString";
|
||||||
|
|
||||||
BatteryUsageSlotEntity entity = BatteryUsageSlotEntity
|
BatteryUsageSlotEntity entity =
|
||||||
.newBuilder()
|
BatteryUsageSlotEntity.newBuilder()
|
||||||
.setTimestamp(timestamp)
|
.setTimestamp(timestamp)
|
||||||
.setBatteryUsageSlot(batteryUsageSlotString)
|
.setBatteryUsageSlot(batteryUsageSlotString)
|
||||||
.build();
|
.build();
|
||||||
|
|||||||
Reference in New Issue
Block a user