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.List;
import java.util.Map; import java.util.Map;
import androidx.annotation.VisibleForTesting;
/** /**
* Database manager for battery data. Now it only contains anomaly data stored in {@link AppInfo}. * Database manager for battery data. Now it only contains anomaly data stored in {@link AppInfo}.
* *
@@ -62,6 +64,11 @@ public class BatteryDatabaseManager {
return sSingleton; return sSingleton;
} }
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
public static void setUpForTest(BatteryDatabaseManager batteryDatabaseManager) {
sSingleton = batteryDatabaseManager;
}
/** /**
* Insert an anomaly log to database. * 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.RestrictAppAction;
import com.android.settings.fuelgauge.batterytip.actions.SmartBatteryAction; import com.android.settings.fuelgauge.batterytip.actions.SmartBatteryAction;
import com.android.settings.fuelgauge.batterytip.actions.UnrestrictAppAction; 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.BatteryTip;
import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip; import com.android.settings.fuelgauge.batterytip.tips.RestrictAppTip;
import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip; import com.android.settings.fuelgauge.batterytip.tips.UnrestrictAppTip;
@@ -126,4 +128,17 @@ public class BatteryTipUtils {
statsManager.setBroadcastSubscriber(pendingIntent, statsManager.setBroadcastSubscriber(pendingIntent,
StatsManagerConfig.ANOMALY_CONFIG_KEY, StatsManagerConfig.SUBSCRIBER_ID); 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.AppInfo;
import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager; import com.android.settings.fuelgauge.batterytip.BatteryDatabaseManager;
import com.android.settings.fuelgauge.batterytip.BatteryTipPolicy; 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.AppLabelPredicate;
import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate; import com.android.settings.fuelgauge.batterytip.tips.AppRestrictionPredicate;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip; import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
@@ -62,12 +63,10 @@ public class RestrictAppDetector implements BatteryTipDetector {
return getFakeData(); return getFakeData();
} }
if (mPolicy.appRestrictionEnabled) { 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 long oneDayBeforeMs = System.currentTimeMillis() - DateUtils.DAY_IN_MILLIS;
final List<AppInfo> highUsageApps = mBatteryDatabaseManager.queryAllAnomalies( final List<AppInfo> highUsageApps = BatteryTipUtils.detectAnomalies(mContext,
oneDayBeforeMs, AnomalyDatabaseHelper.State.NEW); oneDayBeforeMs);
// Remove it if it doesn't have label or been restricted
highUsageApps.removeIf(mAppLabelPredicate.or(mAppRestrictionPredicate));
if (!highUsageApps.isEmpty()) { if (!highUsageApps.isEmpty()) {
// If there are new anomalies, show them // If there are new anomalies, show them
return new RestrictAppTip(BatteryTip.StateType.NEW, highUsageApps); return new RestrictAppTip(BatteryTip.StateType.NEW, highUsageApps);

View File

@@ -93,6 +93,7 @@ public class RestrictAppDetectorTest {
AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UNRESTRICTED_UID, AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, UNRESTRICTED_UID,
UNRESTRICTED_PACKAGE_NAME); UNRESTRICTED_PACKAGE_NAME);
BatteryDatabaseManager.setUpForTest(mBatteryDatabaseManager);
doReturn(mPackageManager).when(mContext).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager();
doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(any(), doReturn(mApplicationInfo).when(mPackageManager).getApplicationInfo(any(),
anyInt()); anyInt());