Fix a crash in battery settings page

Regression from ag/7161923, in this case we should use onResume/onPause
pair. Also sort the method to fit android lifecycle.

Bug: 131615524
Test: RunSettingsRoboTests
Change-Id: I299032bfeb119dac293039917c6673dd4c0ef4e0
diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
index 78391f2..85a0879 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java
@@ -19,6 +19,7 @@
 import static com.android.settings.fuelgauge.BatteryBroadcastReceiver.BatteryUpdateType;
 
 import android.app.settings.SettingsEnums;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.database.ContentObserver;
 import android.net.Uri;
@@ -107,7 +108,8 @@
     BatteryTipPreferenceController mBatteryTipPreferenceController;
     private int mStatsType = BatteryStats.STATS_SINCE_CHARGED;
 
-    private final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {
+    @VisibleForTesting
+    final ContentObserver mSettingsObserver = new ContentObserver(new Handler()) {
         @Override
         public void onChange(boolean selfChange, Uri uri) {
             restartBatteryInfoLoader();
@@ -202,21 +204,6 @@
             };
 
     @Override
-    public void onStop() {
-        getContentResolver().unregisterContentObserver(mSettingsObserver);
-        super.onStop();
-    }
-
-    @Override
-    public void onResume() {
-        super.onResume();
-        getContentResolver().registerContentObserver(
-                Global.getUriFor(Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
-                false,
-                mSettingsObserver);
-    }
-
-    @Override
     public void onAttach(Context context) {
         super.onAttach(context);
         final SettingsActivity activity = (SettingsActivity) getActivity();
@@ -252,6 +239,21 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+        getContentResolver().registerContentObserver(
+                Global.getUriFor(Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
+                false,
+                mSettingsObserver);
+    }
+
+    @Override
+    public void onPause() {
+        getContentResolver().unregisterContentObserver(mSettingsObserver);
+        super.onPause();
+    }
+
+    @Override
     public int getMetricsCategory() {
         return SettingsEnums.FUELGAUGE_POWER_USAGE_SUMMARY_V2;
     }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
index 2ee6d0c..2dd0d9b 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageSummaryTest.java
@@ -33,16 +33,20 @@
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.os.Bundle;
+import android.provider.Settings;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.widget.TextView;
 
+import androidx.annotation.VisibleForTesting;
 import androidx.loader.app.LoaderManager;
+import androidx.preference.PreferenceScreen;
 
 import com.android.internal.os.BatterySipper;
 import com.android.internal.os.BatteryStatsHelper;
@@ -51,6 +55,7 @@
 import com.android.settings.fuelgauge.batterytip.BatteryTipPreferenceController;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settings.testutils.XmlTestUtils;
+import com.android.settingslib.core.instrumentation.VisibilityLoggerMixin;
 import com.android.settingslib.widget.LayoutPreference;
 
 import org.junit.Before;
@@ -66,6 +71,7 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
+import org.robolectric.util.ReflectionHelpers;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -117,6 +123,14 @@
     private MenuItem mAdvancedPageMenu;
     @Mock
     private BatteryInfo mBatteryInfo;
+    @Mock
+    private ContentResolver mContentResolver;
+    @Mock
+    private BatteryBroadcastReceiver mBatteryBroadcastReceiver;
+    @Mock
+    private VisibilityLoggerMixin mVisibilityLoggerMixin;
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
 
     private List<BatterySipper> mUsageList;
     private Context mRealContext;
@@ -148,7 +162,7 @@
                 .thenReturn(sAdditionalBatteryInfoIntent);
         when(mBatteryHelper.getTotalPower()).thenReturn(TOTAL_POWER);
         when(mBatteryHelper.getStats().computeBatteryRealtime(anyLong(), anyInt()))
-            .thenReturn(TIME_SINCE_LAST_FULL_CHARGE_US);
+                .thenReturn(TIME_SINCE_LAST_FULL_CHARGE_US);
 
         when(mNormalBatterySipper.getUid()).thenReturn(UID);
         mNormalBatterySipper.totalPowerMah = POWER_MAH;
@@ -176,6 +190,11 @@
         mFragment.mScreenUsagePref = mScreenUsagePref;
         mFragment.mLastFullChargePref = mLastFullChargePref;
         mFragment.mBatteryUtils = spy(new BatteryUtils(mRealContext));
+        ReflectionHelpers.setField(mFragment, "mVisibilityLoggerMixin", mVisibilityLoggerMixin);
+        ReflectionHelpers.setField(mFragment, "mBatteryBroadcastReceiver",
+                mBatteryBroadcastReceiver);
+        doReturn(mPreferenceScreen).when(mFragment).getPreferenceScreen();
+        when(mFragment.getContentResolver()).thenReturn(mContentResolver);
     }
 
     @Test
@@ -207,10 +226,10 @@
     public void nonIndexableKeys_MatchPreferenceKeys() {
         final Context context = RuntimeEnvironment.application;
         final List<String> niks =
-            PowerUsageSummary.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(context);
+                PowerUsageSummary.SEARCH_INDEX_DATA_PROVIDER.getNonIndexableKeys(context);
 
         final List<String> keys =
-            XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.power_usage_summary);
+                XmlTestUtils.getKeysFromPreferenceXml(context, R.xml.power_usage_summary);
 
         assertThat(keys).containsAllIn(niks);
     }
@@ -223,25 +242,25 @@
         mFragment.restartBatteryTipLoader();
 
         verify(mLoaderManager)
-            .restartLoader(eq(PowerUsageSummary.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
+                .restartLoader(eq(PowerUsageSummary.BATTERY_TIP_LOADER), eq(Bundle.EMPTY), any());
     }
 
     @Test
     public void showBothEstimates_summariesAreBothModified() {
         when(mFeatureFactory.powerUsageFeatureProvider.isEnhancedBatteryPredictionEnabled(any()))
-            .thenReturn(true);
+                .thenReturn(true);
         doAnswer(new Answer() {
             @Override
             public Object answer(InvocationOnMock invocation) {
                 return mRealContext.getString(
-                    R.string.power_usage_old_debug, invocation.getArguments()[0]);
+                        R.string.power_usage_old_debug, invocation.getArguments()[0]);
             }
         }).when(mFeatureFactory.powerUsageFeatureProvider).getOldEstimateDebugString(any());
         doAnswer(new Answer() {
             @Override
             public Object answer(InvocationOnMock invocation) {
                 return mRealContext.getString(
-                    R.string.power_usage_enhanced_debug, invocation.getArguments()[0]);
+                        R.string.power_usage_enhanced_debug, invocation.getArguments()[0]);
             }
         }).when(mFeatureFactory.powerUsageFeatureProvider).getEnhancedEstimateDebugString(any());
 
@@ -336,6 +355,24 @@
         verify(mFragment).restartBatteryTipLoader();
     }
 
+    @Test
+    public void onResume_registerContentObserver() {
+        mFragment.onResume();
+
+        verify(mContentResolver).registerContentObserver(
+                Settings.Global.getUriFor(Settings.Global.BATTERY_ESTIMATES_LAST_UPDATE_TIME),
+                false,
+                mFragment.mSettingsObserver);
+    }
+
+    @Test
+    public void onPause_unregisterContentObserver() {
+        mFragment.onPause();
+
+        verify(mContentResolver).unregisterContentObserver(
+                mFragment.mSettingsObserver);
+    }
+
     public static class TestFragment extends PowerUsageSummary {
         private Context mContext;
 
@@ -349,6 +386,12 @@
         }
 
         @Override
+        protected ContentResolver getContentResolver() {
+            // Override it so we can access this method in test
+            return super.getContentResolver();
+        }
+
+        @Override
         void showBothEstimates() {
             List<BatteryInfo> fakeBatteryInfo = new ArrayList<>(2);
             BatteryInfo info1 = new BatteryInfo();