Update battery states text

- Update progress bar bottom text when battery states changed(charging,
 discharging, power saver and low battery)

Bug: 183689347
Bug: 177407113
Test: make SettingsRoboTests
Change-Id: I0397eb1dea7fcb14357750f84d1d5b1a7dc7d19a
This commit is contained in:
Wesley.CW Wang
2021-04-06 15:14:59 +08:00
committed by Wesley Wang
parent 1f7c6f03b9
commit 11d74e7231
5 changed files with 145 additions and 5 deletions

View File

@@ -33,6 +33,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.fuelgauge.batterytip.tips.BatteryTip;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.widget.EntityHeaderController;
import com.android.settingslib.Utils;
@@ -60,6 +61,7 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
private Activity mActivity;
private PreferenceFragmentCompat mHost;
private Lifecycle mLifecycle;
private BatteryTip mBatteryTip;
private final PowerManager mPowerManager;
public BatteryHeaderPreferenceController(Context context, String key) {
@@ -109,8 +111,26 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
if (BatteryUtils.isBatteryDefenderOn(info)) {
return null;
} else if (info.remainingLabel == null) {
// Present status independently if no remaining time
return info.statusLabel;
} else if (info.statusLabel != null && !info.discharging) {
// Charging state
return mContext.getString(
R.string.battery_state_and_duration, info.statusLabel, info.remainingLabel);
} else if (mPowerManager.isPowerSaveMode()) {
// Power save mode is on
final String powerSaverOn = mContext.getString(
R.string.battery_tip_early_heads_up_done_title);
return mContext.getString(
R.string.battery_state_and_duration, powerSaverOn, info.remainingLabel);
} else if (mBatteryTip != null
&& mBatteryTip.getType() == BatteryTip.TipType.LOW_BATTERY) {
// Low battery state
final String lowBattery = mContext.getString(R.string.low_battery_summary);
return mContext.getString(
R.string.battery_state_and_duration, lowBattery, info.remainingLabel);
} else {
// Discharging state
return info.remainingLabel;
}
}
@@ -140,6 +160,17 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
mBatteryUsageProgressBarPref.setPercent(batteryLevel, BATTERY_MAX_LEVEL);
}
/**
* Update summary when battery tips changed.
*/
public void updateHeaderByBatteryTips(BatteryTip batteryTip, BatteryInfo batteryInfo) {
mBatteryTip = batteryTip;
if (mBatteryTip != null && batteryInfo != null) {
updateHeaderPreference(batteryInfo);
}
}
private CharSequence formatBatteryPercentageText(int batteryLevel) {
return TextUtils.expandTemplate(mContext.getText(R.string.battery_header_title_alternate),
NumberFormat.getIntegerInstance().format(batteryLevel));

View File

@@ -94,6 +94,8 @@ public class PowerUsageSummary extends PowerUsageBase implements
@Override
public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) {
mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
mBatteryHeaderPreferenceController.updateHeaderByBatteryTips(
mBatteryTipPreferenceController.getCurrentBatteryTip(), batteryInfo);
mBatteryInfo = batteryInfo;
}
@@ -115,6 +117,8 @@ public class PowerUsageSummary extends PowerUsageBase implements
public void onLoadFinished(Loader<List<BatteryTip>> loader,
List<BatteryTip> data) {
mBatteryTipPreferenceController.updateBatteryTips(data);
mBatteryHeaderPreferenceController.updateHeaderByBatteryTips(
mBatteryTipPreferenceController.getCurrentBatteryTip(), mBatteryInfo);
}
@Override

View File

@@ -16,6 +16,7 @@
package com.android.settings.fuelgauge.batterytip;
import android.annotation.Nullable;
import android.content.Context;
import android.os.Bundle;
@@ -162,6 +163,19 @@ public class BatteryTipPreferenceController extends BasePreferenceController {
return mNeedUpdate;
}
/**
* @return current battery tips, null if unavailable.
*/
@Nullable
public BatteryTip getCurrentBatteryTip() {
if (mBatteryTips == null) {
return null;
}
return mBatteryTips.stream().anyMatch(BatteryTip::isVisible)
? mBatteryTips.stream().filter(BatteryTip::isVisible).findFirst().get() : null;
}
/**
* Listener to give the control back to target fragment
*/