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

Commit 92ae6305 authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Fix SIM Settings crash when IllegalArgumentException" into main

parents 2c2dd72f 3bd2e55b
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 {