Loading src/java/com/android/internal/telephony/SMSDispatcher.java +18 −1 Original line number Diff line number Diff line Loading @@ -2626,7 +2626,7 @@ public abstract class SMSDispatcher extends Handler { } @VisibleForTesting public SmsTracker(String destAddr, long messageId) { public SmsTracker(String destAddr, long messageId, String messageText) { mData = null; mSentIntent = null; mDeliveryIntent = null; Loading @@ -2643,6 +2643,7 @@ public abstract class SMSDispatcher extends Handler { mSkipShortCodeDestAddrCheck = false; mUniqueMessageId = 0; mResultCodeFromCarrierMessagingService = CarrierMessagingService.SEND_STATUS_OK; mFullMessageText = messageText; } public HashMap<String, Object> getData() { Loading Loading @@ -2682,6 +2683,22 @@ public abstract class SMSDispatcher extends Handler { return mIsFromDefaultSmsApplication; } /** * Check if the message is a MT SMS polling message. * * @param context The Context * @return true if the message is a MT SMS polling message, false otherwise. */ public boolean isMtSmsPollingMessage(Context context) { if (mFullMessageText == null) { return false; } String mtSmsPollingText = context.getResources().getString(R.string.config_mt_sms_polling_text); return mFullMessageText.equals(mtSmsPollingText); } /** * Update the status of this message if we persisted it */ Loading src/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +7 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.os.Build; import android.os.Message; import android.telephony.ServiceState; import com.android.internal.R; import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import com.android.internal.telephony.InboundSmsHandler; import com.android.internal.telephony.Phone; Loading Loading @@ -165,8 +166,13 @@ public final class GsmSMSDispatcher extends SMSDispatcher { + " SS=" + ss + " " + SmsController.formatCrossStackMessageId(tracker.mMessageId)); boolean allowCheckMessageInNotConnected = mContext.getResources() .getBoolean(R.bool.config_satellite_allow_check_message_in_not_connected); boolean mtPollingMessageThatsAllowedInOOS = tracker.isMtSmsPollingMessage(mContext) && allowCheckMessageInNotConnected; // if sms over IMS is not supported on data and voice is not available... if (!isIms() && ss != ServiceState.STATE_IN_SERVICE) { if (!isIms() && ss != ServiceState.STATE_IN_SERVICE && !mtPollingMessageThatsAllowedInOOS) { //In 5G case only Data Rat is reported. if(mPhone.getServiceState().getRilDataRadioTechnology() != ServiceState.RIL_RADIO_TECHNOLOGY_NR) { Loading src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +4 −1 Original line number Diff line number Diff line Loading @@ -1256,6 +1256,7 @@ public class DatagramDispatcher extends Handler { getPendingMessagesCount(), SATELLITE_RESULT_SUCCESS); if (datagramType == DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS) { startMtSmsPollingThrottle(); mShouldPollMtSms = false; } } else { // Update send status Loading Loading @@ -1297,7 +1298,9 @@ public class DatagramDispatcher extends Handler { } plogd("sendMtSmsPollingMessage"); if (!allowCheckMessageInNotConnected()) { mShouldPollMtSms = false; } for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) { PendingRequest pendingRequest = entry.getValue(); Loading tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ public class SmsDispatchersControllerTest extends TelephonyTest { } private SMSDispatcher.SmsTracker getSmsTracker(String destAddr, long messageId) { return new SMSDispatcher.SmsTracker(destAddr, messageId); return new SMSDispatcher.SmsTracker(destAddr, messageId, "testMessage"); } } Loading tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java +53 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.internal.telephony.SmsUsageMonitor.PREMIUM_SMS_PERMISS import static com.android.internal.telephony.TelephonyTestUtils.waitForMs; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; Loading @@ -45,6 +46,7 @@ import android.content.IntentFilter; import android.content.pm.ServiceInfo; import android.location.Country; import android.location.CountryDetector; import android.net.Uri; import android.os.Binder; import android.os.HandlerThread; import android.os.Message; Loading @@ -54,6 +56,7 @@ import android.provider.Settings; import android.service.carrier.CarrierMessagingService; import android.service.carrier.ICarrierMessagingCallback; import android.service.carrier.ICarrierMessagingService; import android.telephony.ServiceState; import android.telephony.SmsManager; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; Loading @@ -63,6 +66,7 @@ import androidx.test.filters.FlakyTest; import androidx.test.filters.MediumTest; import androidx.test.filters.SmallTest; import com.android.internal.R; import com.android.internal.telephony.ContextFixture; import com.android.internal.telephony.ISub; import com.android.internal.telephony.SMSDispatcher; Loading Loading @@ -643,4 +647,53 @@ public class GsmSmsDispatcherTest extends TelephonyTest { byte[] pdu = IccUtils.hexStringToBytes(pduCaptor.getValue()); assertEquals(0, pdu[1]); } @Test public void testSendRawPdu_isMtSmsPollingMessage_doesNotCallOnFailed() throws Exception { setupMockPackagePermissionChecks(); mContextFixture.addCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); // return a fake value to pass getData() HashMap data = new HashMap<String, String>(); data.put("pdu", new byte[1]); when(mSmsTracker.getData()).thenReturn(data); when(mSmsTracker.getAppPackageName()).thenReturn(""); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); // Set isIms() false doReturn(false).when(mSmsDispatchersController).isIms(); mContextFixture.putBooleanResource( R.bool.config_satellite_allow_check_message_in_not_connected, true); // Set ServiceState to OOS doReturn(new ServiceState()).when(mPhone).getServiceState(); // Set isMtSmsPollingMessage to true when(mSmsTracker.isMtSmsPollingMessage(any())).thenReturn(true); mGsmSmsDispatcher.sendRawPdu(new SMSDispatcher.SmsTracker[] {mSmsTracker}); processAllMessages(); verify(mSmsTracker, times(0)).onFailed(any(), anyInt(), anyInt()); } @Test public void testSmsTracker_isMtSmsPollingMessage_returnsTrue() throws Exception { String mtSmsPollingText = "mt_sms_polling_text"; mContextFixture.putResource(R.string.config_mt_sms_polling_text, mtSmsPollingText); SMSDispatcher.SmsTracker tracker = new SMSDispatcher.SmsTracker("destAddr", 0L, mtSmsPollingText); boolean isMtSmsPollingMessage = tracker.isMtSmsPollingMessage(mContext); assertTrue(isMtSmsPollingMessage); } @Test public void testSmsTracker_isMtSmsPollingMessage_returnsFalse() throws Exception { mContextFixture.putResource(R.string.config_mt_sms_polling_text, "mt_sms_polling_text"); SMSDispatcher.SmsTracker tracker = new SMSDispatcher.SmsTracker("destAddr", 0L, "wrong_text"); boolean isMtSmsPollingMessage = tracker.isMtSmsPollingMessage(mContext); assertFalse(isMtSmsPollingMessage); } } Loading
src/java/com/android/internal/telephony/SMSDispatcher.java +18 −1 Original line number Diff line number Diff line Loading @@ -2626,7 +2626,7 @@ public abstract class SMSDispatcher extends Handler { } @VisibleForTesting public SmsTracker(String destAddr, long messageId) { public SmsTracker(String destAddr, long messageId, String messageText) { mData = null; mSentIntent = null; mDeliveryIntent = null; Loading @@ -2643,6 +2643,7 @@ public abstract class SMSDispatcher extends Handler { mSkipShortCodeDestAddrCheck = false; mUniqueMessageId = 0; mResultCodeFromCarrierMessagingService = CarrierMessagingService.SEND_STATUS_OK; mFullMessageText = messageText; } public HashMap<String, Object> getData() { Loading Loading @@ -2682,6 +2683,22 @@ public abstract class SMSDispatcher extends Handler { return mIsFromDefaultSmsApplication; } /** * Check if the message is a MT SMS polling message. * * @param context The Context * @return true if the message is a MT SMS polling message, false otherwise. */ public boolean isMtSmsPollingMessage(Context context) { if (mFullMessageText == null) { return false; } String mtSmsPollingText = context.getResources().getString(R.string.config_mt_sms_polling_text); return mFullMessageText.equals(mtSmsPollingText); } /** * Update the status of this message if we persisted it */ Loading
src/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +7 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import android.os.Build; import android.os.Message; import android.telephony.ServiceState; import com.android.internal.R; import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import com.android.internal.telephony.InboundSmsHandler; import com.android.internal.telephony.Phone; Loading Loading @@ -165,8 +166,13 @@ public final class GsmSMSDispatcher extends SMSDispatcher { + " SS=" + ss + " " + SmsController.formatCrossStackMessageId(tracker.mMessageId)); boolean allowCheckMessageInNotConnected = mContext.getResources() .getBoolean(R.bool.config_satellite_allow_check_message_in_not_connected); boolean mtPollingMessageThatsAllowedInOOS = tracker.isMtSmsPollingMessage(mContext) && allowCheckMessageInNotConnected; // if sms over IMS is not supported on data and voice is not available... if (!isIms() && ss != ServiceState.STATE_IN_SERVICE) { if (!isIms() && ss != ServiceState.STATE_IN_SERVICE && !mtPollingMessageThatsAllowedInOOS) { //In 5G case only Data Rat is reported. if(mPhone.getServiceState().getRilDataRadioTechnology() != ServiceState.RIL_RADIO_TECHNOLOGY_NR) { Loading
src/java/com/android/internal/telephony/satellite/DatagramDispatcher.java +4 −1 Original line number Diff line number Diff line Loading @@ -1256,6 +1256,7 @@ public class DatagramDispatcher extends Handler { getPendingMessagesCount(), SATELLITE_RESULT_SUCCESS); if (datagramType == DATAGRAM_TYPE_CHECK_PENDING_INCOMING_SMS) { startMtSmsPollingThrottle(); mShouldPollMtSms = false; } } else { // Update send status Loading Loading @@ -1297,7 +1298,9 @@ public class DatagramDispatcher extends Handler { } plogd("sendMtSmsPollingMessage"); if (!allowCheckMessageInNotConnected()) { mShouldPollMtSms = false; } for (Entry<Long, PendingRequest> entry : mPendingSmsMap.entrySet()) { PendingRequest pendingRequest = entry.getValue(); Loading
tests/telephonytests/src/com/android/internal/telephony/SmsDispatchersControllerTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -132,7 +132,7 @@ public class SmsDispatchersControllerTest extends TelephonyTest { } private SMSDispatcher.SmsTracker getSmsTracker(String destAddr, long messageId) { return new SMSDispatcher.SmsTracker(destAddr, messageId); return new SMSDispatcher.SmsTracker(destAddr, messageId, "testMessage"); } } Loading
tests/telephonytests/src/com/android/internal/telephony/gsm/GsmSmsDispatcherTest.java +53 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.internal.telephony.SmsUsageMonitor.PREMIUM_SMS_PERMISS import static com.android.internal.telephony.TelephonyTestUtils.waitForMs; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; Loading @@ -45,6 +46,7 @@ import android.content.IntentFilter; import android.content.pm.ServiceInfo; import android.location.Country; import android.location.CountryDetector; import android.net.Uri; import android.os.Binder; import android.os.HandlerThread; import android.os.Message; Loading @@ -54,6 +56,7 @@ import android.provider.Settings; import android.service.carrier.CarrierMessagingService; import android.service.carrier.ICarrierMessagingCallback; import android.service.carrier.ICarrierMessagingService; import android.telephony.ServiceState; import android.telephony.SmsManager; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; Loading @@ -63,6 +66,7 @@ import androidx.test.filters.FlakyTest; import androidx.test.filters.MediumTest; import androidx.test.filters.SmallTest; import com.android.internal.R; import com.android.internal.telephony.ContextFixture; import com.android.internal.telephony.ISub; import com.android.internal.telephony.SMSDispatcher; Loading Loading @@ -643,4 +647,53 @@ public class GsmSmsDispatcherTest extends TelephonyTest { byte[] pdu = IccUtils.hexStringToBytes(pduCaptor.getValue()); assertEquals(0, pdu[1]); } @Test public void testSendRawPdu_isMtSmsPollingMessage_doesNotCallOnFailed() throws Exception { setupMockPackagePermissionChecks(); mContextFixture.addCallingOrSelfPermission(ContextFixture.PERMISSION_ENABLE_ALL); // return a fake value to pass getData() HashMap data = new HashMap<String, String>(); data.put("pdu", new byte[1]); when(mSmsTracker.getData()).thenReturn(data); when(mSmsTracker.getAppPackageName()).thenReturn(""); Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1); // Set isIms() false doReturn(false).when(mSmsDispatchersController).isIms(); mContextFixture.putBooleanResource( R.bool.config_satellite_allow_check_message_in_not_connected, true); // Set ServiceState to OOS doReturn(new ServiceState()).when(mPhone).getServiceState(); // Set isMtSmsPollingMessage to true when(mSmsTracker.isMtSmsPollingMessage(any())).thenReturn(true); mGsmSmsDispatcher.sendRawPdu(new SMSDispatcher.SmsTracker[] {mSmsTracker}); processAllMessages(); verify(mSmsTracker, times(0)).onFailed(any(), anyInt(), anyInt()); } @Test public void testSmsTracker_isMtSmsPollingMessage_returnsTrue() throws Exception { String mtSmsPollingText = "mt_sms_polling_text"; mContextFixture.putResource(R.string.config_mt_sms_polling_text, mtSmsPollingText); SMSDispatcher.SmsTracker tracker = new SMSDispatcher.SmsTracker("destAddr", 0L, mtSmsPollingText); boolean isMtSmsPollingMessage = tracker.isMtSmsPollingMessage(mContext); assertTrue(isMtSmsPollingMessage); } @Test public void testSmsTracker_isMtSmsPollingMessage_returnsFalse() throws Exception { mContextFixture.putResource(R.string.config_mt_sms_polling_text, "mt_sms_polling_text"); SMSDispatcher.SmsTracker tracker = new SMSDispatcher.SmsTracker("destAddr", 0L, "wrong_text"); boolean isMtSmsPollingMessage = tracker.isMtSmsPollingMessage(mContext); assertFalse(isMtSmsPollingMessage); } }