Reafactor DataProcessManager Callback Function Logic
Keep the current thread for period job flow; only call handler back to
the main thread in UI flow.
Bug: 374570240
Fix: 374570240
Test: manual
Flag: EXEMPT bug fix
Change-Id: Ie923dbbd858c0c7000fa16a6c639f56624b2ece5
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
index 0836912..df84aba 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
@@ -20,8 +20,6 @@
import android.content.Context;
import android.os.AsyncTask;
import android.os.BatteryUsageStats;
-import android.os.Handler;
-import android.os.Looper;
import android.util.Log;
import androidx.annotation.VisibleForTesting;
@@ -117,11 +115,9 @@
private static void preprocessBatteryUsageSlots(
final Context context, final UserIdsSeries userIdsSeries) {
final long start = System.currentTimeMillis();
- final Handler handler = new Handler(Looper.getMainLooper());
final BatteryLevelData batteryLevelData =
DataProcessManager.getBatteryLevelData(
context,
- handler,
userIdsSeries,
/* isFromPeriodJob= */ true,
batteryDiffDataMap -> {
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
index 0a1a547..fd548ab 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java
@@ -19,8 +19,6 @@
import android.app.usage.UsageEvents;
import android.content.Context;
import android.os.AsyncTask;
-import android.os.Handler;
-import android.os.Looper;
import android.util.ArrayMap;
import android.util.Log;
@@ -82,7 +80,6 @@
private final long mLastFullChargeTimestamp;
private final boolean mIsFromPeriodJob;
private final Context mContext;
- private final Handler mHandler;
private final UserIdsSeries mUserIdsSeries;
private final OnBatteryDiffDataMapLoadedListener mCallbackFunction;
private final List<AppUsageEvent> mAppUsageEventList = new ArrayList<>();
@@ -123,7 +120,6 @@
/** Constructor when there exists battery level data. */
DataProcessManager(
Context context,
- Handler handler,
final UserIdsSeries userIdsSeries,
final boolean isFromPeriodJob,
final long rawStartTimestamp,
@@ -132,7 +128,6 @@
@NonNull final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
@NonNull final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
mContext = context.getApplicationContext();
- mHandler = handler;
mUserIdsSeries = userIdsSeries;
mIsFromPeriodJob = isFromPeriodJob;
mRawStartTimestamp = rawStartTimestamp;
@@ -145,11 +140,9 @@
/** Constructor when there is no battery level data. */
DataProcessManager(
Context context,
- Handler handler,
final UserIdsSeries userIdsSeries,
@NonNull final OnBatteryDiffDataMapLoadedListener callbackFunction) {
mContext = context.getApplicationContext();
- mHandler = handler;
mUserIdsSeries = userIdsSeries;
mCallbackFunction = callbackFunction;
mIsFromPeriodJob = false;
@@ -444,12 +437,8 @@
@Override
protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
- // Post results back to main thread to refresh UI.
- if (mHandler != null && mCallbackFunction != null) {
- mHandler.post(
- () -> {
- mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
- });
+ if (mCallbackFunction != null) {
+ mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
}
}
}.execute();
@@ -534,12 +523,8 @@
@Override
protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
- // Post results back to main thread to refresh UI.
- if (mHandler != null && mCallbackFunction != null) {
- mHandler.post(
- () -> {
- mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
- });
+ if (mCallbackFunction != null) {
+ mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
}
}
}.execute();
@@ -581,7 +566,6 @@
@Nullable
public static BatteryLevelData getBatteryLevelData(
Context context,
- @Nullable Handler handler,
final UserIdsSeries userIdsSeries,
final boolean isFromPeriodJob,
final OnBatteryDiffDataMapLoadedListener onBatteryUsageMapLoadedListener) {
@@ -601,7 +585,6 @@
final BatteryLevelData batteryLevelData =
getPeriodBatteryLevelData(
context,
- handler,
userIdsSeries,
startTimestamp,
lastFullChargeTime,
@@ -621,7 +604,6 @@
private static BatteryLevelData getPeriodBatteryLevelData(
Context context,
- @Nullable Handler handler,
final UserIdsSeries userIdsSeries,
final long startTimestamp,
final long lastFullChargeTime,
@@ -639,7 +621,6 @@
return null;
}
- handler = handler != null ? handler : new Handler(Looper.getMainLooper());
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
sFakeBatteryHistoryMap != null
? sFakeBatteryHistoryMap
@@ -650,8 +631,7 @@
lastFullChargeTime);
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
Log.d(TAG, "batteryHistoryMap is null in getPeriodBatteryLevelData()");
- new DataProcessManager(
- context, handler, userIdsSeries, onBatteryDiffDataMapLoadedListener)
+ new DataProcessManager(context, userIdsSeries, onBatteryDiffDataMapLoadedListener)
.start();
return null;
}
@@ -680,8 +660,7 @@
DataProcessor.getLevelDataThroughProcessedHistoryMap(
context, processedBatteryHistoryMap);
if (batteryLevelData == null) {
- new DataProcessManager(
- context, handler, userIdsSeries, onBatteryDiffDataMapLoadedListener)
+ new DataProcessManager(context, userIdsSeries, onBatteryDiffDataMapLoadedListener)
.start();
Log.d(TAG, "getBatteryLevelData() returns null");
return null;
@@ -690,7 +669,6 @@
// Start the async task to compute diff usage data and load labels and icons.
new DataProcessManager(
context,
- handler,
userIdsSeries,
isFromPeriodJob,
startTimestamp,
diff --git a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
index a9c2332..1ed6a74 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/PowerUsageAdvanced.java
@@ -214,20 +214,22 @@
if (!isResumed() || mBatteryLevelData == null) {
return;
}
- mBatteryUsageMap =
- DataProcessor.generateBatteryUsageMap(
- getContext(), batteryDiffDataMap, mBatteryLevelData.orElse(null));
- Log.d(TAG, "onBatteryDiffDataMapUpdate: " + mBatteryUsageMap);
- DataProcessor.loadLabelAndIcon(mBatteryUsageMap);
- onSelectedSlotDataUpdated();
- detectAnomaly();
- logScreenUsageTime();
- if (mBatteryChartPreferenceController != null
- && mBatteryLevelData.isEmpty()
- && isBatteryUsageMapNullOrEmpty()) {
- // No available battery usage and battery level data.
- mBatteryChartPreferenceController.showEmptyChart();
- }
+ mHandler.post(() -> {
+ mBatteryUsageMap =
+ DataProcessor.generateBatteryUsageMap(
+ getContext(), batteryDiffDataMap, mBatteryLevelData.orElse(null));
+ Log.d(TAG, "onBatteryDiffDataMapUpdate: " + mBatteryUsageMap);
+ DataProcessor.loadLabelAndIcon(mBatteryUsageMap);
+ onSelectedSlotDataUpdated();
+ detectAnomaly();
+ logScreenUsageTime();
+ if (mBatteryChartPreferenceController != null
+ && mBatteryLevelData.isEmpty()
+ && isBatteryUsageMapNullOrEmpty()) {
+ // No available battery usage and battery level data.
+ mBatteryChartPreferenceController.showEmptyChart();
+ }
+ });
}
private void onSelectedSlotDataUpdated() {
@@ -503,7 +505,6 @@
public BatteryLevelData loadInBackground() {
return DataProcessManager.getBatteryLevelData(
getContext(),
- mHandler,
new UserIdsSeries(getContext(), /* isNonUIRequest= */ false),
/* isFromPeriodJob= */ false,
PowerUsageAdvanced.this::onBatteryDiffDataMapUpdate);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
index 2f20b42..1fed13f 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java
@@ -110,7 +110,6 @@
mDataProcessManager =
new DataProcessManager(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* rawStartTimestamp= */ 0L,
@@ -131,7 +130,6 @@
final DataProcessManager dataProcessManager =
new DataProcessManager(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* callbackFunction= */ null);
assertThat(dataProcessManager.getShowScreenOnTime()).isFalse();
@@ -257,7 +255,6 @@
final DataProcessManager dataProcessManager =
new DataProcessManager(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* rawStartTimestamp= */ 2L,
@@ -349,7 +346,6 @@
assertThat(
DataProcessManager.getBatteryLevelData(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* asyncResponseDelegate= */ null))
@@ -357,7 +353,6 @@
assertThat(
DataProcessManager.getBatteryLevelData(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ true,
/* asyncResponseDelegate= */ null))
@@ -379,7 +374,6 @@
final BatteryLevelData resultData =
DataProcessManager.getBatteryLevelData(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* asyncResponseDelegate= */ null);
@@ -408,7 +402,6 @@
final BatteryLevelData resultData =
DataProcessManager.getBatteryLevelData(
mContext,
- /* handler= */ null,
mUserIdsSeries,
/* isFromPeriodJob= */ false,
/* asyncResponseDelegate= */ null);