Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 65aa2db7 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Duplicate MAP Message intent for non-default sms receiver packages." into tm-mainline-prod

parents cf44af01 81ad0d51
Loading
Loading
Loading
Loading
+19 −3
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import android.bluetooth.SdpMasRecord;
import android.content.Intent;
import android.net.Uri;
import android.os.Message;
import android.os.SystemProperties;
import android.provider.Telephony;
import android.telecom.PhoneAccount;
import android.telephony.SmsManager;
@@ -891,12 +892,27 @@ class MceStateMachine extends StateMachine {
                                    getRecipientsUri(recipients));
                        }
                    }
                    // Only send to the current default SMS app if one exists
                    String defaultMessagingPackage = Telephony.Sms.getDefaultSmsPackage(mService);
                    if (defaultMessagingPackage != null) {
                    if (defaultMessagingPackage == null) {
                        // Broadcast to all RECEIVE_SMS recipients, including the SMS receiver
                        // package defined in system properties if one exists
                        mService.sendBroadcast(intent, RECEIVE_SMS);
                    } else {
                        String smsReceiverPackageName =
                                SystemProperties.get(
                                        "bluetooth.profile.map_client.sms_receiver_package",
                                        null
                                );
                        if (smsReceiverPackageName != null && !smsReceiverPackageName.isEmpty()) {
                            // Clone intent and broadcast to SMS receiver package if one exists
                            Intent messageNotificationIntent = (Intent) intent.clone();
                            messageNotificationIntent.setPackage(smsReceiverPackageName);
                            mService.sendBroadcast(messageNotificationIntent, RECEIVE_SMS);
                        }
                        // Broadcast to default messaging package
                        intent.setPackage(defaultMessagingPackage);
                    }
                        mService.sendBroadcast(intent, RECEIVE_SMS);
                    }
                    break;
                case EMAIL:
                default:
+38 −0
Original line number Diff line number Diff line
@@ -108,6 +108,9 @@ public class MapClientStateMachineTest {
    @Mock
    private SubscriptionManager mMockSubscriptionManager;

    @Mock
    private RequestGetMessage mMockRequestGetMessage;

    @Before
    public void setUp() throws Exception {
        mTargetContext = InstrumentationRegistry.getTargetContext();
@@ -460,6 +463,41 @@ public class MapClientStateMachineTest {
                dateTime);
    }

    @Test
    public void testReceivedNewMmsNoSMSDefaultPackage_broadcastToSMSReplyPackage() {
        setupSdpRecordReceipt();
        Message msg = Message.obtain(mHandler, MceStateMachine.MSG_MAS_CONNECTED);
        mMceStateMachine.sendMessage(msg);

        //verifying that state machine is in the Connected state
        verify(mMockMapClientService,
                timeout(ASYNC_CALL_TIMEOUT_MILLIS).times(2)).sendBroadcastMultiplePermissions(
                mIntentArgument.capture(), any(String[].class),
                any(BroadcastOptions.class));
        assertThat(mMceStateMachine.getState()).isEqualTo(BluetoothProfile.STATE_CONNECTED);

        String dateTime = new ObexTime(Instant.now()).toString();
        EventReport event = createNewEventReport("NewMessage", dateTime, mTestMessageSmsHandle,
                "telecom/msg/inbox", null, "SMS_GSM");

        mMceStateMachine.receiveEvent(event);

        TestUtils.waitForLooperToBeIdle(mMceStateMachine.getHandler().getLooper());
        verify(mMockMasClient, times(1)).makeRequest
                (any(RequestGetMessage.class));

        msg = Message.obtain(mHandler, MceStateMachine.MSG_MAS_REQUEST_COMPLETED,
                mMockRequestGetMessage);
        mMceStateMachine.sendMessage(msg);

        TestUtils.waitForLooperToBeIdle(mMceStateMachine.getHandler().getLooper());
        verify(mMockMapClientService,
                timeout(ASYNC_CALL_TIMEOUT_MILLIS).times(1)).sendBroadcast(
                mIntentArgument.capture(),
                eq(android.Manifest.permission.RECEIVE_SMS));
        Assert.assertNull(mIntentArgument.getValue().getPackage());
    }

    private void setupSdpRecordReceipt() {
        // Perform first part of MAP connection logic.
        verify(mMockMapClientService,