Split loading process for battery header

This cl creates BatteryHeaderPreferenceController, which will first
load the battery level in ui thread(in displayPreference()), then
display the remaining time once we get the battery stats.

This is the best we can do to avoid ui flashing while removing the
animation

Bug: 38349587
Test: RunSettingsRoboTests

Merged-In: Ic3622bb73562ba42e69b37e5674a724c03c45f12
Change-Id: Ic3622bb73562ba42e69b37e5674a724c03c45f12
This commit is contained in:
jackqdyulei
2017-05-19 13:29:09 -07:00
parent 37f6b7f751
commit 4a7c8d7125
5 changed files with 240 additions and 73 deletions

View File

@@ -115,6 +115,7 @@ public class PowerUsageSummary extends PowerUsageBase {
@VisibleForTesting
BatteryUtils mBatteryUtils;
private BatteryHeaderPreferenceController mBatteryHeaderPreferenceController;
private LayoutPreference mBatteryLayoutPref;
private PreferenceGroup mAppListGroup;
private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
@@ -141,11 +142,6 @@ public class PowerUsageSummary extends PowerUsageBase {
return MetricsEvent.FUELGAUGE_POWER_USAGE_SUMMARY;
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
BatteryEntry.stopRequestQueue();
@@ -189,6 +185,8 @@ public class PowerUsageSummary extends PowerUsageBase {
@Override
protected List<PreferenceController> getPreferenceControllers(Context context) {
final List<PreferenceController> controllers = new ArrayList<>();
mBatteryHeaderPreferenceController = new BatteryHeaderPreferenceController(context);
controllers.add(mBatteryHeaderPreferenceController);
controllers.add(new AutoBrightnessPreferenceController(context, KEY_AUTO_BRIGHTNESS));
controllers.add(new TimeoutPreferenceController(context, KEY_SCREEN_TIMEOUT));
controllers.add(new BatterySaverController(context, getLifecycle()));
@@ -416,7 +414,7 @@ public class PowerUsageSummary extends PowerUsageBase {
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast,
mStatsHelper.getStats(), elapsedRealtimeUs, false);
updateHeaderPreference(batteryInfo);
mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
final TypedValue value = new TypedValue();
context.getTheme().resolveAttribute(android.R.attr.colorControlNormal, value, true);
@@ -559,27 +557,6 @@ public class PowerUsageSummary extends PowerUsageBase {
mStatsType /* STATS_SINCE_CHARGED */) / 1000;
}
@VisibleForTesting
void updateHeaderPreference(BatteryInfo info) {
final Context context = getContext();
if (context == null) {
return;
}
final BatteryMeterView batteryView = (BatteryMeterView) mBatteryLayoutPref
.findViewById(R.id.battery_header_icon);
final TextView timeText = (TextView) mBatteryLayoutPref.findViewById(R.id.battery_percent);
final TextView summary1 = (TextView) mBatteryLayoutPref.findViewById(R.id.summary1);
timeText.setText(Utils.formatPercentage(info.batteryLevel));
if (info.remainingLabel == null ) {
summary1.setText(info.statusLabel);
} else {
summary1.setText(info.remainingLabel);
}
batteryView.setBatteryLevel(info.batteryLevel);
batteryView.setCharging(!info.discharging);
}
@VisibleForTesting
double calculatePercentage(double powerUsage, double dischargeAmount) {
final double totalPower = mStatsHelper.getTotalPower();