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