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
This commit is contained in:
@@ -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.
|
||||
*
|
||||
|
@@ -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<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;
|
||||
}
|
||||
}
|
||||
|
@@ -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<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);
|
||||
|
@@ -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());
|
||||
|
Reference in New Issue
Block a user