Loading src/com/android/settings/fuelgauge/BatteryInfo.java +9 −4 Original line number Original line Diff line number Diff line Loading @@ -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)), Loading @@ -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); } } } } Loading Loading @@ -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( Loading src/com/android/settings/fuelgauge/BatteryInfoLoader.java +8 −3 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } } Loading @@ -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; Loading src/com/android/settings/fuelgauge/PowerUsageSummary.java +2 −5 Original line number Original line Diff line number Diff line Loading @@ -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<>(); Loading tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java +17 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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"; Loading @@ -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; Loading Loading @@ -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); } } } Loading
src/com/android/settings/fuelgauge/BatteryInfo.java +9 −4 Original line number Original line Diff line number Diff line Loading @@ -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)), Loading @@ -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); } } } } Loading Loading @@ -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( Loading
src/com/android/settings/fuelgauge/BatteryInfoLoader.java +8 −3 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); } } Loading @@ -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; Loading
src/com/android/settings/fuelgauge/PowerUsageSummary.java +2 −5 Original line number Original line Diff line number Diff line Loading @@ -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<>(); Loading
tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoTest.java +17 −0 Original line number Original line Diff line number Diff line Loading @@ -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; Loading @@ -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"; Loading @@ -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; Loading Loading @@ -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); } } }