diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index ad985c7e5f34d..5f2001b35ab2e 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -781,8 +781,10 @@ Overridden by %1$s - - Approx. %1$s left + + About %1$s left + + %1$s left until fully charged %1$s left @@ -804,41 +806,11 @@ %1$s - %2$s - - %1$s - - %2$s until fully charged on AC - - %1$s - - %2$s - - %1$s - - %2$s until fully charged over USB - - %1$s - - %2$s - - %1$s - - %2$s until fully charged from wireless - - %1$s - - %2$s Unknown Charging - - Charging on AC - - Charging - - Charging over USB - - Charging - - Charging wirelessly - - Charging Not charging diff --git a/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java b/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java index 22f8856119927..7457435be5d6f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java +++ b/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java @@ -97,7 +97,7 @@ public class BatteryInfo { } public static void getBatteryInfo(final Context context, final Callback callback) { - BatteryInfo.getBatteryInfo(context, callback, false); + BatteryInfo.getBatteryInfo(context, callback, false /* shortString */); } public static void getBatteryInfo(final Context context, final Callback callback, @@ -115,8 +115,8 @@ public class BatteryInfo { final long elapsedRealtimeUs = SystemClock.elapsedRealtime() * 1000; Intent batteryBroadcast = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); - BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(context, - batteryBroadcast, batteryStats, elapsedRealtimeUs, shortString); + BatteryInfo batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast, + batteryStats, elapsedRealtimeUs, shortString); callback.onBatteryInfoLoaded(batteryInfo); } }.execute(); @@ -125,7 +125,7 @@ public class BatteryInfo { public static BatteryInfo getBatteryInfo(Context context, Intent batteryBroadcast, BatteryStats stats, long elapsedRealtimeUs) { return BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats, elapsedRealtimeUs, - false); + false /* shortString */); } public static BatteryInfo getBatteryInfo(Context context, Intent batteryBroadcast, @@ -136,7 +136,7 @@ public class BatteryInfo { info.batteryPercentString = Utils.formatPercentage(info.mBatteryLevel); info.mCharging = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; final Resources resources = context.getResources(); - info.statusLabel = Utils.getBatteryStatus(resources, batteryBroadcast, shortString); + info.statusLabel = Utils.getBatteryStatus(resources, batteryBroadcast); if (!info.mCharging) { final long drainTime = stats.computeBatteryTimeRemaining(elapsedRealtimeUs); if (drainTime > 0) { @@ -164,25 +164,12 @@ public class BatteryInfo { info.remainingTimeUs = chargeTime; String timeString = Formatter.formatShortElapsedTime(context, chargeTime / 1000); - int plugType = batteryBroadcast.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); - int resId; - if (plugType == BatteryManager.BATTERY_PLUGGED_AC) { - resId = shortString ? R.string.power_charging_duration_ac_short - : R.string.power_charging_duration_ac; - } else if (plugType == BatteryManager.BATTERY_PLUGGED_USB) { - resId = shortString ? R.string.power_charging_duration_usb_short - : R.string.power_charging_duration_usb; - } else if (plugType == BatteryManager.BATTERY_PLUGGED_WIRELESS) { - resId = shortString ? R.string.power_charging_duration_wireless_short - : R.string.power_charging_duration_wireless; - } else { - resId = shortString ? R.string.power_charging_duration_short - : R.string.power_charging_duration; - } - info.remainingLabel = resources.getString(R.string.power_remaining_duration_only, + int resId = shortString ? R.string.power_charging_duration_short + : R.string.power_charging_duration; + info.remainingLabel = resources.getString( + R.string.power_remaining_charging_duration_only, timeString); + info.mChargeLabelString = resources.getString(resId, info.batteryPercentString, timeString); - info.mChargeLabelString = resources.getString( - resId, info.batteryPercentString, timeString); } else { info.remainingLabel = null; info.mChargeLabelString = resources.getString( diff --git a/packages/SettingsLib/src/com/android/settingslib/Utils.java b/packages/SettingsLib/src/com/android/settingslib/Utils.java index 7e7b391ffd1ad..78ad34acf8f02 100644 --- a/packages/SettingsLib/src/com/android/settingslib/Utils.java +++ b/packages/SettingsLib/src/com/android/settingslib/Utils.java @@ -140,30 +140,11 @@ public class Utils { } public static String getBatteryStatus(Resources res, Intent batteryChangedIntent) { - return Utils.getBatteryStatus(res, batteryChangedIntent, false); - } - - public static String getBatteryStatus(Resources res, Intent batteryChangedIntent, - boolean shortString) { - int plugType = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0); int status = batteryChangedIntent.getIntExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_UNKNOWN); String statusString; if (status == BatteryManager.BATTERY_STATUS_CHARGING) { - int resId; - if (plugType == BatteryManager.BATTERY_PLUGGED_AC) { - resId = shortString ? R.string.battery_info_status_charging_ac_short - : R.string.battery_info_status_charging_ac; - } else if (plugType == BatteryManager.BATTERY_PLUGGED_USB) { - resId = shortString ? R.string.battery_info_status_charging_usb_short - : R.string.battery_info_status_charging_usb; - } else if (plugType == BatteryManager.BATTERY_PLUGGED_WIRELESS) { - resId = shortString ? R.string.battery_info_status_charging_wireless_short - : R.string.battery_info_status_charging_wireless; - } else { - resId = R.string.battery_info_status_charging; - } - statusString = res.getString(resId); + statusString = res.getString(R.string.battery_info_status_charging); } else if (status == BatteryManager.BATTERY_STATUS_DISCHARGING) { statusString = res.getString(R.string.battery_info_status_discharging); } else if (status == BatteryManager.BATTERY_STATUS_NOT_CHARGING) { diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/BatteryInfoTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/BatteryInfoTest.java index 136495819b750..962c4e7c3a279 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/BatteryInfoTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/BatteryInfoTest.java @@ -21,6 +21,7 @@ import android.content.Intent; import android.os.BatteryManager; import android.os.BatteryStats; import android.os.SystemClock; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -31,14 +32,23 @@ import org.robolectric.RobolectricTestRunner; import org.robolectric.annotation.Config; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyLong; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.when; @RunWith(RobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class BatteryInfoTest { private static final String STATUS_FULL = "Full"; - private Intent mBatteryBroadcast; - @Mock + private static final String STATUS_CHARGING_NO_TIME = "Charging"; + private static final String STATUS_CHARGING_TIME = "Charging - 2h left"; + private static final long REMAINING_TIME_NULL = -1; + private static final long REMAINING_TIME = 2; + private Intent mDisChargingBatteryBroadcast; + private Intent mChargingBatteryBroadcast; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) private BatteryStats mBatteryStats; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; @@ -47,21 +57,53 @@ public class BatteryInfoTest { public void setUp() { MockitoAnnotations.initMocks(this); - mBatteryBroadcast = new Intent(); - mBatteryBroadcast.putExtra(BatteryManager.EXTRA_PLUGGED, 0); - mBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 0); - mBatteryBroadcast.putExtra(BatteryManager.EXTRA_SCALE, 100); - mBatteryBroadcast.putExtra(BatteryManager.EXTRA_STATUS, BatteryManager.BATTERY_STATUS_FULL); + mDisChargingBatteryBroadcast = new Intent(); + mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_PLUGGED, 0); + mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 0); + mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_SCALE, 100); + mDisChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_STATUS, + BatteryManager.BATTERY_STATUS_FULL); + + mChargingBatteryBroadcast = new Intent(); + mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_PLUGGED, + BatteryManager.BATTERY_PLUGGED_AC); + mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_LEVEL, 50); + mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_SCALE, 100); + mChargingBatteryBroadcast.putExtra(BatteryManager.EXTRA_STATUS, + BatteryManager.BATTERY_STATUS_UNKNOWN); when(mContext.getResources().getString(R.string.battery_info_status_full)) .thenReturn(STATUS_FULL); + when(mContext.getResources().getString(eq(R.string.power_charging), any(), + any())).thenReturn(STATUS_CHARGING_NO_TIME); + when(mContext.getResources().getString(eq(R.string.power_charging_duration), any(), + any())).thenReturn(STATUS_CHARGING_TIME); } @Test - public void testGetBatteryInfo_HasStatusLabel() { - BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mBatteryBroadcast, mBatteryStats, - SystemClock.elapsedRealtime() * 1000, true); + public void testGetBatteryInfo_hasStatusLabel() { + doReturn(REMAINING_TIME_NULL).when(mBatteryStats).computeBatteryTimeRemaining(anyLong()); + BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mDisChargingBatteryBroadcast, + mBatteryStats, SystemClock.elapsedRealtime() * 1000, true); assertThat(info.statusLabel).isEqualTo(STATUS_FULL); } + + @Test + public void testGetBatteryInfo_doNotShowChargingMethod_hasRemainingTime() { + doReturn(REMAINING_TIME).when(mBatteryStats).computeChargeTimeRemaining(anyLong()); + BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast, + mBatteryStats, SystemClock.elapsedRealtime() * 1000, false); + + assertThat(info.mChargeLabelString).isEqualTo(STATUS_CHARGING_TIME); + } + + @Test + public void testGetBatteryInfo_doNotShowChargingMethod_noRemainingTime() { + doReturn(REMAINING_TIME_NULL).when(mBatteryStats).computeChargeTimeRemaining(anyLong()); + BatteryInfo info = BatteryInfo.getBatteryInfo(mContext, mChargingBatteryBroadcast, + mBatteryStats, SystemClock.elapsedRealtime() * 1000, false); + + assertThat(info.mChargeLabelString).isEqualTo(STATUS_CHARGING_NO_TIME); + } }