Load and process the battery reattribute data in the periodic job (3/5)

Bug: 346706894
Fix: 348156270
Test: atest SettingsRoboTests:com.android.settings.fuelgauge.batteryusage
Flag: EXEMPT bug fix
Change-Id: Ibaa1d9d960aa6a885307fbb3dd3a62aaeb32de23
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index 0132273..e7b9a42 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -23,11 +23,13 @@
 import android.util.ArrayMap;
 import android.util.SparseIntArray;
 
+import com.android.settings.fuelgauge.batteryusage.BatteryDiffData;
 import com.android.settings.fuelgauge.batteryusage.DetectRequestSourceType;
 import com.android.settings.fuelgauge.batteryusage.PowerAnomalyEventList;
 import com.android.settingslib.fuelgauge.Estimate;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /** Feature Provider used in power usage */
@@ -157,4 +159,8 @@
 
     /** Whether the device is under the battery defender mode */
     boolean isBatteryDefend(BatteryInfo info);
+
+    /** Collect and process battery reattribute data if needed. */
+    boolean processBatteryReattributeData(
+            Context context, Map<Long, BatteryDiffData> batteryDiffDataMap);
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 1675ce6..267c0a3 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -28,12 +28,14 @@
 import android.util.SparseIntArray;
 
 import com.android.internal.util.ArrayUtils;
+import com.android.settings.fuelgauge.batteryusage.BatteryDiffData;
 import com.android.settings.fuelgauge.batteryusage.DetectRequestSourceType;
 import com.android.settings.fuelgauge.batteryusage.PowerAnomalyEventList;
 import com.android.settingslib.fuelgauge.Estimate;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /** Implementation of {@code PowerUsageFeatureProvider} */
@@ -245,4 +247,10 @@
     public boolean isBatteryDefend(BatteryInfo info) {
         return info.isBatteryDefender && !isExtraDefend();
     }
+
+    @Override
+    public boolean processBatteryReattributeData(
+            Context context, Map<Long, BatteryDiffData> batteryDiffDataMap) {
+        return false;
+    }
 }
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
index 7ea7203..7b5cd9f 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryDiffData.java
@@ -77,11 +77,13 @@
         processAndSortEntries(mSystemEntries);
     }
 
-    long getStartTimestamp() {
+    /** Gets the start timestamp. */
+    public long getStartTimestamp() {
         return mStartTimestamp;
     }
 
-    long getEndTimestamp() {
+    /** Gets the end timestamp. */
+    public long getEndTimestamp() {
         return mEndTimestamp;
     }
 
diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
index 0836912..7ef4615 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java
@@ -128,6 +128,9 @@
                             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/bugreport/BugReportContentProvider.java b/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProvider.java
index baae109..7e759ee 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProvider.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/bugreport/BugReportContentProvider.java
@@ -55,12 +55,12 @@
         }
         writer.println("dump BatteryUsage and AppUsage states:");
         LogUtils.dumpAppOptimizationModeEventHist(context, writer);
+        LogUtils.dumpBatteryReattributeDatabaseHist(context, writer);
         LogUtils.dumpBatteryUsageDatabaseHist(context, writer);
         LogUtils.dumpAppUsageDatabaseHist(context, writer);
         LogUtils.dumpBatteryUsageSlotDatabaseHist(context, writer);
         LogUtils.dumpBatteryEventDatabaseHist(context, writer);
         LogUtils.dumpBatteryStateDatabaseHist(context, writer);
-        LogUtils.dumpBatteryReattributeDatabaseHist(context, writer);
     }
 
     @Override
diff --git a/src/com/android/settings/fuelgauge/batteryusage/db/BatteryReattributeEntity.java b/src/com/android/settings/fuelgauge/batteryusage/db/BatteryReattributeEntity.java
index d518230..1a0c087 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/db/BatteryReattributeEntity.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/db/BatteryReattributeEntity.java
@@ -58,12 +58,16 @@
     @NonNull
     @Override
     public String toString() {
+        final BatteryReattribute batteryReattribute =
+                ConvertUtils.decodeBatteryReattribute(reattributeData);
         final StringBuilder builder = new StringBuilder()
                 .append("\nBatteryReattributeEntity{")
                 .append("\n\t" + utcToLocalTimeForLogging(timestampStart))
                 .append("\n\t" + utcToLocalTimeForLogging(timestampEnd))
-                .append("\n\t" + ConvertUtils.decodeBatteryReattribute(reattributeData))
-                .append("\n}");
-        return builder.toString();
+                .append("\n\t" + batteryReattribute);
+        if (batteryReattribute != null) {
+            builder.append("\n\t" + batteryReattribute.getReattributeDataMap());
+        }
+        return builder.append("\n}").toString();
     }
 }
diff --git a/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDatabase.java b/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDatabase.java
index 9a4f164..8e3d6e3 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDatabase.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/db/BatteryStateDatabase.java
@@ -33,7 +33,7 @@
             BatteryUsageSlotEntity.class,
             BatteryReattributeEntity.class
         },
-        version = 1)
+        version = 2)
 public abstract class BatteryStateDatabase extends RoomDatabase {
     private static final String TAG = "BatteryStateDatabase";
     private static final String DB_FILE_NAME = "battery-usage-db-v10";