[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
This commit is contained in:
Arc Wang
2020-02-27 16:18:04 +08:00
parent cdc7fffd2c
commit 9b69fd17bf
2 changed files with 26 additions and 8 deletions

View File

@@ -90,8 +90,10 @@ public class DataUsageList extends DataUsageBaseFragment
private static final String KEY_APP = "app"; private static final String KEY_APP = "app";
private static final String KEY_FIELDS = "fields"; private static final String KEY_FIELDS = "fields";
private static final int LOADER_CHART_DATA = 2; @VisibleForTesting
private static final int LOADER_SUMMARY = 3; static final int LOADER_CHART_DATA = 2;
@VisibleForTesting
static final int LOADER_SUMMARY = 3;
@VisibleForTesting @VisibleForTesting
MobileDataEnabledListener mDataStateListener; MobileDataEnabledListener mDataStateListener;
@@ -188,6 +190,13 @@ public class DataUsageList extends DataUsageBaseFragment
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
mDataStateListener.start(mSubId); 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(); updateBody();
} }
@@ -195,6 +204,9 @@ public class DataUsageList extends DataUsageBaseFragment
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
mDataStateListener.stop(); mDataStateListener.stop();
getLoaderManager().destroyLoader(LOADER_CHART_DATA);
getLoaderManager().destroyLoader(LOADER_SUMMARY);
} }
@Override @Override
@@ -246,12 +258,6 @@ public class DataUsageList extends DataUsageBaseFragment
final Context context = getActivity(); 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 // detail mode can change visible menus, invalidate
getActivity().invalidateOptionsMenu(); getActivity().invalidateOptionsMenu();

View File

@@ -38,6 +38,7 @@ import android.widget.FrameLayout;
import android.widget.Spinner; import android.widget.Spinner;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.loader.app.LoaderManager;
import androidx.preference.PreferenceManager; import androidx.preference.PreferenceManager;
import com.android.settings.R; import com.android.settings.R;
@@ -71,6 +72,8 @@ public class DataUsageListTest {
private MobileDataEnabledListener mMobileDataEnabledListener; private MobileDataEnabledListener mMobileDataEnabledListener;
@Mock @Mock
private TemplatePreference.NetworkServices mNetworkServices; private TemplatePreference.NetworkServices mNetworkServices;
@Mock
private LoaderManager mLoaderManager;
private Activity mActivity; private Activity mActivity;
private DataUsageList mDataUsageList; private DataUsageList mDataUsageList;
@@ -90,6 +93,7 @@ public class DataUsageListTest {
ReflectionHelpers.setField(mDataUsageList, "mDataStateListener", ReflectionHelpers.setField(mDataUsageList, "mDataStateListener",
mMobileDataEnabledListener); mMobileDataEnabledListener);
ReflectionHelpers.setField(mDataUsageList, "services", mNetworkServices); ReflectionHelpers.setField(mDataUsageList, "services", mNetworkServices);
doReturn(mLoaderManager).when(mDataUsageList).getLoaderManager();
} }
@Test @Test
@@ -216,6 +220,14 @@ public class DataUsageListTest {
assertThat(spinner.getVisibility()).isEqualTo(View.VISIBLE); 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() { private View getHeader() {
final View rootView = LayoutInflater.from(mActivity) final View rootView = LayoutInflater.from(mActivity)
.inflate(R.layout.preference_list_fragment, null, false); .inflate(R.layout.preference_list_fragment, null, false);