diff --git a/src/com/android/settings/network/telephony/RoamingPreferenceController.java b/src/com/android/settings/network/telephony/RoamingPreferenceController.java index 2e116d8110c..eb773129b3f 100644 --- a/src/com/android/settings/network/telephony/RoamingPreferenceController.java +++ b/src/com/android/settings/network/telephony/RoamingPreferenceController.java @@ -65,6 +65,16 @@ public class RoamingPreferenceController extends TelephonyTogglePreferenceContro mCarrierConfigManager = context.getSystemService(CarrierConfigManager.class); } + @Override + public int getAvailabilityStatus() { + final PersistableBundle carrierConfig = mCarrierConfigManager.getConfigForSubId(mSubId); + if (carrierConfig != null && carrierConfig.getBoolean( + CarrierConfigManager.KEY_FORCE_HOME_NETWORK_BOOL)) { + return CONDITIONALLY_UNAVAILABLE; + } + return AVAILABLE; + } + @Override public void onStart() { if (mListener == null) { diff --git a/tests/unit/src/com/android/settings/network/telephony/RoamingPreferenceControllerTest.java b/tests/unit/src/com/android/settings/network/telephony/RoamingPreferenceControllerTest.java index 7c778cc568e..7ff95fbc649 100644 --- a/tests/unit/src/com/android/settings/network/telephony/RoamingPreferenceControllerTest.java +++ b/tests/unit/src/com/android/settings/network/telephony/RoamingPreferenceControllerTest.java @@ -16,6 +16,9 @@ package com.android.settings.network.telephony; +import static com.android.settings.core.BasePreferenceController.AVAILABLE; +import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE; + import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyBoolean; @@ -92,7 +95,7 @@ public class RoamingPreferenceControllerTest { @Test public void getAvailabilityStatus_validSubId_returnAvailable() { assertThat(mController.getAvailabilityStatus()).isEqualTo( - BasePreferenceController.AVAILABLE); + AVAILABLE); } @Test @@ -168,4 +171,29 @@ public class RoamingPreferenceControllerTest { verify(mPreference, never()).setEnabled(anyBoolean()); } + + @Test + public void getAvailabilityStatus_carrierConfigIsNull_shouldReturnAvailable() { + doReturn(null).when(mCarrierConfigManager).getConfigForSubId(SUB_ID); + + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + } + + @Test + public void getAvailabilityStatus_forceHomeNetworkIsFalse_shouldReturnAvailable() { + final PersistableBundle bundle = new PersistableBundle(); + bundle.putBoolean(CarrierConfigManager.KEY_FORCE_HOME_NETWORK_BOOL, false); + doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID); + + assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE); + } + + @Test + public void getAvailabilityStatus_forceHomeNetworkIsTrue_shouldReturnConditionallyAvailable() { + final PersistableBundle bundle = new PersistableBundle(); + bundle.putBoolean(CarrierConfigManager.KEY_FORCE_HOME_NETWORK_BOOL, false); + doReturn(bundle).when(mCarrierConfigManager).getConfigForSubId(SUB_ID); + + assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE); + } }