Move anomaly code to BatteryTipUtils

Then we could reuse it across settings.

Bug: 74529048
Test: robo test that cover each components still pass
Change-Id: Ied0bbc6e6a1dca9628c2c084c3284ffab2f85160
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java b/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java
index 2411db4..910b368 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java
@@ -40,6 +40,8 @@
 import java.util.List;
 import java.util.Map;
 
+import androidx.annotation.VisibleForTesting;
+
 /**
  * Database manager for battery data. Now it only contains anomaly data stored in {@link AppInfo}.
  *
@@ -62,6 +64,11 @@
         return sSingleton;
     }
 
+    @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+    public static void setUpForTest(BatteryDatabaseManager batteryDatabaseManager) {
+        sSingleton = batteryDatabaseManager;
+    }
+
     /**
      * Insert an anomaly log to database.
      *
diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
index df6fa5a..dfb7f97 100644
--- a/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
+++ b/src/com/android/settings/fuelgauge/batterytip/BatteryTipUtils.java
@@ -34,6 +34,8 @@
 import com.android.settings.fuelgauge.batterytip.actions.RestrictAppAction;
 import com.android.settings.fuelgauge.batterytip.actions.SmartBatteryAction;
 import com.android.settings.fuelgauge.batterytip.actions.UnrestrictAppAction;
+import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
+import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
 import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
 import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
@@ -126,4 +128,17 @@
         statsManager.setBroadcastSubscriber(pendingIntent,
                 StatsManagerConfig.ANOMALY_CONFIG_KEY, StatsManagerConfig.SUBSCRIBER_ID);
     }
+
+    /**
+     * Detect and return anomaly apps after {@code timeAfterMs}
+     */
+    public static List<AppInfo> detectAnomalies(Context context, long timeAfterMs) {
+        final List<AppInfo> highUsageApps = BatteryDatabaseManager.getInstance(context)
+                .queryAllAnomalies(timeAfterMs, AnomalyDatabaseHelper.State.NEW);
+        // Remove it if it doesn't have label or been restricted
+        highUsageApps.removeIf(
+                new AppLabelPredicate(context).or(new AppRestrictionPredicate(context)));
+
+        return highUsageApps;
+    }
 }
diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java
index 312eeb8..bda0073 100644
--- a/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java
+++ b/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetector.java
@@ -23,6 +23,7 @@
 import com.android.settings.fuelgauge.batterytip.AppInfo;
 import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
 import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy;
+import com.android.settings.fuelgauge.batterytip.BatteryTipUtils;
 import com.android.settings.fuelgauge.batterytip.tips.AppLabelPredicate;
 import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
 import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
@@ -62,12 +63,10 @@
             return getFakeData();
         }
         if (mPolicy.appRestrictionEnabled) {
-            // TODO(b/72385333): hook up the query timestamp to server side
+            // TODO(b/80192137): hook up the query timestamp to server side
             final long oneDayBeforeMs = System.currentTimeMillis() - DateUtils.DAY_IN_MILLIS;
-            final List<AppInfo> highUsageApps = mBatteryDatabaseManager.queryAllAnomalies(
-                    oneDayBeforeMs, AnomalyDatabaseHelper.State.NEW);
-            // Remove it if it doesn't have label or been restricted
-            highUsageApps.removeIf(mAppLabelPredicate.or(mAppRestrictionPredicate));
+            final List<AppInfo> highUsageApps = BatteryTipUtils.detectAnomalies(mContext,
+                    oneDayBeforeMs);
             if (!highUsageApps.isEmpty()) {
                 // If there are new anomalies, show them
                 return new RestrictAppTip(BatteryTip.StateType.NEW, highUsageApps);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetectorTest.java
index 6ef4c74..9b0007b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetectorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/RestrictAppDetectorTest.java
@@ -93,6 +93,7 @@
                 AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UNRESTRICTED_UID,
                 UNRESTRICTED_PACKAGE_NAME);
 
+        BatteryDatabaseManager.setUpForTest(mBatteryDatabaseManager);
         doReturn(mPackageManager).when(mContext).getPackageManager();
         doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(any(),
                 anyInt());