Fix SIM Settings crash when IllegalArgumentException

By catch exception.

Fix: 318460644
Test: manual - with SIM Settings
Test: unit test
Change-Id: I99025125b5fe71c6507afc355a881af8948d6a7a
This commit is contained in:
Chaohui Wang
2024-01-04 10:47:48 +08:00
parent 0612c9b103
commit 3bd2e55b23
2 changed files with 27 additions and 5 deletions

View File

@@ -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"
}
}

View File

@@ -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 {