Transition BatteryAppListPreferences to BatteryUsageStats API
Bug: 173745486 Test: make RunSettingsRoboTests Test: male RunSettingsGoogleRoboTests Change-Id: I7af8cbcd27433b89cb2184750c6854aa74761d0d
This commit is contained in:
@@ -30,7 +30,9 @@ import android.os.BatteryUsageStatsQuery;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Process;
|
||||
import android.os.SystemBatteryConsumer;
|
||||
import android.os.SystemClock;
|
||||
import android.os.UidBatteryConsumer;
|
||||
import android.os.UserHandle;
|
||||
import android.os.UserManager;
|
||||
import android.util.Log;
|
||||
@@ -59,8 +61,6 @@ import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.time.Duration;
|
||||
import java.time.Instant;
|
||||
import java.util.Collections;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -86,6 +86,7 @@ public class BatteryUtils {
|
||||
private static final String TAG = "BatteryUtils";
|
||||
|
||||
private static final int MIN_POWER_THRESHOLD_MILLI_AMP = 5;
|
||||
private static final double MIN_POWER_THRESHOLD_MILLI_AMP_HOURS = 0.002;
|
||||
|
||||
private static final int SECONDS_IN_HOUR = 60 * 60;
|
||||
private static BatteryUtils sInstance;
|
||||
@@ -171,21 +172,6 @@ public class BatteryUtils {
|
||||
+ PowerUtil.convertUsToMs(getForegroundServiceTotalTimeUs(uid, rawRealTimeUs));
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the {@link BatterySipper} that we should hide.
|
||||
*
|
||||
* @param sippers sipper list that need to check and remove
|
||||
* for proportional smearing
|
||||
*/
|
||||
public void removeHiddenBatterySippers(List<BatterySipper> sippers) {
|
||||
for (int i = sippers.size() - 1; i >= 0; i--) {
|
||||
final BatterySipper sipper = sippers.get(i);
|
||||
if (shouldHideSipper(sipper)) {
|
||||
sippers.remove(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check whether we should hide the battery sipper.
|
||||
*/
|
||||
@@ -205,6 +191,42 @@ public class BatteryUtils {
|
||||
|| isHiddenSystemModule(sipper);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the specified battery consumer should be excluded from the summary
|
||||
* battery consumption list.
|
||||
*/
|
||||
public boolean shouldHideUidBatteryConsumer(UidBatteryConsumer consumer, String[] packages) {
|
||||
return consumer.getConsumedPower() < MIN_POWER_THRESHOLD_MILLI_AMP_HOURS
|
||||
|| mPowerUsageFeatureProvider.isTypeSystem(consumer.getUid(), packages)
|
||||
|| shouldHideUidBatteryConsumerUnconditionally(consumer, packages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the specified battery consumer should be excluded from
|
||||
* battery consumption lists, either short or full.
|
||||
*/
|
||||
boolean shouldHideUidBatteryConsumerUnconditionally(UidBatteryConsumer consumer,
|
||||
String[] packages) {
|
||||
return consumer.getUid() < 0 || isHiddenSystemModule(packages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the specified battery consumer should be excluded from the summary
|
||||
* battery consumption list.
|
||||
*/
|
||||
public boolean shouldHideSystemBatteryConsumer(SystemBatteryConsumer consumer) {
|
||||
switch (consumer.getDrainType()) {
|
||||
case SystemBatteryConsumer.DRAIN_TYPE_IDLE:
|
||||
case SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO:
|
||||
case SystemBatteryConsumer.DRAIN_TYPE_SCREEN:
|
||||
case SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH:
|
||||
case SystemBatteryConsumer.DRAIN_TYPE_WIFI:
|
||||
return true;
|
||||
default:
|
||||
return consumer.getConsumedPower() < MIN_POWER_THRESHOLD_MILLI_AMP_HOURS;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return {@code true} if one of packages in {@code sipper} is hidden system modules
|
||||
*/
|
||||
@@ -213,14 +235,20 @@ public class BatteryUtils {
|
||||
return false;
|
||||
}
|
||||
sipper.mPackages = mPackageManager.getPackagesForUid(sipper.getUid());
|
||||
if (sipper.mPackages != null) {
|
||||
for (int i = 0, length = sipper.mPackages.length; i < length; i++) {
|
||||
if (AppUtils.isHiddenSystemModule(mContext, sipper.mPackages[i])) {
|
||||
return isHiddenSystemModule(sipper.mPackages);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if one the specified packages belongs to a hidden system module.
|
||||
*/
|
||||
public boolean isHiddenSystemModule(String[] packages) {
|
||||
if (packages != null) {
|
||||
for (int i = 0, length = packages.length; i < length; i++) {
|
||||
if (AppUtils.isHiddenSystemModule(mContext, packages[i])) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -305,18 +333,6 @@ public class BatteryUtils {
|
||||
return mode == AppOpsManager.MODE_IGNORED || mode == AppOpsManager.MODE_ERRORED;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the {@code usageList} based on {@link BatterySipper#totalPowerMah}
|
||||
*/
|
||||
public void sortUsageList(List<BatterySipper> usageList) {
|
||||
Collections.sort(usageList, new Comparator<BatterySipper>() {
|
||||
@Override
|
||||
public int compare(BatterySipper a, BatterySipper b) {
|
||||
return Double.compare(b.totalPowerMah, a.totalPowerMah);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the time since last full charge, including the device off time
|
||||
*
|
||||
@@ -330,18 +346,6 @@ public class BatteryUtils {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate the screen usage time since last full charge.
|
||||
*
|
||||
* @param batteryStatsHelper utility class that contains the screen usage data
|
||||
* @return time in millis
|
||||
*/
|
||||
public long calculateScreenUsageTime(BatteryStatsHelper batteryStatsHelper) {
|
||||
final BatterySipper sipper = findBatterySipperByType(
|
||||
batteryStatsHelper.getUsageList(), BatterySipper.DrainType.SCREEN);
|
||||
return sipper != null ? sipper.usageTimeMs : 0;
|
||||
}
|
||||
|
||||
public static void logRuntime(String tag, String message, long startTime) {
|
||||
Log.d(tag, message + ": " + (System.currentTimeMillis() - startTime) + "ms");
|
||||
}
|
||||
@@ -466,20 +470,6 @@ public class BatteryUtils {
|
||||
return estimate;
|
||||
}
|
||||
|
||||
/**
|
||||
* Find the {@link BatterySipper} with the corresponding {@link BatterySipper.DrainType}
|
||||
*/
|
||||
public BatterySipper findBatterySipperByType(List<BatterySipper> usageList,
|
||||
BatterySipper.DrainType type) {
|
||||
for (int i = 0, size = usageList.size(); i < size; i++) {
|
||||
final BatterySipper sipper = usageList.get(i);
|
||||
if (sipper.drainType == type) {
|
||||
return sipper;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isDataCorrupted() {
|
||||
return mPackageManager == null || mAppOpsManager == null;
|
||||
}
|
||||
@@ -614,4 +604,3 @@ public class BatteryUtils {
|
||||
return -1L;
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user