Loading src/java/com/android/internal/telephony/ImsSmsDispatcher.java +5 −5 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.internal.telephony; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import android.content.Context; import android.os.Binder; import android.os.PersistableBundle; Loading Loading @@ -116,9 +114,11 @@ public class ImsSmsDispatcher extends SMSDispatcher { private final IImsSmsListener mImsSmsListener = new IImsSmsListener.Stub() { @Override public void onSendSmsResult(int token, int messageRef, @SendStatusResult int status, int reason) throws RemoteException { int reason, int networkReasonCode) { Rlog.d(TAG, "onSendSmsResult token=" + token + " messageRef=" + messageRef + " status=" + status + " reason=" + reason); + " status=" + status + " reason=" + reason + " networkReasonCode=" + networkReasonCode); // TODO integrate networkReasonCode into IMS SMS metrics. mMetrics.writeOnImsServiceSmsSolicitedResponse(mPhone.getPhoneId(), status, reason); SmsTracker tracker = mTrackers.get(token); if (tracker == null) { Loading @@ -135,7 +135,7 @@ public class ImsSmsDispatcher extends SMSDispatcher { mPhone.notifySmsSent(tracker.mDestAddress); break; case ImsSmsImplBase.SEND_STATUS_ERROR: tracker.onFailed(mContext, reason, NO_ERROR_CODE); tracker.onFailed(mContext, reason, networkReasonCode); mTrackers.remove(token); break; case ImsSmsImplBase.SEND_STATUS_ERROR_RETRY: Loading tests/telephonytests/src/com/android/internal/telephony/ImsSmsDispatcherTest.java +24 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.internal.telephony; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.nullable; Loading @@ -26,6 +27,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.os.Looper; import android.telephony.SmsMessage; import android.telephony.ims.stub.ImsSmsImplBase; Loading Loading @@ -101,7 +103,7 @@ public class ImsSmsDispatcherTest extends TelephonyTest { // Fallback over GSM mImsSmsDispatcher.getSmsListener().onSendSmsResult(token, 0, ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK, 0); ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK, 0, SmsResponse.NO_ERROR_CODE); ArgumentCaptor<SMSDispatcher.SmsTracker> captor = ArgumentCaptor.forClass(SMSDispatcher.SmsTracker.class); // Ensure GsmSmsDispatcher calls sendSms Loading @@ -128,7 +130,7 @@ public class ImsSmsDispatcherTest extends TelephonyTest { // Fallback over GSM mImsSmsDispatcher.getSmsListener().onSendSmsResult(token, 0, ImsSmsImplBase.SEND_STATUS_ERROR_RETRY, 0); ImsSmsImplBase.SEND_STATUS_ERROR_RETRY, 0, SmsResponse.NO_ERROR_CODE); // Make sure retry bit set ArgumentCaptor<byte[]> byteCaptor = ArgumentCaptor.forClass(byte[].class); Loading Loading @@ -178,6 +180,26 @@ public class ImsSmsDispatcherTest extends TelephonyTest { assertEquals(trackersSize, mImsSmsDispatcher.mTrackers.size()); } /** * Ensure that when an outgoing SMS has failed over IMS with SEND_STATUS_ERROR and an associated * networkErrorCode, the error is sent to the tracker properly. */ @Test @SmallTest public void testNetworkError() throws Exception { int token = mImsSmsDispatcher.mNextToken.get(); mTrackerData.put("pdu", com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu(null, "+15555551212", "Test", false).encodedMessage); when(mImsManager.getSmsFormat()).thenReturn(SmsMessage.FORMAT_3GPP); mImsSmsDispatcher.mTrackers.put(token, mSmsTracker); when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM); // network error 41 mImsSmsDispatcher.getSmsListener().onSendSmsResult(token, 0, ImsSmsImplBase.SEND_STATUS_ERROR, 0, 41); verify(mSmsTracker).onFailed(any(Context.class), anyInt(), eq(41)); } @After public void tearDown() throws Exception { mImsSmsDispatcher = null; Loading Loading
src/java/com/android/internal/telephony/ImsSmsDispatcher.java +5 −5 Original line number Diff line number Diff line Loading @@ -16,8 +16,6 @@ package com.android.internal.telephony; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import android.content.Context; import android.os.Binder; import android.os.PersistableBundle; Loading Loading @@ -116,9 +114,11 @@ public class ImsSmsDispatcher extends SMSDispatcher { private final IImsSmsListener mImsSmsListener = new IImsSmsListener.Stub() { @Override public void onSendSmsResult(int token, int messageRef, @SendStatusResult int status, int reason) throws RemoteException { int reason, int networkReasonCode) { Rlog.d(TAG, "onSendSmsResult token=" + token + " messageRef=" + messageRef + " status=" + status + " reason=" + reason); + " status=" + status + " reason=" + reason + " networkReasonCode=" + networkReasonCode); // TODO integrate networkReasonCode into IMS SMS metrics. mMetrics.writeOnImsServiceSmsSolicitedResponse(mPhone.getPhoneId(), status, reason); SmsTracker tracker = mTrackers.get(token); if (tracker == null) { Loading @@ -135,7 +135,7 @@ public class ImsSmsDispatcher extends SMSDispatcher { mPhone.notifySmsSent(tracker.mDestAddress); break; case ImsSmsImplBase.SEND_STATUS_ERROR: tracker.onFailed(mContext, reason, NO_ERROR_CODE); tracker.onFailed(mContext, reason, networkReasonCode); mTrackers.remove(token); break; case ImsSmsImplBase.SEND_STATUS_ERROR_RETRY: Loading
tests/telephonytests/src/com/android/internal/telephony/ImsSmsDispatcherTest.java +24 −2 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.internal.telephony; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.nullable; Loading @@ -26,6 +27,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; import android.os.Looper; import android.telephony.SmsMessage; import android.telephony.ims.stub.ImsSmsImplBase; Loading Loading @@ -101,7 +103,7 @@ public class ImsSmsDispatcherTest extends TelephonyTest { // Fallback over GSM mImsSmsDispatcher.getSmsListener().onSendSmsResult(token, 0, ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK, 0); ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK, 0, SmsResponse.NO_ERROR_CODE); ArgumentCaptor<SMSDispatcher.SmsTracker> captor = ArgumentCaptor.forClass(SMSDispatcher.SmsTracker.class); // Ensure GsmSmsDispatcher calls sendSms Loading @@ -128,7 +130,7 @@ public class ImsSmsDispatcherTest extends TelephonyTest { // Fallback over GSM mImsSmsDispatcher.getSmsListener().onSendSmsResult(token, 0, ImsSmsImplBase.SEND_STATUS_ERROR_RETRY, 0); ImsSmsImplBase.SEND_STATUS_ERROR_RETRY, 0, SmsResponse.NO_ERROR_CODE); // Make sure retry bit set ArgumentCaptor<byte[]> byteCaptor = ArgumentCaptor.forClass(byte[].class); Loading Loading @@ -178,6 +180,26 @@ public class ImsSmsDispatcherTest extends TelephonyTest { assertEquals(trackersSize, mImsSmsDispatcher.mTrackers.size()); } /** * Ensure that when an outgoing SMS has failed over IMS with SEND_STATUS_ERROR and an associated * networkErrorCode, the error is sent to the tracker properly. */ @Test @SmallTest public void testNetworkError() throws Exception { int token = mImsSmsDispatcher.mNextToken.get(); mTrackerData.put("pdu", com.android.internal.telephony.gsm.SmsMessage.getSubmitPdu(null, "+15555551212", "Test", false).encodedMessage); when(mImsManager.getSmsFormat()).thenReturn(SmsMessage.FORMAT_3GPP); mImsSmsDispatcher.mTrackers.put(token, mSmsTracker); when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM); // network error 41 mImsSmsDispatcher.getSmsListener().onSendSmsResult(token, 0, ImsSmsImplBase.SEND_STATUS_ERROR, 0, 41); verify(mSmsTracker).onFailed(any(Context.class), anyInt(), eq(41)); } @After public void tearDown() throws Exception { mImsSmsDispatcher = null; Loading