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

Commit ed66c5fc authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix BatteryInfo using enhanced estimate for charge time" into oc-dr1-dev

parents d392a9bf cb9c53dd
Loading
Loading
Loading
Loading
+9 −4
Original line number Original line Diff line number Diff line
@@ -137,11 +137,15 @@ public class BatteryInfo {
                final BatteryUtils batteryUtils = BatteryUtils.getInstance(context);
                final BatteryUtils batteryUtils = BatteryUtils.getInstance(context);
                final long elapsedRealtimeUs =
                final long elapsedRealtimeUs =
                        batteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
                        batteryUtils.convertMsToUs(SystemClock.elapsedRealtime());

                Intent batteryBroadcast = context.registerReceiver(null,
                Intent batteryBroadcast = context.registerReceiver(null,
                        new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
                        new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
                BatteryUtils utils = BatteryUtils.getInstance(context);
                BatteryUtils utils = BatteryUtils.getInstance(context);

                // 0 means we are discharging, anything else means charging
                if (provider != null && provider.isEnhancedBatteryPredictionEnabled(context)) {
                boolean discharging =
                        batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0;
                if (discharging && provider != null
                        && provider.isEnhancedBatteryPredictionEnabled(context)) {
                    return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                    return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                            elapsedRealtimeUs, shortString,
                            elapsedRealtimeUs, shortString,
                            utils.convertMsToUs(provider.getEnhancedBatteryPrediction(context)),
                            utils.convertMsToUs(provider.getEnhancedBatteryPrediction(context)),
@@ -149,7 +153,8 @@ public class BatteryInfo {
                } else {
                } else {
                    return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                    return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                            elapsedRealtimeUs, shortString,
                            elapsedRealtimeUs, shortString,
                            stats.computeBatteryTimeRemaining(elapsedRealtimeUs), false);
                            discharging ? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0,
                            false);
                }
                }
            }
            }


@@ -211,7 +216,7 @@ public class BatteryInfo {
            if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) {
            if (chargeTime > 0 && status != BatteryManager.BATTERY_STATUS_FULL) {
                info.remainingTimeUs = chargeTime;
                info.remainingTimeUs = chargeTime;
                CharSequence timeString = Utils.formatElapsedTime(context,
                CharSequence timeString = Utils.formatElapsedTime(context,
                        batteryUtils.convertUsToMs(drainTimeUs), false /* withSeconds */);
                        batteryUtils.convertUsToMs(chargeTime), false /* withSeconds */);
                int resId = shortString ? R.string.power_charging_duration_short
                int resId = shortString ? R.string.power_charging_duration_short
                        : R.string.power_charging_duration;
                        : R.string.power_charging_duration;
                info.remainingLabel = TextUtils.expandTemplate(context.getText(
                info.remainingLabel = TextUtils.expandTemplate(context.getText(
+8 −3
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.database.Cursor;
import android.database.Cursor;
import android.net.Uri;
import android.net.Uri;
import android.os.BatteryManager;
import android.os.BatteryStats;
import android.os.BatteryStats;
import android.os.SystemClock;
import android.os.SystemClock;
import com.android.internal.os.BatteryStatsHelper;
import com.android.internal.os.BatteryStatsHelper;
@@ -57,9 +58,12 @@ public class BatteryInfoLoader extends AsyncLoader<BatteryInfo>{
        final long elapsedRealtimeUs = batteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
        final long elapsedRealtimeUs = batteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
        BatteryInfo batteryInfo;
        BatteryInfo batteryInfo;


        // Get enhanced prediction if available, otherwise use the old prediction code
        // 0 means we are discharging, anything else means charging
        boolean discharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1) == 0;
        // Get enhanced prediction if available and discharging, otherwise use the old code
        Cursor cursor = null;
        Cursor cursor = null;
        if (powerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(context)) {
        if (discharging && powerUsageFeatureProvider != null &&
                powerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(context)) {
            final Uri queryUri = powerUsageFeatureProvider.getEnhancedBatteryPredictionUri();
            final Uri queryUri = powerUsageFeatureProvider.getEnhancedBatteryPredictionUri();
            cursor = context.getContentResolver().query(queryUri, null, null, null, null);
            cursor = context.getContentResolver().query(queryUri, null, null, null, null);
        }
        }
@@ -72,7 +76,8 @@ public class BatteryInfoLoader extends AsyncLoader<BatteryInfo>{
            BatteryStats stats = mStatsHelper.getStats();
            BatteryStats stats = mStatsHelper.getStats();
            batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
            batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                    elapsedRealtimeUs, false /* shortString */,
                    elapsedRealtimeUs, false /* shortString */,
                    stats.computeBatteryTimeRemaining(elapsedRealtimeUs), false /* basedOnUsage */);
                    discharging ? 0 : stats.computeBatteryTimeRemaining(elapsedRealtimeUs),
                    false /* basedOnUsage */);
        }
        }


        return batteryInfo;
        return batteryInfo;
+2 −5
Original line number Original line Diff line number Diff line
@@ -769,12 +769,9 @@ public class PowerUsageSummary extends PowerUsageBase implements


    @VisibleForTesting
    @VisibleForTesting
    void restartBatteryInfoLoader() {
    void restartBatteryInfoLoader() {
        if (mPowerFeatureProvider != null
                && mPowerFeatureProvider.isEnhancedBatteryPredictionEnabled(getContext())) {
        getLoaderManager().restartLoader(BATTERY_INFO_LOADER, Bundle.EMPTY,
        getLoaderManager().restartLoader(BATTERY_INFO_LOADER, Bundle.EMPTY,
                mBatteryInfoLoaderCallbacks);
                mBatteryInfoLoaderCallbacks);
    }
    }
    }


    private static List<BatterySipper> getFakeStats() {
    private static List<BatterySipper> getFakeStats() {
        ArrayList<BatterySipper> stats = new ArrayList<>();
        ArrayList<BatterySipper> stats = new ArrayList<>();
+17 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.TestConfig;
import com.android.settings.testutils.FakeFeatureFactory;
import com.android.settings.testutils.FakeFeatureFactory;


import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.Before;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;
@@ -47,6 +48,7 @@ import static org.mockito.Mockito.spy;
@RunWith(SettingsRobolectricTestRunner.class)
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class BatteryInfoTest {
public class BatteryInfoTest {

    private static final String STATUS_FULL = "Full";
    private static final String STATUS_FULL = "Full";
    private static final String STATUS_CHARGING_NO_TIME = "50% - charging";
    private static final String STATUS_CHARGING_NO_TIME = "50% - charging";
    private static final String STATUS_CHARGING_TIME = "50% - 0m until fully charged";
    private static final String STATUS_CHARGING_TIME = "50% - 0m until fully charged";
@@ -54,6 +56,9 @@ public class BatteryInfoTest {
    private static final long REMAINING_TIME_NULL = -1;
    private static final long REMAINING_TIME_NULL = -1;
    private static final long REMAINING_TIME = 2;
    private static final long REMAINING_TIME = 2;
    public static final String ENHANCED_STRING_SUFFIX = "left based on your usage";
    public static final String ENHANCED_STRING_SUFFIX = "left based on your usage";
    public static final long TEST_CHARGE_TIME_REMAINING = TimeUnit.MINUTES.toMicros(1);
    public static final String TEST_CHARGE_TIME_REMAINING_STRINGIFIED =
            "1m left until fully charged";
    private Intent mDisChargingBatteryBroadcast;
    private Intent mDisChargingBatteryBroadcast;
    private Intent mChargingBatteryBroadcast;
    private Intent mChargingBatteryBroadcast;
    private Context mContext;
    private Context mContext;
@@ -147,4 +152,16 @@ public class BatteryInfoTest {
        assertThat(info.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
        assertThat(info.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
        assertThat(info2.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
        assertThat(info2.remainingLabel.toString()).doesNotContain(ENHANCED_STRING_SUFFIX);
    }
    }

    @Test
    public void testGetBatteryInfo_charging_usesChargeTime() {
        doReturn(TEST_CHARGE_TIME_REMAINING)
                .when(mBatteryStats)
                .computeChargeTimeRemaining(anyLong());
        BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast,
                mBatteryStats, SystemClock.elapsedRealtime() * 1000, false, 1000, false);
        assertThat(info.remainingTimeUs = TEST_CHARGE_TIME_REMAINING);
        assertThat(info.remainingLabel.toString())
                .isEqualTo(TEST_CHARGE_TIME_REMAINING_STRINGIFIED);
    }
}
}