diff --git a/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java b/src/com/android/settings/fuelgauge/batterytip/BatteryDatabaseManager.java index 2411db4ad5b..910b3680965 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.Collections; 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 @@ public class BatteryDatabaseManager { 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 df6fa5a5c11..dfb7f974e5f 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.OpenRestrictAppFragment 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 @@ public class BatteryTipUtils { statsManager.setBroadcastSubscriber(pendingIntent, StatsManagerConfig.ANOMALY_CONFIG_KEY, StatsManagerConfig.SUBSCRIBER_ID); } + + /** + * Detect and return anomaly apps after {@code timeAfterMs} + */ + public static List detectAnomalies(Context context, long timeAfterMs) { + final List 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 312eeb825a4..bda0073ab85 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.AnomalyDatabaseHelper; 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 @@ public class RestrictAppDetector implements BatteryTipDetector { 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 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 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 6ef4c74e828..9b0007b55ca 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 @@ public class RestrictAppDetectorTest { 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());