Update SysUI to use system cache for battery estimates
This should help prevent Settings and SysUI from getting out of sync with each other. Test: manual by adjusting battery levels with adb Bug: 124030091 Change-Id: I8eaba920a10e045c4c983406873de66208c22fb7
This commit is contained in:
@@ -45,7 +45,7 @@ class Estimate(
|
||||
Settings.Global.getLong(
|
||||
resolver, Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME, -1))
|
||||
return if (Duration.between(lastUpdateTime,
|
||||
Instant.now()).compareTo(Duration.ofMinutes(2)) > 0) {
|
||||
Instant.now()).compareTo(Duration.ofMinutes(1)) > 0) {
|
||||
null
|
||||
} else Estimate(
|
||||
Settings.Global.getLong(resolver,
|
||||
|
||||
@@ -36,6 +36,7 @@ import android.graphics.Rect;
|
||||
import android.net.Uri;
|
||||
import android.os.Handler;
|
||||
import android.provider.Settings;
|
||||
import android.text.TextUtils;
|
||||
import android.util.ArraySet;
|
||||
import android.util.AttributeSet;
|
||||
import android.util.TypedValue;
|
||||
@@ -319,6 +320,9 @@ public class BatteryMeterView extends LinearLayout implements
|
||||
mUser = ActivityManager.getCurrentUser();
|
||||
getContext().getContentResolver().registerContentObserver(
|
||||
Settings.System.getUriFor(SHOW_BATTERY_PERCENT), false, mSettingObserver, mUser);
|
||||
getContext().getContentResolver().registerContentObserver(
|
||||
Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
|
||||
false, mSettingObserver);
|
||||
updateShowPercent();
|
||||
subscribeForTunerUpdates();
|
||||
mUserTracker.startTracking();
|
||||
@@ -493,6 +497,11 @@ public class BatteryMeterView extends LinearLayout implements
|
||||
public void onChange(boolean selfChange, Uri uri) {
|
||||
super.onChange(selfChange, uri);
|
||||
updateShowPercent();
|
||||
if (TextUtils.equals(uri.getLastPathSegment(),
|
||||
Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME)) {
|
||||
// update the text for sure if the estimate in the cache was updated
|
||||
updatePercentText();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +73,6 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
|
||||
private boolean mTestmode = false;
|
||||
private boolean mHasReceivedBattery = false;
|
||||
private Estimate mEstimate;
|
||||
private long mLastEstimateTimestamp = -1;
|
||||
private boolean mFetchingEstimate = false;
|
||||
|
||||
@Inject
|
||||
@@ -203,13 +202,6 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
|
||||
|
||||
@Override
|
||||
public void getEstimatedTimeRemainingString(EstimateFetchCompletion completion) {
|
||||
if (mEstimate != null
|
||||
&& mLastEstimateTimestamp > System.currentTimeMillis() - UPDATE_GRANULARITY_MSEC) {
|
||||
String percentage = generateTimeRemainingString();
|
||||
completion.onBatteryRemainingEstimateRetrieved(percentage);
|
||||
return;
|
||||
}
|
||||
|
||||
// Need to fetch or refresh the estimate, but it may involve binder calls so offload the
|
||||
// work
|
||||
synchronized (mFetchCallbacks) {
|
||||
@@ -238,8 +230,10 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
|
||||
mFetchingEstimate = true;
|
||||
Dependency.get(Dependency.BG_HANDLER).post(() -> {
|
||||
// Only fetch the estimate if they are enabled
|
||||
mEstimate = mEstimates.isHybridNotificationEnabled() ? mEstimates.getEstimate() : null;
|
||||
mLastEstimateTimestamp = System.currentTimeMillis();
|
||||
mEstimate = null;
|
||||
if (mEstimates.isHybridNotificationEnabled()) {
|
||||
updateEstimate();
|
||||
}
|
||||
mFetchingEstimate = false;
|
||||
Dependency.get(Dependency.MAIN_HANDLER).post(this::notifyEstimateFetchCallbacks);
|
||||
});
|
||||
@@ -258,8 +252,15 @@ public class BatteryControllerImpl extends BroadcastReceiver implements BatteryC
|
||||
}
|
||||
|
||||
private void updateEstimate() {
|
||||
mEstimate = mEstimates.getEstimate();
|
||||
mLastEstimateTimestamp = System.currentTimeMillis();
|
||||
// if the estimate has been cached we can just use that, otherwise get a new one and
|
||||
// throw it in the cache.
|
||||
mEstimate = Estimate.getCachedEstimateIfAvailable(mContext);
|
||||
if (mEstimate == null) {
|
||||
mEstimate = mEstimates.getEstimate();
|
||||
if (mEstimate != null) {
|
||||
Estimate.storeCachedEstimate(mContext, mEstimate);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void updatePowerSave() {
|
||||
|
||||
Reference in New Issue
Block a user