From f42ec74abfc4c6e90781d09e3522e522fd55576c Mon Sep 17 00:00:00 2001 From: songferngwang Date: Thu, 23 May 2024 09:12:06 +0000 Subject: [PATCH] Add the Primary IMEI As per GSMA specification TS37, below Primary IMEI requirements are mandatory to support -TS37_2.2_REQ_5 -TS37_2.2_REQ_8 (Attached the document has description about this test cases) Bug: 341006304 Test: atest MobileNetworkImeiPreferenceControllerTest Change-Id: I839440de7d2680d21832dce6d0d56db992796fca --- res/values/strings.xml | 4 ++ .../MobileNetworkImeiPreferenceController.kt | 32 ++++++++++-- ...bileNetworkImeiPreferenceControllerTest.kt | 52 +++++++++++++++++-- 3 files changed, 81 insertions(+), 7 deletions(-) diff --git a/res/values/strings.xml b/res/values/strings.xml index 6a099be78ec..b3597d51068 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -11855,6 +11855,10 @@ Turning on %1$s Mobile network + + IMEI (primary) + + MEID (primary) Phone number diff --git a/src/com/android/settings/network/telephony/MobileNetworkImeiPreferenceController.kt b/src/com/android/settings/network/telephony/MobileNetworkImeiPreferenceController.kt index e1346819f7d..a6fb7ba8f56 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkImeiPreferenceController.kt +++ b/src/com/android/settings/network/telephony/MobileNetworkImeiPreferenceController.kt @@ -17,7 +17,6 @@ package com.android.settings.network.telephony import android.content.Context -import android.os.UserManager import android.telephony.SubscriptionInfo import android.telephony.SubscriptionManager import android.telephony.TelephonyManager @@ -41,6 +40,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext + /** * Preference controller for "IMEI" */ @@ -123,17 +123,21 @@ class MobileNetworkImeiPreferenceController(context: Context, key: String) : ImeiInfoDialogFragment.show(fragment, simSlot, preference.title.toString()) return true } + private fun getImei(): String { val phoneType = getPhoneType() return if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) mTelephonyManager.meid?: String() else mTelephonyManager.imei?: String() } + private fun getTitleForGsmPhone(): String { - return mContext.getString(R.string.status_imei) + return mContext.getString( + if (isPrimaryImei()) R.string.imei_primary else R.string.status_imei) } private fun getTitleForCdmaPhone(): String { - return mContext.getString(R.string.status_meid_number) + return mContext.getString( + if (isPrimaryImei()) R.string.meid_primary else R.string.status_meid_number) } private fun getTitle(): String { @@ -142,6 +146,28 @@ class MobileNetworkImeiPreferenceController(context: Context, key: String) : else getTitleForGsmPhone() } + /** + * As per GSMA specification TS37, below Primary IMEI requirements are mandatory to support + * + * TS37_2.2_REQ_5 + * TS37_2.2_REQ_8 (Attached the document has description about this test cases) + */ + protected fun isPrimaryImei(): Boolean { + val imei = getImei() + var primaryImei = String() + + try { + primaryImei = mTelephonyManager.primaryImei + } catch (exception: Exception) { + Log.e(TAG, "PrimaryImei not available. $exception") + } + return primaryImei == imei && isMultiSim() + } + + private fun isMultiSim(): Boolean { + return mTelephonyManager.activeModemCount > 1 + } + fun getPhoneType(): Int { return mTelephonyManager.currentPhoneType } diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkImeiPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkImeiPreferenceControllerTest.kt index 2f678464935..1da8fd9d7f4 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkImeiPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkImeiPreferenceControllerTest.kt @@ -19,18 +19,16 @@ package com.android.settings.network.telephony import android.content.Context import android.telephony.SubscriptionInfo import android.telephony.TelephonyManager -import android.telephony.euicc.EuiccManager import androidx.fragment.app.Fragment import androidx.preference.Preference import androidx.preference.PreferenceManager import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.dx.mockito.inline.extended.ExtendedMockito -import com.android.internal.telephony.PhoneConstants +import com.android.settings.R import com.android.settings.core.BasePreferenceController import com.android.settings.network.SubscriptionInfoListViewModel import com.android.settings.network.SubscriptionUtil -import com.android.settingslib.CustomDialogPreferenceCompat import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.runBlocking import org.junit.After @@ -62,6 +60,8 @@ class MobileNetworkImeiPreferenceControllerTest { on { currentPhoneType } doReturn TelephonyManager.PHONE_TYPE_GSM on { imei } doReturn mockImei on { meid } doReturn mockImei + on { primaryImei } doReturn mockImei + on { activeModemCount } doReturn 2 } private val context: Context = spy(ApplicationProvider.getApplicationContext()) { @@ -90,7 +90,7 @@ class MobileNetworkImeiPreferenceControllerTest { } @Test - fun refreshData_getPhoneNumber_preferenceSummaryIsExpected() = runBlocking { + fun refreshData_getImei_preferenceSummaryIsExpected() = runBlocking { whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn( listOf( @@ -110,6 +110,50 @@ class MobileNetworkImeiPreferenceControllerTest { assertThat(preference.summary).isEqualTo(mockImei) } + @Test + fun refreshData_getImeiTitle_showImei() = runBlocking { + whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) + whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn( + listOf( + SUB_INFO_1, + SUB_INFO_2 + ) + ) + var mockSubId = 2 + controller.init(mockFragment, mockSubId) + mockImei = "test imei" + mockTelephonyManager.stub { + on { imei } doReturn mockImei + on { primaryImei } doReturn "" + } + + controller.refreshData(SUB_INFO_2) + + assertThat(preference.title).isEqualTo(context.getString(R.string.status_imei)) + } + + @Test + fun refreshData_getPrimaryImeiTitle_showPrimaryImei() = runBlocking { + whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) + whenever(SubscriptionUtil.getActiveSubscriptions(any())).thenReturn( + listOf( + SUB_INFO_1, + SUB_INFO_2 + ) + ) + var mockSubId = 2 + controller.init(mockFragment, mockSubId) + mockImei = "test imei" + mockTelephonyManager.stub { + on { imei } doReturn mockImei + on { primaryImei } doReturn mockImei + } + + controller.refreshData(SUB_INFO_2) + + assertThat(preference.title).isEqualTo(context.getString(R.string.imei_primary)) + } + @Test fun getAvailabilityStatus_notSimHardwareVisible() { whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false)