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

Change-Id: Ic3622bb73562ba42e69b37e5674a724c03c45f12
This commit is contained in:
jackqdyulei
2017-05-19 13:29:09 -07:00
parent 4d815d93ad
commit 605dbc66be
5 changed files with 241 additions and 74 deletions

View File

@@ -139,6 +139,7 @@ public class PowerUsageSummary extends PowerUsageBase implements
@VisibleForTesting
SparseArray<List<Anomaly>> mAnomalySparseArray;
private BatteryHeaderPreferenceController mBatteryHeaderPreferenceController;
private LayoutPreference mBatteryLayoutPref;
private PreferenceGroup mAppListGroup;
private AnomalySummaryPreferenceController mAnomalySummaryPreferenceController;
@@ -192,7 +193,7 @@ public class PowerUsageSummary extends PowerUsageBase implements
Intent batteryBroadcast = getContext().registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
BatteryInfo batteryInfo = getBatteryInfo(elapsedRealtimeUs, batteryBroadcast);
updateHeaderPreference(batteryInfo);
mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
}
@Override
@@ -226,11 +227,6 @@ public class PowerUsageSummary extends PowerUsageBase implements
return MetricsEvent.FUELGAUGE_POWER_USAGE_SUMMARY;
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
BatteryEntry.stopRequestQueue();
@@ -277,6 +273,8 @@ public class PowerUsageSummary extends PowerUsageBase implements
@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()));
@@ -497,7 +495,7 @@ public class PowerUsageSummary extends PowerUsageBase implements
Intent batteryBroadcast = context.registerReceiver(null,
new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
BatteryInfo batteryInfo = getBatteryInfo(elapsedRealtimeUs, batteryBroadcast);
updateHeaderPreference(batteryInfo);
mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
final long runningTime = mBatteryUtils.calculateRunningTimeBasedOnStatsType(mStatsHelper,
mStatsType);
@@ -656,27 +654,6 @@ public class PowerUsageSummary extends PowerUsageBase implements
timeSequence));
}
@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();