Add "unaccounted" item to battery use UI.
Kind-of informative. Change-Id: I10d2ee1ad8fe598a1ce1989df6628da11b82d906
This commit is contained in:
@@ -3604,6 +3604,10 @@
|
|||||||
<string name="power_idle" product="tablet">Tablet idle</string>
|
<string name="power_idle" product="tablet">Tablet idle</string>
|
||||||
<!-- Label for power consumed when Idle -->
|
<!-- Label for power consumed when Idle -->
|
||||||
<string name="power_idle" product="default">Phone idle</string>
|
<string name="power_idle" product="default">Phone idle</string>
|
||||||
|
<!-- Label for power that we aren't able to account for -->
|
||||||
|
<string name="power_unaccounted">Unaccounted</string>
|
||||||
|
<!-- Label for power that we computed too much for -->
|
||||||
|
<string name="power_overcounted">Over-counted</string>
|
||||||
|
|
||||||
<!-- Label for CPU usage time -->
|
<!-- Label for CPU usage time -->
|
||||||
<string name="usage_type_cpu">CPU total</string>
|
<string name="usage_type_cpu">CPU total</string>
|
||||||
@@ -3635,6 +3639,14 @@
|
|||||||
<string name="usage_type_on_time">Time on</string>
|
<string name="usage_type_on_time">Time on</string>
|
||||||
<!-- Label for time that there was no cell coverage -->
|
<!-- Label for time that there was no cell coverage -->
|
||||||
<string name="usage_type_no_coverage">Time without a signal</string>
|
<string name="usage_type_no_coverage">Time without a signal</string>
|
||||||
|
<!-- Label for the total power capacity of the device's battery -->
|
||||||
|
<string name="usage_type_total_battery_capacity">Total battery capacity</string>
|
||||||
|
<!-- Label for amount of power use that was computed -->
|
||||||
|
<string name="usage_type_computed_power">Computed power</string>
|
||||||
|
<!-- Label for minimum amount of actual power use -->
|
||||||
|
<string name="usage_type_min_actual_power">Min real power</string>
|
||||||
|
<!-- Label for maximum amount of power use -->
|
||||||
|
<string name="usage_type_max_actual_power">Max real power</string>
|
||||||
<!-- Label for force stop action -->
|
<!-- Label for force stop action -->
|
||||||
<string name="battery_action_stop">Force stop</string>
|
<string name="battery_action_stop">Force stop</string>
|
||||||
<!-- Label for app details action -->
|
<!-- Label for app details action -->
|
||||||
@@ -3690,6 +3702,13 @@
|
|||||||
<!-- [CHAR LIMIT=50] Description for power consumed by users -->
|
<!-- [CHAR LIMIT=50] Description for power consumed by users -->
|
||||||
<string name="battery_desc_users">Battery used by user</string>
|
<string name="battery_desc_users">Battery used by user</string>
|
||||||
|
|
||||||
|
<!-- [CHAR LIMIT=50] Description for unaccounted power use -->
|
||||||
|
<string name="battery_desc_unaccounted">Unaccounted power use</string>
|
||||||
|
<!-- [CHAR LIMIT=50] Description for over-counted power use -->
|
||||||
|
<string name="battery_desc_overcounted">Over-counted power use</string>
|
||||||
|
<!-- Representation of a mAh value. [CHAR LIMIT=NONE] -->
|
||||||
|
<string name="mah"><xliff:g id="number" example="30">%d</xliff:g> mAh</string>
|
||||||
|
|
||||||
<!-- Menu label for viewing battery usage since unplugged -->
|
<!-- Menu label for viewing battery usage since unplugged -->
|
||||||
<string name="menu_stats_unplugged"><xliff:g id="unplugged">%1$s</xliff:g> since unplugged</string>
|
<string name="menu_stats_unplugged"><xliff:g id="unplugged">%1$s</xliff:g> since unplugged</string>
|
||||||
<!-- Menu label for viewing battery usage since unplugged -->
|
<!-- Menu label for viewing battery usage since unplugged -->
|
||||||
|
@@ -89,8 +89,11 @@ public class BatteryStatsHelper {
|
|||||||
private long mStatsPeriod = 0;
|
private long mStatsPeriod = 0;
|
||||||
private double mMaxPower = 1;
|
private double mMaxPower = 1;
|
||||||
private double mTotalPower;
|
private double mTotalPower;
|
||||||
|
private double mTotalPowermAh;
|
||||||
private double mWifiPower;
|
private double mWifiPower;
|
||||||
private double mBluetoothPower;
|
private double mBluetoothPower;
|
||||||
|
private double mMinDrainedPower;
|
||||||
|
private double mMaxDrainedPower;
|
||||||
|
|
||||||
// How much the apps together have left WIFI running.
|
// How much the apps together have left WIFI running.
|
||||||
private long mAppWifiRunning;
|
private long mAppWifiRunning;
|
||||||
@@ -304,6 +307,22 @@ public class BatteryStatsHelper {
|
|||||||
sipper.wifiTxPackets,
|
sipper.wifiTxPackets,
|
||||||
};
|
};
|
||||||
} break;
|
} break;
|
||||||
|
case UNACCOUNTED:
|
||||||
|
case OVERCOUNTED:
|
||||||
|
{
|
||||||
|
types = new int[] {
|
||||||
|
R.string.usage_type_total_battery_capacity,
|
||||||
|
R.string.usage_type_computed_power,
|
||||||
|
R.string.usage_type_min_actual_power,
|
||||||
|
R.string.usage_type_max_actual_power,
|
||||||
|
};
|
||||||
|
values = new double[] {
|
||||||
|
mPowerProfile.getBatteryCapacity(),
|
||||||
|
mTotalPowermAh,
|
||||||
|
mMinDrainedPower,
|
||||||
|
mMaxDrainedPower,
|
||||||
|
};
|
||||||
|
} break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
types = new int[] {
|
types = new int[] {
|
||||||
@@ -341,9 +360,35 @@ public class BatteryStatsHelper {
|
|||||||
mUserSippers.clear();
|
mUserSippers.clear();
|
||||||
mUserPower.clear();
|
mUserPower.clear();
|
||||||
|
|
||||||
|
mMinDrainedPower = (mStats.getLowDischargeAmountSinceCharge()
|
||||||
|
* mPowerProfile.getBatteryCapacity()) / 100;
|
||||||
|
mMaxDrainedPower = (mStats.getHighDischargeAmountSinceCharge()
|
||||||
|
* mPowerProfile.getBatteryCapacity()) / 100;
|
||||||
|
|
||||||
processAppUsage(includeZeroConsumption);
|
processAppUsage(includeZeroConsumption);
|
||||||
processMiscUsage();
|
processMiscUsage();
|
||||||
|
|
||||||
|
// We have been computing totals in seconds, convert to hours.
|
||||||
|
mTotalPowermAh = mTotalPower / 3600;
|
||||||
|
|
||||||
|
if (true || mStats.getLowDischargeAmountSinceCharge() > 10) {
|
||||||
|
if (mMinDrainedPower > mTotalPowermAh) {
|
||||||
|
double amount = mMinDrainedPower - mTotalPowermAh;
|
||||||
|
if (mMaxPower < amount) {
|
||||||
|
mMaxPower = amount;
|
||||||
|
}
|
||||||
|
addEntryNoTotal(mActivity.getString(R.string.power_unaccounted),
|
||||||
|
DrainType.UNACCOUNTED, 0, R.drawable.ic_power_system, amount * 3600);
|
||||||
|
} else if (mMaxDrainedPower < mTotalPowermAh) {
|
||||||
|
double amount = mTotalPowermAh - mMaxDrainedPower;
|
||||||
|
if (mMaxPower < amount) {
|
||||||
|
mMaxPower = amount;
|
||||||
|
}
|
||||||
|
addEntryNoTotal(mActivity.getString(R.string.power_overcounted),
|
||||||
|
DrainType.OVERCOUNTED, 0, R.drawable.ic_power_system, amount * 3600);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Collections.sort(mUsageList);
|
Collections.sort(mUsageList);
|
||||||
|
|
||||||
if (mHandler != null) {
|
if (mHandler != null) {
|
||||||
@@ -807,6 +852,12 @@ public class BatteryStatsHelper {
|
|||||||
|
|
||||||
private BatterySipper addEntry(String label, DrainType drainType, long time, int iconId,
|
private BatterySipper addEntry(String label, DrainType drainType, long time, int iconId,
|
||||||
double power) {
|
double power) {
|
||||||
|
mTotalPower += power;
|
||||||
|
return addEntryNoTotal(label, drainType, time, iconId, power);
|
||||||
|
}
|
||||||
|
|
||||||
|
private BatterySipper addEntryNoTotal(String label, DrainType drainType, long time, int iconId,
|
||||||
|
double power) {
|
||||||
if (power > mMaxPower) mMaxPower = power;
|
if (power > mMaxPower) mMaxPower = power;
|
||||||
mTotalPower += power;
|
mTotalPower += power;
|
||||||
BatterySipper bs = new BatterySipper(mActivity, mRequestQueue, mHandler,
|
BatterySipper bs = new BatterySipper(mActivity, mRequestQueue, mHandler,
|
||||||
@@ -832,6 +883,14 @@ public class BatteryStatsHelper {
|
|||||||
return mTotalPower;
|
return mTotalPower;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getMinDrainedPower() {
|
||||||
|
return mMinDrainedPower;
|
||||||
|
}
|
||||||
|
|
||||||
|
public double getMaxDrainedPower() {
|
||||||
|
return mMaxDrainedPower;
|
||||||
|
}
|
||||||
|
|
||||||
private void load() {
|
private void load() {
|
||||||
try {
|
try {
|
||||||
byte[] data = mBatteryInfo.getStatistics();
|
byte[] data = mBatteryInfo.getStatistics();
|
||||||
|
@@ -67,7 +67,9 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener
|
|||||||
BLUETOOTH,
|
BLUETOOTH,
|
||||||
SCREEN,
|
SCREEN,
|
||||||
APP,
|
APP,
|
||||||
USER
|
USER,
|
||||||
|
UNACCOUNTED,
|
||||||
|
OVERCOUNTED
|
||||||
}
|
}
|
||||||
|
|
||||||
// Note: Must match the sequence of the DrainType
|
// Note: Must match the sequence of the DrainType
|
||||||
@@ -80,6 +82,8 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener
|
|||||||
R.string.battery_desc_display,
|
R.string.battery_desc_display,
|
||||||
R.string.battery_desc_apps,
|
R.string.battery_desc_apps,
|
||||||
R.string.battery_desc_users,
|
R.string.battery_desc_users,
|
||||||
|
R.string.battery_desc_unaccounted,
|
||||||
|
R.string.battery_desc_overcounted,
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final int ACTION_DISPLAY_SETTINGS = 1;
|
public static final int ACTION_DISPLAY_SETTINGS = 1;
|
||||||
@@ -329,6 +333,12 @@ public class PowerUsageDetail extends Fragment implements Button.OnClickListener
|
|||||||
final int percentage = (int) Math.floor(mValues[i]);
|
final int percentage = (int) Math.floor(mValues[i]);
|
||||||
value = getActivity().getString(R.string.percentage, percentage);
|
value = getActivity().getString(R.string.percentage, percentage);
|
||||||
break;
|
break;
|
||||||
|
case R.string.usage_type_total_battery_capacity:
|
||||||
|
case R.string.usage_type_computed_power:
|
||||||
|
case R.string.usage_type_min_actual_power:
|
||||||
|
case R.string.usage_type_max_actual_power:
|
||||||
|
value = getActivity().getString(R.string.mah, (long)(mValues[i]));
|
||||||
|
break;
|
||||||
case R.string.usage_type_gps:
|
case R.string.usage_type_gps:
|
||||||
mUsesGps = true;
|
mUsesGps = true;
|
||||||
// Fall through
|
// Fall through
|
||||||
|
@@ -60,6 +60,8 @@ public class PowerUsageSummary extends PreferenceFragment {
|
|||||||
private static final int MENU_HELP = Menu.FIRST + 2;
|
private static final int MENU_HELP = Menu.FIRST + 2;
|
||||||
|
|
||||||
private PreferenceGroup mAppListGroup;
|
private PreferenceGroup mAppListGroup;
|
||||||
|
private String mBatteryLevel;
|
||||||
|
private String mBatteryStatus;
|
||||||
private Preference mBatteryStatusPref;
|
private Preference mBatteryStatusPref;
|
||||||
|
|
||||||
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
|
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
|
||||||
@@ -74,13 +76,8 @@ public class PowerUsageSummary extends PreferenceFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
|
if (Intent.ACTION_BATTERY_CHANGED.equals(action)
|
||||||
String batteryLevel = com.android.settings.Utils.getBatteryPercentage(intent);
|
&& updateBatteryStatus(intent)) {
|
||||||
String batteryStatus = com.android.settings.Utils.getBatteryStatus(getResources(),
|
|
||||||
intent);
|
|
||||||
String batterySummary = context.getResources().getString(
|
|
||||||
R.string.power_usage_level_and_status, batteryLevel, batteryStatus);
|
|
||||||
mBatteryStatusPref.setTitle(batterySummary);
|
|
||||||
mStatsHelper.clearStats();
|
mStatsHelper.clearStats();
|
||||||
refreshStats();
|
refreshStats();
|
||||||
}
|
}
|
||||||
@@ -107,8 +104,8 @@ public class PowerUsageSummary extends PreferenceFragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
getActivity().registerReceiver(mBatteryInfoReceiver,
|
updateBatteryStatus(getActivity().registerReceiver(mBatteryInfoReceiver,
|
||||||
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
|
new IntentFilter(Intent.ACTION_BATTERY_CHANGED)));
|
||||||
refreshStats();
|
refreshStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,12 +191,32 @@ public class PowerUsageSummary extends PreferenceFragment {
|
|||||||
mAppListGroup.addPreference(notAvailable);
|
mAppListGroup.addPreference(notAvailable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean updateBatteryStatus(Intent intent) {
|
||||||
|
if (intent != null) {
|
||||||
|
String batteryLevel = com.android.settings.Utils.getBatteryPercentage(intent);
|
||||||
|
String batteryStatus = com.android.settings.Utils.getBatteryStatus(getResources(),
|
||||||
|
intent);
|
||||||
|
if (!batteryLevel.equals(mBatteryLevel) || !batteryStatus.equals(mBatteryStatus)) {
|
||||||
|
mBatteryLevel = batteryLevel;
|
||||||
|
mBatteryStatus = batteryStatus;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
private void refreshStats() {
|
private void refreshStats() {
|
||||||
mAppListGroup.removeAll();
|
mAppListGroup.removeAll();
|
||||||
mAppListGroup.setOrderingAsAdded(false);
|
mAppListGroup.setOrderingAsAdded(false);
|
||||||
|
|
||||||
mBatteryStatusPref.setOrder(-2);
|
mBatteryStatusPref.setOrder(-2);
|
||||||
|
if (mBatteryLevel != null && mBatteryStatus != null) {
|
||||||
|
String batterySummary = getActivity().getResources().getString(
|
||||||
|
R.string.power_usage_level_and_status, mBatteryLevel, mBatteryStatus);
|
||||||
|
mBatteryStatusPref.setTitle(batterySummary);
|
||||||
|
}
|
||||||
mAppListGroup.addPreference(mBatteryStatusPref);
|
mAppListGroup.addPreference(mBatteryStatusPref);
|
||||||
|
|
||||||
BatteryHistoryPreference hist = new BatteryHistoryPreference(
|
BatteryHistoryPreference hist = new BatteryHistoryPreference(
|
||||||
getActivity(), mStatsHelper.getStats());
|
getActivity(), mStatsHelper.getStats());
|
||||||
hist.setOrder(-1);
|
hist.setOrder(-1);
|
||||||
|
Reference in New Issue
Block a user