diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java index e7b9a42cac2..98e1a6e8470 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java @@ -23,6 +23,8 @@ import android.os.Bundle; import android.util.ArrayMap; import android.util.SparseIntArray; +import androidx.annotation.NonNull; + import com.android.settings.fuelgauge.batteryusage.BatteryDiffData; import com.android.settings.fuelgauge.batteryusage.DetectRequestSourceType; import com.android.settings.fuelgauge.batteryusage.PowerAnomalyEventList; @@ -162,5 +164,7 @@ public interface PowerUsageFeatureProvider { /** Collect and process battery reattribute data if needed. */ boolean processBatteryReattributeData( - Context context, Map batteryDiffDataMap); + @NonNull Context context, + @NonNull Map batteryDiffDataMap, + final boolean isFromPeriodJob); } diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java index 267c0a3fc60..dc5b2269cf8 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java +++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java @@ -27,6 +27,8 @@ import android.util.ArrayMap; import android.util.ArraySet; import android.util.SparseIntArray; +import androidx.annotation.NonNull; + import com.android.internal.util.ArrayUtils; import com.android.settings.fuelgauge.batteryusage.BatteryDiffData; import com.android.settings.fuelgauge.batteryusage.DetectRequestSourceType; @@ -250,7 +252,9 @@ public class PowerUsageFeatureProviderImpl implements PowerUsageFeatureProvider @Override public boolean processBatteryReattributeData( - Context context, Map batteryDiffDataMap) { + @NonNull Context context, + @NonNull Map batteryDiffDataMap, + final boolean isFromPeriodJob) { return false; } } diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java index 7ef4615e744..08369127b6d 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java @@ -128,9 +128,6 @@ public final class BatteryUsageDataLoader { final PowerUsageFeatureProvider featureProvider = FeatureFactory.getFeatureFactory() .getPowerUsageFeatureProvider(); - // Collect and process battery reattribute data. - featureProvider.processBatteryReattributeData( - context, batteryDiffDataMap); DatabaseUtils.sendBatteryUsageSlotData( context, ConvertUtils.convertToBatteryUsageSlotList( diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java index 719d3bd5362..2b88d34a17a 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessManager.java @@ -28,6 +28,8 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.internal.annotations.VisibleForTesting; +import com.android.settings.fuelgauge.PowerUsageFeatureProvider; +import com.android.settings.overlay.FeatureFactory; import java.util.ArrayList; import java.util.Calendar; @@ -78,6 +80,7 @@ public class DataProcessManager { // Raw start timestamp with round to the nearest hour. private final long mRawStartTimestamp; private final long mLastFullChargeTimestamp; + private final boolean mIsFromPeriodJob; private final Context mContext; private final Handler mHandler; private final UserIdsSeries mUserIdsSeries; @@ -122,6 +125,7 @@ public class DataProcessManager { Context context, Handler handler, final UserIdsSeries userIdsSeries, + final boolean isFromPeriodJob, final long rawStartTimestamp, final long lastFullChargeTimestamp, @NonNull final OnBatteryDiffDataMapLoadedListener callbackFunction, @@ -130,6 +134,7 @@ public class DataProcessManager { mContext = context.getApplicationContext(); mHandler = handler; mUserIdsSeries = userIdsSeries; + mIsFromPeriodJob = isFromPeriodJob; mRawStartTimestamp = rawStartTimestamp; mLastFullChargeTimestamp = lastFullChargeTimestamp; mCallbackFunction = callbackFunction; @@ -147,6 +152,7 @@ public class DataProcessManager { mHandler = handler; mUserIdsSeries = userIdsSeries; mCallbackFunction = callbackFunction; + mIsFromPeriodJob = false; mRawStartTimestamp = 0L; mLastFullChargeTimestamp = 0L; mHourlyBatteryLevelsPerDay = null; @@ -158,14 +164,9 @@ public class DataProcessManager { /** Starts the async tasks to load battery history data and app usage data. */ public void start() { - start(/* isFromPeriodJob= */ false); - } - - /** Starts the async tasks to load battery history data and app usage data. */ - public void start(boolean isFromPeriodJob) { // If we have battery level data, load the battery history map and app usage simultaneously. if (mHourlyBatteryLevelsPerDay != null) { - if (isFromPeriodJob) { + if (mIsFromPeriodJob) { mIsCurrentBatteryHistoryLoaded = true; mIsCurrentAppUsageLoaded = true; mIsBatteryUsageSlotLoaded = true; @@ -514,6 +515,14 @@ public class DataProcessManager { mAppUsagePeriodMap, getSystemAppsPackageNames(), getSystemAppsUids())); + // Process the reattributate data for the following two cases: + // 1) the latest slot for the timestamp "until now" + // 2) walkthrough all BatteryDiffData again to handle "re-compute" case + final PowerUsageFeatureProvider featureProvider = + FeatureFactory.getFeatureFactory() + .getPowerUsageFeatureProvider(); + featureProvider.processBatteryReattributeData( + mContext, batteryDiffDataMap, mIsFromPeriodJob); Log.d( TAG, @@ -683,12 +692,13 @@ public class DataProcessManager { context, handler, userIdsSeries, + isFromPeriodJob, startTimestamp, lastFullChargeTime, onBatteryDiffDataMapLoadedListener, batteryLevelData.getHourlyBatteryLevelsPerDay(), processedBatteryHistoryMap) - .start(isFromPeriodJob); + .start(); return batteryLevelData; } 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 60428014048..2f20b425788 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java @@ -112,6 +112,7 @@ public final class DataProcessManagerTest { mContext, /* handler= */ null, mUserIdsSeries, + /* isFromPeriodJob= */ false, /* rawStartTimestamp= */ 0L, /* lastFullChargeTimestamp= */ 0L, /* callbackFunction= */ null, @@ -258,6 +259,7 @@ public final class DataProcessManagerTest { mContext, /* handler= */ null, mUserIdsSeries, + /* isFromPeriodJob= */ false, /* rawStartTimestamp= */ 2L, /* lastFullChargeTimestamp= */ 1L, /* callbackFunction= */ null,