diff options
author | Saifuddin <saifuddink@google.com> | 2023-02-20 08:55:36 +0000 |
---|---|---|
committer | Amruth Ramachandran <amruthr@google.com> | 2023-03-14 23:28:11 +0000 |
commit | 88c00908f6f248edc300e38044cb88e08eea942e (patch) | |
tree | e162822c92303dea0d3896a2da025838125e0cb9 | |
parent | 0634dae74a50007a90280e89f6ed431993da92dc (diff) | |
download | Mms-android13-qpr3-c-s3-release.tar.gz |
Fetching Phone numberandroid-13.0.0_r82android-13.0.0_r81android-13.0.0_r80android-13.0.0_r74android-13.0.0_r73android-13.0.0_r72android-13.0.0_r66android-13.0.0_r65android-13.0.0_r64android-13.0.0_r60android-13.0.0_r59android-13.0.0_r58android13-qpr3-c-s8-releaseandroid13-qpr3-c-s7-releaseandroid13-qpr3-c-s6-releaseandroid13-qpr3-c-s5-releaseandroid13-qpr3-c-s4-releaseandroid13-qpr3-c-s3-releaseandroid13-qpr3-c-s2-releaseandroid13-qpr3-c-s12-releaseandroid13-qpr3-c-s11-releaseandroid13-qpr3-c-s10-releaseandroid13-qpr3-c-s1-release
Retrieves phone no based on availability in the order of carrier, UICC, IMS
Bug: 269376358
Test: MO/MT MMS sanity tests
Change-Id: I254da01501ad7d735eaedc3dd03221d5e3c9b055
(cherry picked from commit 7643732b2a974f4dc2c4e0cdcb07faf39887750f)
Merged-In: I254da01501ad7d735eaedc3dd03221d5e3c9b055
-rw-r--r-- | Android.bp | 6 | ||||
-rw-r--r-- | src/com/android/mms/service/MmsHttpClient.java | 26 | ||||
-rw-r--r-- | tests/unittests/Android.bp | 4 | ||||
-rw-r--r-- | tests/unittests/src/com/android/mms/service/MmsHttpClientTest.java | 148 |
4 files changed, 175 insertions, 9 deletions
@@ -53,8 +53,8 @@ android_app { } filegroup { - name: "mms-metrics-srcs", + name: "mms-service-srcs", srcs: [ - "src/com/android/mms/service/metrics/*.java", + "src/com/android/mms/service/**/*.java", ], -}
\ No newline at end of file +} diff --git a/src/com/android/mms/service/MmsHttpClient.java b/src/com/android/mms/service/MmsHttpClient.java index 5cec66f..b54b1aa 100644 --- a/src/com/android/mms/service/MmsHttpClient.java +++ b/src/com/android/mms/service/MmsHttpClient.java @@ -52,6 +52,8 @@ import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; +import com.android.internal.annotations.VisibleForTesting; + /** * MMS HTTP client for sending and downloading MMS messages */ @@ -452,6 +454,21 @@ public class MmsHttpClient { return sb.toString(); } + private static String getPhoneNumberForMacroLine1(TelephonyManager telephonyManager, + Context context, int subId) { + String phoneNo = telephonyManager.getLine1Number(); + if (TextUtils.isEmpty(phoneNo)) { + SubscriptionManager subscriptionManager = context.getSystemService( + SubscriptionManager.class); + if (subscriptionManager != null) { + phoneNo = subscriptionManager.getPhoneNumber(subId); + } else { + LogUtil.e("subscriptionManager is null"); + } + } + return phoneNo; + } + /* * Macro names */ @@ -471,15 +488,16 @@ public class MmsHttpClient { * @param subId The subscription ID used to get line number, etc. * @return The value of the defined macro */ - private static String getMacroValue(Context context, String macro, Bundle mmsConfig, - int subId) { + @VisibleForTesting + public static String getMacroValue(Context context, String macro, Bundle mmsConfig, + int subId) { final TelephonyManager telephonyManager = ((TelephonyManager) context.getSystemService( Context.TELEPHONY_SERVICE)).createForSubscriptionId(subId); if (MACRO_LINE1.equals(macro)) { - return telephonyManager.getLine1Number(); + return getPhoneNumberForMacroLine1(telephonyManager, context, subId); } else if (MACRO_LINE1NOCOUNTRYCODE.equals(macro)) { return PhoneUtils.getNationalNumber(telephonyManager, - telephonyManager.getLine1Number()); + getPhoneNumberForMacroLine1(telephonyManager, context, subId)); } else if (MACRO_NAI.equals(macro)) { return getNai(telephonyManager, mmsConfig); } diff --git a/tests/unittests/Android.bp b/tests/unittests/Android.bp index 92371c6..595b4be 100644 --- a/tests/unittests/Android.bp +++ b/tests/unittests/Android.bp @@ -19,9 +19,9 @@ android_test { "android.test.base", "android.test.mock", ], - srcs: ["src/**/*.java", ":mms-metrics-srcs"], + srcs: ["src/**/*.java", ":mms-service-srcs"], platform_apis: true, test_suites: ["device-tests"], certificate: "platform", instrumentation_for: "MmsService", -}
\ No newline at end of file +} diff --git a/tests/unittests/src/com/android/mms/service/MmsHttpClientTest.java b/tests/unittests/src/com/android/mms/service/MmsHttpClientTest.java new file mode 100644 index 0000000..dd126e8 --- /dev/null +++ b/tests/unittests/src/com/android/mms/service/MmsHttpClientTest.java @@ -0,0 +1,148 @@ +/* + * Copyright (C) 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.mms.service; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.Network; +import android.os.Bundle; +import android.telephony.ServiceState; +import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; + +import androidx.test.core.app.ApplicationProvider; + +import org.junit.After; +import org.junit.Before; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; +import org.junit.Test; + +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.reset; + +import android.util.Log; + +public class MmsHttpClientTest { + // Mocked classes + private Context mContext; + private TelephonyManager mTelephonyManager; + private SubscriptionManager mSubscriptionManager; + + // The raw phone number from TelephonyManager.getLine1Number + private static final String MACRO_LINE1 = "LINE1"; + // The phone number without country code + private static final String MACRO_LINE1NOCOUNTRYCODE = "LINE1NOCOUNTRYCODE"; + private String line1Number = "1234567890"; + private String subscriberPhoneNumber = "0987654321"; + private int subId = 1; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mContext = spy(ApplicationProvider.getApplicationContext()); + mTelephonyManager = mock(TelephonyManager.class); + mSubscriptionManager = mock(SubscriptionManager.class); + + when(mContext.getSystemService(Context.TELEPHONY_SERVICE)) + .thenReturn(mTelephonyManager); + when(mTelephonyManager.createForSubscriptionId(anyInt())) + .thenReturn(mTelephonyManager); + when(mContext.getSystemService(SubscriptionManager.class)) + .thenReturn(mSubscriptionManager); + } + + @After + public void tearDown() { + mContext = null; + mTelephonyManager = null; + mSubscriptionManager = null; + } + + @Test + public void getPhoneNumberForMacroLine1() { + String macro = MACRO_LINE1; + Bundle mmsConfig = new Bundle(); + String emptyStr = ""; + String phoneNo; + + /* when getLine1Number returns valid number */ + doReturn(line1Number).when(mTelephonyManager).getLine1Number(); + phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); + assertThat(phoneNo).isEqualTo(line1Number); + // getLine1NumberAPI should be called + verify(mTelephonyManager).getLine1Number(); + // getPhoneNumber should never be called + verify(mSubscriptionManager, never()).getPhoneNumber(subId); + + /* when getLine1Number returns empty string */ + doReturn(emptyStr).when(mTelephonyManager).getLine1Number(); + when(mSubscriptionManager.getPhoneNumber(subId)).thenReturn(subscriberPhoneNumber); + phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); + assertThat(phoneNo).isEqualTo(subscriberPhoneNumber); + verify(mSubscriptionManager).getPhoneNumber(subId); + + /* when getLine1Number returns null */ + reset(mSubscriptionManager); + when(mSubscriptionManager.getPhoneNumber(subId)).thenReturn(subscriberPhoneNumber); + doReturn(null).when(mTelephonyManager).getLine1Number(); + phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); + assertThat(phoneNo).isEqualTo(subscriberPhoneNumber); + verify(mSubscriptionManager).getPhoneNumber(subId); + } + + @Test + public void getPhoneNumberForMacroLine1CountryCode() throws Exception { + String macro = MACRO_LINE1NOCOUNTRYCODE; + String emptyStr = ""; + String phoneNo; + Bundle mmsConfig = new Bundle(); + + /* when getLine1Number returns valid number */ + doReturn(line1Number).when(mTelephonyManager).getLine1Number(); + phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); + assertThat(phoneNo).contains(line1Number); + // getLine1NumberAPI should be called + verify(mTelephonyManager).getLine1Number(); + // getPhoneNumber should never be called + verify(mSubscriptionManager, never()).getPhoneNumber(subId); + + /* when getLine1Number returns empty string */ + doReturn(emptyStr).when(mTelephonyManager).getLine1Number(); + when(mSubscriptionManager.getPhoneNumber(subId)).thenReturn(subscriberPhoneNumber); + phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); + assertThat(phoneNo).contains(subscriberPhoneNumber); + verify(mSubscriptionManager).getPhoneNumber(subId); + + /* when getLine1Number returns null */ + reset(mSubscriptionManager); + when(mSubscriptionManager.getPhoneNumber(subId)).thenReturn(subscriberPhoneNumber); + doReturn(null).when(mTelephonyManager).getLine1Number(); + phoneNo = MmsHttpClient.getMacroValue(mContext, macro, mmsConfig, subId); + assertThat(phoneNo).contains(subscriberPhoneNumber); + verify(mSubscriptionManager).getPhoneNumber(subId); + } +} |