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
This commit is contained in:
@@ -20,8 +20,6 @@ import android.app.usage.UsageEvents;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.BatteryUsageStats;
|
import android.os.BatteryUsageStats;
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Looper;
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
@@ -117,11 +115,9 @@ public final class BatteryUsageDataLoader {
|
|||||||
private static void preprocessBatteryUsageSlots(
|
private static void preprocessBatteryUsageSlots(
|
||||||
final Context context, final UserIdsSeries userIdsSeries) {
|
final Context context, final UserIdsSeries userIdsSeries) {
|
||||||
final long start = System.currentTimeMillis();
|
final long start = System.currentTimeMillis();
|
||||||
final Handler handler = new Handler(Looper.getMainLooper());
|
|
||||||
final BatteryLevelData batteryLevelData =
|
final BatteryLevelData batteryLevelData =
|
||||||
DataProcessManager.getBatteryLevelData(
|
DataProcessManager.getBatteryLevelData(
|
||||||
context,
|
context,
|
||||||
handler,
|
|
||||||
userIdsSeries,
|
userIdsSeries,
|
||||||
/* isFromPeriodJob= */ true,
|
/* isFromPeriodJob= */ true,
|
||||||
batteryDiffDataMap -> {
|
batteryDiffDataMap -> {
|
||||||
|
@@ -19,8 +19,6 @@ package com.android.settings.fuelgauge.batteryusage;
|
|||||||
import android.app.usage.UsageEvents;
|
import android.app.usage.UsageEvents;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Looper;
|
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@@ -82,7 +80,6 @@ public class DataProcessManager {
|
|||||||
private final long mLastFullChargeTimestamp;
|
private final long mLastFullChargeTimestamp;
|
||||||
private final boolean mIsFromPeriodJob;
|
private final boolean mIsFromPeriodJob;
|
||||||
private final Context mContext;
|
private final Context mContext;
|
||||||
private final Handler mHandler;
|
|
||||||
private final UserIdsSeries mUserIdsSeries;
|
private final UserIdsSeries mUserIdsSeries;
|
||||||
private final OnBatteryDiffDataMapLoadedListener mCallbackFunction;
|
private final OnBatteryDiffDataMapLoadedListener mCallbackFunction;
|
||||||
private final List<AppUsageEvent> mAppUsageEventList = new ArrayList<>();
|
private final List<AppUsageEvent> mAppUsageEventList = new ArrayList<>();
|
||||||
@@ -123,7 +120,6 @@ public class DataProcessManager {
|
|||||||
/** Constructor when there exists battery level data. */
|
/** Constructor when there exists battery level data. */
|
||||||
DataProcessManager(
|
DataProcessManager(
|
||||||
Context context,
|
Context context,
|
||||||
Handler handler,
|
|
||||||
final UserIdsSeries userIdsSeries,
|
final UserIdsSeries userIdsSeries,
|
||||||
final boolean isFromPeriodJob,
|
final boolean isFromPeriodJob,
|
||||||
final long rawStartTimestamp,
|
final long rawStartTimestamp,
|
||||||
@@ -132,7 +128,6 @@ public class DataProcessManager {
|
|||||||
@NonNull final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
|
@NonNull final List<BatteryLevelData.PeriodBatteryLevelData> hourlyBatteryLevelsPerDay,
|
||||||
@NonNull final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
|
@NonNull final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap) {
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
mHandler = handler;
|
|
||||||
mUserIdsSeries = userIdsSeries;
|
mUserIdsSeries = userIdsSeries;
|
||||||
mIsFromPeriodJob = isFromPeriodJob;
|
mIsFromPeriodJob = isFromPeriodJob;
|
||||||
mRawStartTimestamp = rawStartTimestamp;
|
mRawStartTimestamp = rawStartTimestamp;
|
||||||
@@ -145,11 +140,9 @@ public class DataProcessManager {
|
|||||||
/** Constructor when there is no battery level data. */
|
/** Constructor when there is no battery level data. */
|
||||||
DataProcessManager(
|
DataProcessManager(
|
||||||
Context context,
|
Context context,
|
||||||
Handler handler,
|
|
||||||
final UserIdsSeries userIdsSeries,
|
final UserIdsSeries userIdsSeries,
|
||||||
@NonNull final OnBatteryDiffDataMapLoadedListener callbackFunction) {
|
@NonNull final OnBatteryDiffDataMapLoadedListener callbackFunction) {
|
||||||
mContext = context.getApplicationContext();
|
mContext = context.getApplicationContext();
|
||||||
mHandler = handler;
|
|
||||||
mUserIdsSeries = userIdsSeries;
|
mUserIdsSeries = userIdsSeries;
|
||||||
mCallbackFunction = callbackFunction;
|
mCallbackFunction = callbackFunction;
|
||||||
mIsFromPeriodJob = false;
|
mIsFromPeriodJob = false;
|
||||||
@@ -444,12 +437,8 @@ public class DataProcessManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
|
protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
|
||||||
// Post results back to main thread to refresh UI.
|
if (mCallbackFunction != null) {
|
||||||
if (mHandler != null && mCallbackFunction != null) {
|
|
||||||
mHandler.post(
|
|
||||||
() -> {
|
|
||||||
mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
|
mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.execute();
|
}.execute();
|
||||||
@@ -534,12 +523,8 @@ public class DataProcessManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
|
protected void onPostExecute(final Map<Long, BatteryDiffData> batteryDiffDataMap) {
|
||||||
// Post results back to main thread to refresh UI.
|
if (mCallbackFunction != null) {
|
||||||
if (mHandler != null && mCallbackFunction != null) {
|
|
||||||
mHandler.post(
|
|
||||||
() -> {
|
|
||||||
mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
|
mCallbackFunction.onBatteryDiffDataMapLoaded(batteryDiffDataMap);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.execute();
|
}.execute();
|
||||||
@@ -581,7 +566,6 @@ public class DataProcessManager {
|
|||||||
@Nullable
|
@Nullable
|
||||||
public static BatteryLevelData getBatteryLevelData(
|
public static BatteryLevelData getBatteryLevelData(
|
||||||
Context context,
|
Context context,
|
||||||
@Nullable Handler handler,
|
|
||||||
final UserIdsSeries userIdsSeries,
|
final UserIdsSeries userIdsSeries,
|
||||||
final boolean isFromPeriodJob,
|
final boolean isFromPeriodJob,
|
||||||
final OnBatteryDiffDataMapLoadedListener onBatteryUsageMapLoadedListener) {
|
final OnBatteryDiffDataMapLoadedListener onBatteryUsageMapLoadedListener) {
|
||||||
@@ -601,7 +585,6 @@ public class DataProcessManager {
|
|||||||
final BatteryLevelData batteryLevelData =
|
final BatteryLevelData batteryLevelData =
|
||||||
getPeriodBatteryLevelData(
|
getPeriodBatteryLevelData(
|
||||||
context,
|
context,
|
||||||
handler,
|
|
||||||
userIdsSeries,
|
userIdsSeries,
|
||||||
startTimestamp,
|
startTimestamp,
|
||||||
lastFullChargeTime,
|
lastFullChargeTime,
|
||||||
@@ -621,7 +604,6 @@ public class DataProcessManager {
|
|||||||
|
|
||||||
private static BatteryLevelData getPeriodBatteryLevelData(
|
private static BatteryLevelData getPeriodBatteryLevelData(
|
||||||
Context context,
|
Context context,
|
||||||
@Nullable Handler handler,
|
|
||||||
final UserIdsSeries userIdsSeries,
|
final UserIdsSeries userIdsSeries,
|
||||||
final long startTimestamp,
|
final long startTimestamp,
|
||||||
final long lastFullChargeTime,
|
final long lastFullChargeTime,
|
||||||
@@ -639,7 +621,6 @@ public class DataProcessManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
handler = handler != null ? handler : new Handler(Looper.getMainLooper());
|
|
||||||
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
|
final Map<Long, Map<String, BatteryHistEntry>> batteryHistoryMap =
|
||||||
sFakeBatteryHistoryMap != null
|
sFakeBatteryHistoryMap != null
|
||||||
? sFakeBatteryHistoryMap
|
? sFakeBatteryHistoryMap
|
||||||
@@ -650,8 +631,7 @@ public class DataProcessManager {
|
|||||||
lastFullChargeTime);
|
lastFullChargeTime);
|
||||||
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
|
if (batteryHistoryMap == null || batteryHistoryMap.isEmpty()) {
|
||||||
Log.d(TAG, "batteryHistoryMap is null in getPeriodBatteryLevelData()");
|
Log.d(TAG, "batteryHistoryMap is null in getPeriodBatteryLevelData()");
|
||||||
new DataProcessManager(
|
new DataProcessManager(context, userIdsSeries, onBatteryDiffDataMapLoadedListener)
|
||||||
context, handler, userIdsSeries, onBatteryDiffDataMapLoadedListener)
|
|
||||||
.start();
|
.start();
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -680,8 +660,7 @@ public class DataProcessManager {
|
|||||||
DataProcessor.getLevelDataThroughProcessedHistoryMap(
|
DataProcessor.getLevelDataThroughProcessedHistoryMap(
|
||||||
context, processedBatteryHistoryMap);
|
context, processedBatteryHistoryMap);
|
||||||
if (batteryLevelData == null) {
|
if (batteryLevelData == null) {
|
||||||
new DataProcessManager(
|
new DataProcessManager(context, userIdsSeries, onBatteryDiffDataMapLoadedListener)
|
||||||
context, handler, userIdsSeries, onBatteryDiffDataMapLoadedListener)
|
|
||||||
.start();
|
.start();
|
||||||
Log.d(TAG, "getBatteryLevelData() returns null");
|
Log.d(TAG, "getBatteryLevelData() returns null");
|
||||||
return null;
|
return null;
|
||||||
@@ -690,7 +669,6 @@ public class DataProcessManager {
|
|||||||
// Start the async task to compute diff usage data and load labels and icons.
|
// Start the async task to compute diff usage data and load labels and icons.
|
||||||
new DataProcessManager(
|
new DataProcessManager(
|
||||||
context,
|
context,
|
||||||
handler,
|
|
||||||
userIdsSeries,
|
userIdsSeries,
|
||||||
isFromPeriodJob,
|
isFromPeriodJob,
|
||||||
startTimestamp,
|
startTimestamp,
|
||||||
|
@@ -214,6 +214,7 @@ public class PowerUsageAdvanced extends PowerUsageBase {
|
|||||||
if (!isResumed() || mBatteryLevelData == null) {
|
if (!isResumed() || mBatteryLevelData == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
mHandler.post(() -> {
|
||||||
mBatteryUsageMap =
|
mBatteryUsageMap =
|
||||||
DataProcessor.generateBatteryUsageMap(
|
DataProcessor.generateBatteryUsageMap(
|
||||||
getContext(), batteryDiffDataMap, mBatteryLevelData.orElse(null));
|
getContext(), batteryDiffDataMap, mBatteryLevelData.orElse(null));
|
||||||
@@ -228,6 +229,7 @@ public class PowerUsageAdvanced extends PowerUsageBase {
|
|||||||
// No available battery usage and battery level data.
|
// No available battery usage and battery level data.
|
||||||
mBatteryChartPreferenceController.showEmptyChart();
|
mBatteryChartPreferenceController.showEmptyChart();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onSelectedSlotDataUpdated() {
|
private void onSelectedSlotDataUpdated() {
|
||||||
@@ -503,7 +505,6 @@ public class PowerUsageAdvanced extends PowerUsageBase {
|
|||||||
public BatteryLevelData loadInBackground() {
|
public BatteryLevelData loadInBackground() {
|
||||||
return DataProcessManager.getBatteryLevelData(
|
return DataProcessManager.getBatteryLevelData(
|
||||||
getContext(),
|
getContext(),
|
||||||
mHandler,
|
|
||||||
new UserIdsSeries(getContext(), /* isNonUIRequest= */ false),
|
new UserIdsSeries(getContext(), /* isNonUIRequest= */ false),
|
||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
PowerUsageAdvanced.this::onBatteryDiffDataMapUpdate);
|
PowerUsageAdvanced.this::onBatteryDiffDataMapUpdate);
|
||||||
|
@@ -110,7 +110,6 @@ public final class DataProcessManagerTest {
|
|||||||
mDataProcessManager =
|
mDataProcessManager =
|
||||||
new DataProcessManager(
|
new DataProcessManager(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
|
||||||
mUserIdsSeries,
|
mUserIdsSeries,
|
||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
/* rawStartTimestamp= */ 0L,
|
/* rawStartTimestamp= */ 0L,
|
||||||
@@ -131,7 +130,6 @@ public final class DataProcessManagerTest {
|
|||||||
final DataProcessManager dataProcessManager =
|
final DataProcessManager dataProcessManager =
|
||||||
new DataProcessManager(
|
new DataProcessManager(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
|
||||||
mUserIdsSeries,
|
mUserIdsSeries,
|
||||||
/* callbackFunction= */ null);
|
/* callbackFunction= */ null);
|
||||||
assertThat(dataProcessManager.getShowScreenOnTime()).isFalse();
|
assertThat(dataProcessManager.getShowScreenOnTime()).isFalse();
|
||||||
@@ -257,7 +255,6 @@ public final class DataProcessManagerTest {
|
|||||||
final DataProcessManager dataProcessManager =
|
final DataProcessManager dataProcessManager =
|
||||||
new DataProcessManager(
|
new DataProcessManager(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
|
||||||
mUserIdsSeries,
|
mUserIdsSeries,
|
||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
/* rawStartTimestamp= */ 2L,
|
/* rawStartTimestamp= */ 2L,
|
||||||
@@ -349,7 +346,6 @@ public final class DataProcessManagerTest {
|
|||||||
assertThat(
|
assertThat(
|
||||||
DataProcessManager.getBatteryLevelData(
|
DataProcessManager.getBatteryLevelData(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
|
||||||
mUserIdsSeries,
|
mUserIdsSeries,
|
||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
/* asyncResponseDelegate= */ null))
|
/* asyncResponseDelegate= */ null))
|
||||||
@@ -357,7 +353,6 @@ public final class DataProcessManagerTest {
|
|||||||
assertThat(
|
assertThat(
|
||||||
DataProcessManager.getBatteryLevelData(
|
DataProcessManager.getBatteryLevelData(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
|
||||||
mUserIdsSeries,
|
mUserIdsSeries,
|
||||||
/* isFromPeriodJob= */ true,
|
/* isFromPeriodJob= */ true,
|
||||||
/* asyncResponseDelegate= */ null))
|
/* asyncResponseDelegate= */ null))
|
||||||
@@ -379,7 +374,6 @@ public final class DataProcessManagerTest {
|
|||||||
final BatteryLevelData resultData =
|
final BatteryLevelData resultData =
|
||||||
DataProcessManager.getBatteryLevelData(
|
DataProcessManager.getBatteryLevelData(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
|
||||||
mUserIdsSeries,
|
mUserIdsSeries,
|
||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
/* asyncResponseDelegate= */ null);
|
/* asyncResponseDelegate= */ null);
|
||||||
@@ -408,7 +402,6 @@ public final class DataProcessManagerTest {
|
|||||||
final BatteryLevelData resultData =
|
final BatteryLevelData resultData =
|
||||||
DataProcessManager.getBatteryLevelData(
|
DataProcessManager.getBatteryLevelData(
|
||||||
mContext,
|
mContext,
|
||||||
/* handler= */ null,
|
|
||||||
mUserIdsSeries,
|
mUserIdsSeries,
|
||||||
/* isFromPeriodJob= */ false,
|
/* isFromPeriodJob= */ false,
|
||||||
/* asyncResponseDelegate= */ null);
|
/* asyncResponseDelegate= */ null);
|
||||||
|
Reference in New Issue
Block a user