summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/fuelgauge/BatteryInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/fuelgauge/BatteryInfo.java')
-rw-r--r--src/com/android/settings/fuelgauge/BatteryInfo.java125
1 files changed, 70 insertions, 55 deletions
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index 9afaabad39..34a8b916d5 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -24,15 +24,18 @@ import android.os.BatteryStats;
import android.os.BatteryStats.HistoryItem;
import android.os.Bundle;
import android.os.SystemClock;
-import androidx.annotation.WorkerThread;
import android.text.format.Formatter;
import android.util.SparseIntArray;
+import androidx.annotation.WorkerThread;
+
import com.android.internal.os.BatteryStatsHelper;
import com.android.settings.Utils;
-import com.android.settings.graph.UsageView;
import com.android.settings.overlay.FeatureFactory;
+import com.android.settings.widget.UsageView;
import com.android.settingslib.R;
+import com.android.settingslib.fuelgauge.Estimate;
+import com.android.settingslib.fuelgauge.EstimateKt;
import com.android.settingslib.utils.PowerUtil;
import com.android.settingslib.utils.StringUtil;
@@ -43,9 +46,10 @@ public class BatteryInfo {
public int batteryLevel;
public boolean discharging = true;
public long remainingTimeUs = 0;
- public long averageTimeToDischarge = Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
+ public long averageTimeToDischarge = EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN;
public String batteryPercentString;
public String statusLabel;
+ public String suggestionLabel;
private boolean mCharging;
private BatteryStats mStats;
private static final String LOG_TAG = "BatteryInfo";
@@ -129,66 +133,25 @@ public class BatteryInfo {
remaining = context.getString(R.string.remaining_length_format,
Formatter.formatShortElapsedTime(context, remainingTimeUs / 1000));
}
- view.setBottomLabels(new CharSequence[]{timeString, remaining});
+ view.setBottomLabels(new CharSequence[] {timeString, remaining});
}
public static void getBatteryInfo(final Context context, final Callback callback) {
- BatteryInfo.getBatteryInfo(context, callback, false /* shortString */);
+ BatteryInfo.getBatteryInfo(context, callback, null /* statsHelper */,
+ false /* shortString */);
}
public static void getBatteryInfo(final Context context, final Callback callback,
boolean shortString) {
- final long startTime = System.currentTimeMillis();
- BatteryStatsHelper statsHelper = new BatteryStatsHelper(context, true);
- statsHelper.create((Bundle) null);
- BatteryUtils.logRuntime(LOG_TAG, "time to make batteryStatsHelper", startTime);
- BatteryInfo.getBatteryInfo(context, callback, statsHelper, shortString);
- }
-
- public static void getBatteryInfo(final Context context, final Callback callback,
- BatteryStatsHelper statsHelper, boolean shortString) {
- final long startTime = System.currentTimeMillis();
- BatteryStats stats = statsHelper.getStats();
- BatteryUtils.logRuntime(LOG_TAG, "time for getStats", startTime);
- getBatteryInfo(context, callback, stats, shortString);
+ BatteryInfo.getBatteryInfo(context, callback, null /* statsHelper */, shortString);
}
public static void getBatteryInfo(final Context context, final Callback callback,
- BatteryStats stats, boolean shortString) {
+ final BatteryStatsHelper statsHelper, boolean shortString) {
new AsyncTask<Void, Void, BatteryInfo>() {
@Override
protected BatteryInfo doInBackground(Void... params) {
- final long startTime = System.currentTimeMillis();
- PowerUsageFeatureProvider provider =
- FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
- final long elapsedRealtimeUs =
- PowerUtil.convertMsToUs(SystemClock.elapsedRealtime());
-
- Intent batteryBroadcast = context.registerReceiver(null,
- new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
- // 0 means we are discharging, anything else means charging
- boolean discharging =
- batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0;
-
- if (discharging && provider != null
- && provider.isEnhancedBatteryPredictionEnabled(context)) {
- Estimate estimate = provider.getEnhancedBatteryPrediction(context);
- if(estimate != null) {
- BatteryUtils
- .logRuntime(LOG_TAG, "time for enhanced BatteryInfo", startTime);
- return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
- estimate, elapsedRealtimeUs, shortString);
- }
- }
- long prediction = discharging
- ? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0;
- Estimate estimate = new Estimate(
- PowerUtil.convertUsToMs(prediction),
- false, /* isBasedOnUsage */
- Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
- BatteryUtils.logRuntime(LOG_TAG, "time for regular BatteryInfo", startTime);
- return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
- estimate, elapsedRealtimeUs, shortString);
+ return getBatteryInfo(context, statsHelper, shortString);
}
@Override
@@ -200,13 +163,61 @@ public class BatteryInfo {
}.execute();
}
+ public static BatteryInfo getBatteryInfo(final Context context,
+ final BatteryStatsHelper statsHelper, boolean shortString) {
+ final BatteryStats stats;
+ final long batteryStatsTime = System.currentTimeMillis();
+ if (statsHelper == null) {
+ final BatteryStatsHelper localStatsHelper = new BatteryStatsHelper(context,
+ true);
+ localStatsHelper.create((Bundle) null);
+ stats = localStatsHelper.getStats();
+ } else {
+ stats = statsHelper.getStats();
+ }
+ BatteryUtils.logRuntime(LOG_TAG, "time for getStats", batteryStatsTime);
+
+ final long startTime = System.currentTimeMillis();
+ PowerUsageFeatureProvider provider =
+ FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
+ final long elapsedRealtimeUs =
+ PowerUtil.convertMsToUs(SystemClock.elapsedRealtime());
+
+ final Intent batteryBroadcast = context.registerReceiver(null,
+ new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+ // 0 means we are discharging, anything else means charging
+ final boolean discharging =
+ batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0;
+
+ if (discharging && provider != null
+ && provider.isEnhancedBatteryPredictionEnabled(context)) {
+ Estimate estimate = provider.getEnhancedBatteryPrediction(context);
+ if (estimate != null) {
+ Estimate.storeCachedEstimate(context, estimate);
+ BatteryUtils
+ .logRuntime(LOG_TAG, "time for enhanced BatteryInfo", startTime);
+ return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
+ estimate, elapsedRealtimeUs, shortString);
+ }
+ }
+ final long prediction = discharging
+ ? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0;
+ final Estimate estimate = new Estimate(
+ PowerUtil.convertUsToMs(prediction),
+ false, /* isBasedOnUsage */
+ EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
+ BatteryUtils.logRuntime(LOG_TAG, "time for regular BatteryInfo", startTime);
+ return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
+ estimate, elapsedRealtimeUs, shortString);
+ }
+
@WorkerThread
public static BatteryInfo getBatteryInfoOld(Context context, Intent batteryBroadcast,
BatteryStats stats, long elapsedRealtimeUs, boolean shortString) {
Estimate estimate = new Estimate(
PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)),
false,
- Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
+ EstimateKt.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
return getBatteryInfo(context, batteryBroadcast, stats, estimate, elapsedRealtimeUs,
shortString);
}
@@ -220,7 +231,7 @@ public class BatteryInfo {
info.batteryLevel = Utils.getBatteryLevel(batteryBroadcast);
info.batteryPercentString = Utils.formatPercentage(info.batteryLevel);
info.mCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0;
- info.averageTimeToDischarge = estimate.averageDischargeTime;
+ info.averageTimeToDischarge = estimate.getAverageDischargeTime();
final Resources resources = context.getResources();
info.statusLabel = Utils.getBatteryStatus(resources, batteryBroadcast);
@@ -240,6 +251,7 @@ public class BatteryInfo {
final int status = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_STATUS,
BatteryManager.BATTERY_STATUS_UNKNOWN);
info.discharging = false;
+ info.suggestionLabel = null;
if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) {
info.remainingTimeUs = chargeTime;
CharSequence timeString = StringUtil.formatElapsedTime(context,
@@ -260,23 +272,26 @@ public class BatteryInfo {
private static void updateBatteryInfoDischarging(Context context, boolean shortString,
Estimate estimate, BatteryInfo info) {
- final long drainTimeUs = PowerUtil.convertMsToUs(estimate.estimateMillis);
+ final long drainTimeUs = PowerUtil.convertMsToUs(estimate.getEstimateMillis());
if (drainTimeUs > 0) {
info.remainingTimeUs = drainTimeUs;
info.remainingLabel = PowerUtil.getBatteryRemainingStringFormatted(
context,
PowerUtil.convertUsToMs(drainTimeUs),
null /* percentageString */,
- estimate.isBasedOnUsage && !shortString
+ estimate.isBasedOnUsage() && !shortString
);
info.chargeLabel = PowerUtil.getBatteryRemainingStringFormatted(
context,
PowerUtil.convertUsToMs(drainTimeUs),
info.batteryPercentString,
- estimate.isBasedOnUsage && !shortString
+ estimate.isBasedOnUsage() && !shortString
);
+ info.suggestionLabel = PowerUtil.getBatteryTipStringFormatted(
+ context, PowerUtil.convertUsToMs(drainTimeUs));
} else {
info.remainingLabel = null;
+ info.suggestionLabel = null;
info.chargeLabel = info.batteryPercentString;
}
}