Merge "Make time remaining estimate debug mode more reliable." into oc-dr1-dev
diff --git a/src/com/android/settings/applications/InstalledAppDetails.java b/src/com/android/settings/applications/InstalledAppDetails.java
index b3aacb2..a1b69d7 100755
--- a/src/com/android/settings/applications/InstalledAppDetails.java
+++ b/src/com/android/settings/applications/InstalledAppDetails.java
@@ -209,7 +209,7 @@
 
                 @Override
                 public Loader<BatteryStatsHelper> onCreateLoader(int id, Bundle args) {
-                    return new BatteryStatsHelperLoader(getContext(), args);
+                    return new BatteryStatsHelperLoader(getContext());
                 }
 
                 @Override
diff --git a/src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java b/src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java
index 9d37333..e57ed01 100644
--- a/src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java
+++ b/src/com/android/settings/fuelgauge/BatteryBroadcastReceiver.java
@@ -50,11 +50,7 @@
 
     @Override
     public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction();
-        if (mBatteryListener != null && Intent.ACTION_BATTERY_CHANGED.equals(action)
-                && updateBatteryStatus(intent)) {
-            mBatteryListener.onBatteryChanged();
-        }
+        updateBatteryStatus(intent);
     }
 
     public void setBatteryChangedListener(OnBatteryChangedListener lsn) {
@@ -62,26 +58,27 @@
     }
 
     public void register() {
-        mContext.registerReceiver(this,
+        final Intent intent = mContext.registerReceiver(this,
                 new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
+        updateBatteryStatus(intent);
     }
 
     public void unRegister() {
         mContext.unregisterReceiver(this);
     }
 
-    private boolean updateBatteryStatus(Intent intent) {
-        if (intent != null) {
+    private void updateBatteryStatus(Intent intent) {
+        if (intent != null && mBatteryListener != null && Intent.ACTION_BATTERY_CHANGED.equals(
+                intent.getAction())) {
             String batteryLevel = Utils.getBatteryPercentage(intent);
             String batteryStatus = Utils.getBatteryStatus(
                     mContext.getResources(), intent);
             if (!batteryLevel.equals(mBatteryLevel) || !batteryStatus.equals(mBatteryStatus)) {
                 mBatteryLevel = batteryLevel;
                 mBatteryStatus = batteryStatus;
-                return true;
+                mBatteryListener.onBatteryChanged();
             }
         }
-        return false;
     }
 
 }
\ No newline at end of file
diff --git a/src/com/android/settings/fuelgauge/BatteryStatsHelperLoader.java b/src/com/android/settings/fuelgauge/BatteryStatsHelperLoader.java
index bc166c3..b81f282 100644
--- a/src/com/android/settings/fuelgauge/BatteryStatsHelperLoader.java
+++ b/src/com/android/settings/fuelgauge/BatteryStatsHelperLoader.java
@@ -31,12 +31,13 @@
 public class BatteryStatsHelperLoader extends AsyncLoader<BatteryStatsHelper> {
     @VisibleForTesting
     UserManager mUserManager;
-    private Bundle mBundle;
+    @VisibleForTesting
+    BatteryUtils mBatteryUtils;
 
-    public BatteryStatsHelperLoader(Context context, Bundle bundle) {
+    public BatteryStatsHelperLoader(Context context) {
         super(context);
-        mBundle = bundle;
         mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
+        mBatteryUtils = BatteryUtils.getInstance(context);
     }
 
     @Override
@@ -44,9 +45,8 @@
         Context context = getContext();
         final BatteryStatsHelper statsHelper = new BatteryStatsHelper(context,
                 true /* collectBatteryBroadcast */);
+        mBatteryUtils.initBatteryStatsHelper(statsHelper, null /* bundle */, mUserManager);
 
-        BatteryUtils.getInstance(context).initBatteryStatsHelper(statsHelper, mBundle,
-                mUserManager);
         return statsHelper;
     }
 
@@ -55,5 +55,4 @@
 
     }
 
-
 }
diff --git a/src/com/android/settings/fuelgauge/BatteryUtils.java b/src/com/android/settings/fuelgauge/BatteryUtils.java
index e98ed82..a041543 100644
--- a/src/com/android/settings/fuelgauge/BatteryUtils.java
+++ b/src/com/android/settings/fuelgauge/BatteryUtils.java
@@ -370,6 +370,7 @@
     public void initBatteryStatsHelper(BatteryStatsHelper statsHelper, Bundle bundle,
             UserManager userManager) {
         statsHelper.create(bundle);
+        statsHelper.clearStats();
         statsHelper.refreshStats(BatteryStats.STATS_SINCE_CHARGED, userManager.getUserProfiles());
     }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageBase.java b/src/com/android/settings/fuelgauge/PowerUsageBase.java
index 060abdd..51f5f39 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageBase.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageBase.java
@@ -82,19 +82,6 @@
         mBatteryBroadcastReceiver.unRegister();
     }
 
-    @Override
-    public void onStop() {
-        super.onStop();
-    }
-
-    @Override
-    public void onDestroy() {
-        super.onDestroy();
-        if (getActivity().isChangingConfigurations()) {
-            mStatsHelper.storeState();
-        }
-    }
-
     protected void restartBatteryStatsLoader() {
         getLoaderManager().restartLoader(0, Bundle.EMPTY, this);
     }
@@ -108,7 +95,7 @@
     @Override
     public Loader<BatteryStatsHelper> onCreateLoader(int id,
             Bundle args) {
-        return new BatteryStatsHelperLoader(getContext(), args);
+        return new BatteryStatsHelperLoader(getContext());
     }
 
     @Override
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java
index c3b660c..60d7de3 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryBroadcastReceiverTest.java
@@ -32,7 +32,11 @@
 import org.robolectric.annotation.Config;
 
 import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 
 @RunWith(SettingsRobolectricTestRunner.class)
@@ -52,7 +56,7 @@
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-        mContext = RuntimeEnvironment.application;
+        mContext = spy(RuntimeEnvironment.application);
 
         mBatteryBroadcastReceiver = new BatteryBroadcastReceiver(mContext);
         mBatteryBroadcastReceiver.mBatteryLevel = BATTERY_INIT_LEVEL;
@@ -92,4 +96,17 @@
         verify(mBatteryListener, never()).onBatteryChanged();
     }
 
+    @Test
+    public void testRegister_updateBatteryStatus() {
+        doReturn(mChargingIntent).when(mContext).registerReceiver(any(), any());
+
+        mBatteryBroadcastReceiver.register();
+
+        assertThat(mBatteryBroadcastReceiver.mBatteryLevel).isEqualTo(
+                Utils.getBatteryPercentage(mChargingIntent));
+        assertThat(mBatteryBroadcastReceiver.mBatteryStatus).isEqualTo(
+                Utils.getBatteryStatus(mContext.getResources(), mChargingIntent));
+        verify(mBatteryListener).onBatteryChanged();
+    }
+
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/BatteryStatsHelperLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/BatteryStatsHelperLoaderTest.java
new file mode 100644
index 0000000..5f8d7cf
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/fuelgauge/BatteryStatsHelperLoaderTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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 org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+
+import com.android.settings.TestConfig;
+import com.android.settings.testutils.SettingsRobolectricTestRunner;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+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 BatteryStatsHelperLoaderTest {
+    @Mock
+    private BatteryUtils mBatteryUtils;
+    @Mock
+    private ConnectivityManager mConnectivityManager;
+
+    private Context mContext;
+    private BatteryStatsHelperLoader mBatteryStatsHelperLoader;
+
+    @Before
+    public void setUp() {
+        MockitoAnnotations.initMocks(this);
+        mContext = spy(RuntimeEnvironment.application);
+        doReturn(mConnectivityManager).when(mContext).getSystemService(
+                Context.CONNECTIVITY_SERVICE);
+
+        mBatteryStatsHelperLoader = spy(new BatteryStatsHelperLoader(mContext));
+        mBatteryStatsHelperLoader.mBatteryUtils = mBatteryUtils;
+    }
+
+    @Test
+    public void testLoadInBackground_loadWithoutBundle() {
+        doReturn(mContext).when(mBatteryStatsHelperLoader).getContext();
+        mBatteryStatsHelperLoader.loadInBackground();
+
+        verify(mBatteryUtils).initBatteryStatsHelper(any(), eq(null), any());
+    }
+
+}