From 03539a07e4c6a1a61b0e8aceda118fa360c7cd86 Mon Sep 17 00:00:00 2001 From: jackqdyulei Date: Thu, 25 May 2017 15:26:03 -0700 Subject: [PATCH] Add method to calculate last full charge time Bug: 38481300 Test: RunSettingsRoboTests Change-Id: Icd551921f263352eb01d0c6ada62d277c8699507 --- .../android/settings/fuelgauge/BatteryUtils.java | 14 ++++++++++++++ .../settings/fuelgauge/PowerUsageSummary.java | 9 +++++---- .../settings/fuelgauge/BatteryUtilsTest.java | 14 ++++++++++++++ 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java index 3d9dbb6db2c..a3ff1f4a4ce 100644 --- a/src/com/android/settings/fuelgauge/BatteryUtils.java +++ b/src/com/android/settings/fuelgauge/BatteryUtils.java @@ -27,6 +27,7 @@ import android.util.Log; import android.util.SparseLongArray; import com.android.internal.os.BatterySipper; +import com.android.internal.os.BatteryStatsHelper; import com.android.settings.overlay.FeatureFactory; import java.lang.annotation.Retention; @@ -228,6 +229,19 @@ public class BatteryUtils { }); } + /** + * Calculate the time since last full charge, including the device off time + * + * @param batteryStatsHelper utility class that contains the data + * @param currentTimeMs current wall time + * @return time in millis + */ + public long calculateLastFullChargeTime(BatteryStatsHelper batteryStatsHelper, + long currentTimeMs) { + return currentTimeMs - batteryStatsHelper.getStats().getStartClockTime(); + + } + private long convertUsToMs(long timeUs) { return timeUs / 1000; } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index 8b4257b29b7..0b21fc994b4 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -41,7 +41,6 @@ import android.util.TypedValue; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; -import android.widget.TextView; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.os.BatterySipper; @@ -415,11 +414,13 @@ public class PowerUsageSummary extends PowerUsageBase { final int dischargeAmount = USE_FAKE_DATA ? 5000 : stats != null ? stats.getDischargeAmount(mStatsType) : 0; - final long runningTime = calculateRunningTimeBasedOnStatsType(); + final long lastFullChargeTime = mBatteryUtils.calculateLastFullChargeTime(mStatsHelper, + System.currentTimeMillis()); updateScreenPreference(); - updateLastFullChargePreference(runningTime); + updateLastFullChargePreference(lastFullChargeTime); - final CharSequence timeSequence = Utils.formatElapsedTime(context, runningTime, false); + final CharSequence timeSequence = Utils.formatElapsedTime(context, lastFullChargeTime, + false); final int resId = mShowAllApps ? R.string.power_usage_list_summary_device : R.string.power_usage_list_summary; mAppListGroup.setTitle(TextUtils.expandTemplate(getText(resId), timeSequence)); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java index 009a91c96ad..495410dba15 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryUtilsTest.java @@ -21,6 +21,7 @@ import android.os.Process; import android.text.format.DateUtils; import com.android.internal.os.BatterySipper; +import com.android.internal.os.BatteryStatsHelper; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.testutils.FakeFeatureFactory; @@ -68,6 +69,7 @@ public class BatteryUtilsTest { private static final long TIME_STATE_BACKGROUND = 6000 * UNIT; private static final long TIME_FOREGROUND_ACTIVITY_ZERO = 0; private static final long TIME_FOREGROUND_ACTIVITY = 100 * DateUtils.MINUTE_IN_MILLIS; + private static final long TIME_SINCE_LAST_FULL_CHARGE_MS = 120 * 60 * 1000; private static final int UID = 123; private static final long TIME_EXPECTED_FOREGROUND = 1500; @@ -100,6 +102,8 @@ public class BatteryUtilsTest { private BatterySipper mCellBatterySipper; @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private BatteryStatsHelper mBatteryStatsHelper; private BatteryUtils mBatteryUtils; private FakeFeatureFactory mFeatureFactory; private PowerUsageFeatureProvider mProvider; @@ -291,6 +295,16 @@ public class BatteryUtilsTest { mScreenBatterySipper); } + @Test + public void testCalculateLastFullChargeTime() { + final long currentTimeMs = System.currentTimeMillis(); + when(mBatteryStatsHelper.getStats().getStartClockTime()).thenReturn( + currentTimeMs - TIME_SINCE_LAST_FULL_CHARGE_MS); + + assertThat(mBatteryUtils.calculateLastFullChargeTime( + mBatteryStatsHelper, currentTimeMs)).isEqualTo(TIME_SINCE_LAST_FULL_CHARGE_MS); + } + private BatterySipper createTestSmearBatterySipper(long activityTime, double totalPowerMah, int uidCode, boolean isUidNull) { final BatterySipper sipper = mock(BatterySipper.class);