diff --git a/src/com/android/settings/network/NetworkProviderSettings.java b/src/com/android/settings/network/NetworkProviderSettings.java index 38658e7b5fc..35a34d471a8 100644 --- a/src/com/android/settings/network/NetworkProviderSettings.java +++ b/src/com/android/settings/network/NetworkProviderSettings.java @@ -167,7 +167,8 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment } private boolean mIsViewLoading; - private final Runnable mRemoveLoadingRunnable = () -> { + @VisibleForTesting + final Runnable mRemoveLoadingRunnable = () -> { if (mIsViewLoading) { setLoading(false, false); mIsViewLoading = false; @@ -175,11 +176,13 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment }; private boolean mIsWifiEntryListStale = true; - private final Runnable mUpdateWifiEntryPreferencesRunnable = () -> { + @VisibleForTesting + final Runnable mUpdateWifiEntryPreferencesRunnable = () -> { updateWifiEntryPreferences(); getView().postDelayed(mRemoveLoadingRunnable, 10); }; - private final Runnable mHideProgressBarRunnable = () -> { + @VisibleForTesting + final Runnable mHideProgressBarRunnable = () -> { setProgressBarVisible(false); }; @@ -445,6 +448,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment @Override public void onStop() { mIsWifiEntryListStale = true; + getView().removeCallbacks(mRemoveLoadingRunnable); getView().removeCallbacks(mUpdateWifiEntryPreferencesRunnable); getView().removeCallbacks(mHideProgressBarRunnable); mAirplaneModeEnabler.stop(); diff --git a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java index 47cd87cc314..19b044b7abf 100644 --- a/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +++ b/tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java @@ -53,6 +53,7 @@ import android.view.View; import androidx.fragment.app.FragmentActivity; import androidx.preference.Preference; import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceManager; import androidx.preference.PreferenceScreen; import androidx.recyclerview.widget.RecyclerView; @@ -79,6 +80,8 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.annotation.Implementation; +import org.robolectric.annotation.Implements; import org.robolectric.shadows.ShadowToast; @RunWith(RobolectricTestRunner.class) @@ -527,4 +530,28 @@ public class NetworkProviderSettingsTest { verify(mNetworkProviderSettings.mWifiEntryPreferenceCategory, never()).setVisible(true); } + + @Test + @Config(shadows = ShadowPreferenceFragmentCompat.class) + public void onStop_shouldRemoveCallbacks() { + View fragmentView = mock(View.class); + when(mNetworkProviderSettings.getView()).thenReturn(fragmentView); + + mNetworkProviderSettings.onStop(); + + verify(fragmentView).removeCallbacks(mNetworkProviderSettings.mRemoveLoadingRunnable); + verify(fragmentView).removeCallbacks( + mNetworkProviderSettings.mUpdateWifiEntryPreferencesRunnable); + verify(fragmentView).removeCallbacks(mNetworkProviderSettings.mHideProgressBarRunnable); + verify(mAirplaneModeEnabler).stop(); + } + + @Implements(PreferenceFragmentCompat.class) + public static class ShadowPreferenceFragmentCompat { + + @Implementation + public void onStop() { + // do nothing + } + } }