[Wi-Fi] Fix data usage screen flash 1~2 times problem
Data loaders should be destroyed at onPause or
the APP list will be updated twice.
Bug: 146841747
Test: make RunSettingsRoboTests ROBOTEST_FILTER=DataUsageListTest
Change-Id: Ic1b8ef443dd8e50777f1e3a16977add654748c54
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index 0cfb831..8db32e9 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -90,8 +90,10 @@
private static final String KEY_APP = "app";
private static final String KEY_FIELDS = "fields";
- private static final int LOADER_CHART_DATA = 2;
- private static final int LOADER_SUMMARY = 3;
+ @VisibleForTesting
+ static final int LOADER_CHART_DATA = 2;
+ @VisibleForTesting
+ static final int LOADER_SUMMARY = 3;
@VisibleForTesting
MobileDataEnabledListener mDataStateListener;
@@ -188,6 +190,13 @@
public void onResume() {
super.onResume();
mDataStateListener.start(mSubId);
+
+ // kick off loader for network history
+ // TODO: consider chaining two loaders together instead of reloading
+ // network history when showing app detail.
+ getLoaderManager().restartLoader(LOADER_CHART_DATA,
+ buildArgs(mTemplate), mNetworkCycleDataCallbacks);
+
updateBody();
}
@@ -195,6 +204,9 @@
public void onPause() {
super.onPause();
mDataStateListener.stop();
+
+ getLoaderManager().destroyLoader(LOADER_CHART_DATA);
+ getLoaderManager().destroyLoader(LOADER_SUMMARY);
}
@Override
@@ -246,12 +258,6 @@
final Context context = getActivity();
- // kick off loader for network history
- // TODO: consider chaining two loaders together instead of reloading
- // network history when showing app detail.
- getLoaderManager().restartLoader(LOADER_CHART_DATA,
- buildArgs(mTemplate), mNetworkCycleDataCallbacks);
-
// detail mode can change visible menus, invalidate
getActivity().invalidateOptionsMenu();
diff --git a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
index 9aca92e..e4f5b1f 100644
--- a/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
+++ b/tests/robotests/src/com/android/settings/datausage/DataUsageListTest.java
@@ -38,6 +38,7 @@
import android.widget.Spinner;
import androidx.fragment.app.FragmentActivity;
+import androidx.loader.app.LoaderManager;
import androidx.preference.PreferenceManager;
import com.android.settings.R;
@@ -71,6 +72,8 @@
private MobileDataEnabledListener mMobileDataEnabledListener;
@Mock
private TemplatePreference.NetworkServices mNetworkServices;
+ @Mock
+ private LoaderManager mLoaderManager;
private Activity mActivity;
private DataUsageList mDataUsageList;
@@ -90,6 +93,7 @@
ReflectionHelpers.setField(mDataUsageList, "mDataStateListener",
mMobileDataEnabledListener);
ReflectionHelpers.setField(mDataUsageList, "services", mNetworkServices);
+ doReturn(mLoaderManager).when(mDataUsageList).getLoaderManager();
}
@Test
@@ -216,6 +220,14 @@
assertThat(spinner.getVisibility()).isEqualTo(View.VISIBLE);
}
+ @Test
+ public void onPause_shouldDestroyLoaders() {
+ mDataUsageList.onPause();
+
+ verify(mLoaderManager).destroyLoader(DataUsageList.LOADER_CHART_DATA);
+ verify(mLoaderManager).destroyLoader(DataUsageList.LOADER_SUMMARY);
+ }
+
private View getHeader() {
final View rootView = LayoutInflater.from(mActivity)
.inflate(R.layout.preference_list_fragment, null, false);