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.ImsManager
import android.telephony.ims.ImsMmTelManager import android.telephony.ims.ImsMmTelManager
import android.telephony.ims.ImsMmTelManager.WiFiCallingMode import android.telephony.ims.ImsMmTelManager.WiFiCallingMode
import android.util.Log
interface ImsMmTelRepository { interface ImsMmTelRepository {
@WiFiCallingMode @WiFiCallingMode
@@ -41,17 +42,26 @@ class ImsMmTelRepositoryImpl(
private val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java)!! private val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java)!!
@WiFiCallingMode @WiFiCallingMode
override fun getWiFiCallingMode(): Int = when { override fun getWiFiCallingMode(): Int = try {
!imsMmTelManager.isVoWiFiSettingEnabled -> ImsMmTelManager.WIFI_MODE_UNKNOWN when {
!imsMmTelManager.isVoWiFiSettingEnabled -> ImsMmTelManager.WIFI_MODE_UNKNOWN
telephonyManager.isNetworkRoaming && !useWfcHomeModeForRoaming() -> telephonyManager.isNetworkRoaming && !useWfcHomeModeForRoaming() ->
imsMmTelManager.getVoWiFiRoamingModeSetting() 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 = private fun useWfcHomeModeForRoaming(): Boolean =
carrierConfigManager carrierConfigManager
.getConfigForSubId(subId, KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL) .getConfigForSubId(subId, KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL)
.getBoolean(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.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.kotlin.doReturn import org.mockito.kotlin.doReturn
import org.mockito.kotlin.doThrow
import org.mockito.kotlin.mock import org.mockito.kotlin.mock
import org.mockito.kotlin.spy import org.mockito.kotlin.spy
import org.mockito.kotlin.stub import org.mockito.kotlin.stub
@@ -99,6 +100,17 @@ class ImsMmTelRepositoryTest {
assertThat(wiFiCallingMode).isEqualTo(mockImsMmTelManager.getVoWiFiModeSetting()) 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) { private fun mockUseWfcHomeModeForRoaming(config: Boolean) {
mockCarrierConfigManager.stub { mockCarrierConfigManager.stub {
on { on {