Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b148924 authored by Lei Yu's avatar Lei Yu
Browse files

update "Last full charge" preference

When there is average time estimation, change it to "Full charge lasts
about" and also update the time.

Also update the BatteryInfo to return average time estimation even
though it is charging.

Bug: 73018395
Test: RunSettingsRoboTests
Change-Id: Ib22dadb5716e3034c60aeeb7768fdbf0cc86be0c
parent 8a022d86
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -5131,6 +5131,8 @@
    <string name="battery_detail_since_full_charge">Breakdown since last full charge</string>
    <!-- Title for usage time since last full charge. [CHAR LIMIT=60] -->
    <string name="battery_last_full_charge">Last full charge</string>
    <!-- Title for usage time that full charge lasts. [CHAR LIMIT=60] -->
    <string name="battery_full_charge_last">Full charge lasts about</string>
    <!-- Description for text in battery footer. [CHAR LIMIT=NONE] -->
    <string name="battery_footer_summary">Battery usage data is approximate and can change based on usage</string>
    <!-- Title for text that shows the amount of time an app has been running while in the foreground. [CHAR LIMIT=80] -->
+10 −18
Original line number Diff line number Diff line
@@ -422,32 +422,24 @@ public class BatteryUtils {
                new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        final long elapsedRealtimeUs = PowerUtil.convertMsToUs(
                SystemClock.elapsedRealtime());
        final BatteryStats stats = statsHelper.getStats();
        BatteryInfo batteryInfo;

        // 0 means we are discharging, anything else means charging
        final boolean discharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
                == 0;
        // Get enhanced prediction if available and discharging, otherwise use the old code
        Estimate estimate = null;
        if (discharging && mPowerUsageFeatureProvider != null &&
        final Estimate estimate;
        // Get enhanced prediction if available
        if (mPowerUsageFeatureProvider != null &&
                mPowerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(mContext)) {
            estimate = mPowerUsageFeatureProvider.getEnhancedBatteryPrediction(mContext);
        }
        final BatteryStats stats = statsHelper.getStats();
        BatteryUtils.logRuntime(tag, "BatteryInfoLoader post query", startTime);

        if (estimate != null) {
            batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats,
                    estimate, elapsedRealtimeUs, false /* shortString */);
        } else {
            estimate = new Estimate(
                    PowerUtil.convertUsToMs(stats.computeBatteryTimeRemaining(elapsedRealtimeUs)),
                    false,
                    Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN
            );
                    false /* isBasedOnUsage */,
                    Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN);
        }

        BatteryUtils.logRuntime(tag, "BatteryInfoLoader post query", startTime);
        batteryInfo = BatteryInfo.getBatteryInfo(mContext, batteryBroadcast, stats,
                estimate, elapsedRealtimeUs, false /* shortString */);
        }
        BatteryUtils.logRuntime(tag, "BatteryInfoLoader.loadInBackground", startTime);

        return batteryInfo;
+20 −7
Original line number Diff line number Diff line
@@ -95,6 +95,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
    BatteryUtils mBatteryUtils;
    @VisibleForTesting
    LayoutPreference mBatteryLayoutPref;
    @VisibleForTesting
    BatteryInfo mBatteryInfo;

    /**
     * SparseArray that maps uid to {@link Anomaly}, so we could find {@link Anomaly} by uid
@@ -118,6 +120,8 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
                @Override
                public void onLoadFinished(Loader<BatteryInfo> loader, BatteryInfo batteryInfo) {
                    mBatteryHeaderPreferenceController.updateHeaderPreference(batteryInfo);
                    mBatteryInfo = batteryInfo;
                    updateLastFullChargePreference();
                }

                @Override
@@ -291,9 +295,7 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList

        // reload BatteryInfo and updateUI
        restartBatteryInfoLoader();
        final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(mStatsHelper,
                System.currentTimeMillis());
        updateLastFullChargePreference(lastFullChargeTime);
        updateLastFullChargePreference();
        mScreenUsagePref.setSubtitle(StringUtil.formatElapsedTime(getContext(),
                mBatteryUtils.calculateScreenUsageTime(mStatsHelper), false));
    }
@@ -314,10 +316,21 @@ public class PowerUsageSummary extends PowerUsageBase implements OnLongClickList
    }

    @VisibleForTesting
    void updateLastFullChargePreference(long timeMs) {
        final CharSequence timeSequence = StringUtil.formatRelativeTime(getContext(), timeMs,
                false);
        mLastFullChargePref.setSubtitle(timeSequence);
    void updateLastFullChargePreference() {
        if (mBatteryInfo != null && mBatteryInfo.averageTimeToDischarge
                != Estimate.AVERAGE_TIME_TO_DISCHARGE_UNKNOWN) {
            mLastFullChargePref.setTitle(R.string.battery_full_charge_last);
            mLastFullChargePref.setSubtitle(
                    StringUtil.formatElapsedTime(getContext(), mBatteryInfo.averageTimeToDischarge,
                            false /* withSeconds */));
        } else {
            final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(mStatsHelper,
                    System.currentTimeMillis());
            mLastFullChargePref.setTitle(R.string.battery_last_full_charge);
            mLastFullChargePref.setSubtitle(
                    StringUtil.formatRelativeTime(getContext(), lastFullChargeTime,
                            false /* withSeconds */));
        }
    }

    @VisibleForTesting
+20 −2
Original line number Diff line number Diff line
@@ -123,6 +123,8 @@ public class PowerUsageSummaryTest {
    private MenuInflater mMenuInflater;
    @Mock
    private MenuItem mAdvancedPageMenu;
    @Mock
    private BatteryInfo mBatteryInfo;

    private List<BatterySipper> mUsageList;
    private Context mRealContext;
@@ -185,14 +187,30 @@ public class PowerUsageSummaryTest {
    }

    @Test
    public void testUpdateLastFullChargePreference_showCorrectSummary() {
    public void testUpdateLastFullChargePreference_noAverageTime_showLastFullChargeSummary() {
        mFragment.mBatteryInfo = null;
        when(mFragment.getContext()).thenReturn(mRealContext);
        doReturn(TIME_SINCE_LAST_FULL_CHARGE_MS).when(
                mFragment.mBatteryUtils).calculateLastFullChargeTime(any(), anyLong());

        mFragment.updateLastFullChargePreference(TIME_SINCE_LAST_FULL_CHARGE_MS);
        mFragment.updateLastFullChargePreference();

        assertThat(mLastFullChargePref.getTitle()).isEqualTo("Last full charge");
        assertThat(mLastFullChargePref.getSubtitle()).isEqualTo("2 hr. ago");
    }

    @Test
    public void testUpdateLastFullChargePreference_hasAverageTime_showFullChargeLastSummary() {
        mFragment.mBatteryInfo = mBatteryInfo;
        mBatteryInfo.averageTimeToDischarge = TIME_SINCE_LAST_FULL_CHARGE_MS;
        when(mFragment.getContext()).thenReturn(mRealContext);

        mFragment.updateLastFullChargePreference();

        assertThat(mLastFullChargePref.getTitle()).isEqualTo("Full charge lasts about");
        assertThat(mLastFullChargePref.getSubtitle().toString()).isEqualTo("2h");
    }

    @Test
    public void testNonIndexableKeys_MatchPreferenceKeys() {
        final Context context = RuntimeEnvironment.application;