diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-03-15 23:26:55 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-03-15 23:26:55 +0000 |
commit | 355936f5184d536c82a026ed709219a4207bebba (patch) | |
tree | e162822c92303dea0d3896a2da025838125e0cb9 | |
parent | d31342fdc3bed08b8072b3ba3732dad2c19dba41 (diff) | |
parent | 88c00908f6f248edc300e38044cb88e08eea942e (diff) | |
download | Mms-android13-qpr3-s7-release.tar.gz |
Snap for 9752887 from 88c00908f6f248edc300e38044cb88e08eea942e to tm-qpr3-releaseandroid-13.0.0_r83android-13.0.0_r79android-13.0.0_r78android-13.0.0_r77android-13.0.0_r76android-13.0.0_r75android-13.0.0_r71android-13.0.0_r70android-13.0.0_r69android-13.0.0_r68android-13.0.0_r67android-13.0.0_r63android-13.0.0_r62android-13.0.0_r61android-13.0.0_r56android-13.0.0_r54android-13.0.0_r53android-13.0.0_r52android-13.0.0_r51android-13.0.0_r50android13-qpr3-s9-releaseandroid13-qpr3-s8-releaseandroid13-qpr3-s7-releaseandroid13-qpr3-s6-releaseandroid13-qpr3-s5-releaseandroid13-qpr3-s4-releaseandroid13-qpr3-s3-releaseandroid13-qpr3-s2-releaseandroid13-qpr3-s14-releaseandroid13-qpr3-s13-releaseandroid13-qpr3-s12-releaseandroid13-qpr3-s11-releaseandroid13-qpr3-s10-releaseandroid13-qpr3-s1-releaseandroid13-qpr3-release
Change-Id: I5637d9b196e2df0681109890a808c589b7241568
-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); + } +} |