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);