Combine screen on time map into battery usage map
This cl is refactor only. It makes next cl ag/22809776 easy to replace screen
compenent time with screen on time.
Bug: 278022529
Test: manual
Change-Id: I2538aeafb0c697f13ec617cea44a70a1b2a114b0
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryCallbackData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryCallbackData.java
deleted file mode 100644
index 17e5f5c..0000000
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryCallbackData.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.fuelgauge.batteryusage;
-
-import androidx.annotation.Nullable;
-
-import java.util.Locale;
-import java.util.Map;
-
-/** Wraps the battery usage data and device screen-on time data used for battery usage page. */
-public class BatteryCallbackData {
-
- // The usage app data used for rendering app list.
- private final Map<Integer, Map<Integer, BatteryDiffData>> mBatteryUsageMap;
- // The device screen-on time data.
- private final Map<Integer, Map<Integer, Long>> mDeviceScreenOnTime;
-
- public BatteryCallbackData(
- @Nullable Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap,
- @Nullable Map<Integer, Map<Integer, Long>> deviceScreenOnTime) {
- mBatteryUsageMap = batteryUsageMap;
- mDeviceScreenOnTime = deviceScreenOnTime;
- }
-
- public Map<Integer, Map<Integer, BatteryDiffData>> getBatteryUsageMap() {
- return mBatteryUsageMap;
- }
-
- public Map<Integer, Map<Integer, Long>> getDeviceScreenOnTime() {
- return mDeviceScreenOnTime;
- }
-
- @Override
- public String toString() {
- return String.format(Locale.ENGLISH,
- "batteryUsageMap: %s; deviceScreenOnTime: %s",
- mBatteryUsageMap,
- mDeviceScreenOnTime);
- }
-}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
index 67d3969..17d9c8a 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java
@@ -110,8 +110,6 @@
int mHourlyChartIndex = BatteryChartViewModel.SELECTED_INDEX_ALL;
@VisibleForTesting
Map<Integer, Map<Integer, BatteryDiffData>> mBatteryUsageMap;
- @VisibleForTesting
- Map<Integer, Map<Integer, Long>> mScreenOnTimeMap;
private boolean mIs24HourFormat;
private boolean mHourlyChartVisible = true;
@@ -219,9 +217,8 @@
animateBatteryChartViewGroup();
final BatteryLevelData batteryLevelData =
DataProcessManager.getBatteryLevelData(mContext, mHandler, batteryHistoryMap,
- batteryCallbackData -> {
- mBatteryUsageMap = batteryCallbackData.getBatteryUsageMap();
- mScreenOnTimeMap = batteryCallbackData.getDeviceScreenOnTime();
+ batteryUsageMap -> {
+ mBatteryUsageMap = batteryUsageMap;
logScreenUsageTime();
refreshUi();
});
@@ -336,16 +333,15 @@
return false;
}
- if (mOnScreenOnTimeUpdatedListener != null && mScreenOnTimeMap != null
- && mScreenOnTimeMap.get(mDailyChartIndex) != null) {
- mOnScreenOnTimeUpdatedListener.onScreenOnTimeUpdated(
- mScreenOnTimeMap.get(mDailyChartIndex).get(mHourlyChartIndex),
- getSlotInformation());
- }
if (mOnBatteryUsageUpdatedListener != null && mBatteryUsageMap != null
&& mBatteryUsageMap.get(mDailyChartIndex) != null) {
final BatteryDiffData slotUsageData =
mBatteryUsageMap.get(mDailyChartIndex).get(mHourlyChartIndex);
+ if (slotUsageData != null) {
+ mOnScreenOnTimeUpdatedListener.onScreenOnTimeUpdated(
+ slotUsageData.getScreenOnTime(),
+ getSlotInformation());
+ }
mOnBatteryUsageUpdatedListener.onBatteryUsageUpdated(
slotUsageData, getSlotInformation(), isBatteryUsageMapNullOrEmpty());
}
@@ -503,17 +499,19 @@
}
private void logScreenUsageTime() {
- if (mBatteryUsageMap == null || mScreenOnTimeMap == null) {
+ if (mBatteryUsageMap == null) {
return;
}
- final long totalScreenOnTime =
- mScreenOnTimeMap
- .get(BatteryChartViewModel.SELECTED_INDEX_ALL)
- .get(BatteryChartViewModel.SELECTED_INDEX_ALL);
+ final BatteryDiffData allBatteryDiffData = mBatteryUsageMap.get(
+ BatteryChartViewModel.SELECTED_INDEX_ALL).get(
+ BatteryChartViewModel.SELECTED_INDEX_ALL);
+ if (allBatteryDiffData == null) {
+ return;
+ }
mMetricsFeatureProvider.action(
mPrefContext,
SettingsEnums.ACTION_BATTERY_USAGE_SCREEN_ON_TIME,
- (int) totalScreenOnTime);
+ (int) allBatteryDiffData.getScreenOnTime());
mMetricsFeatureProvider.action(
mPrefContext,
SettingsEnums.ACTION_BATTERY_USAGE_FOREGROUND_USAGE_TIME,
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
index 37eddf3..47ae568 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
@@ -34,17 +34,20 @@
public class BatteryDiffData {
static final double SMALL_PERCENTAGE_THRESHOLD = 1f;
+ private final long mScreenOnTime;
private final List<BatteryDiffEntry> mAppEntries;
private final List<BatteryDiffEntry> mSystemEntries;
/** Constructor for the diff entries. */
public BatteryDiffData(
final Context context,
+ final long screenOnTime,
final @NonNull List<BatteryDiffEntry> appDiffEntries,
final @NonNull List<BatteryDiffEntry> systemDiffEntries,
final @NonNull Set<String> systemAppsPackageNames,
final @NonNull Set<Integer> systemAppsUids,
final boolean isAccumulated) {
+ mScreenOnTime = screenOnTime;
mAppEntries = appDiffEntries;
mSystemEntries = systemDiffEntries;
@@ -60,6 +63,10 @@
processAndSortEntries(mSystemEntries);
}
+ public long getScreenOnTime() {
+ return mScreenOnTime;
+ }
+
public List<BatteryDiffEntry> getAppDiffEntryList() {
return mAppEntries;
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
index 6b007de..0f67e6a 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
@@ -353,9 +353,9 @@
}
private void loadAndApplyBatteryMapFromServiceOnly() {
- new AsyncTask<Void, Void, BatteryCallbackData>() {
+ new AsyncTask<Void, Void, Map<Integer, Map<Integer, BatteryDiffData>>>() {
@Override
- protected BatteryCallbackData doInBackground(Void... voids) {
+ protected Map<Integer, Map<Integer, BatteryDiffData>> doInBackground(Void... voids) {
final long startTime = System.currentTimeMillis();
final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap =
DataProcessor.getBatteryUsageMapFromStatsService(mContext);
@@ -363,18 +363,18 @@
Log.d(TAG, String.format(
"execute loadAndApplyBatteryMapFromServiceOnly size=%d in %d/ms",
batteryUsageMap.size(), (System.currentTimeMillis() - startTime)));
- return new BatteryCallbackData(batteryUsageMap, /*deviceScreenOnTime=*/ null);
+ return batteryUsageMap;
}
@Override
protected void onPostExecute(
- final BatteryCallbackData batteryCallbackData) {
+ final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap) {
// Set the unused variables to null.
mContext = null;
// Post results back to main thread to refresh UI.
if (mHandler != null && mCallbackFunction != null) {
mHandler.post(() -> {
- mCallbackFunction.onBatteryCallbackDataLoaded(batteryCallbackData);
+ mCallbackFunction.onBatteryCallbackDataLoaded(batteryUsageMap);
});
}
}
@@ -413,24 +413,23 @@
}
private void generateFinalDataAndApplyCallback() {
- new AsyncTask<Void, Void, BatteryCallbackData>() {
+ new AsyncTask<Void, Void, Map<Integer, Map<Integer, BatteryDiffData>>>() {
@Override
- protected BatteryCallbackData doInBackground(Void... voids) {
+ protected Map<Integer, Map<Integer, BatteryDiffData>> doInBackground(Void... voids) {
final long startTime = System.currentTimeMillis();
final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap =
DataProcessor.getBatteryUsageMap(
mContext, mHourlyBatteryLevelsPerDay, mBatteryHistoryMap,
mAppUsagePeriodMap);
- final Map<Integer, Map<Integer, Long>> deviceScreenOnTime =
- DataProcessor.getDeviceScreenOnTime(mAppUsagePeriodMap);
DataProcessor.loadLabelAndIcon(batteryUsageMap);
Log.d(TAG, String.format("execute generateFinalDataAndApplyCallback in %d/ms",
(System.currentTimeMillis() - startTime)));
- return new BatteryCallbackData(batteryUsageMap, deviceScreenOnTime);
+ return batteryUsageMap;
}
@Override
- protected void onPostExecute(final BatteryCallbackData batteryCallbackData) {
+ protected void onPostExecute(
+ final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageMap) {
// Set the unused variables to null.
mContext = null;
mHourlyBatteryLevelsPerDay = null;
@@ -438,7 +437,7 @@
// Post results back to main thread to refresh UI.
if (mHandler != null && mCallbackFunction != null) {
mHandler.post(() -> {
- mCallbackFunction.onBatteryCallbackDataLoaded(batteryCallbackData);
+ mCallbackFunction.onBatteryCallbackDataLoaded(batteryUsageMap);
});
}
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
index 9aee2f7..78541c1 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -122,7 +122,8 @@
/** A callback listener when battery usage loading async task is executed. */
public interface UsageMapAsyncResponse {
/** The callback function when batteryUsageMap is loaded. */
- void onBatteryCallbackDataLoaded(BatteryCallbackData batteryCallbackData);
+ void onBatteryCallbackDataLoaded(
+ Map<Integer, Map<Integer, BatteryDiffData>> batteryCallbackData);
}
private DataProcessor() {
@@ -364,35 +365,6 @@
}
/**
- * @return Returns the device screen-on time data.
- *
- * <p>There could be 2 cases of the returned value:</p>
- * <ul>
- * <li>null: empty or invalid data.</li>
- * <li>non-null: must be a 2d map and composed by 3 parts:</li>
- * <p> 1 - [SELECTED_INDEX_ALL][SELECTED_INDEX_ALL]</p>
- * <p> 2 - [0][SELECTED_INDEX_ALL] ~ [maxDailyIndex][SELECTED_INDEX_ALL]</p>
- * <p> 3 - [0][0] ~ [maxDailyIndex][maxHourlyIndex]</p>
- * </ul>
- *
- * <p>The structure is consistent with the battery usage map returned by
- * {@code getBatteryUsageMap}.</p>
- */
- @Nullable
- public static Map<Integer, Map<Integer, Long>> getDeviceScreenOnTime(
- final Map<Integer, Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>>>
- appUsagePeriodMap) {
- if (appUsagePeriodMap == null) {
- return null;
- }
- final Map<Integer, Map<Integer, Long>> deviceScreenOnTime = new ArrayMap<>();
- insertHourlyDeviceScreenOnTime(appUsagePeriodMap, deviceScreenOnTime);
- insertDailyDeviceScreenOnTime(appUsagePeriodMap, deviceScreenOnTime);
- insertAllDeviceScreenOnTime(deviceScreenOnTime);
- return deviceScreenOnTime;
- }
-
- /**
* Generates the list of {@link BatteryEntry} from the supplied {@link BatteryUsageStats}.
*/
@Nullable
@@ -678,7 +650,7 @@
final Set<String> systemAppsPackageNames = getSystemAppsPackageNames(context);
final Set<Integer> systemAppsUids = getSystemAppsUids(context);
- return new BatteryDiffData(context, appEntries, systemEntries,
+ return new BatteryDiffData(context, /* screenOnTime= */ 0L, appEntries, systemEntries,
systemAppsPackageNames, systemAppsUids, /* isAccumulated= */ false);
}
@@ -988,84 +960,6 @@
eventTime);
}
- private static void insertHourlyDeviceScreenOnTime(
- final Map<Integer, Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>>>
- appUsagePeriodMap,
- final Map<Integer, Map<Integer, Long>> resultMap) {
- for (final int dailyIndex : appUsagePeriodMap.keySet()) {
- final Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>> dailyAppUsageMap =
- appUsagePeriodMap.get(dailyIndex);
- final Map<Integer, Long> dailyScreenOnTime = new ArrayMap<>();
- resultMap.put(dailyIndex, dailyScreenOnTime);
- if (dailyAppUsageMap == null) {
- continue;
- }
-
- for (final int hourlyIndex : dailyAppUsageMap.keySet()) {
- final Map<Long, Map<String, List<AppUsagePeriod>>> appUsageMap =
- dailyAppUsageMap.get(hourlyIndex);
- if (appUsageMap == null || appUsageMap.isEmpty()) {
- dailyScreenOnTime.put(hourlyIndex, 0L);
- } else {
- final List<AppUsagePeriod> flatUsageList = new ArrayList<>();
- for (final long userId: appUsageMap.keySet()) {
- if (appUsageMap.get(userId) == null) {
- continue;
- }
- for (final String packageName: appUsageMap.get(userId).keySet()) {
- final List<AppUsagePeriod> appUsagePeriodList =
- appUsageMap.get(userId).get(packageName);
- if (appUsagePeriodList != null && !appUsagePeriodList.isEmpty()) {
- flatUsageList.addAll(appUsagePeriodList);
- }
- }
- }
- // Compute the screen on time and make sure it won't exceed the threshold.
- final long screenOnTime = Math.min(
- (long) TOTAL_HOURLY_TIME_THRESHOLD, getScreenOnTime(flatUsageList));
- dailyScreenOnTime.put(hourlyIndex, screenOnTime);
- }
- }
- }
- }
-
- private static void insertDailyDeviceScreenOnTime(
- final Map<Integer, Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>>>
- appUsagePeriodMap,
- final Map<Integer, Map<Integer, Long>> resultMap) {
- for (final int dailyIndex : appUsagePeriodMap.keySet()) {
- Map<Integer, Long> dailyResultMap = resultMap.get(dailyIndex);
- if (dailyResultMap == null) {
- dailyResultMap = new ArrayMap<>();
- resultMap.put(dailyIndex, dailyResultMap);
- }
- dailyResultMap.put(
- SELECTED_INDEX_ALL,
- getAccumulatedScreenOnTime(dailyResultMap));
- }
- }
-
- private static void insertAllDeviceScreenOnTime(
- final Map<Integer, Map<Integer, Long>> resultMap) {
- final Map<Integer, Long> dailyAllMap = new ArrayMap<>();
- resultMap.keySet().forEach(
- key -> dailyAllMap.put(key, resultMap.get(key).get(SELECTED_INDEX_ALL)));
- final Map<Integer, Long> allUsageMap = new ArrayMap<>();
- allUsageMap.put(SELECTED_INDEX_ALL, getAccumulatedScreenOnTime(dailyAllMap));
- resultMap.put(SELECTED_INDEX_ALL, allUsageMap);
- }
-
- private static long getAccumulatedScreenOnTime(final Map<Integer, Long> screenOnTimeMap) {
- if (screenOnTimeMap == null || screenOnTimeMap.isEmpty()) {
- return 0;
- }
- long sum = 0;
- for (final int index : screenOnTimeMap.keySet()) {
- sum += screenOnTimeMap.get(index) == null ? 0 : screenOnTimeMap.get(index);
- }
- return sum;
- }
-
@Nullable
private static UsageEvents getAppUsageEventsForUser(
Context context, final UserManager userManager, final int userID,
@@ -1113,7 +1007,7 @@
batteryHistEntryList = convertToBatteryHistEntry(batteryEntryList, batteryUsageStats);
closeBatteryUsageStats(batteryUsageStats);
} catch (RuntimeException e) {
- Log.e(TAG, "load batteryUsageStats:" + e);
+ Log.e(TAG, "load batteryUsageStats:", e);
}
return batteryHistEntryList;
@@ -1406,6 +1300,26 @@
final Set<Integer> systemAppsUids,
final Map<Long, Map<String, List<AppUsagePeriod>>> appUsageMap,
final List<Map<String, BatteryHistEntry>> slotBatteryHistoryList) {
+ long slotScreenOnTime = 0L;
+ if (appUsageMap != null) {
+ final List<AppUsagePeriod> flatAppUsagePeriodList = new ArrayList<>();
+ for (final long userId : appUsageMap.keySet()) {
+ if ((userId != currentUserId && userId != workProfileUserId)
+ || appUsageMap.get(userId) == null) {
+ continue;
+ }
+ for (final String packageName : appUsageMap.get(userId).keySet()) {
+ final List<AppUsagePeriod> appUsagePeriodList =
+ appUsageMap.get(userId).get(packageName);
+ if (appUsagePeriodList != null) {
+ flatAppUsagePeriodList.addAll(appUsagePeriodList);
+ }
+ }
+ }
+ slotScreenOnTime =
+ Math.min(slotDuration, getScreenOnTime(flatAppUsagePeriodList));
+ }
+
final List<BatteryDiffEntry> appEntries = new ArrayList<>();
final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
@@ -1550,7 +1464,7 @@
return null;
}
- return new BatteryDiffData(context, appEntries, systemEntries,
+ return new BatteryDiffData(context, slotScreenOnTime, appEntries, systemEntries,
systemAppsPackageNames, systemAppsUids, /* isAccumulated= */ false);
}
@@ -1608,19 +1522,21 @@
@Nullable
private static BatteryDiffData getAccumulatedUsageDiffData(
- final Context context, final Collection<BatteryDiffData> diffEntryListData) {
+ final Context context, final Collection<BatteryDiffData> batteryDiffDataList) {
final Map<String, BatteryDiffEntry> diffEntryMap = new ArrayMap<>();
final List<BatteryDiffEntry> appEntries = new ArrayList<>();
final List<BatteryDiffEntry> systemEntries = new ArrayList<>();
- for (BatteryDiffData diffEntryList : diffEntryListData) {
- if (diffEntryList == null) {
+ long totalScreenOnTime = 0;
+ for (BatteryDiffData batteryDiffData : batteryDiffDataList) {
+ if (batteryDiffData == null) {
continue;
}
- for (BatteryDiffEntry entry : diffEntryList.getAppDiffEntryList()) {
+ totalScreenOnTime += batteryDiffData.getScreenOnTime();
+ for (BatteryDiffEntry entry : batteryDiffData.getAppDiffEntryList()) {
computeUsageDiffDataPerEntry(entry, diffEntryMap);
}
- for (BatteryDiffEntry entry : diffEntryList.getSystemDiffEntryList()) {
+ for (BatteryDiffEntry entry : batteryDiffData.getSystemDiffEntryList()) {
computeUsageDiffDataPerEntry(entry, diffEntryMap);
}
}
@@ -1634,8 +1550,8 @@
}
}
- return diffEntryList.isEmpty() ? null : new BatteryDiffData(context, appEntries,
- systemEntries, /* systemAppsPackageNames= */ new ArraySet<>(),
+ return diffEntryList.isEmpty() ? null : new BatteryDiffData(context, totalScreenOnTime,
+ appEntries, systemEntries, /* systemAppsPackageNames= */ new ArraySet<>(),
/* systemAppsUids= */ new ArraySet<>(), /* isAccumulated= */ true);
}
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
index 8d0a839..3a9ce2b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBreakdownControllerTest.java
@@ -107,8 +107,9 @@
mBatteryHistEntry);
mBatteryDiffEntry = spy(mBatteryDiffEntry);
mBatteryUsageBreakdownController.mBatteryDiffData =
- new BatteryDiffData(mContext, Arrays.asList(mBatteryDiffEntry), Arrays.asList(),
- Set.of(), Set.of(), /* isAccumulated= */ false);
+ new BatteryDiffData(mContext, /* screenOnTime= */ 0L,
+ Arrays.asList(mBatteryDiffEntry), Arrays.asList(), Set.of(), Set.of(),
+ /* isAccumulated= */ false);
// Adds fake testing data.
BatteryDiffEntry.sResourceCache.put(
"fakeBatteryDiffEntryKey",
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
index ea2db86..d69eec7 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java
@@ -326,62 +326,6 @@
}
@Test
- public void getDeviceScreenOnTime_returnExpectedResult() {
- final Map<Integer, Map<Integer, Map<Long, Map<String, List<AppUsagePeriod>>>>>
- appUsagePeriodMap = new HashMap<>();
- appUsagePeriodMap.put(0, new HashMap<>());
- appUsagePeriodMap.put(1, new HashMap<>());
- appUsagePeriodMap.put(2, null);
- final long userId1 = 1;
- final long userId2 = 2;
- // Adds the index [0][0].
- Map<Long, Map<String, List<AppUsagePeriod>>> appUsageMap = new HashMap<>();
- Map<String, List<AppUsagePeriod>> userPeriodMap = new HashMap<>();
- appUsageMap.put(userId1, userPeriodMap);
- userPeriodMap.put(
- "package1", List.of(buildAppUsagePeriod(0, 5), buildAppUsagePeriod(5, 7)));
- userPeriodMap.put("package2", List.of(buildAppUsagePeriod(10, 25)));
- userPeriodMap = new HashMap<>();
- appUsageMap.put(userId2, userPeriodMap);
- userPeriodMap.put("package3", List.of(buildAppUsagePeriod(15, 45)));
- appUsagePeriodMap.get(0).put(0, appUsageMap);
- // Adds the index [0][1].
- appUsageMap = new HashMap<>();
- userPeriodMap = new HashMap<>();
- appUsageMap.put(userId1, userPeriodMap);
- userPeriodMap.put(
- "package1", List.of(buildAppUsagePeriod(50, 60), buildAppUsagePeriod(70, 80)));
- appUsagePeriodMap.get(0).put(1, appUsageMap);
- // Adds the index [1][0].
- appUsageMap = new HashMap<>();
- userPeriodMap = new HashMap<>();
- appUsageMap.put(userId1, userPeriodMap);
- userPeriodMap.put("package2", List.of(buildAppUsagePeriod(0, 8000000L)));
- userPeriodMap.put("package3",
- List.of(buildAppUsagePeriod(10, 15), buildAppUsagePeriod(25, 29)));
- appUsagePeriodMap.get(1).put(0, appUsageMap);
-
- final Map<Integer, Map<Integer, Long>> deviceScreenOnTime =
- DataProcessor.getDeviceScreenOnTime(appUsagePeriodMap);
-
- assertThat(deviceScreenOnTime.get(0).get(0)).isEqualTo(42);
- assertThat(deviceScreenOnTime.get(0).get(1)).isEqualTo(20);
- assertThat(deviceScreenOnTime.get(1).get(0)).isEqualTo(7200000);
- assertThat(deviceScreenOnTime.get(0).get(DataProcessor.SELECTED_INDEX_ALL)).isEqualTo(62);
- assertThat(deviceScreenOnTime.get(1).get(DataProcessor.SELECTED_INDEX_ALL))
- .isEqualTo(7200000);
- assertThat(deviceScreenOnTime
- .get(DataProcessor.SELECTED_INDEX_ALL)
- .get(DataProcessor.SELECTED_INDEX_ALL))
- .isEqualTo(7200062);
- }
-
- @Test
- public void getDeviceScreenOnTime_nullUsageMap_returnNull() {
- assertThat(DataProcessor.getDeviceScreenOnTime(null)).isNull();
- }
-
- @Test
public void getHistoryMapWithExpectedTimestamps_emptyHistoryMap_returnEmptyMap() {
assertThat(DataProcessor
.getHistoryMapWithExpectedTimestamps(mContext, new HashMap<>()))
@@ -1128,6 +1072,7 @@
resultMap
.get(DataProcessor.SELECTED_INDEX_ALL)
.get(DataProcessor.SELECTED_INDEX_ALL);
+ assertThat(resultDiffData.getScreenOnTime()).isEqualTo(36L);
assertBatteryDiffEntry(
resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 2L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 50.0,
@@ -1287,6 +1232,7 @@
resultMap
.get(DataProcessor.SELECTED_INDEX_ALL)
.get(DataProcessor.SELECTED_INDEX_ALL);
+ assertThat(resultDiffData.getScreenOnTime()).isEqualTo(0L);
assertBatteryDiffEntry(
resultDiffData.getAppDiffEntryList().get(0), currentUserId, /*uid=*/ 1L,
ConvertUtils.CONSUMER_TYPE_UID_BATTERY, /*consumePercentage=*/ 100.0,
@@ -1367,6 +1313,7 @@
resultMap
.get(DataProcessor.SELECTED_INDEX_ALL)
.get(DataProcessor.SELECTED_INDEX_ALL);
+ assertThat(resultDiffData.getScreenOnTime()).isEqualTo(7200000L);
// Verifies the clipped usage time.
final float ratio = (float) (7200) / (float) (3600 + 7200);
final BatteryDiffEntry resultEntry = resultDiffData.getAppDiffEntryList().get(0);