Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3bd2e55b authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Fix SIM Settings crash when IllegalArgumentException

By catch exception.

Fix: 318460644
Test: manual - with SIM Settings
Test: unit test
Change-Id: I99025125b5fe71c6507afc355a881af8948d6a7a
parent 0612c9b1
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -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,7 +42,8 @@ class ImsMmTelRepositoryImpl(
    private val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java)!!

    @WiFiCallingMode
    override fun getWiFiCallingMode(): Int = when {
    override fun getWiFiCallingMode(): Int = try {
        when {
            !imsMmTelManager.isVoWiFiSettingEnabled -> ImsMmTelManager.WIFI_MODE_UNKNOWN

            telephonyManager.isNetworkRoaming && !useWfcHomeModeForRoaming() ->
@@ -49,9 +51,17 @@ class ImsMmTelRepositoryImpl(

            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"
    }
}
+12 −0
Original line number Diff line number Diff line
@@ -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 {