import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.graphics.drawable.Drawable;
import android.os.BatteryStats;
import android.os.Build;
private static final String KEY_SCREEN_USAGE = "screen_usage";
private static final String KEY_TIME_SINCE_LAST_FULL_CHARGE = "last_full_charge";
+ private static final String KEY_AUTO_BRIGHTNESS = "auto_brightness_battery";
+ private static final String KEY_SCREEN_TIMEOUT = "screen_timeout_battery";
+ private static final String KEY_BATTERY_SAVER_SUMMARY = "battery_saver_summary";
private static final int MENU_STATS_TYPE = Menu.FIRST;
@VisibleForTesting
@Override
public void onResume() {
super.onResume();
- refreshStats();
}
@Override
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
final List<PreferenceController> controllers = new ArrayList<>();
- controllers.add(new AutoBrightnessPreferenceController(context));
- controllers.add(new TimeoutPreferenceController(context));
+ controllers.add(new AutoBrightnessPreferenceController(context, KEY_AUTO_BRIGHTNESS));
+ controllers.add(new TimeoutPreferenceController(context, KEY_SCREEN_TIMEOUT));
controllers.add(new BatterySaverController(context, getLifecycle()));
controllers.add(new BatteryPercentagePreferenceController(context));
return controllers;
} else {
mStatsType = BatteryStats.STATS_SINCE_CHARGED;
}
- refreshStats();
+ refreshUi();
return true;
case MENU_HIGH_POWER_APPS:
Bundle args = new Bundle();
item.setTitle(mShowAllApps ? R.string.hide_extra_apps : R.string.show_all_apps);
metricsFeatureProvider.action(context,
MetricsEvent.ACTION_SETTINGS_MENU_BATTERY_APPS_TOGGLE, mShowAllApps);
- refreshStats();
+ restartBatteryStatsLoader();
return true;
default:
return super.onOptionsItemSelected(item);
return results;
}
- protected void refreshStats() {
- super.refreshStats();
-
- BatteryInfo.getBatteryInfo(getContext(), new BatteryInfo.Callback() {
- @Override
- public void onBatteryInfoLoaded(BatteryInfo info) {
- updateHeaderPreference(info);
- }
- });
+ protected void refreshUi() {
+ final Context context = getContext();
+ if (context == null) {
+ return;
+ }
cacheRemoveAllPrefs(mAppListGroup);
mAppListGroup.setOrderingAsAdded(false);
final PowerProfile powerProfile = mStatsHelper.getPowerProfile();
final BatteryStats stats = mStatsHelper.getStats();
final double averagePower = powerProfile.getAveragePower(PowerProfile.POWER_SCREEN_FULL);
- final Context context = getContext();
+
+ final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
+ Intent batteryBroadcast = context.registerReceiver(null,
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+ BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast,
+ mStatsHelper.getStats(), elapsedRealtimeUs, false);
+ updateHeaderPreference(batteryInfo);
final TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.colorControlNormal, value, true);
final int colorControl = context.getColor(value.resourceId);
- final String usedTime = context.getString(R.string.battery_used_for);
final int dischargeAmount = USE_FAKE_DATA ? 5000
: stats != null ? stats.getDischargeAmount(mStatsType) : 0;
final long runningTime = calculateRunningTimeBasedOnStatsType();
updateScreenPreference();
updateLastFullChargePreference(runningTime);
- mAppListGroup.setTitle(getString(R.string.power_usage_list_summary,
- Utils.formatElapsedTime(context, runningTime, false)));
+
+ final CharSequence timeSequence = Utils.formatElapsedTime(context, runningTime, false);
+ mAppListGroup.setTitle(
+ TextUtils.expandTemplate(getText(R.string.power_usage_list_summary), timeSequence));
if (averagePower >= MIN_AVERAGE_POWER_THRESHOLD_MILLI_AMP || USE_FAKE_DATA) {
final List<BatterySipper> usageList = getCoalescedUsageList(
sipper.usageTimeMs = mBatteryUtils.getProcessTimeMs(
BatteryUtils.StatusType.FOREGROUND, sipper.uidObj, mStatsType);
}
- setUsageSummary(pref, usedTime, sipper.usageTimeMs);
+ setUsageSummary(pref, sipper.usageTimeMs);
if ((sipper.drainType != DrainType.APP
|| sipper.uidObj.getUid() == Process.ROOT_UID)
&& sipper.drainType != DrainType.USER) {
void updateScreenPreference() {
final BatterySipper sipper = findBatterySipperByType(
mStatsHelper.getUsageList(), DrainType.SCREEN);
- final Context context = getContext();
final long usageTimeMs = sipper != null ? sipper.usageTimeMs : 0;
- mScreenUsagePref.setSubtitle(Utils.formatElapsedTime(context, usageTimeMs, false));
+ mScreenUsagePref.setSubtitle(Utils.formatElapsedTime(getContext(), usageTimeMs, false));
}
@VisibleForTesting
void updateLastFullChargePreference(long timeMs) {
- mLastFullChargePref.setSubtitle(getString(R.string.power_last_full_charge_summary,
- Utils.formatElapsedTime(getContext(), timeMs, false)));
+ final CharSequence timeSequence = Utils.formatElapsedTime(getContext(), timeMs, false);
+ mLastFullChargePref.setSubtitle(
+ TextUtils.expandTemplate(getText(R.string.power_last_full_charge_summary),
+ timeSequence));
}
@VisibleForTesting
}
@VisibleForTesting
- void setUsageSummary(Preference preference, String usedTimePrefix, long usageTimeMs) {
+ void setUsageSummary(Preference preference, long usageTimeMs) {
// Only show summary when usage time is longer than one minute
if (usageTimeMs >= DateUtils.MINUTE_IN_MILLIS) {
- preference.setSummary(String.format(usedTimePrefix,
- Utils.formatElapsedTime(getContext(), usageTimeMs, false)));
+ final CharSequence timeSequence = Utils.formatElapsedTime(getContext(), usageTimeMs,
+ false);
+ preference.setSummary(
+ TextUtils.expandTemplate(getText(R.string.battery_screen_usage), timeSequence));
}
}
sir.xmlResId = R.xml.power_usage_summary;
return Arrays.asList(sir);
}
+
+ @Override
+ public List<String> getNonIndexableKeys(Context context) {
+ List<String> niks = new ArrayList<>();
+ // Duplicates in display
+ niks.add(KEY_AUTO_BRIGHTNESS);
+ niks.add(KEY_SCREEN_TIMEOUT);
+ niks.add(KEY_BATTERY_SAVER_SUMMARY);
+ return niks;
+ }
};
public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY