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