Merge "Add charging string V2 for settings" into main
This commit is contained in:
@@ -86,6 +86,14 @@ public class BatteryHeaderPreferenceController extends BasePreferenceController
|
||||
return info.statusLabel;
|
||||
} else if (info.statusLabel != null && !info.discharging) {
|
||||
// Charging state
|
||||
if (com.android.settingslib.fuelgauge.BatteryUtils.isChargingStringV2Enabled()) {
|
||||
return info.isFastCharging
|
||||
? mContext.getString(
|
||||
R.string.battery_state_and_duration,
|
||||
info.statusLabel,
|
||||
info.remainingLabel)
|
||||
: info.remainingLabel;
|
||||
}
|
||||
return mContext.getString(
|
||||
R.string.battery_state_and_duration, info.statusLabel, info.remainingLabel);
|
||||
} else if (mPowerManager.isPowerSaveMode()) {
|
||||
|
||||
@@ -37,6 +37,8 @@ import com.android.internal.os.BatteryStatsHistoryIterator;
|
||||
import com.android.settings.Utils;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
import com.android.settings.widget.UsageView;
|
||||
import com.android.settingslib.R;
|
||||
import com.android.settingslib.fuelgauge.BatteryStatus;
|
||||
import com.android.settingslib.fuelgauge.Estimate;
|
||||
import com.android.settingslib.fuelgauge.EstimateKt;
|
||||
import com.android.settingslib.utils.PowerUtil;
|
||||
@@ -52,6 +54,7 @@ public class BatteryInfo {
|
||||
public int pluggedStatus;
|
||||
public boolean discharging = true;
|
||||
public boolean isBatteryDefender;
|
||||
public boolean isFastCharging;
|
||||
public long remainingTimeUs = 0;
|
||||
public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
|
||||
public String batteryPercentString;
|
||||
@@ -143,13 +146,13 @@ public class BatteryInfo {
|
||||
parseBatteryHistory(parserList);
|
||||
String timeString =
|
||||
context.getString(
|
||||
com.android.settingslib.R.string.charge_length_format,
|
||||
R.string.charge_length_format,
|
||||
Formatter.formatShortElapsedTime(context, timePeriod));
|
||||
String remaining = "";
|
||||
if (remainingTimeUs != 0) {
|
||||
remaining =
|
||||
context.getString(
|
||||
com.android.settingslib.R.string.remaining_length_format,
|
||||
R.string.remaining_length_format,
|
||||
Formatter.formatShortElapsedTime(context, remainingTimeUs / 1000));
|
||||
}
|
||||
view.setBottomLabels(new CharSequence[] {timeString, remaining});
|
||||
@@ -291,8 +294,8 @@ public class BatteryInfo {
|
||||
@NonNull BatteryUsageStats batteryUsageStats,
|
||||
Estimate estimate,
|
||||
long elapsedRealtimeUs,
|
||||
boolean shortString) {
|
||||
final long startTime = System.currentTimeMillis();
|
||||
boolean shortString,
|
||||
long currentTimeMs) {
|
||||
final boolean isCompactStatus =
|
||||
context.getResources()
|
||||
.getBoolean(com.android.settings.R.bool.config_use_compact_battery_status);
|
||||
@@ -313,22 +316,51 @@ public class BatteryInfo {
|
||||
info.batteryStatus =
|
||||
batteryBroadcast.getIntExtra(
|
||||
BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN);
|
||||
info.isFastCharging =
|
||||
BatteryStatus.getChargingSpeed(context, batteryBroadcast)
|
||||
== BatteryStatus.CHARGING_FAST;
|
||||
if (!info.mCharging) {
|
||||
updateBatteryInfoDischarging(context, shortString, estimate, info);
|
||||
} else {
|
||||
updateBatteryInfoCharging(
|
||||
context, batteryBroadcast, batteryUsageStats, info, isCompactStatus);
|
||||
context,
|
||||
batteryBroadcast,
|
||||
batteryUsageStats,
|
||||
info,
|
||||
isCompactStatus,
|
||||
currentTimeMs);
|
||||
}
|
||||
BatteryUtils.logRuntime(LOG_TAG, "time for getBatteryInfo", startTime);
|
||||
BatteryUtils.logRuntime(LOG_TAG, "time for getBatteryInfo", currentTimeMs);
|
||||
return info;
|
||||
}
|
||||
|
||||
/** Returns a {@code BatteryInfo} with battery and charging relative information. */
|
||||
@WorkerThread
|
||||
public static BatteryInfo getBatteryInfo(
|
||||
Context context,
|
||||
Intent batteryBroadcast,
|
||||
BatteryUsageStats batteryUsageStats,
|
||||
Estimate estimate,
|
||||
long elapsedRealtimeUs,
|
||||
boolean shortString) {
|
||||
long currentTimeMs = System.currentTimeMillis();
|
||||
return getBatteryInfo(
|
||||
context,
|
||||
batteryBroadcast,
|
||||
batteryUsageStats,
|
||||
estimate,
|
||||
elapsedRealtimeUs,
|
||||
shortString,
|
||||
currentTimeMs);
|
||||
}
|
||||
|
||||
private static void updateBatteryInfoCharging(
|
||||
Context context,
|
||||
Intent batteryBroadcast,
|
||||
BatteryUsageStats stats,
|
||||
BatteryInfo info,
|
||||
boolean compactStatus) {
|
||||
boolean compactStatus,
|
||||
long currentTimeMs) {
|
||||
final Resources resources = context.getResources();
|
||||
final long chargeTimeMs = stats.getChargeTimeRemainingMs();
|
||||
if (getSettingsChargeTimeRemaining(context) != chargeTimeMs) {
|
||||
@@ -350,7 +382,7 @@ public class BatteryInfo {
|
||||
|| dockDefenderMode == BatteryUtils.DockDefenderMode.ACTIVE) {
|
||||
// Battery defender active, battery charging paused
|
||||
info.remainingLabel = null;
|
||||
int chargingLimitedResId = com.android.settingslib.R.string.power_charging_limited;
|
||||
int chargingLimitedResId = R.string.power_charging_limited;
|
||||
info.chargeLabel = context.getString(chargingLimitedResId, info.batteryPercentString);
|
||||
} else if ((chargeTimeMs > 0
|
||||
&& status != BatteryManager.BATTERY_STATUS_FULL
|
||||
@@ -358,30 +390,29 @@ public class BatteryInfo {
|
||||
|| dockDefenderMode == BatteryUtils.DockDefenderMode.TEMPORARILY_BYPASSED) {
|
||||
// Battery is charging to full
|
||||
info.remainingTimeUs = PowerUtil.convertMsToUs(chargeTimeMs);
|
||||
final CharSequence timeString =
|
||||
StringUtil.formatElapsedTime(
|
||||
context,
|
||||
(double) PowerUtil.convertUsToMs(info.remainingTimeUs),
|
||||
false /* withSeconds */,
|
||||
true /* collapseTimeUnit */);
|
||||
int resId = com.android.settingslib.R.string.power_charging_duration;
|
||||
|
||||
int resId = getChargingDurationResId(info.isFastCharging);
|
||||
info.remainingLabel =
|
||||
chargeTimeMs <= 0
|
||||
? null
|
||||
: context.getString(
|
||||
com.android.settingslib.R.string
|
||||
.power_remaining_charging_duration_only,
|
||||
timeString);
|
||||
: getPowerRemainingChargingLabel(
|
||||
context, chargeTimeMs, info.isFastCharging, currentTimeMs);
|
||||
|
||||
info.chargeLabel =
|
||||
chargeTimeMs <= 0
|
||||
? info.batteryPercentString
|
||||
: context.getString(resId, info.batteryPercentString, timeString);
|
||||
: getChargeLabelWithTimeToFull(
|
||||
context,
|
||||
resId,
|
||||
info.batteryPercentString,
|
||||
chargeTimeMs,
|
||||
info.isFastCharging,
|
||||
currentTimeMs);
|
||||
} else if (dockDefenderMode == BatteryUtils.DockDefenderMode.FUTURE_BYPASS) {
|
||||
// Dock defender will be triggered in the future, charging will be optimized.
|
||||
info.chargeLabel =
|
||||
context.getString(
|
||||
com.android.settingslib.R.string.power_charging_future_paused,
|
||||
info.batteryPercentString);
|
||||
R.string.power_charging_future_paused, info.batteryPercentString);
|
||||
} else {
|
||||
final String chargeStatusLabel =
|
||||
Utils.getBatteryStatus(context, batteryBroadcast, compactStatus);
|
||||
@@ -390,12 +421,70 @@ public class BatteryInfo {
|
||||
info.batteryLevel == 100
|
||||
? info.batteryPercentString
|
||||
: resources.getString(
|
||||
com.android.settingslib.R.string.power_charging,
|
||||
R.string.power_charging,
|
||||
info.batteryPercentString,
|
||||
chargeStatusLabel);
|
||||
}
|
||||
}
|
||||
|
||||
private static CharSequence getPowerRemainingChargingLabel(
|
||||
Context context, long remainingTimeMs, boolean isFastCharging, long currentTimeMs) {
|
||||
if (com.android.settingslib.fuelgauge.BatteryUtils.isChargingStringV2Enabled()) {
|
||||
int chargeLabelResId =
|
||||
isFastCharging
|
||||
? R.string.power_remaining_fast_charging_duration_only_v2
|
||||
: R.string.power_remaining_charging_duration_only_v2;
|
||||
String timeString =
|
||||
PowerUtil.getTargetTimeShortString(context, remainingTimeMs, currentTimeMs);
|
||||
return context.getString(chargeLabelResId, timeString);
|
||||
}
|
||||
final CharSequence timeString =
|
||||
StringUtil.formatElapsedTime(
|
||||
context,
|
||||
remainingTimeMs,
|
||||
/* withSeconds= */ false,
|
||||
/* collapseTimeUnit= */ true);
|
||||
return context.getString(R.string.power_remaining_charging_duration_only, timeString);
|
||||
}
|
||||
|
||||
private static CharSequence getChargeLabelWithTimeToFull(
|
||||
Context context,
|
||||
int chargeLabelResId,
|
||||
String batteryPercentString,
|
||||
long chargeTimeMs,
|
||||
boolean isFastCharging,
|
||||
long currentTimeMs) {
|
||||
if (com.android.settingslib.fuelgauge.BatteryUtils.isChargingStringV2Enabled()) {
|
||||
var timeString =
|
||||
PowerUtil.getTargetTimeShortString(context, chargeTimeMs, currentTimeMs);
|
||||
|
||||
return isFastCharging
|
||||
? context.getString(
|
||||
chargeLabelResId,
|
||||
batteryPercentString,
|
||||
context.getString(R.string.battery_info_status_charging_fast_v2),
|
||||
timeString)
|
||||
: context.getString(chargeLabelResId, batteryPercentString, timeString);
|
||||
} else {
|
||||
var timeString =
|
||||
StringUtil.formatElapsedTime(
|
||||
context,
|
||||
(double) chargeTimeMs,
|
||||
/* withSeconds= */ false,
|
||||
/* collapseTimeUnit= */ true);
|
||||
return context.getString(chargeLabelResId, batteryPercentString, timeString);
|
||||
}
|
||||
}
|
||||
|
||||
private static int getChargingDurationResId(boolean isFastCharging) {
|
||||
if (com.android.settingslib.fuelgauge.BatteryUtils.isChargingStringV2Enabled()) {
|
||||
return isFastCharging
|
||||
? R.string.power_fast_charging_duration_v2
|
||||
: R.string.power_charging_duration_v2;
|
||||
}
|
||||
return R.string.power_charging_duration;
|
||||
}
|
||||
|
||||
private static void updateBatteryInfoDischarging(
|
||||
Context context, boolean shortString, Estimate estimate, BatteryInfo info) {
|
||||
final long drainTimeUs = PowerUtil.convertMsToUs(estimate.getEstimateMillis());
|
||||
|
||||
Reference in New Issue
Block a user