summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAishwarya Mallampati <amallampati@google.com>2022-10-04 21:52:28 +0000
committerAishwarya Mallampati <amallampati@google.com>2022-11-17 00:16:11 +0000
commit1736abd648eaf964fdb2aaef69281d5dd02d90ba (patch)
treea6443508edd186e03eca645ea005f9efb855991b
parenta2fe425cbb1ccc696c659a6f4a94978b6f323557 (diff)
downloadMms-1736abd648eaf964fdb2aaef69281d5dd02d90ba.tar.gz
Replace callers of SmsApplication with user-aware
methods. Bug: 250617029 Test: Sending and receiving SMS/MMS, atest android.telephony.cts.MmsTest, atest com.android.mms.service.metrics.MmsStatsTest Change-Id: Idd8787db984196454b8ab7a0e5379e5c4ec2f73d
-rw-r--r--AndroidManifest.xml4
-rw-r--r--src/com/android/mms/service/SendRequest.java12
-rw-r--r--src/com/android/mms/service/metrics/MmsStats.java8
-rw-r--r--tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java23
4 files changed, 44 insertions, 3 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 87e7947..a19a11a 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -26,6 +26,10 @@
<uses-permission android:name="android.permission.BROADCAST_WAP_PUSH"/>
<uses-permission android:name="android.permission.BIND_CARRIER_SERVICES"/>
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
+ <!-- Needed to check if subscription is active. -->
+ <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+ <!-- Needed to query user associated with a subscription. -->
+ <uses-permission android:name="android.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION"/>
<protected-broadcast android:name="android.settings.ENABLE_MMS_DATA_REQUEST"/>
diff --git a/src/com/android/mms/service/SendRequest.java b/src/com/android/mms/service/SendRequest.java
index 60acc7e..103575c 100644
--- a/src/com/android/mms/service/SendRequest.java
+++ b/src/com/android/mms/service/SendRequest.java
@@ -25,11 +25,13 @@ import android.net.Uri;
import android.os.AsyncTask;
import android.os.Binder;
import android.os.Bundle;
+import android.os.UserHandle;
import android.provider.BlockedNumberContract;
import android.provider.Telephony;
import android.service.carrier.CarrierMessagingService;
import android.service.carrier.CarrierMessagingServiceWrapper;
import android.telephony.SmsManager;
+import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
@@ -174,10 +176,16 @@ public class SendRequest extends MmsRequest {
@Override
protected Uri persistIfRequired(Context context, int result, byte[] response) {
final String requestId = getRequestId();
- if (!SmsApplication.shouldWriteMessageForPackage(mCreator, context)) {
- // Not required to persist
+
+ UserHandle userHandle = null;
+ SubscriptionManager subManager = mContext.getSystemService(SubscriptionManager.class);
+ if ((subManager != null) && (subManager.isActiveSubscriptionId(mSubId))) {
+ userHandle = subManager.getSubscriptionUserHandle(mSubId);
+ }
+ if (!SmsApplication.shouldWriteMessageForPackageAsUser(mCreator, context, userHandle)) {
return null;
}
+
LogUtil.d(requestId, "persistIfRequired. "
+ MmsService.formatCrossStackMessageId(mMessageId));
if (mPduData == null) {
diff --git a/src/com/android/mms/service/metrics/MmsStats.java b/src/com/android/mms/service/metrics/MmsStats.java
index 26e8967..9495edb 100644
--- a/src/com/android/mms/service/metrics/MmsStats.java
+++ b/src/com/android/mms/service/metrics/MmsStats.java
@@ -25,6 +25,7 @@ import android.app.Activity;
import android.content.Context;
import android.os.Binder;
import android.os.SystemClock;
+import android.os.UserHandle;
import android.telephony.ServiceState;
import android.telephony.SmsManager;
import android.telephony.SubscriptionInfo;
@@ -199,7 +200,12 @@ public class MmsStats {
/** Returns if the MMS was originated from the default MMS application. */
private boolean isDefaultMmsApp() {
- return SmsApplication.isDefaultMmsApplication(mContext, mCallingPkg);
+ UserHandle userHandle = null;
+ SubscriptionManager subManager = mContext.getSystemService(SubscriptionManager.class);
+ if ((subManager != null) && (subManager.isActiveSubscriptionId(mSubId))) {
+ userHandle = subManager.getSubscriptionUserHandle(mSubId);
+ }
+ return SmsApplication.isDefaultMmsApplicationAsUser(mContext, mCallingPkg, userHandle);
}
/**
diff --git a/tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java b/tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java
index f176b6b..a91d0c8 100644
--- a/tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java
+++ b/tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java
@@ -22,7 +22,9 @@ import static com.android.mms.MmsStatsLog.OUTGOING_MMS__RESULT__MMS_RESULT_SUCCE
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -38,6 +40,7 @@ import com.android.mms.OutgoingMms;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
+
import org.mockito.ArgumentCaptor;
public class MmsStatsTest {
@@ -45,12 +48,17 @@ public class MmsStatsTest {
private Context mContext;
private PersistMmsAtomsStorage mPersistMmsAtomsStorage;
private TelephonyManager mTelephonyManager;
+ private SubscriptionManager mSubscriptionManager;
@Before
public void setUp() {
mContext = mock(Context.class);
mPersistMmsAtomsStorage = mock(PersistMmsAtomsStorage.class);
mTelephonyManager = mock(TelephonyManager.class);
+ mSubscriptionManager = mock(SubscriptionManager.class);
+
+ doReturn(mSubscriptionManager).when(mContext).getSystemService(
+ Context.TELEPHONY_SUBSCRIPTION_SERVICE);
}
@After
@@ -126,4 +134,19 @@ public class MmsStatsTest {
IncomingMms incomingMms = incomingMmsCaptor.getValue();
assertThat(incomingMms.getRoaming()).isEqualTo(ServiceState.ROAMING_TYPE_NOT_ROAMING);
}
+
+
+ @Test
+ public void isDefaultMmsApp_subId_inactive() {
+ int inactiveSubId = 123;
+ doReturn(false).when(mSubscriptionManager)
+ .isActiveSubscriptionId(eq(inactiveSubId));
+
+ MmsStats mmsStats = new MmsStats(mContext, mPersistMmsAtomsStorage, inactiveSubId,
+ mTelephonyManager, null, false);
+ mmsStats.addAtomToStorage(Activity.RESULT_OK);
+
+ // getSubscriptionUserHandle should not be called if subID is inactive.
+ verify(mSubscriptionManager, never()).getSubscriptionUserHandle(eq(inactiveSubId));
+ }
} \ No newline at end of file