diff --git a/src/com/android/settings/network/telephony/ims/ImsMmTelRepository.kt b/src/com/android/settings/network/telephony/ims/ImsMmTelRepository.kt index 44f09d13e4d..3408eb741d5 100644 --- a/src/com/android/settings/network/telephony/ims/ImsMmTelRepository.kt +++ b/src/com/android/settings/network/telephony/ims/ImsMmTelRepository.kt @@ -23,6 +23,7 @@ import android.telephony.TelephonyManager import android.telephony.ims.ImsManager import android.telephony.ims.ImsMmTelManager import android.telephony.ims.ImsMmTelManager.WiFiCallingMode +import android.util.Log interface ImsMmTelRepository { @WiFiCallingMode @@ -41,17 +42,26 @@ class ImsMmTelRepositoryImpl( private val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java)!! @WiFiCallingMode - override fun getWiFiCallingMode(): Int = when { - !imsMmTelManager.isVoWiFiSettingEnabled -> ImsMmTelManager.WIFI_MODE_UNKNOWN + override fun getWiFiCallingMode(): Int = try { + when { + !imsMmTelManager.isVoWiFiSettingEnabled -> ImsMmTelManager.WIFI_MODE_UNKNOWN - telephonyManager.isNetworkRoaming && !useWfcHomeModeForRoaming() -> - imsMmTelManager.getVoWiFiRoamingModeSetting() + telephonyManager.isNetworkRoaming && !useWfcHomeModeForRoaming() -> + imsMmTelManager.getVoWiFiRoamingModeSetting() - else -> imsMmTelManager.getVoWiFiModeSetting() + else -> imsMmTelManager.getVoWiFiModeSetting() + } + } catch (e: IllegalArgumentException) { + Log.w(TAG, "getWiFiCallingMode failed subId=$subId", e) + ImsMmTelManager.WIFI_MODE_UNKNOWN } private fun useWfcHomeModeForRoaming(): Boolean = carrierConfigManager .getConfigForSubId(subId, KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL) .getBoolean(KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL) + + private companion object { + private const val TAG = "ImsMmTelRepository" + } } diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/ims/ImsMmTelRepositoryTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/ims/ImsMmTelRepositoryTest.kt index eba44eddcfa..d5142fae163 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/ims/ImsMmTelRepositoryTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/ims/ImsMmTelRepositoryTest.kt @@ -28,6 +28,7 @@ import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.doReturn +import org.mockito.kotlin.doThrow import org.mockito.kotlin.mock import org.mockito.kotlin.spy import org.mockito.kotlin.stub @@ -99,6 +100,17 @@ class ImsMmTelRepositoryTest { assertThat(wiFiCallingMode).isEqualTo(mockImsMmTelManager.getVoWiFiModeSetting()) } + @Test + fun getWiFiCallingMode_illegalArgumentException_returnUnknown() { + mockImsMmTelManager.stub { + on { isVoWiFiSettingEnabled } doThrow IllegalArgumentException() + } + + val wiFiCallingMode = repository.getWiFiCallingMode() + + assertThat(wiFiCallingMode).isEqualTo(ImsMmTelManager.WIFI_MODE_UNKNOWN) + } + private fun mockUseWfcHomeModeForRoaming(config: Boolean) { mockCarrierConfigManager.stub { on {