Check if ECBMode when activate SIM card

If in ECBMode, start ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS to show a
dialog instead.

This align with the deactivate sim case

Bug: 393298086
Test: atest SubscriptionActivationRepositoryTest
Test: adb shell cmd phone emergency-callback-mode
Flag: EXEMPT bugfix
Change-Id: Id40d087b7d2d3ca99504ec75bac1c5e29c67258d
This commit is contained in:
songferngwang
2025-02-13 12:04:07 +00:00
parent 2d5a231a46
commit 538fb34027
2 changed files with 29 additions and 1 deletions

View File

@@ -52,7 +52,7 @@ class SubscriptionActivationRepository(
Log.i(TAG, "Unable to toggle subscription due to unusable subscription ID.") Log.i(TAG, "Unable to toggle subscription due to unusable subscription ID.")
return return
} }
if (!active && isEmergencyCallbackMode(subId)) { if (isEmergencyCallbackMode(subId)) {
val intent = Intent(ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS).apply { val intent = Intent(ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS).apply {
setPackage(Utils.PHONE_PACKAGE_NAME) setPackage(Utils.PHONE_PACKAGE_NAME)
} }

View File

@@ -17,12 +17,15 @@
package com.android.settings.network.telephony package com.android.settings.network.telephony
import android.content.Context import android.content.Context
import android.content.Intent
import android.os.UserHandle
import android.telephony.SubscriptionManager import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager import android.telephony.TelephonyManager
import android.telephony.TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS import android.telephony.TelephonyManager.ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS
import androidx.test.core.app.ApplicationProvider import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.network.SatelliteRepository import com.android.settings.network.SatelliteRepository
import com.android.settings.network.SimOnboardingActivity
import com.android.settingslib.spa.testutils.firstWithTimeoutOrNull import com.android.settingslib.spa.testutils.firstWithTimeoutOrNull
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOf
@@ -33,6 +36,7 @@ import org.mockito.kotlin.any
import org.mockito.kotlin.argThat import org.mockito.kotlin.argThat
import org.mockito.kotlin.doNothing import org.mockito.kotlin.doNothing
import org.mockito.kotlin.doReturn import org.mockito.kotlin.doReturn
import org.mockito.kotlin.eq
import org.mockito.kotlin.mock import org.mockito.kotlin.mock
import org.mockito.kotlin.never import org.mockito.kotlin.never
import org.mockito.kotlin.spy import org.mockito.kotlin.spy
@@ -107,6 +111,17 @@ class SubscriptionActivationRepositoryTest {
verify(context, never()).startActivity(any()) verify(context, never()).startActivity(any())
} }
@Test
fun setActive_turnOnAndIsEmergencyCallbackMode() = runBlocking {
mockTelephonyManager.stub {
on { emergencyCallbackMode } doReturn true
}
repository.setActive(subId = SUB_ID, active = true)
verify(context).startActivity(argThat { action == ACTION_SHOW_NOTICE_ECM_BLOCK_OTHERS })
}
@Test @Test
fun setActive_turnOffAndIsEmergencyCallbackMode() = runBlocking { fun setActive_turnOffAndIsEmergencyCallbackMode() = runBlocking {
mockTelephonyManager.stub { mockTelephonyManager.stub {
@@ -131,6 +146,19 @@ class SubscriptionActivationRepositoryTest {
}) })
} }
@Test
fun setActive_turnOnAndNotEmergencyCallbackMode() = runBlocking {
mockTelephonyManager.stub {
on { emergencyCallbackMode } doReturn false
}
repository.setActive(subId = SUB_ID, active = true)
verify(context).startActivityAsUser(argThat {
component?.className == SimOnboardingActivity::class.qualifiedName
}, eq(UserHandle.CURRENT))
}
private companion object { private companion object {
const val SUB_ID = 1 const val SUB_ID = 1
} }