aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2021-07-14 17:43:33 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-07-14 17:43:33 +0000
commitaf17a76964a9242d2fdf0eeb81290a57f214fec6 (patch)
treef328d17be3f5fed80e5a42de59b2b9214588cf53
parent9a8ddf5b126d2da9f53d678b04fbbdd63fbaee83 (diff)
parent2a24c2cf676c599aa507406aaa418b47d5174a46 (diff)
downloadtelephony-android-s-beta-4.tar.gz
Merge "Retry SMS over IMS up to MAX_SEND_RETRIES"android-s-beta-4android-s-beta-3android-s-beta-4
-rw-r--r--src/java/com/android/internal/telephony/ImsSmsDispatcher.java25
-rw-r--r--src/java/com/android/internal/telephony/SMSDispatcher.java7
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/ImsSmsDispatcherTest.java6
3 files changed, 31 insertions, 7 deletions
diff --git a/src/java/com/android/internal/telephony/ImsSmsDispatcher.java b/src/java/com/android/internal/telephony/ImsSmsDispatcher.java
index eb96af224f..748cca7f29 100644
--- a/src/java/com/android/internal/telephony/ImsSmsDispatcher.java
+++ b/src/java/com/android/internal/telephony/ImsSmsDispatcher.java
@@ -18,6 +18,7 @@ package com.android.internal.telephony;
import android.content.Context;
import android.os.Binder;
+import android.os.Message;
import android.os.PersistableBundle;
import android.os.RemoteException;
import android.provider.Telephony.Sms.Intents;
@@ -169,8 +170,14 @@ public class ImsSmsDispatcher extends SMSDispatcher {
mTrackers.remove(token);
break;
case ImsSmsImplBase.SEND_STATUS_ERROR_RETRY:
- tracker.mRetryCount += 1;
- sendSms(tracker);
+ if (tracker.mRetryCount < MAX_SEND_RETRIES) {
+ tracker.mRetryCount += 1;
+ sendMessageDelayed(
+ obtainMessage(EVENT_SEND_RETRY, tracker), SEND_RETRY_DELAY);
+ } else {
+ tracker.onFailed(mContext, reason, networkReasonCode);
+ mTrackers.remove(token);
+ }
break;
case ImsSmsImplBase.SEND_STATUS_ERROR_FALLBACK:
tracker.mRetryCount += 1;
@@ -260,6 +267,18 @@ public class ImsSmsDispatcher extends SMSDispatcher {
}
};
+ @Override
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case EVENT_SEND_RETRY:
+ logd("SMS retry..");
+ sendSms((SmsTracker) msg.obj);
+ break;
+ default:
+ super.handleMessage(msg);
+ }
+ }
+
public ImsSmsDispatcher(Phone phone, SmsDispatchersController smsDispatchersController,
FeatureConnectorFactory factory) {
super(phone, smsDispatchersController);
@@ -416,7 +435,7 @@ public class ImsSmsDispatcher extends SMSDispatcher {
boolean isRetry = tracker.mRetryCount > 0;
String format = getFormat();
- if (SmsConstants.FORMAT_3GPP.equals(format) && tracker.mRetryCount > 0) {
+ if (SmsConstants.FORMAT_3GPP.equals(format) && isRetry) {
// per TS 23.040 Section 9.2.3.6: If TP-MTI SMS-SUBMIT (0x01) type
// TP-RD (bit 2) is 1 for retry
// and TP-MR is set to previously failed sms TP-MR
diff --git a/src/java/com/android/internal/telephony/SMSDispatcher.java b/src/java/com/android/internal/telephony/SMSDispatcher.java
index 3600e85eaa..b52fce3903 100644
--- a/src/java/com/android/internal/telephony/SMSDispatcher.java
+++ b/src/java/com/android/internal/telephony/SMSDispatcher.java
@@ -111,7 +111,7 @@ public abstract class SMSDispatcher extends Handler {
protected static final int EVENT_SEND_SMS_COMPLETE = 2;
/** Retry sending a previously failed SMS message */
- private static final int EVENT_SEND_RETRY = 3;
+ protected static final int EVENT_SEND_RETRY = 3;
/** Confirmation required for sending a large number of messages. */
private static final int EVENT_SEND_LIMIT_REACHED_CONFIRMATION = 4;
@@ -151,9 +151,10 @@ public abstract class SMSDispatcher extends Handler {
protected final TelephonyManager mTelephonyManager;
/** Maximum number of times to retry sending a failed SMS. */
- private static final int MAX_SEND_RETRIES = 3;
+ protected static final int MAX_SEND_RETRIES = 3;
/** Delay before next send attempt on a failed SMS, in milliseconds. */
- private static final int SEND_RETRY_DELAY = 2000;
+ @VisibleForTesting
+ public static final int SEND_RETRY_DELAY = 2000;
/** Message sending queue limit */
private static final int MO_MSG_QUEUE_LIMIT = 5;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/ImsSmsDispatcherTest.java b/tests/telephonytests/src/com/android/internal/telephony/ImsSmsDispatcherTest.java
index d4ac4d5fc0..90b6e36304 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/ImsSmsDispatcherTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/ImsSmsDispatcherTest.java
@@ -16,6 +16,8 @@
package com.android.internal.telephony;
+import static com.android.internal.telephony.TelephonyTestUtils.waitForMs;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
@@ -150,9 +152,11 @@ public class ImsSmsDispatcherTest extends TelephonyTest {
mImsSmsDispatcher.mTrackers.put(token, mSmsTracker);
when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
- // Fallback over GSM
+ // Retry over IMS
mImsSmsDispatcher.getSmsListener().onSendSmsResult(token, 0,
ImsSmsImplBase.SEND_STATUS_ERROR_RETRY, 0, SmsResponse.NO_ERROR_CODE);
+ waitForMs(SMSDispatcher.SEND_RETRY_DELAY + 200);
+ processAllMessages();
// Make sure retry bit set
ArgumentCaptor<byte[]> byteCaptor = ArgumentCaptor.forClass(byte[].class);