Merge "Fix SIM Settings crash when IllegalArgumentException" into main

This commit is contained in:
Chaohui Wang
2024-01-04 04:51:46 +00:00
committed by Android (Google) Code Review
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 {