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.AdvancedPowerUsageDetail;
|
||||||
import com.android.settings.fuelgauge.BatteryUtils;
|
import com.android.settings.fuelgauge.BatteryUtils;
|
||||||
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
|
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.BatteryDiffEntry;
|
||||||
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
|
import com.android.settings.fuelgauge.batteryusage.BatteryEntry;
|
||||||
import com.android.settings.fuelgauge.batteryusage.BatteryUsageStatsLoader;
|
import com.android.settings.fuelgauge.batteryusage.BatteryUsageStatsLoader;
|
||||||
@@ -179,7 +179,7 @@ public class AppBatteryPreferenceController extends BasePreferenceController
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final BatteryDiffEntry entry =
|
final BatteryDiffEntry entry =
|
||||||
BatteryChartPreferenceController.getBatteryLast24HrUsageData(
|
BatteryChartPreferenceControllerV2.getAppBatteryUsageData(
|
||||||
mContext, mPackageName, mUserId);
|
mContext, mPackageName, mUserId);
|
||||||
Log.d(TAG, "loadBatteryDiffEntries():\n" + entry);
|
Log.d(TAG, "loadBatteryDiffEntries():\n" + entry);
|
||||||
return entry;
|
return entry;
|
||||||
|
@@ -54,7 +54,6 @@ import com.android.settingslib.utils.StringUtil;
|
|||||||
import com.android.settingslib.widget.FooterPreference;
|
import com.android.settingslib.widget.FooterPreference;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@@ -595,7 +594,7 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
boolean isValidToShowSummary(String packageName) {
|
boolean isValidToShowSummary(String packageName) {
|
||||||
return !contains(packageName, mNotAllowShowSummaryPackages);
|
return !DataProcessor.contains(packageName, mNotAllowShowSummaryPackages);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addFooterPreferenceIfNeeded(boolean containAppItems) {
|
private void addFooterPreferenceIfNeeded(boolean containAppItems) {
|
||||||
@@ -639,59 +638,36 @@ public class BatteryChartPreferenceControllerV2 extends AbstractPreferenceContro
|
|||||||
return texts;
|
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}. */
|
/** Used for {@link AppBatteryPreferenceController}. */
|
||||||
public static List<BatteryDiffEntry> getBatteryLast24HrUsageData(Context context) {
|
public static List<BatteryDiffEntry> getAppBatteryUsageData(Context context) {
|
||||||
final long start = System.currentTimeMillis();
|
final long start = System.currentTimeMillis();
|
||||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
|
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
|
||||||
FeatureFactory.getFactory(context)
|
FeatureFactory.getFactory(context)
|
||||||
.getPowerUsageFeatureProvider(context)
|
.getPowerUsageFeatureProvider(context)
|
||||||
.getBatteryHistory(context);
|
.getBatteryHistorySinceLastFullCharge(context);
|
||||||
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
|
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
|
||||||
return null;
|
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)));
|
batteryHistoryMap.size(), (System.currentTimeMillis() - start)));
|
||||||
|
|
||||||
final List<Long> batteryHistoryKeyList =
|
final Map<Integer, Map<Integer, BatteryDiffData>> batteryUsageData =
|
||||||
new ArrayList<>(batteryHistoryMap.keySet());
|
DataProcessor.getBatteryUsageData(context, batteryHistoryMap);
|
||||||
Collections.sort(batteryHistoryKeyList);
|
return batteryUsageData == null
|
||||||
final long[] batteryHistoryKeys = new long[TWENTY_FOUR_HOURS_TIME_SLOT_SIZE + 1];
|
? null
|
||||||
for (int index = 0; index < batteryHistoryKeys.length; index++) {
|
: batteryUsageData
|
||||||
batteryHistoryKeys[index] = batteryHistoryKeyList.get(index);
|
.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}. */
|
/** Used for {@link AppBatteryPreferenceController}. */
|
||||||
public static BatteryDiffEntry getBatteryLast24HrUsageData(
|
public static BatteryDiffEntry getAppBatteryUsageData(
|
||||||
Context context, String packageName, int userId) {
|
Context context, String packageName, int userId) {
|
||||||
if (packageName == null) {
|
if (packageName == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
final List<BatteryDiffEntry> entries = getBatteryLast24HrUsageData(context);
|
final List<BatteryDiffEntry> entries = getAppBatteryUsageData(context);
|
||||||
if (entries == null) {
|
if (entries == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@@ -58,6 +58,7 @@ public final class DataProcessor {
|
|||||||
private static final String TAG = "DataProcessor";
|
private static final String TAG = "DataProcessor";
|
||||||
private static final int MIN_DAILY_DATA_SIZE = 2;
|
private static final int MIN_DAILY_DATA_SIZE = 2;
|
||||||
private static final int MIN_TIMESTAMP_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.
|
// 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 float TOTAL_HOURLY_TIME_THRESHOLD = DateUtils.HOUR_IN_MILLIS * 2;
|
||||||
private static final Map<String, BatteryHistEntry> EMPTY_BATTERY_MAP = new HashMap<>();
|
private static final Map<String, BatteryHistEntry> EMPTY_BATTERY_MAP = new HashMap<>();
|
||||||
@@ -118,6 +119,30 @@ public final class DataProcessor {
|
|||||||
return batteryLevelData;
|
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.
|
* @return Returns whether the target is in the CharSequence array.
|
||||||
*/
|
*/
|
||||||
@@ -386,7 +411,8 @@ public final class DataProcessor {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// Case 2: upper timestamp is closed to the current timestamp.
|
// 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);
|
log(context, "force align into the nearest slot", currentSlot, null);
|
||||||
resultMap.put(currentSlot, batteryHistoryMap.get(upperTimestamp));
|
resultMap.put(currentSlot, batteryHistoryMap.get(upperTimestamp));
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user