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:
@@ -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"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user