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

Commit 3aa3ef0e authored by Amit Mahajan's avatar Amit Mahajan Committed by Android (Google) Code Review
Browse files

Merge "Call AnomalyReporter if CarrierMessagingService doesn't respond" into sc-dev

parents 694ab7f4 7105430b
Loading
Loading
Loading
Loading
+17 −3
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.service.carrier.CarrierMessagingService;
import android.service.carrier.CarrierMessagingServiceWrapper;
import android.service.carrier.CarrierMessagingServiceWrapper.CarrierMessagingCallback;
import android.service.carrier.MessagePdu;
import android.telephony.AnomalyReporter;
import android.util.LocalLog;

import com.android.internal.annotations.VisibleForTesting;
@@ -40,6 +41,8 @@ import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;

/**
 * Filters incoming SMS with carrier services.
@@ -59,6 +62,10 @@ public class CarrierServicesSmsFilter {
    /** onFilterComplete timeout. */
    public static final int FILTER_COMPLETE_TIMEOUT_MS = 10 * 60 * 1000; //10 minutes

    /** SMS anomaly uuid -- CarrierMessagingService did not respond */
    private static final UUID sAnomalyNoResponseFromCarrierMessagingService =
            UUID.fromString("94095e8e-b516-4065-a8be-e05b84071002");

    private final Context mContext;
    private final Phone mPhone;
    private final byte[][] mPdus;
@@ -122,7 +129,7 @@ public class CarrierServicesSmsFilter {
            mFilterAggregator = new FilterAggregator(numPackages);
            //start the timer
            mCallbackTimeoutHandler.sendMessageDelayed(mCallbackTimeoutHandler
                            .obtainMessage(EVENT_ON_FILTER_COMPLETE_NOT_CALLED),
                            .obtainMessage(EVENT_ON_FILTER_COMPLETE_NOT_CALLED, mFilterAggregator),
                    FILTER_COMPLETE_TIMEOUT_MS);
            for (String smsFilterPackage : smsFilterPackages) {
                filterWithPackage(smsFilterPackage, mFilterAggregator);
@@ -302,7 +309,7 @@ public class CarrierServicesSmsFilter {
            if (!mIsOnFilterCompleteCalled) {
                mIsOnFilterCompleteCalled = true;
                mCarrierMessagingServiceWrapper.disconnect();
                mFilterAggregator.onFilterComplete(result);
                mFilterAggregator.onFilterComplete(result, this);
            }
        }

@@ -343,9 +350,10 @@ public class CarrierServicesSmsFilter {
            mFilterResult = CarrierMessagingService.RECEIVE_OPTIONS_DEFAULT;
        }

        void onFilterComplete(int result) {
        void onFilterComplete(int result, CarrierSmsFilterCallback callback) {
            synchronized (mFilterLock) {
                mNumPendingFilters--;
                mCallbacks.remove(callback);
                combine(result);
                if (mNumPendingFilters == 0) {
                    // Calling identity was the CarrierMessagingService in this callback, change it
@@ -393,6 +401,12 @@ public class CarrierServicesSmsFilter {
                case EVENT_ON_FILTER_COMPLETE_NOT_CALLED:
                    mLocalLog.log("CarrierServicesSmsFilter: onFilterComplete timeout: not"
                            + " called before " + FILTER_COMPLETE_TIMEOUT_MS + " milliseconds.");
                    FilterAggregator filterAggregator = (FilterAggregator) msg.obj;
                    String packages = filterAggregator.mCallbacks.stream()
                            .map(callback -> callback.mPackageName)
                            .collect(Collectors.joining(", "));
                    AnomalyReporter.reportAnomaly(sAnomalyNoResponseFromCarrierMessagingService,
                            "No response from " + packages);
                    handleFilterCallbacksTimeout();
                    break;
            }
+11 −4
Original line number Diff line number Diff line
@@ -162,6 +162,9 @@ public abstract class SMSDispatcher extends Handler {
    private static final int SEND_RETRY_DELAY = 2000;
    /** Message sending queue limit */
    private static final int MO_MSG_QUEUE_LIMIT = 5;
    /** SMS anomaly uuid -- CarrierMessagingService did not respond */
    private static final UUID sAnomalyNoResponseFromCarrierMessagingService =
            UUID.fromString("279d9fbc-462d-4fc2-802c-bf21ddd9dd90");

    /**
     * Message reference for a CONCATENATED_8_BIT_REFERENCE or
@@ -408,6 +411,8 @@ public abstract class SMSDispatcher extends Handler {
            if (msg.what == EVENT_TIMEOUT) {
                logWithLocalLog("handleMessage: did not receive response from "
                        + mCarrierPackageName + " for " + mCarrierMessagingTimeout + " ms");
                AnomalyReporter.reportAnomaly(sAnomalyNoResponseFromCarrierMessagingService,
                        "No response from " + mCarrierPackageName);
                onSendComplete(CarrierMessagingService.SEND_STATUS_RETRY_ON_CARRIER_NETWORK);
            } else {
                logWithLocalLog("handleMessage: received unexpected message " + msg.what);
@@ -2025,8 +2030,9 @@ public abstract class SMSDispatcher extends Handler {

        private Boolean mIsFromDefaultSmsApplication;

        // SMS anomaly uuid
        private final UUID mAnomalyUUID = UUID.fromString("43043600-ea7a-44d2-9ae6-a58567ac7886");
        // SMS anomaly uuid -- unexpected error from RIL
        private final UUID mAnomalyUnexpectedErrorFromRilUUID =
                UUID.fromString("43043600-ea7a-44d2-9ae6-a58567ac7886");

        private SmsTracker(HashMap<String, Object> data, PendingIntent sentIntent,
                PendingIntent deliveryIntent, PackageInfo appInfo, String destAddr, String format,
@@ -2262,8 +2268,9 @@ public abstract class SMSDispatcher extends Handler {
        private UUID generateUUID(int error, int errorCode) {
            long lerror = error;
            long lerrorCode = errorCode;
            return new UUID(mAnomalyUUID.getMostSignificantBits(),
                    mAnomalyUUID.getLeastSignificantBits() + ((lerrorCode << 32) + lerror));
            return new UUID(mAnomalyUnexpectedErrorFromRilUUID.getMostSignificantBits(),
                    mAnomalyUnexpectedErrorFromRilUUID.getLeastSignificantBits()
                            + ((lerrorCode << 32) + lerror));
        }

        /**