diff --git a/src/com/android/settings/network/InternetPreferenceController.java b/src/com/android/settings/network/InternetPreferenceController.java index 790ca00756d..4ae4d279f43 100644 --- a/src/com/android/settings/network/InternetPreferenceController.java +++ b/src/com/android/settings/network/InternetPreferenceController.java @@ -31,6 +31,7 @@ import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import androidx.annotation.IdRes; +import androidx.annotation.VisibleForTesting; import androidx.lifecycle.Lifecycle; import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; @@ -42,6 +43,7 @@ import com.android.settings.widget.SummaryUpdater; import com.android.settings.wifi.WifiSummaryUpdater; import com.android.settingslib.Utils; import com.android.settingslib.core.AbstractPreferenceController; +import com.android.settingslib.utils.ThreadUtils; import java.util.HashMap; import java.util.Map; @@ -147,8 +149,13 @@ public class InternetPreferenceController extends AbstractPreferenceController i * @param internetType the internet type */ public void onInternetTypeChanged(@InternetUpdater.InternetType int internetType) { + final boolean needUpdate = (internetType != mInternetType); mInternetType = internetType; - updateState(mPreference); + if (needUpdate) { + ThreadUtils.postOnMainThread(() -> { + updateState(mPreference); + }); + } } @Override @@ -158,13 +165,17 @@ public class InternetPreferenceController extends AbstractPreferenceController i } } - private void updateCellularSummary() { + @VisibleForTesting + void updateCellularSummary() { final SubscriptionManager subscriptionManager = mContext.getSystemService(SubscriptionManager.class); if (subscriptionManager == null) { return; } SubscriptionInfo subInfo = subscriptionManager.getDefaultDataSubscriptionInfo(); + if (subInfo == null) { + return; + } mPreference.setSummary(subInfo.getDisplayName()); } } diff --git a/tests/unit/src/com/android/settings/network/InternetPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/InternetPreferenceControllerTest.java index a612177a599..eb97b0595c3 100644 --- a/tests/unit/src/com/android/settings/network/InternetPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/InternetPreferenceControllerTest.java @@ -36,6 +36,7 @@ import android.net.NetworkScoreManager; import android.net.wifi.WifiManager; import android.os.Handler; import android.os.Looper; +import android.telephony.SubscriptionManager; import androidx.lifecycle.Lifecycle; import androidx.preference.Preference; @@ -123,4 +124,13 @@ public class InternetPreferenceControllerTest { assertThat(mPreference.getSummary()).isEqualTo(TEST_SUMMARY); } + + @Test + public void updateCellularSummary_getNullSubscriptionInfo_shouldNotCrash() { + final SubscriptionManager subscriptionManager = mock(SubscriptionManager.class); + when(mContext.getSystemService(SubscriptionManager.class)).thenReturn(subscriptionManager); + when(subscriptionManager.getDefaultDataSubscriptionInfo()).thenReturn(null); + + mController.updateCellularSummary(); + } }