Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f812e486 authored by Hakjun Choi's avatar Hakjun Choi Committed by Android (Google) Code Review
Browse files

Merge "Add missed error case for sms metrics" into main

parents 5ce204ad ed1431a7
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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,
+84 −106
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;
@@ -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)
@@ -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();
@@ -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);
    }
@@ -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 "
@@ -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.
@@ -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);
            }
        }
    }
@@ -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;
        }
@@ -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
     */
+4 −3
Original line number Diff line number Diff line
@@ -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());
+5 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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");
    }

+4 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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