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:
jackqdyulei
2018-07-12 17:06:42 -07:00
parent dd9b8af6b9
commit 5918cd5ff9
4 changed files with 27 additions and 5 deletions

View File

@@ -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.
*

View File

@@ -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;
}
}

View File

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

View File

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