diff --git a/src/com/android/settings/fuelgauge/BatteryInfoLoader.java b/src/com/android/settings/fuelgauge/BatteryInfoLoader.java
index d6fbd65..ce22a8c 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfoLoader.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfoLoader.java
@@ -55,7 +55,7 @@
                 FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
 
         // Stuff we always need to get BatteryInfo
-        Intent batteryBroadcast = getContext().registerReceiver(null,
+        Intent batteryBroadcast = context.registerReceiver(null,
                 new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
         final long elapsedRealtimeUs = BatteryUtils.convertMsToUs(SystemClock.elapsedRealtime());
         BatteryInfo batteryInfo;
@@ -79,7 +79,7 @@
         } else {
             batteryInfo = BatteryInfo.getBatteryInfo(context, batteryBroadcast, stats,
                     elapsedRealtimeUs, false /* shortString */,
-                    discharging ? 0 : stats.computeBatteryTimeRemaining(elapsedRealtimeUs),
+                    discharging ? stats.computeBatteryTimeRemaining(elapsedRealtimeUs) : 0,
                     false /* basedOnUsage */);
         }
         BatteryUtils.logRuntime(LOG_TAG, "BatteryInfoLoader.loadInBackground", startTime);
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java
new file mode 100644
index 0000000..c5e4707
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryInfoLoaderTest.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.fuelgauge;
+
+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.spy;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.BatteryManager;
+import android.os.BatteryStats;
+import com.android.internal.os.BatteryStatsHelper;
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.FakeFeatureFactory;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Answers;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.robolectric.RuntimeEnvironment;
+import org.robolectric.annotation.Config;
+
+@RunWith(SettingsRobolectricTestRunner.class)
+@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
+public class BatteryInfoLoaderTest {
+    private static final long TEST_TIME_REMAINING = 1000L;
+
+    @Mock (answer = Answers.RETURNS_DEEP_STUBS)
+    private BatteryStatsHelper mHelper;
+    @Mock (answer = Answers.RETURNS_DEEP_STUBS)
+    private PowerUsageFeatureProvider mProvider;
+    @Mock (answer = Answers.RETURNS_DEEP_STUBS)
+    private BatteryStats mStats;
+
+    private Intent mDisChargingBatteryBroadcast;
+    private Context mContext;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
+        mProvider = FakeFeatureFactory
+                .setupForTest(mContext)
+                .getPowerUsageFeatureProvider(mContext);
+
+        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);
+
+        doReturn(mContext).when(mContext).getApplicationContext();
+        when(mStats.computeBatteryTimeRemaining(anyLong())).thenReturn(TEST_TIME_REMAINING);
+        doReturn(mStats).when(mHelper).getStats();
+        doReturn(mDisChargingBatteryBroadcast).when(mContext).registerReceiver(any(), any());
+    }
+
+    @Test
+    public void test_loadInBackground_dischargingOldEstimate_dischargingLabelNotNull() {
+        BatteryInfoLoader loader = new BatteryInfoLoader(mContext, mHelper);
+
+        BatteryInfo info = loader.loadInBackground();
+
+        assertThat(info.remainingLabel).isNotNull();
+        assertThat(info.remainingTimeUs).isEqualTo(TEST_TIME_REMAINING);
+    }
+}
