Small refactor battery usage code according to the comments in previous cls.

Bug: 262802531
Test: presubmit
Change-Id: I0d496fc6a41af5964311dafe8dd89f8b8058de82
This commit is contained in:
Zaiyue Xue
2023-04-12 17:24:16 +08:00
parent c00fb2efbd
commit a2ab3ae5b3
6 changed files with 29 additions and 38 deletions

View File

@@ -313,11 +313,8 @@ public class BatteryUsageBreakdownController extends BasePreferenceController
@VisibleForTesting @VisibleForTesting
void removeAndCacheAllUnusedPreferences() { void removeAndCacheAllUnusedPreferences() {
List<BatteryDiffEntry> entries = getBatteryDiffEntries(); List<BatteryDiffEntry> entries = getBatteryDiffEntries();
Set<String> entryKeySet = new ArraySet<>(); Set<String> entryKeySet = new ArraySet<>(entries.size());
for (BatteryDiffEntry entry : entries) { entries.forEach(entry -> entryKeySet.add(entry.getKey()));
entryKeySet.add(entry.getKey());
}
final int prefsCount = mAppListPreferenceGroup.getPreferenceCount(); final int prefsCount = mAppListPreferenceGroup.getPreferenceCount();
for (int index = prefsCount - 1; index >= 0; index--) { for (int index = prefsCount - 1; index >= 0; index--) {
final Preference pref = mAppListPreferenceGroup.getPreference(index); final Preference pref = mAppListPreferenceGroup.getPreference(index);

View File

@@ -725,9 +725,9 @@ public final class DataProcessor {
@VisibleForTesting @VisibleForTesting
@Nullable @Nullable
static Map<Long, Map<String, List<AppUsagePeriod>>> buildAppUsagePeriodList( static Map<Long, Map<String, List<AppUsagePeriod>>> buildAppUsagePeriodList(
final List<AppUsageEvent> allAppUsageEvents, final List<BatteryEvent> batteryEventList, final List<AppUsageEvent> appUsageEvents, final List<BatteryEvent> batteryEventList,
final long startTime, final long endTime) { final long startTime, final long endTime) {
if (allAppUsageEvents.isEmpty()) { if (appUsageEvents.isEmpty()) {
return null; return null;
} }
@@ -735,7 +735,7 @@ public final class DataProcessor {
// use. // use.
final List<AppUsageEvent> deviceEvents = new ArrayList<>(); final List<AppUsageEvent> deviceEvents = new ArrayList<>();
final ArrayMap<Integer, List<AppUsageEvent>> usageEventsByInstanceId = new ArrayMap<>(); final ArrayMap<Integer, List<AppUsageEvent>> usageEventsByInstanceId = new ArrayMap<>();
for (final AppUsageEvent event : allAppUsageEvents) { for (final AppUsageEvent event : appUsageEvents) {
final AppUsageEventType eventType = event.getType(); final AppUsageEventType eventType = event.getType();
if (eventType == AppUsageEventType.ACTIVITY_RESUMED if (eventType == AppUsageEventType.ACTIVITY_RESUMED
|| eventType == AppUsageEventType.ACTIVITY_STOPPED) { || eventType == AppUsageEventType.ACTIVITY_STOPPED) {

View File

@@ -110,13 +110,7 @@ public final class DatabaseUtils {
// For testing only. // For testing only.
@VisibleForTesting @VisibleForTesting
static Supplier<Cursor> sFakeBatteryStateSupplier; static Supplier<Cursor> sFakeSupplier;
@VisibleForTesting
static Supplier<Cursor> sFakeAppUsageEventSupplier;
@VisibleForTesting
static Supplier<Cursor> sFakeAppUsageLatestTimestampSupplier;
@VisibleForTesting
static Supplier<Cursor> sFakeBatteryEventSupplier;
private DatabaseUtils() { private DatabaseUtils() {
} }
@@ -340,7 +334,7 @@ public final class DatabaseUtils {
resolver.insert(BATTERY_EVENT_URI, contentValues); resolver.insert(BATTERY_EVENT_URI, contentValues);
Log.d(TAG, "insert() battery event data into database: " + batteryEvent.toString()); Log.d(TAG, "insert() battery event data into database: " + batteryEvent.toString());
} catch (Exception e) { } catch (Exception e) {
Log.e(TAG, "insert() battery event data into database error:\n" + e); Log.e(TAG, "insert() battery event data into database error:", e);
} }
Log.d(TAG, String.format("sendBatteryEventData() in %d/ms", Log.d(TAG, String.format("sendBatteryEventData() in %d/ms",
(System.currentTimeMillis() - startTime))); (System.currentTimeMillis() - startTime)));
@@ -487,8 +481,8 @@ public final class DatabaseUtils {
Context context, final Uri appUsageLatestTimestampUri) { Context context, final Uri appUsageLatestTimestampUri) {
// We have already make sure the context here is with profile parent's user identity. Don't // We have already make sure the context here is with profile parent's user identity. Don't
// need to check whether current user is work profile. // need to check whether current user is work profile.
try (Cursor cursor = sFakeAppUsageLatestTimestampSupplier != null try (Cursor cursor = sFakeSupplier != null
? sFakeAppUsageLatestTimestampSupplier.get() ? sFakeSupplier.get()
: context.getContentResolver().query( : context.getContentResolver().query(
appUsageLatestTimestampUri, null, null, null)) { appUsageLatestTimestampUri, null, null, null)) {
if (cursor == null || cursor.getCount() == 0) { if (cursor == null || cursor.getCount() == 0) {
@@ -514,8 +508,8 @@ public final class DatabaseUtils {
if (context == null) { if (context == null) {
return appUsageEventList; return appUsageEventList;
} }
try (Cursor cursor = sFakeAppUsageEventSupplier != null try (Cursor cursor = sFakeSupplier != null
? sFakeAppUsageEventSupplier.get() ? sFakeSupplier.get()
: context.getContentResolver().query(appUsageEventUri, null, null, null)) { : context.getContentResolver().query(appUsageEventUri, null, null, null)) {
if (cursor == null || cursor.getCount() == 0) { if (cursor == null || cursor.getCount() == 0) {
return appUsageEventList; return appUsageEventList;
@@ -540,8 +534,8 @@ public final class DatabaseUtils {
if (context == null) { if (context == null) {
return batteryEventList; return batteryEventList;
} }
try (Cursor cursor = sFakeBatteryEventSupplier != null try (Cursor cursor = sFakeSupplier != null
? sFakeBatteryEventSupplier.get() ? sFakeSupplier.get()
: context.getContentResolver().query(batteryEventUri, null, null, null)) { : context.getContentResolver().query(batteryEventUri, null, null, null)) {
if (cursor == null || cursor.getCount() == 0) { if (cursor == null || cursor.getCount() == 0) {
return batteryEventList; return batteryEventList;
@@ -566,7 +560,7 @@ public final class DatabaseUtils {
return null; return null;
} }
final Map<Long, Map<String, BatteryHistEntry>> resultMap = new HashMap(); final Map<Long, Map<String, BatteryHistEntry>> resultMap = new HashMap();
try (Cursor cursor = sFakeBatteryStateSupplier != null ? sFakeBatteryStateSupplier.get() : try (Cursor cursor = sFakeSupplier != null ? sFakeSupplier.get() :
context.getContentResolver().query(batteryStateUri, null, null, null)) { context.getContentResolver().query(batteryStateUri, null, null, null)) {
if (cursor == null || cursor.getCount() == 0) { if (cursor == null || cursor.getCount() == 0) {
return resultMap; return resultMap;

View File

@@ -176,7 +176,7 @@ public final class BatteryUsageBreakdownControllerTest {
} }
@Test @Test
public void removeAndCacheAllUnusedPreferences_removePerf_buildCacheAndRemoveAllPreference() { public void removeAndCacheAllUnusedPreferences_removePref_buildCacheAndRemoveAllPreference() {
doReturn(1).when(mAppListPreferenceGroup).getPreferenceCount(); doReturn(1).when(mAppListPreferenceGroup).getPreferenceCount();
doReturn(mPowerGaugePreference).when(mAppListPreferenceGroup).getPreference(0); doReturn(mPowerGaugePreference).when(mAppListPreferenceGroup).getPreference(0);
doReturn(PREF_KEY2).when(mBatteryHistEntry).getKey(); doReturn(PREF_KEY2).when(mBatteryHistEntry).getKey();
@@ -193,7 +193,7 @@ public final class BatteryUsageBreakdownControllerTest {
} }
@Test @Test
public void removeAndCacheAllUnusedPreferences_keepPerf_KeepAllPreference() { public void removeAndCacheAllUnusedPreferences_keepPref_KeepAllPreference() {
doReturn(1).when(mAppListPreferenceGroup).getPreferenceCount(); doReturn(1).when(mAppListPreferenceGroup).getPreferenceCount();
doReturn(mPowerGaugePreference).when(mAppListPreferenceGroup).getPreference(0); doReturn(mPowerGaugePreference).when(mAppListPreferenceGroup).getPreference(0);
doReturn(PREF_KEY).when(mBatteryHistEntry).getKey(); doReturn(PREF_KEY).when(mBatteryHistEntry).getKey();

View File

@@ -102,7 +102,7 @@ public final class DataProcessManagerTest {
AppUsageEventEntity.KEY_UID, AppUsageEventEntity.KEY_UID,
AppUsageEventEntity.KEY_PACKAGE_NAME, AppUsageEventEntity.KEY_PACKAGE_NAME,
AppUsageEventEntity.KEY_TIMESTAMP}); AppUsageEventEntity.KEY_TIMESTAMP});
DatabaseUtils.sFakeAppUsageEventSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
doReturn(true).when(mUserManager).isUserUnlocked(anyInt()); doReturn(true).when(mUserManager).isUserUnlocked(anyInt());
mDataProcessManager.start(); mDataProcessManager.start();
@@ -171,7 +171,7 @@ public final class DataProcessManagerTest {
cursor.addRow(new Object[] { cursor.addRow(new Object[] {
AppUsageEventType.ACTIVITY_STOPPED.getNumber(), /*timestamp=*/ 6, /*userId=*/ 1, AppUsageEventType.ACTIVITY_STOPPED.getNumber(), /*timestamp=*/ 6, /*userId=*/ 1,
/*instanceId=*/ 2, packageName}); /*instanceId=*/ 2, packageName});
DatabaseUtils.sFakeAppUsageEventSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final DataProcessManager dataProcessManager = new DataProcessManager( final DataProcessManager dataProcessManager = new DataProcessManager(
mContext, /*handler=*/ null, /*rawStartTimestamp=*/ 2L, /*callbackFunction=*/ null, mContext, /*handler=*/ null, /*rawStartTimestamp=*/ 2L, /*callbackFunction=*/ null,
@@ -240,7 +240,7 @@ public final class DataProcessManagerTest {
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.sFakeAppUsageEventSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
mDataProcessManager.start(); mDataProcessManager.start();

View File

@@ -261,7 +261,7 @@ public final class DatabaseUtilsTest {
public void getAppUsageStartTimestampOfUser_emptyCursorContent_returnEarliestTimestamp() { public void getAppUsageStartTimestampOfUser_emptyCursorContent_returnEarliestTimestamp() {
final MatrixCursor cursor = final MatrixCursor cursor =
new MatrixCursor(new String[] {AppUsageEventEntity.KEY_TIMESTAMP}); new MatrixCursor(new String[] {AppUsageEventEntity.KEY_TIMESTAMP});
DatabaseUtils.sFakeAppUsageLatestTimestampSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final long earliestTimestamp = 10001L; final long earliestTimestamp = 10001L;
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
@@ -270,7 +270,7 @@ public final class DatabaseUtilsTest {
@Test @Test
public void getAppUsageStartTimestampOfUser_nullCursor_returnEarliestTimestamp() { public void getAppUsageStartTimestampOfUser_nullCursor_returnEarliestTimestamp() {
DatabaseUtils.sFakeAppUsageLatestTimestampSupplier = () -> null; DatabaseUtils.sFakeSupplier = () -> null;
final long earliestTimestamp = 10001L; final long earliestTimestamp = 10001L;
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
mContext, /*userId=*/ 0, earliestTimestamp)).isEqualTo(earliestTimestamp); mContext, /*userId=*/ 0, earliestTimestamp)).isEqualTo(earliestTimestamp);
@@ -283,7 +283,7 @@ public final class DatabaseUtilsTest {
new MatrixCursor(new String[] {AppUsageEventEntity.KEY_TIMESTAMP}); new MatrixCursor(new String[] {AppUsageEventEntity.KEY_TIMESTAMP});
// Adds fake data into the cursor. // Adds fake data into the cursor.
cursor.addRow(new Object[] {returnedTimestamp}); cursor.addRow(new Object[] {returnedTimestamp});
DatabaseUtils.sFakeAppUsageLatestTimestampSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final long earliestTimestamp1 = 1001L; final long earliestTimestamp1 = 1001L;
assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser( assertThat(DatabaseUtils.getAppUsageStartTimestampOfUser(
@@ -302,7 +302,7 @@ public final class DatabaseUtilsTest {
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.sFakeAppUsageEventSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
assertThat(DatabaseUtils.getAppUsageEventForUsers( assertThat(DatabaseUtils.getAppUsageEventForUsers(
mContext, mContext,
@@ -313,7 +313,7 @@ public final class DatabaseUtilsTest {
@Test @Test
public void getAppUsageEventForUsers_nullCursor_returnEmptyMap() { public void getAppUsageEventForUsers_nullCursor_returnEmptyMap() {
DatabaseUtils.sFakeAppUsageEventSupplier = () -> null; DatabaseUtils.sFakeSupplier = () -> null;
assertThat(DatabaseUtils.getAppUsageEventForUsers( assertThat(DatabaseUtils.getAppUsageEventForUsers(
mContext, mContext,
/*calendar=*/ null, /*calendar=*/ null,
@@ -335,7 +335,7 @@ public final class DatabaseUtilsTest {
cursor.addRow(new Object[] {101L, "app name2", timestamp2}); cursor.addRow(new Object[] {101L, "app name2", timestamp2});
cursor.addRow(new Object[] {101L, "app name3", timestamp2}); cursor.addRow(new Object[] {101L, "app name3", timestamp2});
cursor.addRow(new Object[] {101L, "app name4", timestamp2}); cursor.addRow(new Object[] {101L, "app name4", timestamp2});
DatabaseUtils.sFakeAppUsageEventSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final List<AppUsageEvent> appUsageEventList = DatabaseUtils.getAppUsageEventForUsers( final List<AppUsageEvent> appUsageEventList = DatabaseUtils.getAppUsageEventForUsers(
mContext, mContext,
@@ -356,7 +356,7 @@ public final class DatabaseUtilsTest {
BatteryHistEntry.KEY_UID, BatteryHistEntry.KEY_UID,
BatteryHistEntry.KEY_USER_ID, BatteryHistEntry.KEY_USER_ID,
BatteryHistEntry.KEY_TIMESTAMP}); BatteryHistEntry.KEY_TIMESTAMP});
DatabaseUtils.sFakeBatteryStateSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
assertThat(DatabaseUtils.getHistoryMapSinceLastFullCharge( assertThat(DatabaseUtils.getHistoryMapSinceLastFullCharge(
mContext, /*calendar=*/ null)).isEmpty(); mContext, /*calendar=*/ null)).isEmpty();
@@ -364,7 +364,7 @@ public final class DatabaseUtilsTest {
@Test @Test
public void getHistoryMapSinceLastFullCharge_nullCursor_returnEmptyMap() { public void getHistoryMapSinceLastFullCharge_nullCursor_returnEmptyMap() {
DatabaseUtils.sFakeBatteryStateSupplier = () -> null; DatabaseUtils.sFakeSupplier = () -> null;
assertThat(DatabaseUtils.getHistoryMapSinceLastFullCharge( assertThat(DatabaseUtils.getHistoryMapSinceLastFullCharge(
mContext, /*calendar=*/ null)).isEmpty(); mContext, /*calendar=*/ null)).isEmpty();
} }
@@ -383,7 +383,7 @@ public final class DatabaseUtilsTest {
"app name3", timestamp2, 3, ConvertUtils.CONSUMER_TYPE_UID_BATTERY}); "app name3", timestamp2, 3, ConvertUtils.CONSUMER_TYPE_UID_BATTERY});
cursor.addRow(new Object[] { cursor.addRow(new Object[] {
"app name4", timestamp2, 4, ConvertUtils.CONSUMER_TYPE_UID_BATTERY}); "app name4", timestamp2, 4, ConvertUtils.CONSUMER_TYPE_UID_BATTERY});
DatabaseUtils.sFakeBatteryStateSupplier = () -> cursor; DatabaseUtils.sFakeSupplier = () -> cursor;
final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap = final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap =
DatabaseUtils.getHistoryMapSinceLastFullCharge( DatabaseUtils.getHistoryMapSinceLastFullCharge(
@@ -413,7 +413,7 @@ public final class DatabaseUtilsTest {
doReturn(true).when(mUserManager).isManagedProfile(); doReturn(true).when(mUserManager).isManagedProfile();
doReturn(UserHandle.SYSTEM).when(mUserManager).getProfileParent(UserHandle.CURRENT); doReturn(UserHandle.SYSTEM).when(mUserManager).getProfileParent(UserHandle.CURRENT);
DatabaseUtils.sFakeBatteryStateSupplier = () -> getMatrixCursor(); DatabaseUtils.sFakeSupplier = () -> getMatrixCursor();
final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap = final Map<Long, Map<String, BatteryHistEntry>> batteryHistMap =
DatabaseUtils.getHistoryMapSinceLastFullCharge( DatabaseUtils.getHistoryMapSinceLastFullCharge(