Update usage data for EBS app usage list and App usage detail from 24
hours to last full charge. Bug: 236101687 Test: manual + make RunSettingsRoboTests Change-Id: I48097dcaaf7b4100fbd7802940aac7c5ef92ee0b
This commit is contained in:
@@ -40,7 +40,7 @@ import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
|
||||
import com.android.settings.fuelgauge.BatteryUtils;
|
||||
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryChartPreferenceController;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryChartPreferenceControllerV2;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryDiffEntry;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
|
||||
import com.android.settings.fuelgauge.batteryusage.BatteryUsageStatsLoader;
|
||||
@@ -179,7 +179,7 @@ public class AppBatteryPreferenceController extends BasePreferenceController
|
||||
return null;
|
||||
}
|
||||
final BatteryDiffEntry entry =
|
||||
BatteryChartPreferenceController.getBatteryLast24HrUsageData(
|
||||
BatteryChartPreferenceControllerV2.getAppBatteryUsageData(
|
||||
mContext, mPackageName, mUserId);
|
||||
Log.d(TAG, "loadBatteryDiffEntries():\n" + entry);
|
||||
return entry;
|
||||
|
@@ -54,7 +54,6 @@ import com.android.settingslib.utils.StringUtil;
|
||||
import com.android.settingslib.widget.FooterPreference;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -595,7 +594,7 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
|
||||
@VisibleForTesting
|
||||
boolean isValidToShowSummary(String packageName) {
|
||||
return !contains(packageName, mNotAllowShowSummaryPackages);
|
||||
return !DataProcessor.contains(packageName, mNotAllowShowSummaryPackages);
|
||||
}
|
||||
|
||||
private void addFooterPreferenceIfNeeded(boolean containAppItems) {
|
||||
@@ -639,59 +638,36 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
||||
return texts;
|
||||
}
|
||||
|
||||
private static boolean contains(String target, CharSequence[] packageNames) {
|
||||
if (target != null && packageNames != null) {
|
||||
for (CharSequence packageName : packageNames) {
|
||||
if (TextUtils.equals(target, packageName)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
// TODO: Change this method to fromLastFullCharged.
|
||||
|
||||
/** Used for {@link AppBatteryPreferenceController}. */
|
||||
public static List<BatteryDiffEntry> getBatteryLast24HrUsageData(Context context) {
|
||||
public static List<BatteryDiffEntry> getAppBatteryUsageData(Context context) {
|
||||
final long start = System.currentTimeMillis();
|
||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
|
||||
FeatureFactory.getFactory(context)
|
||||
.getPowerUsageFeatureProvider(context)
|
||||
.getBatteryHistory(context);
|
||||
.getBatteryHistorySinceLastFullCharge(context);
|
||||
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
Log.d(TAG, String.format("getBatteryLast24HrData() size=%d time=%d/ms",
|
||||
Log.d(TAG, String.format("getBatterySinceLastFullChargeUsageData() size=%d time=%d/ms",
|
||||
batteryHistoryMap.size(), (System.currentTimeMillis() - start)));
|
||||
|
||||
final List<Long> batteryHistoryKeyList =
|
||||
new ArrayList<>(batteryHistoryMap.keySet());
|
||||
Collections.sort(batteryHistoryKeyList);
|
||||
final long[] batteryHistoryKeys = new long[TWENTY_FOUR_HOURS_TIME_SLOT_SIZE + 1];
|
||||
for (int index = 0; index < batteryHistoryKeys.length; index++) {
|
||||
batteryHistoryKeys[index] = batteryHistoryKeyList.get(index);
|
||||
final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageData =
|
||||
DataProcessor.getBatteryUsageData(context, batteryHistoryMap);
|
||||
return batteryUsageData == null
|
||||
? null
|
||||
: batteryUsageData
|
||||
.get(BatteryChartViewModel.SELECTED_INDEX_ALL)
|
||||
.get(BatteryChartViewModel.SELECTED_INDEX_ALL)
|
||||
.getAppDiffEntryList();
|
||||
}
|
||||
|
||||
final Map<Integer, List<BatteryDiffEntry>> batteryIndexedMap =
|
||||
ConvertUtils.getIndexedUsageMap(
|
||||
context,
|
||||
/*timeSlotSize=*/ TWENTY_FOUR_HOURS_TIME_SLOT_SIZE,
|
||||
batteryHistoryKeys,
|
||||
batteryHistoryMap,
|
||||
/*purgeLowPercentageAndFakeData=*/ true);
|
||||
return batteryIndexedMap.get(BatteryChartViewModel.SELECTED_INDEX_ALL);
|
||||
}
|
||||
|
||||
// TODO: Change this method to fromLastFullCharged.
|
||||
|
||||
/** Used for {@link AppBatteryPreferenceController}. */
|
||||
public static BatteryDiffEntry getBatteryLast24HrUsageData(
|
||||
public static BatteryDiffEntry getAppBatteryUsageData(
|
||||
Context context, String packageName, int userId) {
|
||||
if (packageName == null) {
|
||||
return null;
|
||||
}
|
||||
final List<BatteryDiffEntry> entries = getBatteryLast24HrUsageData(context);
|
||||
final List<BatteryDiffEntry> entries = getAppBatteryUsageData(context);
|
||||
if (entries == null) {
|
||||
return null;
|
||||
}
|
||||
|
@@ -58,6 +58,7 @@ public final class DataProcessor {
|
||||
private static final String TAG = "DataProcessor";
|
||||
private static final int MIN_DAILY_DATA_SIZE = 2;
|
||||
private static final int MIN_TIMESTAMP_DATA_SIZE = 2;
|
||||
private static final int MAX_DIFF_SECONDS_OF_UPPER_TIMESTAMP = 5;
|
||||
// Maximum total time value for each hourly slot cumulative data at most 2 hours.
|
||||
private static final float TOTAL_HOURLY_TIME_THRESHOLD = DateUtils.HOUR_IN_MILLIS * 2;
|
||||
private static final Map<String, BatteryHistEntry> EMPTY_BATTERY_MAP = new HashMap<>();
|
||||
@@ -118,6 +119,30 @@ public final class DataProcessor {
|
||||
return batteryLevelData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns battery usage data of different entries.
|
||||
* Returns null if the input is invalid or there is no enough data.
|
||||
*/
|
||||
@Nullable
|
||||
public static Map<Integer, Map<Integer, BatteryDiffData>> getBatteryUsageData(
|
||||
Context context,
|
||||
@Nullable final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
|
||||
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
|
||||
Log.d(TAG, "getBatteryLevelData() returns null");
|
||||
return null;
|
||||
}
|
||||
// Process raw history map data into hourly timestamps.
|
||||
final Map<Long, Map<String, BatteryHistEntry>> processedBatteryHistoryMap =
|
||||
getHistoryMapWithExpectedTimestamps(context, batteryHistoryMap);
|
||||
// Wrap and processed history map into easy-to-use format for UI rendering.
|
||||
final BatteryLevelData batteryLevelData =
|
||||
getLevelDataThroughProcessedHistoryMap(context, processedBatteryHistoryMap);
|
||||
return getBatteryUsageMap(
|
||||
context,
|
||||
batteryLevelData.getHourlyBatteryLevelsPerDay(),
|
||||
processedBatteryHistoryMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Returns whether the target is in the CharSequence array.
|
||||
*/
|
||||
@@ -386,7 +411,8 @@ public final class DataProcessor {
|
||||
return;
|
||||
}
|
||||
// Case 2: upper timestamp is closed to the current timestamp.
|
||||
if ((upperTimestamp - currentSlot) < 5 * DateUtils.SECOND_IN_MILLIS) {
|
||||
if ((upperTimestamp - currentSlot)
|
||||
< MAX_DIFF_SECONDS_OF_UPPER_TIMESTAMP * DateUtils.SECOND_IN_MILLIS) {
|
||||
log(context, "force align into the nearest slot", currentSlot, null);
|
||||
resultMap.put(currentSlot, batteryHistoryMap.get(upperTimestamp));
|
||||
return;
|
||||
|
Reference in New Issue
Block a user