Replace uses of SystemBatteryConsumer with aggregate BatteryConsumers
Bug: 186006876 Test: make RunSettingsRoboTests Test: make RunSettingsGoogleRoboTests Change-Id: I2e240aa15c87b4b9dcbe993b4b0b1111285ec3ff
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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) {
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
|
@@ -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();
|
||||||
|
@@ -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.
|
||||||
*/
|
*/
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
|
@@ -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
|
||||||
|
@@ -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.
|
||||||
|
Reference in New Issue
Block a user