Merge "Fix SIM Settings crash when IllegalArgumentException" into main
This commit is contained in:
@@ -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"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user