Loading src/java/com/android/internal/telephony/ImsSmsDispatcher.java +4 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony; import android.annotation.NonNull; import android.app.Activity; import android.content.Context; import android.os.Binder; Loading @@ -41,6 +42,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import com.android.internal.telephony.analytics.TelephonyAnalytics; import com.android.internal.telephony.analytics.TelephonyAnalytics.SmsMmsAnalytics; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.metrics.TelephonyMetrics; import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.util.SMSDispatcherUtil; Loading Loading @@ -365,8 +367,8 @@ public class ImsSmsDispatcher extends SMSDispatcher { } public ImsSmsDispatcher(Phone phone, SmsDispatchersController smsDispatchersController, FeatureConnectorFactory factory) { super(phone, smsDispatchersController); FeatureConnectorFactory factory, @NonNull FeatureFlags featureFlags) { super(phone, smsDispatchersController, featureFlags); mConnectorFactory = factory; mImsManagerConnector = mConnectorFactory.create(mContext, mPhone.getPhoneId(), TAG, Loading src/java/com/android/internal/telephony/SMSDispatcher.java +84 −106 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.internal.telephony.IccSmsInterfaceManager.SMS_MESSAGE_ import static com.android.internal.telephony.SmsDispatchersController.PendingRequest; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import android.annotation.NonNull; import android.annotation.UserIdInt; import android.app.Activity; import android.app.AlertDialog; Loading Loading @@ -53,6 +54,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.os.Process; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; Loading Loading @@ -90,6 +92,7 @@ import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import com.android.internal.telephony.analytics.TelephonyAnalytics; import com.android.internal.telephony.analytics.TelephonyAnalytics.SmsMmsAnalytics; import com.android.internal.telephony.cdma.sms.UserData; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.flags.Flags; import com.android.internal.telephony.satellite.SatelliteController; import com.android.internal.telephony.subscription.SubscriptionInfoInternal; Loading Loading @@ -183,6 +186,7 @@ public abstract class SMSDispatcher extends Handler { protected Phone mPhone; @UnsupportedAppUsage protected final Context mContext; private final @NonNull FeatureFlags mFeatureFlags; @UnsupportedAppUsage protected final ContentResolver mResolver; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) Loading Loading @@ -244,7 +248,8 @@ public abstract class SMSDispatcher extends Handler { * Create a new SMS dispatcher. * @param phone the Phone to use */ protected SMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController) { protected SMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController, @NonNull FeatureFlags featureFlags) { mPhone = phone; mSmsDispatchersController = smsDispatchersController; mContext = phone.getContext(); Loading @@ -261,6 +266,7 @@ public abstract class SMSDispatcher extends Handler { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_SIM_STATE_CHANGED); mContext.registerReceiver(mBroadcastReceiver, intentFilter); mFeatureFlags = featureFlags; Rlog.d(TAG, "SMSDispatcher: ctor mSmsCapable=" + mSmsCapable + " format=" + getFormat() + " mSmsSendDisabled=" + mSmsSendDisabled); } Loading Loading @@ -1148,33 +1154,7 @@ public abstract class SMSDispatcher extends Handler { mPhone.notifySmsSent(tracker.mDestAddress); mSmsDispatchersController.notifySmsSent(tracker, false, tracker.isSinglePartOrLastPart(), true /*success*/); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, SmsManager.RESULT_ERROR_NONE, tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsManager.RESULT_ERROR_NONE ); } } } reportOutgoingSmsMetrics(tracker, SmsManager.RESULT_ERROR_NONE, NO_ERROR_CODE); } else { if (DBG) { Rlog.d(TAG, "SMS send failed " Loading Loading @@ -1214,32 +1194,7 @@ public abstract class SMSDispatcher extends Handler { if (!isIms() && ss != ServiceState.STATE_IN_SERVICE) { tracker.onFailed(mContext, getNotInServiceError(ss), NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker(tracker, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, getNotInServiceError(ss), tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, getNotInServiceError(ss) ); } } } reportOutgoingSmsMetrics(tracker, getNotInServiceError(ss), NO_ERROR_CODE); } else if (error == SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY && tracker.mRetryCount < getMaxSmsRetryCount()) { // Retry after a delay if needed. Loading @@ -1254,62 +1209,13 @@ public abstract class SMSDispatcher extends Handler { int errorCode = (smsResponse != null) ? smsResponse.mErrorCode : NO_ERROR_CODE; Message retryMsg = obtainMessage(EVENT_SEND_RETRY, tracker); sendMessageDelayed(retryMsg, getSmsRetryDelayValue()); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY, errorCode, tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY ); } } } reportOutgoingSmsMetrics(tracker, SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY, errorCode); } else { int errorCode = (smsResponse != null) ? smsResponse.mErrorCode : NO_ERROR_CODE; tracker.onFailed(mContext, error, errorCode); notifySmsSentFailedToEmergencyStateTracker(tracker, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, error, errorCode, tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, error); } } } reportOutgoingSmsMetrics(tracker, error, errorCode); } } } Loading Loading @@ -2726,6 +2632,43 @@ public abstract class SMSDispatcher extends Handler { mAppUid = android.os.Process.INVALID_UID; } @VisibleForTesting public SmsTracker( HashMap<String, Object> data, String destAddr, String format, long messageId, int initialRetryCount, String fullMessageText ) { this.mData = data; this.mDestAddress = destAddr; this.mFormat = format; this.mMessageId = messageId; this.mRetryCount = initialRetryCount; this.mFullMessageText = fullMessageText; this.mAppInfo = null; this.mSentIntent = null; this.mDeliveryIntent = null; this.mSmsHeader = null; this.mExpectMore = false; this.mUsesImsServiceForIms = false; this.mMessageRef = 0; this.mValidityPeriod = -1; this.mPriority = 0; this.mIsText = true; this.mPersistMessage = false; this.mUserId = 0; this.mSubId = 0; this.mIsForVvm = false; this.mCarrierId = 0; this.mSkipShortCodeDestAddrCheck = false; this.mUniqueMessageId = messageId; this.mResultCodeFromCarrierMessagingService = CarrierMessagingService.SEND_STATUS_OK; this.mAppUid = Process.INVALID_UID; } public HashMap<String, Object> getData() { return mData; } Loading Loading @@ -3306,6 +3249,41 @@ public abstract class SMSDispatcher extends Handler { } } private void reportOutgoingSmsMetrics(SmsTracker tracker, int result, int errorCode) { if (mPhone != null) { int resultForMetrics = result; if (mFeatureFlags.satellite25q4Apis() && result == SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY && tracker.mRetryCount >= getMaxSmsRetryCount()) { resultForMetrics = SmsManager.RESULT_SMS_SEND_FAIL_AFTER_MAX_RETRY; } mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, resultForMetrics, errorCode, tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, result); } } } } /** * Dump local logs */ Loading src/java/com/android/internal/telephony/SmsDispatchersController.java +4 −3 Original line number Diff line number Diff line Loading @@ -414,16 +414,17 @@ public class SmsDispatchersController extends Handler { // Create dispatchers, inbound SMS handlers and // broadcast undelivered messages in raw table. mImsSmsDispatcher = new ImsSmsDispatcher(phone, this, ImsManager::getConnector); mImsSmsDispatcher = new ImsSmsDispatcher(phone, this, ImsManager::getConnector, mFeatureFlags); mGsmInboundSmsHandler = GsmInboundSmsHandler.makeInboundSmsHandler(phone.getContext(), storageMonitor, phone, looper, mFeatureFlags); if (ENABLE_CDMA_DISPATCHER) { mCdmaDispatcher = new CdmaSMSDispatcher(phone, this); mCdmaDispatcher = new CdmaSMSDispatcher(phone, this, mFeatureFlags); mCdmaInboundSmsHandler = CdmaInboundSmsHandler.makeInboundSmsHandler(phone.getContext(), storageMonitor, phone, (CdmaSMSDispatcher) mCdmaDispatcher, looper, mFeatureFlags); } mGsmDispatcher = new GsmSMSDispatcher(phone, this, mGsmInboundSmsHandler); mGsmDispatcher = new GsmSMSDispatcher(phone, this, mGsmInboundSmsHandler, mFeatureFlags); SmsBroadcastUndelivered.initialize(phone.getContext(), mGsmInboundSmsHandler, mCdmaInboundSmsHandler, mFeatureFlags); InboundSmsHandler.registerNewMessageNotificationActionHandler(phone.getContext()); Loading src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +5 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.cdma; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; import android.os.Build; import android.os.Message; Loading @@ -34,6 +35,7 @@ import com.android.internal.telephony.SmsController; import com.android.internal.telephony.SmsDispatchersController; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsMessageBase; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.util.SMSDispatcherUtil; import com.android.telephony.Rlog; Loading @@ -41,8 +43,9 @@ public class CdmaSMSDispatcher extends SMSDispatcher { private static final String TAG = "CdmaSMSDispatcher"; private static final boolean VDBG = false; public CdmaSMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController) { super(phone, smsDispatchersController); public CdmaSMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController, @NonNull FeatureFlags featureFlags) { super(phone, smsDispatchersController, featureFlags); Rlog.d(TAG, "CdmaSMSDispatcher created"); } Loading src/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +4 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.gsm; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; import android.os.AsyncResult; import android.os.Build; Loading @@ -34,6 +35,7 @@ import com.android.internal.telephony.SmsController; import com.android.internal.telephony.SmsDispatchersController; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsMessageBase; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.uicc.IccRecords; import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.uicc.UiccCardApplication; Loading @@ -54,8 +56,8 @@ public final class GsmSMSDispatcher extends SMSDispatcher { private GsmInboundSmsHandler mGsmInboundSmsHandler; public GsmSMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController, GsmInboundSmsHandler gsmInboundSmsHandler) { super(phone, smsDispatchersController); GsmInboundSmsHandler gsmInboundSmsHandler, @NonNull FeatureFlags featureFlags) { super(phone, smsDispatchersController, featureFlags); mCi.setOnSmsStatus(this, EVENT_NEW_SMS_STATUS_REPORT, null); mGsmInboundSmsHandler = gsmInboundSmsHandler; mUiccController = UiccController.getInstance(); Loading Loading
src/java/com/android/internal/telephony/ImsSmsDispatcher.java +4 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.internal.telephony; import android.annotation.NonNull; import android.app.Activity; import android.content.Context; import android.os.Binder; Loading @@ -41,6 +42,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import com.android.internal.telephony.analytics.TelephonyAnalytics; import com.android.internal.telephony.analytics.TelephonyAnalytics.SmsMmsAnalytics; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.metrics.TelephonyMetrics; import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.util.SMSDispatcherUtil; Loading Loading @@ -365,8 +367,8 @@ public class ImsSmsDispatcher extends SMSDispatcher { } public ImsSmsDispatcher(Phone phone, SmsDispatchersController smsDispatchersController, FeatureConnectorFactory factory) { super(phone, smsDispatchersController); FeatureConnectorFactory factory, @NonNull FeatureFlags featureFlags) { super(phone, smsDispatchersController, featureFlags); mConnectorFactory = factory; mImsManagerConnector = mConnectorFactory.create(mContext, mPhone.getPhoneId(), TAG, Loading
src/java/com/android/internal/telephony/SMSDispatcher.java +84 −106 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import static com.android.internal.telephony.IccSmsInterfaceManager.SMS_MESSAGE_ import static com.android.internal.telephony.SmsDispatchersController.PendingRequest; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import android.annotation.NonNull; import android.annotation.UserIdInt; import android.app.Activity; import android.app.AlertDialog; Loading Loading @@ -53,6 +54,7 @@ import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.PersistableBundle; import android.os.Process; import android.os.SystemClock; import android.os.UserHandle; import android.provider.Settings; Loading Loading @@ -90,6 +92,7 @@ import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import com.android.internal.telephony.analytics.TelephonyAnalytics; import com.android.internal.telephony.analytics.TelephonyAnalytics.SmsMmsAnalytics; import com.android.internal.telephony.cdma.sms.UserData; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.flags.Flags; import com.android.internal.telephony.satellite.SatelliteController; import com.android.internal.telephony.subscription.SubscriptionInfoInternal; Loading Loading @@ -183,6 +186,7 @@ public abstract class SMSDispatcher extends Handler { protected Phone mPhone; @UnsupportedAppUsage protected final Context mContext; private final @NonNull FeatureFlags mFeatureFlags; @UnsupportedAppUsage protected final ContentResolver mResolver; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) Loading Loading @@ -244,7 +248,8 @@ public abstract class SMSDispatcher extends Handler { * Create a new SMS dispatcher. * @param phone the Phone to use */ protected SMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController) { protected SMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController, @NonNull FeatureFlags featureFlags) { mPhone = phone; mSmsDispatchersController = smsDispatchersController; mContext = phone.getContext(); Loading @@ -261,6 +266,7 @@ public abstract class SMSDispatcher extends Handler { IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_SIM_STATE_CHANGED); mContext.registerReceiver(mBroadcastReceiver, intentFilter); mFeatureFlags = featureFlags; Rlog.d(TAG, "SMSDispatcher: ctor mSmsCapable=" + mSmsCapable + " format=" + getFormat() + " mSmsSendDisabled=" + mSmsSendDisabled); } Loading Loading @@ -1148,33 +1154,7 @@ public abstract class SMSDispatcher extends Handler { mPhone.notifySmsSent(tracker.mDestAddress); mSmsDispatchersController.notifySmsSent(tracker, false, tracker.isSinglePartOrLastPart(), true /*success*/); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, SmsManager.RESULT_ERROR_NONE, tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsManager.RESULT_ERROR_NONE ); } } } reportOutgoingSmsMetrics(tracker, SmsManager.RESULT_ERROR_NONE, NO_ERROR_CODE); } else { if (DBG) { Rlog.d(TAG, "SMS send failed " Loading Loading @@ -1214,32 +1194,7 @@ public abstract class SMSDispatcher extends Handler { if (!isIms() && ss != ServiceState.STATE_IN_SERVICE) { tracker.onFailed(mContext, getNotInServiceError(ss), NO_ERROR_CODE); notifySmsSentFailedToEmergencyStateTracker(tracker, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, getNotInServiceError(ss), tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, getNotInServiceError(ss) ); } } } reportOutgoingSmsMetrics(tracker, getNotInServiceError(ss), NO_ERROR_CODE); } else if (error == SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY && tracker.mRetryCount < getMaxSmsRetryCount()) { // Retry after a delay if needed. Loading @@ -1254,62 +1209,13 @@ public abstract class SMSDispatcher extends Handler { int errorCode = (smsResponse != null) ? smsResponse.mErrorCode : NO_ERROR_CODE; Message retryMsg = obtainMessage(EVENT_SEND_RETRY, tracker); sendMessageDelayed(retryMsg, getSmsRetryDelayValue()); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY, errorCode, tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY ); } } } reportOutgoingSmsMetrics(tracker, SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY, errorCode); } else { int errorCode = (smsResponse != null) ? smsResponse.mErrorCode : NO_ERROR_CODE; tracker.onFailed(mContext, error, errorCode); notifySmsSentFailedToEmergencyStateTracker(tracker, false); mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, error, errorCode, tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); if (mPhone != null) { TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, error); } } } reportOutgoingSmsMetrics(tracker, error, errorCode); } } } Loading Loading @@ -2726,6 +2632,43 @@ public abstract class SMSDispatcher extends Handler { mAppUid = android.os.Process.INVALID_UID; } @VisibleForTesting public SmsTracker( HashMap<String, Object> data, String destAddr, String format, long messageId, int initialRetryCount, String fullMessageText ) { this.mData = data; this.mDestAddress = destAddr; this.mFormat = format; this.mMessageId = messageId; this.mRetryCount = initialRetryCount; this.mFullMessageText = fullMessageText; this.mAppInfo = null; this.mSentIntent = null; this.mDeliveryIntent = null; this.mSmsHeader = null; this.mExpectMore = false; this.mUsesImsServiceForIms = false; this.mMessageRef = 0; this.mValidityPeriod = -1; this.mPriority = 0; this.mIsText = true; this.mPersistMessage = false; this.mUserId = 0; this.mSubId = 0; this.mIsForVvm = false; this.mCarrierId = 0; this.mSkipShortCodeDestAddrCheck = false; this.mUniqueMessageId = messageId; this.mResultCodeFromCarrierMessagingService = CarrierMessagingService.SEND_STATUS_OK; this.mAppUid = Process.INVALID_UID; } public HashMap<String, Object> getData() { return mData; } Loading Loading @@ -3306,6 +3249,41 @@ public abstract class SMSDispatcher extends Handler { } } private void reportOutgoingSmsMetrics(SmsTracker tracker, int result, int errorCode) { if (mPhone != null) { int resultForMetrics = result; if (mFeatureFlags.satellite25q4Apis() && result == SmsManager.RESULT_RIL_SMS_SEND_FAIL_RETRY && tracker.mRetryCount >= getMaxSmsRetryCount()) { resultForMetrics = SmsManager.RESULT_SMS_SEND_FAIL_AFTER_MAX_RETRY; } mPhone.getSmsStats().onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, SmsConstants.FORMAT_3GPP2.equals(getFormat()), false /* fallbackToCs */, resultForMetrics, errorCode, tracker.mMessageId, tracker.isFromDefaultSmsApplication(mContext), tracker.getInterval(), mTelephonyManager.isEmergencyNumber(tracker.mDestAddress), tracker.isMtSmsPollingMessage(mContext), tracker.getPduLength(), tracker.getAppPackageName(), tracker.getAppUid()); TelephonyAnalytics telephonyAnalytics = mPhone.getTelephonyAnalytics(); if (telephonyAnalytics != null) { SmsMmsAnalytics smsMmsAnalytics = telephonyAnalytics.getSmsMmsAnalytics(); if (smsMmsAnalytics != null) { smsMmsAnalytics.onOutgoingSms( tracker.mImsRetry > 0 /* isOverIms */, result); } } } } /** * Dump local logs */ Loading
src/java/com/android/internal/telephony/SmsDispatchersController.java +4 −3 Original line number Diff line number Diff line Loading @@ -414,16 +414,17 @@ public class SmsDispatchersController extends Handler { // Create dispatchers, inbound SMS handlers and // broadcast undelivered messages in raw table. mImsSmsDispatcher = new ImsSmsDispatcher(phone, this, ImsManager::getConnector); mImsSmsDispatcher = new ImsSmsDispatcher(phone, this, ImsManager::getConnector, mFeatureFlags); mGsmInboundSmsHandler = GsmInboundSmsHandler.makeInboundSmsHandler(phone.getContext(), storageMonitor, phone, looper, mFeatureFlags); if (ENABLE_CDMA_DISPATCHER) { mCdmaDispatcher = new CdmaSMSDispatcher(phone, this); mCdmaDispatcher = new CdmaSMSDispatcher(phone, this, mFeatureFlags); mCdmaInboundSmsHandler = CdmaInboundSmsHandler.makeInboundSmsHandler(phone.getContext(), storageMonitor, phone, (CdmaSMSDispatcher) mCdmaDispatcher, looper, mFeatureFlags); } mGsmDispatcher = new GsmSMSDispatcher(phone, this, mGsmInboundSmsHandler); mGsmDispatcher = new GsmSMSDispatcher(phone, this, mGsmInboundSmsHandler, mFeatureFlags); SmsBroadcastUndelivered.initialize(phone.getContext(), mGsmInboundSmsHandler, mCdmaInboundSmsHandler, mFeatureFlags); InboundSmsHandler.registerNewMessageNotificationActionHandler(phone.getContext()); Loading
src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java +5 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.cdma; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; import android.os.Build; import android.os.Message; Loading @@ -34,6 +35,7 @@ import com.android.internal.telephony.SmsController; import com.android.internal.telephony.SmsDispatchersController; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsMessageBase; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.util.SMSDispatcherUtil; import com.android.telephony.Rlog; Loading @@ -41,8 +43,9 @@ public class CdmaSMSDispatcher extends SMSDispatcher { private static final String TAG = "CdmaSMSDispatcher"; private static final boolean VDBG = false; public CdmaSMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController) { super(phone, smsDispatchersController); public CdmaSMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController, @NonNull FeatureFlags featureFlags) { super(phone, smsDispatchersController, featureFlags); Rlog.d(TAG, "CdmaSMSDispatcher created"); } Loading
src/java/com/android/internal/telephony/gsm/GsmSMSDispatcher.java +4 −2 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.gsm; import static com.android.internal.telephony.SmsResponse.NO_ERROR_CODE; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; import android.os.AsyncResult; import android.os.Build; Loading @@ -34,6 +35,7 @@ import com.android.internal.telephony.SmsController; import com.android.internal.telephony.SmsDispatchersController; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsMessageBase; import com.android.internal.telephony.flags.FeatureFlags; import com.android.internal.telephony.uicc.IccRecords; import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.uicc.UiccCardApplication; Loading @@ -54,8 +56,8 @@ public final class GsmSMSDispatcher extends SMSDispatcher { private GsmInboundSmsHandler mGsmInboundSmsHandler; public GsmSMSDispatcher(Phone phone, SmsDispatchersController smsDispatchersController, GsmInboundSmsHandler gsmInboundSmsHandler) { super(phone, smsDispatchersController); GsmInboundSmsHandler gsmInboundSmsHandler, @NonNull FeatureFlags featureFlags) { super(phone, smsDispatchersController, featureFlags); mCi.setOnSmsStatus(this, EVENT_NEW_SMS_STATUS_REPORT, null); mGsmInboundSmsHandler = gsmInboundSmsHandler; mUiccController = UiccController.getInstance(); Loading