summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-03-15 23:26:55 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-03-15 23:26:55 +0000
commit355936f5184d536c82a026ed709219a4207bebba (patch)
treee162822c92303dea0d3896a2da025838125e0cb9
parentd31342fdc3bed08b8072b3ba3732dad2c19dba41 (diff)
parent88c00908f6f248edc300e38044cb88e08eea942e (diff)
downloadMms-android13-qpr3-s7-release.tar.gz
Change-Id: I5637d9b196e2df0681109890a808c589b7241568
-rw-r--r--Android.bp6
-rw-r--r--src/com/android/mms/service/MmsHttpClient.java26
-rw-r--r--tests/unittests/Android.bp4
-rw-r--r--tests/unittests/src/com/android/mms/service/MmsHttpClientTest.java148
4 files changed, 175 insertions, 9 deletions
diff --git a/Android.bp b/Android.bp
index 2917cfc..b586dc6 100644
--- a/Android.bp
+++ b/Android.bp
@@ -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);
+ }
+}