diff --git a/src/com/android/settings/network/AllowedNetworkTypesListener.java b/src/com/android/settings/network/AllowedNetworkTypesListener.java index 972e4d6aacf..3d936646059 100644 --- a/src/com/android/settings/network/AllowedNetworkTypesListener.java +++ b/src/com/android/settings/network/AllowedNetworkTypesListener.java @@ -34,7 +34,6 @@ public class AllowedNetworkTypesListener extends TelephonyCallback implements @VisibleForTesting OnAllowedNetworkTypesListener mListener; - private long mAllowedNetworkType = -1; private Executor mExecutor; public AllowedNetworkTypesListener(Executor executor) { @@ -70,14 +69,14 @@ public class AllowedNetworkTypesListener extends TelephonyCallback implements @Override public void onAllowedNetworkTypesChanged(int reason, long newAllowedNetworkType) { - if (reason != TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER) { + if (reason != TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER + && reason != TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_CARRIER) { return; } - if (mListener != null && mAllowedNetworkType != newAllowedNetworkType) { + if (mListener != null) { mListener.onAllowedNetworkTypesChanged(); - Log.d(LOG_TAG, "onAllowedNetworkChanged: " + mAllowedNetworkType); + Log.d(LOG_TAG, "onAllowedNetworkChanged: " + newAllowedNetworkType); } - mAllowedNetworkType = newAllowedNetworkType; } /** 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/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java index d39f6a4200c..25e0ae0765b 100644 --- a/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java +++ b/src/com/android/settings/network/telephony/EnabledNetworkModePreferenceController.java @@ -152,7 +152,10 @@ public class EnabledNetworkModePreferenceController extends mAllowedNetworkTypesListener = new AllowedNetworkTypesListener( mContext.getMainExecutor()); mAllowedNetworkTypesListener.setAllowedNetworkTypesListener( - () -> updatePreference()); + () -> { + mBuilder.updateConfig(); + updatePreference(); + }); } lifecycle.addObserver(this); 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 + } + } } diff --git a/tests/unit/src/com/android/settings/network/AllowedNetworkTypesListenerTest.java b/tests/unit/src/com/android/settings/network/AllowedNetworkTypesListenerTest.java index e89a2575d30..c18477ab078 100644 --- a/tests/unit/src/com/android/settings/network/AllowedNetworkTypesListenerTest.java +++ b/tests/unit/src/com/android/settings/network/AllowedNetworkTypesListenerTest.java @@ -68,7 +68,7 @@ public class AllowedNetworkTypesListenerTest { } @Test - public void onChange_shouldCallListener() { + public void onChange_userReasonChanged_shouldCallListener() { mAllowedNetworkTypesListener.mListener = mListener; long networkType = (long) RadioAccessFamily.getRafFromNetworkType( TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO); @@ -79,6 +79,18 @@ public class AllowedNetworkTypesListenerTest { verify(mListener).onAllowedNetworkTypesChanged(); } + @Test + public void onChange_carrierReasonChanged_shouldCallListener() { + mAllowedNetworkTypesListener.mListener = mListener; + long networkType = (long) RadioAccessFamily.getRafFromNetworkType( + TelephonyManager.NETWORK_MODE_LTE_CDMA_EVDO); + + mAllowedNetworkTypesListener.onAllowedNetworkTypesChanged( + TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_CARRIER, networkType); + + verify(mListener).onAllowedNetworkTypesChanged(); + } + @Test public void register_shouldRegisterContentObserver() { mAllowedNetworkTypesListener.register(mContext, SUB_ID);