Loading android/app/src/com/android/bluetooth/mapclient/MceStateMachine.java +19 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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: Loading android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientStateMachineTest.java +38 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,9 @@ public class MapClientStateMachineTest { @Mock private SubscriptionManager mMockSubscriptionManager; @Mock private RequestGetMessage mMockRequestGetMessage; @Before public void setUp() throws Exception { mTargetContext = InstrumentationRegistry.getTargetContext(); Loading Loading @@ -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, Loading Loading
android/app/src/com/android/bluetooth/mapclient/MceStateMachine.java +19 −3 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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: Loading
android/app/tests/unit/src/com/android/bluetooth/mapclient/MapClientStateMachineTest.java +38 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,9 @@ public class MapClientStateMachineTest { @Mock private SubscriptionManager mMockSubscriptionManager; @Mock private RequestGetMessage mMockRequestGetMessage; @Before public void setUp() throws Exception { mTargetContext = InstrumentationRegistry.getTargetContext(); Loading Loading @@ -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, Loading