Merge "Move load battery consumer icon and label into the background" into sc-dev am: 648f773c7c
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Settings/+/14682957
Change-Id: I6fa69766a4e8d7fb0332da7ba657a71207c24443
diff --git a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
index a36c2ef..f93f0a3 100644
--- a/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
+++ b/src/com/android/settings/fuelgauge/BatteryChartPreferenceController.java
@@ -20,6 +20,7 @@
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
+import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -64,7 +65,6 @@
ExpandDividerPreference.OnExpandListener {
private static final String TAG = "BatteryChartPreferenceController";
private static final String KEY_FOOTER_PREF = "battery_graph_footer";
- private static final int ADD_FOOTER_DELAYED_MS = 250;
/** Desired battery history size for timestamp slots. */
public static final int DESIRED_HISTORY_SIZE = 25;
@@ -267,11 +267,6 @@
void setBatteryHistoryMap(
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
- mHandler.post(() -> setBatteryHistoryMapInner(batteryHistoryMap));
- }
-
- private void setBatteryHistoryMapInner(
- final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
// Resets all battery history data relative variables.
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
mBatteryIndexedMap = null;
@@ -298,19 +293,15 @@
mBatteryHistoryLevels[index] =
Math.round(batteryLevelCounter / entryMap.size());
}
- // Generates indexed usage map for chart.
- mBatteryIndexedMap =
- ConvertUtils.getIndexedUsageMap(
- mPrefContext, /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1,
- mBatteryHistoryKeys, batteryHistoryMap,
- /*purgeLowPercentageAndFakeData=*/ true);
forceRefreshUi();
-
Log.d(TAG, String.format(
"setBatteryHistoryMap() size=%d\nkeys=%s\nlevels=%s",
batteryHistoryMap.size(),
utcToLocalTime(mBatteryHistoryKeys),
Arrays.toString(mBatteryHistoryLevels)));
+
+ // Loads item icon and label in the background.
+ new LoadAllItemsInfoTask(batteryHistoryMap).execute();
}
void setBatteryChartView(final BatteryChartView batteryChartView) {
@@ -599,9 +590,7 @@
containAppItems
? R.string.battery_usage_screen_footer
: R.string.battery_usage_screen_footer_empty));
- mHandler.postDelayed(
- () -> mPreferenceScreen.addPreference(mFooterPreference),
- ADD_FOOTER_DELAYED_MS);
+ mHandler.post(() -> mPreferenceScreen.addPreference(mFooterPreference));
}
private static String utcToLocalTime(long[] timestamps) {
@@ -670,4 +659,53 @@
}
return batteryHistoryKeys;
}
+
+ // Loads all items icon and label in the background.
+ private final class LoadAllItemsInfoTask
+ extends AsyncTask<Void, Void, Map<Integer, List<BatteryDiffEntry>>> {
+
+ private long[] mBatteryHistoryKeysCache;
+ private Map<Long, Map<String, BatteryHistEntry>> mBatteryHistoryMap;
+
+ private LoadAllItemsInfoTask(
+ Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
+ this.mBatteryHistoryMap = batteryHistoryMap;
+ this.mBatteryHistoryKeysCache = mBatteryHistoryKeys;
+ }
+
+ @Override
+ protected Map<Integer, List<BatteryDiffEntry>> doInBackground(Void... voids) {
+ if (mPrefContext == null || mBatteryHistoryKeysCache == null) {
+ return null;
+ }
+ final long startTime = System.currentTimeMillis();
+ final Map<Integer, List<BatteryDiffEntry>> indexedUsageMap =
+ ConvertUtils.getIndexedUsageMap(
+ mPrefContext, /*timeSlotSize=*/ CHART_LEVEL_ARRAY_SIZE - 1,
+ mBatteryHistoryKeysCache, mBatteryHistoryMap,
+ /*purgeLowPercentageAndFakeData=*/ true);
+ // Pre-loads each BatteryDiffEntry relative icon and label for all slots.
+ for (List<BatteryDiffEntry> entries : indexedUsageMap.values()) {
+ entries.forEach(entry -> entry.loadLabelAndIcon());
+ }
+ Log.d(TAG, String.format("execute LoadAllItemsInfoTask in %d/ms",
+ (System.currentTimeMillis() - startTime)));
+ return indexedUsageMap;
+ }
+
+ @Override
+ protected void onPostExecute(
+ Map<Integer, List<BatteryDiffEntry>> indexedUsageMap) {
+ mBatteryHistoryMap = null;
+ mBatteryHistoryKeysCache = null;
+ if (indexedUsageMap == null) {
+ return;
+ }
+ // Posts results back to main thread to refresh UI.
+ mHandler.post(() -> {
+ mBatteryIndexedMap = indexedUsageMap;
+ forceRefreshUi();
+ });
+ }
+ }
}
diff --git a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
index 5ed1cf5..9db29f3 100644
--- a/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
+++ b/src/com/android/settings/fuelgauge/BatteryDiffEntry.java
@@ -142,7 +142,7 @@
return false;
}
- private void loadLabelAndIcon() {
+ void loadLabelAndIcon() {
if (mIsLoaded) {
return;
}