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

Commit 6976ccec authored by Salvador Martinez's avatar Salvador Martinez Committed by Android (Google) Code Review
Browse files

Merge "Use enhanced estimate battery info when available"

parents 2f98a110 be6f0704
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -217,7 +217,7 @@ public class BatteryUtils {
        return timeUs / 1000;
    }

    private long convertMsToUs(long timeMs) {
    public long convertMsToUs(long timeMs) {
        return timeMs * 1000;
    }

+19 −19
Original line number Diff line number Diff line
@@ -187,12 +187,11 @@ public class PowerUsageSummary extends PowerUsageBase implements
                        mEnhancedEstimate =
                                mPowerFeatureProvider.getTimeRemainingEstimate(cursor);
                    }
                    final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
                    final long elapsedRealtimeUs =
                            mBatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
                    Intent batteryBroadcast = getContext().registerReceiver(null,
                            new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
                    BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(getContext(),
                            batteryBroadcast, mStatsHelper.getStats(), elapsedRealtimeUs, false);
                    useEnhancedEstimateIfAvailable(getContext(), batteryInfo);
                    BatteryInfo batteryInfo = getBatteryInfo(elapsedRealtimeUs, batteryBroadcast);
                    updateHeaderPreference(batteryInfo);
                }

@@ -494,12 +493,10 @@ public class PowerUsageSummary extends PowerUsageBase implements

        initAnomalyDetectionIfPossible();

        final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
        final long elapsedRealtimeUs = mBatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
        Intent batteryBroadcast = context.registerReceiver(null,
                new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
        BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast,
                mStatsHelper.getStats(), elapsedRealtimeUs, false);
        useEnhancedEstimateIfAvailable(context, batteryInfo);
        BatteryInfo batteryInfo = getBatteryInfo(elapsedRealtimeUs, batteryBroadcast);
        updateHeaderPreference(batteryInfo);

        final long runningTime = calculateRunningTimeBasedOnStatsType();
@@ -660,7 +657,7 @@ public class PowerUsageSummary extends PowerUsageBase implements

    @VisibleForTesting
    long calculateRunningTimeBasedOnStatsType() {
        final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000;
        final long elapsedRealtimeUs = mBatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
        // Return the battery time (millisecond) on status mStatsType
        return mStatsHelper.getStats().computeBatteryRealtime(elapsedRealtimeUs,
                mStatsType /* STATS_SINCE_CHARGED */) / 1000;
@@ -743,17 +740,20 @@ public class PowerUsageSummary extends PowerUsageBase implements
        }
    }

    @VisibleForTesting
    void useEnhancedEstimateIfAvailable(Context context, BatteryInfo batteryInfo) {
        if (mEnhancedEstimate > 0
                && mPowerFeatureProvider.isEnhancedBatteryPredictionEnabled(context)) {
            final Resources resources = context.getResources();
            batteryInfo.remainingTimeUs = mEnhancedEstimate;
            String timeString = Formatter.formatShortElapsedTime(context, mEnhancedEstimate);
            batteryInfo.remainingLabel = resources.getString(
                    com.android.settingslib.R.string.power_remaining_duration_only,
                    timeString);
    private BatteryInfo getBatteryInfo(long elapsedRealtimeUs, Intent batteryBroadcast) {
        BatteryInfo batteryInfo;
        if (mEnhancedEstimate > 0 &&
                mPowerFeatureProvider.isEnhancedBatteryPredictionEnabled(
                        getContext())) {
            // Drain time is in micro-seconds so we have to multiply by 1000
            batteryInfo = BatteryInfo.getBatteryInfo(getContext(), batteryBroadcast,
                    mStatsHelper.getStats(), elapsedRealtimeUs, false,
                    mBatteryUtils.convertMsToUs(mEnhancedEstimate), true);
        } else {
            batteryInfo = BatteryInfo.getBatteryInfo(getContext(), batteryBroadcast,
                    mStatsHelper.getStats(), elapsedRealtimeUs, false);
        }
        return batteryInfo;
    }

    @VisibleForTesting
+0 −35
Original line number Diff line number Diff line
@@ -491,41 +491,6 @@ public class PowerUsageSummaryTest {
        assertThat(mFragment.mAnomalySparseArray.get(UID_2)).containsExactly(anomaly3);
    }

    @Test
    public void testUseEnhancedEstimateIfAvailable() {
        // mock out the provider
        final long time = 60 * 1000 * 1000;
        PowerUsageFeatureProvider provider = mFeatureFactory.getPowerUsageFeatureProvider(mContext);
        when(provider.isEnhancedBatteryPredictionEnabled(any())).thenReturn(true);
        mFragment.mPowerFeatureProvider = provider;
        mFragment.mEnhancedEstimate = time;

        mFragment.useEnhancedEstimateIfAvailable(mRealContext, mBatteryInfo);

        // The string that gets returned always has weird whitespacing to make it fit
        // so we're just going to check that it contains the correct value we care about.
        assertThat(mBatteryInfo.remainingTimeUs).isEqualTo(time);
        assertThat(mBatteryInfo.remainingLabel).contains("About 17 hrs");
    }

    @Test
    public void testUseEnhancedEstimateIfAvailable_noOpsOnDisabled() {
        // mock out the provider
        final long time = 60 * 1000 * 1000;
        PowerUsageFeatureProvider provider = mFeatureFactory.getPowerUsageFeatureProvider(mContext);
        when(provider.isEnhancedBatteryPredictionEnabled(any())).thenReturn(false);
        mFragment.mPowerFeatureProvider = provider;
        mFragment.mEnhancedEstimate = time;
        mBatteryInfo.remainingTimeUs = TIME_SINCE_LAST_FULL_CHARGE_US;
        mBatteryInfo.remainingLabel = TIME_LEFT;

        mFragment.useEnhancedEstimateIfAvailable(mRealContext, mBatteryInfo);

        // check to make sure the values did not change
        assertThat(mBatteryInfo.remainingTimeUs).isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_US);
        assertThat(mBatteryInfo.remainingLabel).contains(TIME_LEFT);
    }

    @Test
    public void testBatteryPredictionLoaderCallbacks_DoesNotCrashOnNull() {
        // Sanity test to check for crash