Merge "Use enhanced estimate battery info when available"
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index 849144a..3888ece 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -217,7 +217,7 @@
         return timeUs / 1000;
     }
 
-    private long convertMsToUs(long timeMs) {
+    public long convertMsToUs(long timeMs) {
         return timeMs * 1000;
     }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 0df23dd..63d703b 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -187,12 +187,11 @@
                         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 @@
 
         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 @@
 
     @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 @@
         }
     }
 
-    @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
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 2701abe..685e921 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -492,41 +492,6 @@
     }
 
     @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
         mFragment.mBatteryPredictionLoaderCallbacks.onLoadFinished(null, null);