Replace uses of SystemBatteryConsumer with aggregate BatteryConsumers

Bug: 186006876
Test: make RunSettingsRoboTests
Test: make RunSettingsGoogleRoboTests
Change-Id: I2e240aa15c87b4b9dcbe993b4b0b1111285ec3ff
This commit is contained in:
Dmitri Plotnikov
2021-04-28 17:03:30 -07:00
parent 80daf4fc49
commit 6417493b29
11 changed files with 224 additions and 233 deletions

View File

@@ -21,13 +21,13 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.AggregateBatteryConsumer;
import android.os.BatteryConsumer; import android.os.BatteryConsumer;
import android.os.BatteryUsageStats; import android.os.BatteryUsageStats;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.os.Process; import android.os.Process;
import android.os.SystemBatteryConsumer;
import android.os.UidBatteryConsumer; import android.os.UidBatteryConsumer;
import android.os.UserBatteryConsumer; import android.os.UserBatteryConsumer;
import android.os.UserHandle; import android.os.UserHandle;
@@ -344,16 +344,38 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro
} }
} }
final List<SystemBatteryConsumer> systemBatteryConsumers = final BatteryConsumer deviceConsumer = mBatteryUsageStats.getAggregateBatteryConsumer(
mBatteryUsageStats.getSystemBatteryConsumers(); BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE);
for (int i = 0, size = systemBatteryConsumers.size(); i < size; i++) { final BatteryConsumer appsConsumer = mBatteryUsageStats.getAggregateBatteryConsumer(
final SystemBatteryConsumer consumer = systemBatteryConsumers.get(i); BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS);
if (!showAllApps && mBatteryUtils.shouldHideSystemBatteryConsumer(consumer)) {
for (int componentId = 0; componentId < BatteryConsumer.POWER_COMPONENT_COUNT;
componentId++) {
if (!showAllApps
&& mBatteryUtils.shouldHideDevicePowerComponent(deviceConsumer, componentId)) {
continue; continue;
} }
results.add(new BatteryEntry(mContext, mHandler, mUserManager, results.add(new BatteryEntry(mContext, componentId,
consumer, /* isHidden */ true, null, null, loadDataInBackground)); deviceConsumer.getConsumedPower(componentId),
appsConsumer.getConsumedPower(componentId),
deviceConsumer.getUsageDurationMillis(componentId)));
}
for (int componentId = BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID;
componentId < BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID
+ deviceConsumer.getCustomPowerComponentCount();
componentId++) {
if (!showAllApps
&& mBatteryUtils.shouldHideCustomDevicePowerComponent(deviceConsumer,
componentId)) {
continue;
}
results.add(new BatteryEntry(mContext, componentId,
deviceConsumer.getCustomPowerComponentName(componentId),
deviceConsumer.getConsumedPowerForCustomComponent(componentId),
appsConsumer.getConsumedPowerForCustomComponent(componentId)));
} }
if (showAllApps) { if (showAllApps) {
@@ -431,20 +453,26 @@ public class BatteryAppListPreferenceController extends AbstractPreferenceContro
.setDischargePercentage(100); .setDischargePercentage(100);
float use = 500; float use = 500;
for (@SystemBatteryConsumer.DrainType int drainType : new int[]{ final AggregateBatteryConsumer.Builder appsBatteryConsumerBuilder =
SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY, builder.getAggregateBatteryConsumerBuilder(
SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH, BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_ALL_APPS);
SystemBatteryConsumer.DRAIN_TYPE_CAMERA, final AggregateBatteryConsumer.Builder deviceBatteryConsumerBuilder =
SystemBatteryConsumer.DRAIN_TYPE_FLASHLIGHT, builder.getAggregateBatteryConsumerBuilder(
SystemBatteryConsumer.DRAIN_TYPE_IDLE, BatteryUsageStats.AGGREGATE_BATTERY_CONSUMER_SCOPE_DEVICE);
SystemBatteryConsumer.DRAIN_TYPE_MEMORY, for (@BatteryConsumer.PowerComponent int componentId : new int[]{
SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO, BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY,
SystemBatteryConsumer.DRAIN_TYPE_PHONE, BatteryConsumer.POWER_COMPONENT_BLUETOOTH,
SystemBatteryConsumer.DRAIN_TYPE_SCREEN, BatteryConsumer.POWER_COMPONENT_CAMERA,
SystemBatteryConsumer.DRAIN_TYPE_WIFI, BatteryConsumer.POWER_COMPONENT_FLASHLIGHT,
BatteryConsumer.POWER_COMPONENT_IDLE,
BatteryConsumer.POWER_COMPONENT_MEMORY,
BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO,
BatteryConsumer.POWER_COMPONENT_PHONE,
BatteryConsumer.POWER_COMPONENT_SCREEN,
BatteryConsumer.POWER_COMPONENT_WIFI,
}) { }) {
builder.getOrCreateSystemBatteryConsumerBuilder(drainType) appsBatteryConsumerBuilder.setConsumedPower(componentId, use);
.setConsumedPower(BatteryConsumer.POWER_COMPONENT_CPU, use); deviceBatteryConsumerBuilder.setConsumedPower(componentId, use * 2);
use += 5; use += 5;
} }

View File

@@ -15,8 +15,6 @@ package com.android.settings.fuelgauge;
import android.content.Context; import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
@@ -29,7 +27,6 @@ import androidx.annotation.VisibleForTesting;
import com.android.settingslib.utils.StringUtil; import com.android.settingslib.utils.StringUtil;
import java.time.Duration;
import java.util.Comparator; import java.util.Comparator;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale; import java.util.Locale;
@@ -158,8 +155,8 @@ public class BatteryDiffEntry {
break; break;
case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY: case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY:
final BatteryEntry.NameAndIcon nameAndIconForSystem = final BatteryEntry.NameAndIcon nameAndIconForSystem =
BatteryEntry.getNameAndIconFromDrainType( BatteryEntry.getNameAndIconFromPowerComponent(
mContext, mBatteryHistEntry.mDrainType); mContext, mBatteryHistEntry.mPowerComponentId);
if (nameAndIconForSystem != null) { if (nameAndIconForSystem != null) {
mAppLabel = nameAndIconForSystem.name; mAppLabel = nameAndIconForSystem.name;
if (nameAndIconForSystem.iconId != 0) { if (nameAndIconForSystem.iconId != 0) {

View File

@@ -29,11 +29,11 @@ import android.os.BatteryConsumer;
import android.os.Handler; import android.os.Handler;
import android.os.Process; import android.os.Process;
import android.os.RemoteException; import android.os.RemoteException;
import android.os.SystemBatteryConsumer;
import android.os.UidBatteryConsumer; import android.os.UidBatteryConsumer;
import android.os.UserBatteryConsumer; import android.os.UserBatteryConsumer;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.util.DebugUtils;
import android.util.Log; import android.util.Log;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@@ -160,6 +160,11 @@ public class BatteryEntry {
private final Context mContext; private final Context mContext;
private final BatteryConsumer mBatteryConsumer; private final BatteryConsumer mBatteryConsumer;
private final boolean mIsHidden; private final boolean mIsHidden;
@ConvertUtils.ConsumerType
private final int mConsumerType;
@BatteryConsumer.PowerComponent
private final int mPowerComponentId;
private long mUsageDurationMs;
public String name; public String name;
public Drawable icon; public Drawable icon;
@@ -188,8 +193,10 @@ public class BatteryEntry {
mBatteryConsumer = batteryConsumer; mBatteryConsumer = batteryConsumer;
mIsHidden = isHidden; mIsHidden = isHidden;
mDefaultPackageName = packageName; mDefaultPackageName = packageName;
mPowerComponentId = -1;
if (batteryConsumer instanceof UidBatteryConsumer) { if (batteryConsumer instanceof UidBatteryConsumer) {
mConsumerType = ConvertUtils.CONSUMER_TYPE_UID_BATTERY;
mConsumedPower = batteryConsumer.getConsumedPower(); mConsumedPower = batteryConsumer.getConsumedPower();
UidBatteryConsumer uidBatteryConsumer = (UidBatteryConsumer) batteryConsumer; UidBatteryConsumer uidBatteryConsumer = (UidBatteryConsumer) batteryConsumer;
@@ -215,27 +222,54 @@ public class BatteryEntry {
} }
} }
getQuickNameIconForUid(uid, packages, loadDataInBackground); getQuickNameIconForUid(uid, packages, loadDataInBackground);
return;
} else if (batteryConsumer instanceof SystemBatteryConsumer) {
mConsumedPower = batteryConsumer.getConsumedPower()
- ((SystemBatteryConsumer) batteryConsumer).getPowerConsumedByApps();
final NameAndIcon nameAndIcon = getNameAndIconFromDrainType(
context, ((SystemBatteryConsumer) batteryConsumer).getDrainType());
iconId = nameAndIcon.iconId;
name = nameAndIcon.name;
} else if (batteryConsumer instanceof UserBatteryConsumer) { } else if (batteryConsumer instanceof UserBatteryConsumer) {
mConsumerType = ConvertUtils.CONSUMER_TYPE_USER_BATTERY;
mConsumedPower = batteryConsumer.getConsumedPower(); mConsumedPower = batteryConsumer.getConsumedPower();
final NameAndIcon nameAndIcon = getNameAndIconFromUserId( final NameAndIcon nameAndIcon = getNameAndIconFromUserId(
context, ((UserBatteryConsumer) batteryConsumer).getUserId()); context, ((UserBatteryConsumer) batteryConsumer).getUserId());
icon = nameAndIcon.icon; icon = nameAndIcon.icon;
name = nameAndIcon.name; name = nameAndIcon.name;
} else {
throw new IllegalArgumentException("Unsupported battery consumer: " + batteryConsumer);
}
} }
/** Battery entry for a power component of AggregateBatteryConsumer */
public BatteryEntry(Context context, int powerComponentId, double devicePowerMah,
double appsPowerMah, long usageDurationMs) {
mContext = context;
mBatteryConsumer = null;
mIsHidden = false;
mPowerComponentId = powerComponentId;
mConsumedPower = devicePowerMah - appsPowerMah;
mUsageDurationMs = usageDurationMs;
mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
final NameAndIcon nameAndIcon = getNameAndIconFromPowerComponent(context, powerComponentId);
iconId = nameAndIcon.iconId;
name = nameAndIcon.name;
if (iconId != 0) { if (iconId != 0) {
icon = context.getDrawable(iconId); icon = context.getDrawable(iconId);
} }
} }
/** Battery entry for a custom power component of AggregateBatteryConsumer */
public BatteryEntry(Context context, int powerComponentId, String powerComponentName,
double devicePowerMah, double appsPowerMah) {
mContext = context;
mBatteryConsumer = null;
mIsHidden = false;
mPowerComponentId = powerComponentId;
iconId = R.drawable.ic_power_system;
icon = context.getDrawable(iconId);
name = powerComponentName;
mConsumedPower = devicePowerMah - appsPowerMah;
mConsumerType = ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY;
}
public Drawable getIcon() { public Drawable getIcon() {
return icon; return icon;
} }
@@ -247,6 +281,16 @@ public class BatteryEntry {
return name; return name;
} }
@ConvertUtils.ConsumerType
public int getConsumerType() {
return mConsumerType;
}
@BatteryConsumer.PowerComponent
public int getPowerComponentId() {
return mPowerComponentId;
}
void getQuickNameIconForUid( void getQuickNameIconForUid(
final int uid, final String[] packages, final boolean loadDataInBackground) { final int uid, final String[] packages, final boolean loadDataInBackground) {
// Locale sync to system config in Settings // Locale sync to system config in Settings
@@ -395,13 +439,10 @@ public class BatteryEntry {
public String getKey() { public String getKey() {
if (mBatteryConsumer instanceof UidBatteryConsumer) { if (mBatteryConsumer instanceof UidBatteryConsumer) {
return Integer.toString(((UidBatteryConsumer) mBatteryConsumer).getUid()); return Integer.toString(((UidBatteryConsumer) mBatteryConsumer).getUid());
} else if (mBatteryConsumer instanceof SystemBatteryConsumer) {
return "S|" + ((SystemBatteryConsumer) mBatteryConsumer).getDrainType();
} else if (mBatteryConsumer instanceof UserBatteryConsumer) { } else if (mBatteryConsumer instanceof UserBatteryConsumer) {
return "U|" + ((UserBatteryConsumer) mBatteryConsumer).getUserId(); return "U|" + ((UserBatteryConsumer) mBatteryConsumer).getUserId();
} else { } else {
Log.w(TAG, "Unsupported BatteryConsumer: " + mBatteryConsumer); return "S|" + mPowerComponentId;
return "";
} }
} }
@@ -448,13 +489,6 @@ public class BatteryEntry {
} }
} }
/**
* Returns the BatteryConsumer of the app described by this entry.
*/
public BatteryConsumer getBatteryConsumer() {
return mBatteryConsumer;
}
/** /**
* Returns foreground foreground time (in milliseconds) that is attributed to this entry. * Returns foreground foreground time (in milliseconds) that is attributed to this entry.
*/ */
@@ -462,10 +496,8 @@ public class BatteryEntry {
if (mBatteryConsumer instanceof UidBatteryConsumer) { if (mBatteryConsumer instanceof UidBatteryConsumer) {
return ((UidBatteryConsumer) mBatteryConsumer).getTimeInStateMs( return ((UidBatteryConsumer) mBatteryConsumer).getTimeInStateMs(
UidBatteryConsumer.STATE_FOREGROUND); UidBatteryConsumer.STATE_FOREGROUND);
} else if (mBatteryConsumer instanceof SystemBatteryConsumer) {
return ((SystemBatteryConsumer) mBatteryConsumer).getUsageDurationMillis();
} else { } else {
return 0; return mUsageDurationMs;
} }
} }
@@ -537,52 +569,53 @@ public class BatteryEntry {
} }
/** /**
* Gets name annd icon resource from SystemBatteryConsumer drain type. * Gets name and icon resource from BatteryConsumer power component ID.
*/ */
public static NameAndIcon getNameAndIconFromDrainType( public static NameAndIcon getNameAndIconFromPowerComponent(
Context context, final int drainType) { Context context, @BatteryConsumer.PowerComponent int powerComponentId) {
String name = null; String name;
int iconId = 0; int iconId;
switch (drainType) { switch (powerComponentId) {
case SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY: case BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY:
name = context.getResources().getString(R.string.ambient_display_screen_title); name = context.getResources().getString(R.string.ambient_display_screen_title);
iconId = R.drawable.ic_settings_aod; iconId = R.drawable.ic_settings_aod;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH: case BatteryConsumer.POWER_COMPONENT_BLUETOOTH:
name = context.getResources().getString(R.string.power_bluetooth); name = context.getResources().getString(R.string.power_bluetooth);
iconId = com.android.internal.R.drawable.ic_settings_bluetooth; iconId = com.android.internal.R.drawable.ic_settings_bluetooth;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_CAMERA: case BatteryConsumer.POWER_COMPONENT_CAMERA:
name = context.getResources().getString(R.string.power_camera); name = context.getResources().getString(R.string.power_camera);
iconId = R.drawable.ic_settings_camera; iconId = R.drawable.ic_settings_camera;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO: case BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO:
name = context.getResources().getString(R.string.power_cell); name = context.getResources().getString(R.string.power_cell);
iconId = R.drawable.ic_cellular_1_bar; iconId = R.drawable.ic_cellular_1_bar;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_FLASHLIGHT: case BatteryConsumer.POWER_COMPONENT_FLASHLIGHT:
name = context.getResources().getString(R.string.power_flashlight); name = context.getResources().getString(R.string.power_flashlight);
iconId = R.drawable.ic_settings_display; iconId = R.drawable.ic_settings_display;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_PHONE: case BatteryConsumer.POWER_COMPONENT_PHONE:
name = context.getResources().getString(R.string.power_phone); name = context.getResources().getString(R.string.power_phone);
iconId = R.drawable.ic_settings_voice_calls; iconId = R.drawable.ic_settings_voice_calls;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_SCREEN: case BatteryConsumer.POWER_COMPONENT_SCREEN:
name = context.getResources().getString(R.string.power_screen); name = context.getResources().getString(R.string.power_screen);
iconId = R.drawable.ic_settings_display; iconId = R.drawable.ic_settings_display;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_WIFI: case BatteryConsumer.POWER_COMPONENT_WIFI:
name = context.getResources().getString(R.string.power_wifi); name = context.getResources().getString(R.string.power_wifi);
iconId = R.drawable.ic_settings_wireless; iconId = R.drawable.ic_settings_wireless;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_IDLE: case BatteryConsumer.POWER_COMPONENT_IDLE:
case SystemBatteryConsumer.DRAIN_TYPE_MEMORY: case BatteryConsumer.POWER_COMPONENT_MEMORY:
name = context.getResources().getString(R.string.power_idle); name = context.getResources().getString(R.string.power_idle);
iconId = R.drawable.ic_settings_phone_idle; iconId = R.drawable.ic_settings_phone_idle;
break; break;
case SystemBatteryConsumer.DRAIN_TYPE_CUSTOM: default:
name = null; name = DebugUtils.constantToString(BatteryConsumer.class, "POWER_COMPONENT_",
powerComponentId);
iconId = R.drawable.ic_power_system; iconId = R.drawable.ic_power_system;
break; break;
} }

View File

@@ -15,10 +15,8 @@ package com.android.settings.fuelgauge;
import android.content.ContentValues; import android.content.ContentValues;
import android.database.Cursor; import android.database.Cursor;
import android.util.Log;
import java.time.Duration; import java.time.Duration;
import java.util.TimeZone;
/** A container class to carry data from {@link ContentValues}. */ /** A container class to carry data from {@link ContentValues}. */
public class BatteryHistEntry { public class BatteryHistEntry {
@@ -61,7 +59,7 @@ public class BatteryHistEntry {
public final double mPercentOfTotal; public final double mPercentOfTotal;
public final long mForegroundUsageTimeInMs; public final long mForegroundUsageTimeInMs;
public final long mBackgroundUsageTimeInMs; public final long mBackgroundUsageTimeInMs;
public final int mDrainType; public final int mPowerComponentId;
public final int mConsumerType; public final int mConsumerType;
// Records the battery intent relative information. // Records the battery intent relative information.
public final int mBatteryLevel; public final int mBatteryLevel;
@@ -85,7 +83,7 @@ public class BatteryHistEntry {
mPercentOfTotal = getDouble(values, KEY_PERCENT_OF_TOTAL); mPercentOfTotal = getDouble(values, KEY_PERCENT_OF_TOTAL);
mForegroundUsageTimeInMs = getLong(values, KEY_FOREGROUND_USAGE_TIME); mForegroundUsageTimeInMs = getLong(values, KEY_FOREGROUND_USAGE_TIME);
mBackgroundUsageTimeInMs = getLong(values, KEY_BACKGROUND_USAGE_TIME); mBackgroundUsageTimeInMs = getLong(values, KEY_BACKGROUND_USAGE_TIME);
mDrainType = getInteger(values, KEY_DRAIN_TYPE); mPowerComponentId = getInteger(values, KEY_DRAIN_TYPE);
mConsumerType = getInteger(values, KEY_CONSUMER_TYPE); mConsumerType = getInteger(values, KEY_CONSUMER_TYPE);
mBatteryLevel = getInteger(values, KEY_BATTERY_LEVEL); mBatteryLevel = getInteger(values, KEY_BATTERY_LEVEL);
mBatteryStatus = getInteger(values, KEY_BATTERY_STATUS); mBatteryStatus = getInteger(values, KEY_BATTERY_STATUS);
@@ -106,7 +104,7 @@ public class BatteryHistEntry {
mPercentOfTotal = getDouble(cursor, KEY_PERCENT_OF_TOTAL); mPercentOfTotal = getDouble(cursor, KEY_PERCENT_OF_TOTAL);
mForegroundUsageTimeInMs = getLong(cursor, KEY_FOREGROUND_USAGE_TIME); mForegroundUsageTimeInMs = getLong(cursor, KEY_FOREGROUND_USAGE_TIME);
mBackgroundUsageTimeInMs = getLong(cursor, KEY_BACKGROUND_USAGE_TIME); mBackgroundUsageTimeInMs = getLong(cursor, KEY_BACKGROUND_USAGE_TIME);
mDrainType = getInteger(cursor, KEY_DRAIN_TYPE); mPowerComponentId = getInteger(cursor, KEY_DRAIN_TYPE);
mConsumerType = getInteger(cursor, KEY_CONSUMER_TYPE); mConsumerType = getInteger(cursor, KEY_CONSUMER_TYPE);
mBatteryLevel = getInteger(cursor, KEY_BATTERY_LEVEL); mBatteryLevel = getInteger(cursor, KEY_BATTERY_LEVEL);
mBatteryStatus = getInteger(cursor, KEY_BATTERY_STATUS); mBatteryStatus = getInteger(cursor, KEY_BATTERY_STATUS);
@@ -141,7 +139,7 @@ public class BatteryHistEntry {
mKey = Long.toString(mUid); mKey = Long.toString(mUid);
break; break;
case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY: case ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY:
mKey = "S|" + mDrainType; mKey = "S|" + mPowerComponentId;
break; break;
case ConvertUtils.CONSUMER_TYPE_USER_BATTERY: case ConvertUtils.CONSUMER_TYPE_USER_BATTERY:
mKey = "U|" + mUserId; mKey = "U|" + mUserId;
@@ -164,7 +162,7 @@ public class BatteryHistEntry {
mPercentOfTotal, mTotalPower, mConsumePower, mPercentOfTotal, mTotalPower, mConsumePower,
Duration.ofMillis(mForegroundUsageTimeInMs).getSeconds(), Duration.ofMillis(mForegroundUsageTimeInMs).getSeconds(),
Duration.ofMillis(mBackgroundUsageTimeInMs).getSeconds())) Duration.ofMillis(mBackgroundUsageTimeInMs).getSeconds()))
.append(String.format("\n\tdrain=%d|consumer=%d", mDrainType, mConsumerType)) .append(String.format("\n\tdrain=%d|consumer=%d", mPowerComponentId, mConsumerType))
.append(String.format("\n\tbattery=%d|status=%d|health=%d\n}", .append(String.format("\n\tbattery=%d|status=%d|health=%d\n}",
mBatteryLevel, mBatteryStatus, mBatteryHealth)); mBatteryLevel, mBatteryStatus, mBatteryHealth));
return builder.toString(); return builder.toString();

View File

@@ -23,13 +23,13 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo; import android.content.pm.PackageInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.os.BatteryConsumer;
import android.os.BatteryStats; import android.os.BatteryStats;
import android.os.BatteryStatsManager; import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats; import android.os.BatteryUsageStats;
import android.os.BatteryUsageStatsQuery; import android.os.BatteryUsageStatsQuery;
import android.os.Build; import android.os.Build;
import android.os.Process; import android.os.Process;
import android.os.SystemBatteryConsumer;
import android.os.SystemClock; import android.os.SystemClock;
import android.os.UidBatteryConsumer; import android.os.UidBatteryConsumer;
import android.os.UserHandle; import android.os.UserHandle;
@@ -195,22 +195,34 @@ public class BatteryUtils {
} }
/** /**
* Returns true if the specified battery consumer should be excluded from the summary * Returns true if the specified device power component should be excluded from the summary
* battery consumption list. * battery consumption list.
*/ */
public boolean shouldHideSystemBatteryConsumer(SystemBatteryConsumer consumer) { public boolean shouldHideDevicePowerComponent(BatteryConsumer consumer,
switch (consumer.getDrainType()) { @BatteryConsumer.PowerComponent int powerComponentId) {
case SystemBatteryConsumer.DRAIN_TYPE_IDLE: switch (powerComponentId) {
case SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO: case BatteryConsumer.POWER_COMPONENT_IDLE:
case SystemBatteryConsumer.DRAIN_TYPE_SCREEN: case BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO:
case SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH: case BatteryConsumer.POWER_COMPONENT_SCREEN:
case SystemBatteryConsumer.DRAIN_TYPE_WIFI: case BatteryConsumer.POWER_COMPONENT_BLUETOOTH:
case BatteryConsumer.POWER_COMPONENT_WIFI:
return true; return true;
default: default:
return consumer.getConsumedPower() < MIN_POWER_THRESHOLD_MILLI_AMP_HOURS; return consumer.getConsumedPower(powerComponentId)
< MIN_POWER_THRESHOLD_MILLI_AMP_HOURS;
} }
} }
/**
* Returns true if the specified device custom power component should be excluded from the
* summary battery consumption list.
*/
public boolean shouldHideCustomDevicePowerComponent(BatteryConsumer consumer,
int customPowerComponentId) {
return consumer.getConsumedPowerForCustomComponent(customPowerComponentId)
< MIN_POWER_THRESHOLD_MILLI_AMP_HOURS;
}
/** /**
* Returns true if one the specified packages belongs to a hidden system module. * Returns true if one the specified packages belongs to a hidden system module.
*/ */

View File

@@ -15,14 +15,9 @@ package com.android.settings.fuelgauge;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.content.ContentValues; import android.content.ContentValues;
import android.os.BatteryConsumer;
import android.os.BatteryUsageStats;
import android.content.Context; import android.content.Context;
import android.os.SystemBatteryConsumer; import android.os.BatteryUsageStats;
import android.os.UidBatteryConsumer;
import android.os.UserBatteryConsumer;
import android.os.UserHandle; import android.os.UserHandle;
import android.util.Log;
import androidx.annotation.VisibleForTesting; import androidx.annotation.VisibleForTesting;
@@ -79,28 +74,6 @@ public final class ConvertUtils {
private ConvertUtils() {} private ConvertUtils() {}
/** Gets consumer type from {@link BatteryConsumer}. */
@ConsumerType
public static int getConsumerType(BatteryConsumer consumer) {
if (consumer instanceof UidBatteryConsumer) {
return CONSUMER_TYPE_UID_BATTERY;
} else if (consumer instanceof UserBatteryConsumer) {
return CONSUMER_TYPE_USER_BATTERY;
} else if (consumer instanceof SystemBatteryConsumer) {
return CONSUMER_TYPE_SYSTEM_BATTERY;
} else {
return CONSUMER_TYPE_UNKNOWN;
}
}
/** Gets battery drain type for {@link SystemBatteryConsumer}. */
public static int getDrainType(BatteryConsumer consumer) {
if (consumer instanceof SystemBatteryConsumer) {
return ((SystemBatteryConsumer) consumer).getDrainType();
}
return INVALID_DRAIN_TYPE;
}
public static ContentValues convert( public static ContentValues convert(
BatteryEntry entry, BatteryEntry entry,
BatteryUsageStats batteryUsageStats, BatteryUsageStats batteryUsageStats,
@@ -129,9 +102,9 @@ public final class ConvertUtils {
values.put(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME, values.put(BatteryHistEntry.KEY_BACKGROUND_USAGE_TIME,
Long.valueOf(entry.getTimeInBackgroundMs())); Long.valueOf(entry.getTimeInBackgroundMs()));
values.put(BatteryHistEntry.KEY_DRAIN_TYPE, values.put(BatteryHistEntry.KEY_DRAIN_TYPE,
getDrainType(entry.getBatteryConsumer())); entry.getPowerComponentId());
values.put(BatteryHistEntry.KEY_CONSUMER_TYPE, values.put(BatteryHistEntry.KEY_CONSUMER_TYPE,
getConsumerType(entry.getBatteryConsumer())); entry.getConsumerType());
} else { } else {
values.put(BatteryHistEntry.KEY_PACKAGE_NAME, FAKE_PACKAGE_NAME); values.put(BatteryHistEntry.KEY_PACKAGE_NAME, FAKE_PACKAGE_NAME);
} }

View File

@@ -17,18 +17,17 @@ package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import android.content.Context;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.SystemBatteryConsumer; import android.os.BatteryConsumer;
import android.os.UserManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager;
import com.android.settings.R; import com.android.settings.R;
@@ -114,7 +113,7 @@ public final class BatteryDiffEntryTest {
final ContentValues values = getContentValuesWithType( final ContentValues values = getContentValuesWithType(
ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
values.put("drainType", values.put("drainType",
Integer.valueOf(SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY)); Integer.valueOf(BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY));
final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values); final BatteryHistEntry batteryHistEntry = new BatteryHistEntry(values);
final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry); final BatteryDiffEntry entry = createBatteryDiffEntry(10, batteryHistEntry);

View File

@@ -28,9 +28,9 @@ import android.content.Context;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.os.BatteryConsumer;
import android.os.Handler; import android.os.Handler;
import android.os.Process; import android.os.Process;
import android.os.SystemBatteryConsumer;
import android.os.UidBatteryConsumer; import android.os.UidBatteryConsumer;
import android.os.UserBatteryConsumer; import android.os.UserBatteryConsumer;
import android.os.UserManager; import android.os.UserManager;
@@ -68,7 +68,6 @@ public class BatteryEntryTest {
@Mock private PackageManager mockPackageManager; @Mock private PackageManager mockPackageManager;
@Mock private UserManager mockUserManager; @Mock private UserManager mockUserManager;
@Mock private UidBatteryConsumer mUidBatteryConsumer; @Mock private UidBatteryConsumer mUidBatteryConsumer;
@Mock private SystemBatteryConsumer mSystemBatteryConsumer;
@Before @Before
public void stubContextToReturnMockPackageManager() { public void stubContextToReturnMockPackageManager() {
@@ -97,11 +96,12 @@ public class BatteryEntryTest {
consumer, false, packages, packageName); consumer, false, packages, packageName);
} }
private BatteryEntry createSystemBatteryEntry(int drainType) { private BatteryEntry createAggregateBatteryEntry(int powerComponentId) {
SystemBatteryConsumer consumer = mock(SystemBatteryConsumer.class); return new BatteryEntry(mMockContext, powerComponentId, 200, 100, 1000);
when(consumer.getDrainType()).thenReturn(drainType); }
return new BatteryEntry(mMockContext, mockHandler, mockUserManager,
consumer, false, null, null); private BatteryEntry createCustomAggregateBatteryEntry(int powerComponentId) {
return new BatteryEntry(mMockContext, powerComponentId, "CUSTOM", 200, 100);
} }
private BatteryEntry createUserBatteryConsumer(int userId) { private BatteryEntry createUserBatteryConsumer(int userId) {
@@ -151,16 +151,22 @@ public class BatteryEntryTest {
@Test @Test
public void batteryEntryForAOD_containCorrectInfo() { public void batteryEntryForAOD_containCorrectInfo() {
final SystemBatteryConsumer systemBatteryConsumer = mock(SystemBatteryConsumer.class); final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
when(systemBatteryConsumer.getDrainType()) BatteryConsumer.POWER_COMPONENT_AMBIENT_DISPLAY, 200, 100, 1000);
.thenReturn(SystemBatteryConsumer.DRAIN_TYPE_AMBIENT_DISPLAY);
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mockHandler,
mockUserManager, systemBatteryConsumer, false, null, null);
assertThat(entry.iconId).isEqualTo(R.drawable.ic_settings_aod); assertThat(entry.iconId).isEqualTo(R.drawable.ic_settings_aod);
assertThat(entry.name).isEqualTo("Ambient display"); assertThat(entry.name).isEqualTo("Ambient display");
} }
@Test
public void batteryEntryForCustomComponent_containCorrectInfo() {
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42, "ABC", 200, 100);
assertThat(entry.iconId).isEqualTo(R.drawable.ic_power_system);
assertThat(entry.name).isEqualTo("ABC");
}
@Test @Test
public void getTimeInForegroundMs_app() { public void getTimeInForegroundMs_app() {
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mockHandler, final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mockHandler,
@@ -173,11 +179,9 @@ public class BatteryEntryTest {
} }
@Test @Test
public void getTimeInForegroundMs_systemConsumer() { public void getTimeInForegroundMs_aggregateBatteryConsumer() {
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mockHandler, final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
mockUserManager, mSystemBatteryConsumer, false, null, null); BatteryConsumer.POWER_COMPONENT_BLUETOOTH, 10, 20, 100);
when(mSystemBatteryConsumer.getUsageDurationMillis()).thenReturn(100L);
assertThat(entry.getTimeInForegroundMs()).isEqualTo(100L); assertThat(entry.getTimeInForegroundMs()).isEqualTo(100L);
} }
@@ -195,11 +199,8 @@ public class BatteryEntryTest {
@Test @Test
public void getTimeInBackgroundMs_systemConsumer() { public void getTimeInBackgroundMs_systemConsumer() {
final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application, mockHandler, final BatteryEntry entry = new BatteryEntry(RuntimeEnvironment.application,
mockUserManager, mSystemBatteryConsumer, false, null, null); BatteryConsumer.POWER_COMPONENT_BLUETOOTH, 100, 200, 1000);
when(mSystemBatteryConsumer.getUsageDurationMillis())
.thenReturn(100L);
assertThat(entry.getTimeInBackgroundMs()).isEqualTo(0); assertThat(entry.getTimeInBackgroundMs()).isEqualTo(0);
} }
@@ -225,13 +226,21 @@ public class BatteryEntryTest {
} }
@Test @Test
public void getKey_SystemBatteryConsumer_returnDrainType() { public void getKey_AggregateBatteryConsumer_returnComponentId() {
final BatteryEntry entry = final BatteryEntry entry = createAggregateBatteryEntry(
createSystemBatteryEntry(SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH); BatteryConsumer.POWER_COMPONENT_BLUETOOTH);
final String key = entry.getKey(); final String key = entry.getKey();
assertThat(key).isEqualTo("S|2"); assertThat(key).isEqualTo("S|2");
} }
@Test
public void getKey_CustomAggregateBatteryConsumer_returnComponentId() {
final BatteryEntry entry = createCustomAggregateBatteryEntry(
BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 42);
final String key = entry.getKey();
assertThat(key).isEqualTo("S|1042");
}
@Test @Test
public void getKey_UserBatteryConsumer_returnUserId() { public void getKey_UserBatteryConsumer_returnUserId() {
doReturn(mockUserManager).when(mMockContext).getSystemService(UserManager.class); doReturn(mockUserManager).when(mMockContext).getSystemService(UserManager.class);

View File

@@ -17,15 +17,12 @@ package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.database.MatrixCursor;
import android.content.ContentValues; import android.content.ContentValues;
import android.os.BatteryConsumer; import android.database.MatrixCursor;
import android.os.BatteryManager; import android.os.BatteryManager;
import android.os.BatteryUsageStats; import android.os.BatteryUsageStats;
import android.os.SystemBatteryConsumer;
import android.os.UserHandle; import android.os.UserHandle;
import org.junit.Before; import org.junit.Before;
@@ -44,8 +41,6 @@ public final class BatteryHistEntryTest {
private BatteryEntry mockBatteryEntry; private BatteryEntry mockBatteryEntry;
@Mock @Mock
private BatteryUsageStats mBatteryUsageStats; private BatteryUsageStats mBatteryUsageStats;
@Mock
private SystemBatteryConsumer mockSystemBatteryConsumer;
@Before @Before
public void setUp() { public void setUp() {
@@ -65,9 +60,9 @@ public final class BatteryHistEntryTest {
mockBatteryEntry.percent = 0.3; mockBatteryEntry.percent = 0.3;
when(mockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L); when(mockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
when(mockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L); when(mockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
when(mockBatteryEntry.getBatteryConsumer()) when(mockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
.thenReturn(mockSystemBatteryConsumer); when(mockBatteryEntry.getConsumerType())
when(mockSystemBatteryConsumer.getDrainType()).thenReturn(expectedType); .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
final ContentValues values = final ContentValues values =
ConvertUtils.convert( ConvertUtils.convert(
mockBatteryEntry, mockBatteryEntry,
@@ -228,7 +223,7 @@ public final class BatteryHistEntryTest {
assertThat(entry.mPercentOfTotal).isEqualTo(percentOfTotal); assertThat(entry.mPercentOfTotal).isEqualTo(percentOfTotal);
assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(1234L); assertThat(entry.mForegroundUsageTimeInMs).isEqualTo(1234L);
assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(5689L); assertThat(entry.mBackgroundUsageTimeInMs).isEqualTo(5689L);
assertThat(entry.mDrainType).isEqualTo(drainType); assertThat(entry.mPowerComponentId).isEqualTo(drainType);
assertThat(entry.mConsumerType) assertThat(entry.mConsumerType)
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY); .isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
assertThat(entry.mBatteryLevel).isEqualTo(12); assertThat(entry.mBatteryLevel).isEqualTo(12);

View File

@@ -44,12 +44,12 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo; import android.content.pm.ResolveInfo;
import android.os.BatteryConsumer;
import android.os.BatteryStats; import android.os.BatteryStats;
import android.os.BatteryStatsManager; import android.os.BatteryStatsManager;
import android.os.BatteryUsageStats; import android.os.BatteryUsageStats;
import android.os.Build; import android.os.Build;
import android.os.Process; import android.os.Process;
import android.os.SystemBatteryConsumer;
import android.os.SystemClock; import android.os.SystemClock;
import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper; import com.android.settings.fuelgauge.batterytip.AnomalyDatabaseHelper;
@@ -113,7 +113,7 @@ public class BatteryUtilsTest {
@Mock @Mock
private BatteryUsageStats mBatteryUsageStats; private BatteryUsageStats mBatteryUsageStats;
@Mock @Mock
private SystemBatteryConsumer mSystemBatteryConsumer; private BatteryConsumer mAggregateBatteryConsumer;
@Mock @Mock
private BatteryInfo mBatteryInfo; private BatteryInfo mBatteryInfo;
@Mock @Mock
@@ -218,53 +218,47 @@ public class BatteryUtilsTest {
@Test @Test
public void testShouldHideSystemConsumer_TypeIdle_ReturnTrue() { public void testShouldHideSystemConsumer_TypeIdle_ReturnTrue() {
when(mSystemBatteryConsumer.getDrainType()) assertThat(mBatteryUtils.shouldHideDevicePowerComponent(mAggregateBatteryConsumer,
.thenReturn(SystemBatteryConsumer.DRAIN_TYPE_IDLE); BatteryConsumer.POWER_COMPONENT_IDLE)).isTrue();
assertThat(mBatteryUtils.shouldHideSystemBatteryConsumer(mSystemBatteryConsumer)).isTrue();
} }
@Test @Test
public void testShouldHideSystemConsumer_TypeMobileRadio_ReturnTrue() { public void testShouldHideSystemConsumer_TypeMobileRadio_ReturnTrue() {
when(mSystemBatteryConsumer.getDrainType()) assertThat(mBatteryUtils.shouldHideDevicePowerComponent(mAggregateBatteryConsumer,
.thenReturn(SystemBatteryConsumer.DRAIN_TYPE_MOBILE_RADIO); BatteryConsumer.POWER_COMPONENT_MOBILE_RADIO)).isTrue();
assertThat(mBatteryUtils.shouldHideSystemBatteryConsumer(mSystemBatteryConsumer)).isTrue();
} }
@Test @Test
public void testShouldHideSystemConsumer_TypeScreen_ReturnTrue() { public void testShouldHideSystemConsumer_TypeScreen_ReturnTrue() {
when(mSystemBatteryConsumer.getDrainType()) assertThat(mBatteryUtils.shouldHideDevicePowerComponent(mAggregateBatteryConsumer,
.thenReturn(SystemBatteryConsumer.DRAIN_TYPE_SCREEN); BatteryConsumer.POWER_COMPONENT_SCREEN)).isTrue();
assertThat(mBatteryUtils.shouldHideSystemBatteryConsumer(mSystemBatteryConsumer)).isTrue();
} }
@Test @Test
public void testShouldHideSystemConsumer_TypeBluetooth_ReturnTrue() { public void testShouldHideSystemConsumer_TypeBluetooth_ReturnTrue() {
when(mSystemBatteryConsumer.getDrainType()) assertThat(mBatteryUtils.shouldHideDevicePowerComponent(mAggregateBatteryConsumer,
.thenReturn(SystemBatteryConsumer.DRAIN_TYPE_BLUETOOTH); BatteryConsumer.POWER_COMPONENT_BLUETOOTH)).isTrue(); }
assertThat(mBatteryUtils.shouldHideSystemBatteryConsumer(mSystemBatteryConsumer)).isTrue();
}
@Test @Test
public void testShouldHideSystemConsumer_TypeWifi_ReturnTrue() { public void testShouldHideSystemConsumer_TypeWifi_ReturnTrue() {
when(mSystemBatteryConsumer.getDrainType()) assertThat(mBatteryUtils.shouldHideDevicePowerComponent(mAggregateBatteryConsumer,
.thenReturn(SystemBatteryConsumer.DRAIN_TYPE_WIFI); BatteryConsumer.POWER_COMPONENT_WIFI)).isTrue();
assertThat(mBatteryUtils.shouldHideSystemBatteryConsumer(mSystemBatteryConsumer)).isTrue();
} }
@Test @Test
public void testShouldHideSystemConsumer_LowPower_ReturnTrue() { public void testShouldHideSystemConsumer_LowPower_ReturnTrue() {
when(mSystemBatteryConsumer.getDrainType()) when(mAggregateBatteryConsumer.getConsumedPower(
.thenReturn(SystemBatteryConsumer.DRAIN_TYPE_FLASHLIGHT); BatteryConsumer.POWER_COMPONENT_FLASHLIGHT)).thenReturn(0.0005);
when(mSystemBatteryConsumer.getConsumedPower()).thenReturn(0.0005); assertThat(mBatteryUtils.shouldHideDevicePowerComponent(mAggregateBatteryConsumer,
assertThat(mBatteryUtils.shouldHideSystemBatteryConsumer(mSystemBatteryConsumer)).isTrue(); BatteryConsumer.POWER_COMPONENT_FLASHLIGHT)).isTrue();
} }
@Test @Test
public void testShouldHideSystemConsumer_HighPower_ReturnFalse() { public void testShouldHideSystemConsumer_HighPower_ReturnFalse() {
when(mSystemBatteryConsumer.getDrainType()) when(mAggregateBatteryConsumer.getConsumedPower(
.thenReturn(SystemBatteryConsumer.DRAIN_TYPE_FLASHLIGHT); BatteryConsumer.POWER_COMPONENT_FLASHLIGHT)).thenReturn(0.5);
when(mSystemBatteryConsumer.getConsumedPower()).thenReturn(0.5); assertThat(mBatteryUtils.shouldHideDevicePowerComponent(mAggregateBatteryConsumer,
assertThat(mBatteryUtils.shouldHideSystemBatteryConsumer(mSystemBatteryConsumer)).isFalse(); BatteryConsumer.POWER_COMPONENT_FLASHLIGHT)).isFalse();
} }
@Test @Test

View File

@@ -17,18 +17,13 @@ package com.android.settings.fuelgauge;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.os.BatteryConsumer;
import android.os.BatteryManager; import android.os.BatteryManager;
import android.os.BatteryUsageStats; import android.os.BatteryUsageStats;
import android.os.SystemBatteryConsumer;
import android.os.UidBatteryConsumer;
import android.os.UserBatteryConsumer;
import android.os.UserHandle; import android.os.UserHandle;
import org.junit.Before; import org.junit.Before;
@@ -39,12 +34,10 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.TimeZone; import java.util.TimeZone;
@@ -56,14 +49,6 @@ public final class ConvertUtilsTest {
private BatteryUsageStats mBatteryUsageStats; private BatteryUsageStats mBatteryUsageStats;
@Mock @Mock
private BatteryEntry mockBatteryEntry; private BatteryEntry mockBatteryEntry;
@Mock
private BatteryConsumer mockBatteryConsumer;
@Mock
private UidBatteryConsumer mockUidBatteryConsumer;
@Mock
private UserBatteryConsumer mockUserBatteryConsumer;
@Mock
private SystemBatteryConsumer mockSystemBatteryConsumer;
@Before @Before
public void setUp() { public void setUp() {
@@ -84,9 +69,9 @@ public final class ConvertUtilsTest {
mockBatteryEntry.percent = 0.3; mockBatteryEntry.percent = 0.3;
when(mockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L); when(mockBatteryEntry.getTimeInForegroundMs()).thenReturn(1234L);
when(mockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L); when(mockBatteryEntry.getTimeInBackgroundMs()).thenReturn(5689L);
when(mockBatteryEntry.getBatteryConsumer()) when(mockBatteryEntry.getPowerComponentId()).thenReturn(expectedType);
.thenReturn(mockSystemBatteryConsumer); when(mockBatteryEntry.getConsumerType())
when(mockSystemBatteryConsumer.getDrainType()).thenReturn(expectedType); .thenReturn(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
final ContentValues values = final ContentValues values =
ConvertUtils.convert( ConvertUtils.convert(
@@ -155,38 +140,6 @@ public final class ConvertUtilsTest {
.isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME); .isEqualTo(ConvertUtils.FAKE_PACKAGE_NAME);
} }
@Test
public void testGetDrainType_returnsExpetcedResult() {
final int expectedType = 3;
when(mockSystemBatteryConsumer.getDrainType())
.thenReturn(expectedType);
assertThat(ConvertUtils.getDrainType(mockSystemBatteryConsumer))
.isEqualTo(expectedType);
}
@Test
public void testGetDrainType_notValidConsumer_returnsInvalidTypeValue() {
assertThat(ConvertUtils.getDrainType(mockUserBatteryConsumer))
.isEqualTo(ConvertUtils.INVALID_DRAIN_TYPE);
}
@Test
public void testGetConsumerType_returnsExpetcedResult() {
assertThat(ConvertUtils.getConsumerType(mockUidBatteryConsumer))
.isEqualTo(ConvertUtils.CONSUMER_TYPE_UID_BATTERY);
assertThat(ConvertUtils.getConsumerType(mockUserBatteryConsumer))
.isEqualTo(ConvertUtils.CONSUMER_TYPE_USER_BATTERY);
assertThat(ConvertUtils.getConsumerType(mockSystemBatteryConsumer))
.isEqualTo(ConvertUtils.CONSUMER_TYPE_SYSTEM_BATTERY);
}
@Test
public void testGetConsumeType_invalidConsumer_returnsInvalidType() {
assertThat(ConvertUtils.getConsumerType(mockBatteryConsumer))
.isEqualTo(ConvertUtils.CONSUMER_TYPE_UNKNOWN);
}
@Test @Test
public void testGetIndexedUsageMap_returnsExpectedResult() { public void testGetIndexedUsageMap_returnsExpectedResult() {
// Creates the fake testing data. // Creates the fake testing data.