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

Commit 13d5ac1a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use subId column of raw table." into qt-qpr1-dev

parents 77f615f2 82941a5b
Loading
Loading
Loading
Loading
+28 −14
Original line number Diff line number Diff line
@@ -148,6 +148,7 @@ public abstract class InboundSmsHandler extends StateMachine {
    public static final int MESSAGE_BODY_COLUMN = 8;
    public static final int DISPLAY_ADDRESS_COLUMN = 9;
    public static final int DELETED_FLAG_COLUMN = 10;
    public static final int SUBID_COLUMN = 11;

    public static final String SELECT_BY_ID = "_id=?";

@@ -758,7 +759,8 @@ public abstract class InboundSmsHandler extends StateMachine {
                    .makeInboundSmsTracker(sms.getPdu(),
                    sms.getTimestampMillis(), destPort, is3gpp2(), false,
                    sms.getOriginatingAddress(), sms.getDisplayOriginatingAddress(),
                    sms.getMessageBody(), sms.getMessageClass() == MessageClass.CLASS_0);
                    sms.getMessageBody(), sms.getMessageClass() == MessageClass.CLASS_0,
                            mPhone.getSubId());
        } else {
            // Create a tracker for this message segment.
            SmsHeader.ConcatRef concatRef = smsHeader.concatRef;
@@ -770,7 +772,7 @@ public abstract class InboundSmsHandler extends StateMachine {
                    sms.getTimestampMillis(), destPort, is3gpp2(), sms.getOriginatingAddress(),
                    sms.getDisplayOriginatingAddress(), concatRef.refNumber, concatRef.seqNumber,
                    concatRef.msgCount, false, sms.getMessageBody(),
                    sms.getMessageClass() == MessageClass.CLASS_0);
                    sms.getMessageClass() == MessageClass.CLASS_0, mPhone.getSubId());
        }

        if (VDBG) log("created tracker: " + tracker);
@@ -958,7 +960,7 @@ public abstract class InboundSmsHandler extends StateMachine {
                output.write(pdu, 0, pdu.length);
            }
            int result = mWapPush.dispatchWapPdu(output.toByteArray(), resultReceiver,
                    this, address);
                    this, address, tracker.getSubId());
            if (DBG) log("dispatchWapPdu() returned " + result);
            // Add result of WAP-PUSH into metrics. RESULT_SMS_HANDLED indicates that the WAP-PUSH
            // needs to be ignored, so treating it as a success case.
@@ -990,7 +992,7 @@ public abstract class InboundSmsHandler extends StateMachine {

        if (!filterInvoked) {
            dispatchSmsDeliveryIntent(pdus, tracker.getFormat(), destPort, resultReceiver,
                    tracker.isClass0());
                    tracker.isClass0(), tracker.getSubId());
        }

        return true;
@@ -1085,7 +1087,7 @@ public abstract class InboundSmsHandler extends StateMachine {
        CarrierServicesSmsFilterCallback filterCallback =
                new CarrierServicesSmsFilterCallback(
                        pdus, destPort, tracker.getFormat(), resultReceiver, userUnlocked,
                        tracker.isClass0());
                        tracker.isClass0(), tracker.getSubId());
        CarrierServicesSmsFilter carrierServicesFilter = new CarrierServicesSmsFilter(
                mContext, mPhone, pdus, destPort, tracker.getFormat(),
                filterCallback, getName(), mLocalLog);
@@ -1094,7 +1096,7 @@ public abstract class InboundSmsHandler extends StateMachine {
        }

        if (VisualVoicemailSmsFilter.filter(
                mContext, pdus, tracker.getFormat(), destPort, mPhone.getSubId())) {
                mContext, pdus, tracker.getFormat(), destPort, tracker.getSubId())) {
            log("Visual voicemail SMS dropped");
            dropSms(resultReceiver);
            return true;
@@ -1114,7 +1116,7 @@ public abstract class InboundSmsHandler extends StateMachine {
     */
    @UnsupportedAppUsage
    public void dispatchIntent(Intent intent, String permission, int appOp,
            Bundle opts, BroadcastReceiver resultReceiver, UserHandle user) {
            Bundle opts, BroadcastReceiver resultReceiver, UserHandle user, int subId) {
        intent.addFlags(Intent.FLAG_RECEIVER_NO_ABORT);
        final String action = intent.getAction();
        if (Intents.SMS_DELIVER_ACTION.equals(action)
@@ -1130,6 +1132,14 @@ public abstract class InboundSmsHandler extends StateMachine {
            intent.addFlags(Intent.FLAG_RECEIVER_FOREGROUND);
        }
        SubscriptionManager.putPhoneIdAndSubIdExtra(intent, mPhone.getPhoneId());

        // override the subId value in the intent with the values from tracker as they can be
        // different, specifically if the message is coming from SmsBroadcastUndelivered
        if (SubscriptionManager.isValidSubscriptionId(subId)) {
            intent.putExtra(PhoneConstants.SUBSCRIPTION_KEY, subId);
            intent.putExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX, subId);
        }

        if (user.equals(UserHandle.ALL)) {
            // Get a list of currently started users.
            int[] users = null;
@@ -1221,7 +1231,7 @@ public abstract class InboundSmsHandler extends StateMachine {
     * @param resultReceiver the receiver handling the delivery result
     */
    private void dispatchSmsDeliveryIntent(byte[][] pdus, String format, int destPort,
            SmsBroadcastReceiver resultReceiver, boolean isClass0) {
            SmsBroadcastReceiver resultReceiver, boolean isClass0, int subId) {
        Intent intent = new Intent();
        intent.putExtra("pdus", pdus);
        intent.putExtra("format", format);
@@ -1269,7 +1279,7 @@ public abstract class InboundSmsHandler extends StateMachine {

        Bundle options = handleSmsWhitelisting(intent.getComponent(), isClass0);
        dispatchIntent(intent, android.Manifest.permission.RECEIVE_SMS,
                AppOpsManager.OP_RECEIVE_SMS, options, resultReceiver, UserHandle.SYSTEM);
                AppOpsManager.OP_RECEIVE_SMS, options, resultReceiver, UserHandle.SYSTEM, subId);
    }

    /**
@@ -1443,6 +1453,8 @@ public abstract class InboundSmsHandler extends StateMachine {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
                    SubscriptionManager.INVALID_SUBSCRIPTION_ID);
            if (action.equals(Intents.SMS_DELIVER_ACTION)) {
                // Now dispatch the notification only intent
                intent.setAction(Intents.SMS_RECEIVED_ACTION);
@@ -1455,7 +1467,7 @@ public abstract class InboundSmsHandler extends StateMachine {

                dispatchIntent(intent, android.Manifest.permission.RECEIVE_SMS,
                        AppOpsManager.OP_RECEIVE_SMS,
                        options, this, UserHandle.ALL);
                        options, this, UserHandle.ALL, subId);
            } else if (action.equals(Intents.WAP_PUSH_DELIVER_ACTION)) {
                // Now dispatch the notification only intent
                intent.setAction(Intents.WAP_PUSH_RECEIVED_ACTION);
@@ -1478,7 +1490,7 @@ public abstract class InboundSmsHandler extends StateMachine {
                String mimeType = intent.getType();
                dispatchIntent(intent, WapPushOverSms.getPermissionForType(mimeType),
                        WapPushOverSms.getAppOpsPermissionForIntent(mimeType), options, this,
                        UserHandle.SYSTEM);
                        UserHandle.SYSTEM, subId);
            } else {
                // Now that the intents have been deleted we can clean up the PDU data.
                if (!Intents.DATA_SMS_RECEIVED_ACTION.equals(action)
@@ -1520,16 +1532,18 @@ public abstract class InboundSmsHandler extends StateMachine {
        private final SmsBroadcastReceiver mSmsBroadcastReceiver;
        private final boolean mUserUnlocked;
        private final boolean mIsClass0;
        private final int mSubId;

        CarrierServicesSmsFilterCallback(byte[][] pdus, int destPort, String smsFormat,
                SmsBroadcastReceiver smsBroadcastReceiver,  boolean userUnlocked,
                boolean isClass0) {
                boolean isClass0, int subId) {
            mPdus = pdus;
            mDestPort = destPort;
            mSmsFormat = smsFormat;
            mSmsBroadcastReceiver = smsBroadcastReceiver;
            mUserUnlocked = userUnlocked;
            mIsClass0 = isClass0;
            mSubId = subId;
        }

        @Override
@@ -1537,7 +1551,7 @@ public abstract class InboundSmsHandler extends StateMachine {
            logv("onFilterComplete: result is " + result);
            if ((result & CarrierMessagingService.RECEIVE_OPTIONS_DROP) == 0) {
                if (VisualVoicemailSmsFilter.filter(mContext, mPdus,
                        mSmsFormat, mDestPort, mPhone.getSubId())) {
                        mSmsFormat, mDestPort, mSubId)) {
                    log("Visual voicemail SMS dropped");
                    dropSms(mSmsBroadcastReceiver);
                    return;
@@ -1545,7 +1559,7 @@ public abstract class InboundSmsHandler extends StateMachine {

                if (mUserUnlocked) {
                    dispatchSmsDeliveryIntent(
                            mPdus, mSmsFormat, mDestPort, mSmsBroadcastReceiver, mIsClass0);
                            mPdus, mSmsFormat, mDestPort, mSmsBroadcastReceiver, mIsClass0, mSubId);
                } else {
                    // Don't do anything further, leave the message in the raw table if the
                    // credential-encrypted storage is still locked and show the new message
+13 −2
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ public class InboundSmsTracker {
    private final boolean mIs3gpp2WapPdu;
    private final String mMessageBody;
    private final boolean mIsClass0;
    private final int mSubId;

    // Fields for concatenating multi-part SMS messages
    private final String mAddress;
@@ -105,7 +106,7 @@ public class InboundSmsTracker {
     */
    public InboundSmsTracker(byte[] pdu, long timestamp, int destPort, boolean is3gpp2,
            boolean is3gpp2WapPdu, String address, String displayAddress, String messageBody,
            boolean isClass0) {
            boolean isClass0, int subId) {
        mPdu = pdu;
        mTimestamp = timestamp;
        mDestPort = destPort;
@@ -119,6 +120,7 @@ public class InboundSmsTracker {
        mReferenceNumber = -1;
        mSequenceNumber = getIndexOffset();     // 0 or 1, depending on type
        mMessageCount = 1;
        mSubId = subId;
    }

    /**
@@ -142,7 +144,8 @@ public class InboundSmsTracker {
     */
    public InboundSmsTracker(byte[] pdu, long timestamp, int destPort, boolean is3gpp2,
            String address, String displayAddress, int referenceNumber, int sequenceNumber,
            int messageCount, boolean is3gpp2WapPdu, String messageBody, boolean isClass0) {
            int messageCount, boolean is3gpp2WapPdu, String messageBody, boolean isClass0,
            int subId) {
        mPdu = pdu;
        mTimestamp = timestamp;
        mDestPort = destPort;
@@ -157,6 +160,7 @@ public class InboundSmsTracker {
        mReferenceNumber = referenceNumber;
        mSequenceNumber = sequenceNumber;
        mMessageCount = messageCount;
        mSubId = subId;
    }

    /**
@@ -190,6 +194,8 @@ public class InboundSmsTracker {
        mTimestamp = cursor.getLong(InboundSmsHandler.DATE_COLUMN);
        mAddress = cursor.getString(InboundSmsHandler.ADDRESS_COLUMN);
        mDisplayAddress = cursor.getString(InboundSmsHandler.DISPLAY_ADDRESS_COLUMN);
        mSubId = cursor.getInt(SmsBroadcastUndelivered.PDU_PENDING_MESSAGE_PROJECTION_INDEX_MAPPING
                .get(InboundSmsHandler.SUBID_COLUMN));

        if (cursor.getInt(InboundSmsHandler.COUNT_COLUMN) == 1) {
            // single-part message
@@ -249,6 +255,7 @@ public class InboundSmsTracker {
        }
        values.put("count", mMessageCount);
        values.put("message_body", mMessageBody);
        values.put("sub_id", mSubId);
        return values;
    }

@@ -318,6 +325,10 @@ public class InboundSmsTracker {
        return mIsClass0;
    }

    public int getSubId() {
        return mSubId;
    }

    @UnsupportedAppUsage
    public String getFormat() {
        return mIs3gpp2 ? SmsConstants.FORMAT_3GPP2 : SmsConstants.FORMAT_3GPP;
+20 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@ import com.android.internal.telephony.metrics.TelephonyMetrics;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

/**
 * Called when the credential-encrypted storage is unlocked, collecting all acknowledged messages
@@ -65,9 +66,27 @@ public class SmsBroadcastUndelivered {
            "address",
            "_id",
            "message_body",
            "display_originating_addr"
            "display_originating_addr",
            "sub_id"
    };

    /** Mapping from DB COLUMN to PDU_PENDING_MESSAGE_PROJECTION index */
    static final Map<Integer, Integer> PDU_PENDING_MESSAGE_PROJECTION_INDEX_MAPPING =
            new HashMap<Integer, Integer>() {{
                put(InboundSmsHandler.PDU_COLUMN, 0);
                put(InboundSmsHandler.SEQUENCE_COLUMN, 1);
                put(InboundSmsHandler.DESTINATION_PORT_COLUMN, 2);
                put(InboundSmsHandler.DATE_COLUMN, 3);
                put(InboundSmsHandler.REFERENCE_NUMBER_COLUMN, 4);
                put(InboundSmsHandler.COUNT_COLUMN, 5);
                put(InboundSmsHandler.ADDRESS_COLUMN, 6);
                put(InboundSmsHandler.ID_COLUMN, 7);
                put(InboundSmsHandler.MESSAGE_BODY_COLUMN, 8);
                put(InboundSmsHandler.DISPLAY_ADDRESS_COLUMN, 9);
                put(InboundSmsHandler.SUBID_COLUMN, 10);
            }};


    private static SmsBroadcastUndelivered instance;

    /** Content resolver to use to access raw table from SmsProvider. */
+4 −4
Original line number Diff line number Diff line
@@ -356,9 +356,9 @@ public class TelephonyComponentFactory {
     */
    public InboundSmsTracker makeInboundSmsTracker(byte[] pdu, long timestamp, int destPort,
            boolean is3gpp2, boolean is3gpp2WapPdu, String address, String displayAddr,
            String messageBody, boolean isClass0) {
            String messageBody, boolean isClass0, int subId) {
        return new InboundSmsTracker(pdu, timestamp, destPort, is3gpp2, is3gpp2WapPdu, address,
                displayAddr, messageBody, isClass0);
                displayAddr, messageBody, isClass0, subId);
    }

    /**
@@ -367,10 +367,10 @@ public class TelephonyComponentFactory {
    public InboundSmsTracker makeInboundSmsTracker(byte[] pdu, long timestamp, int destPort,
            boolean is3gpp2, String address, String displayAddr, int referenceNumber,
            int sequenceNumber, int messageCount, boolean is3gpp2WapPdu, String messageBody,
            boolean isClass0) {
            boolean isClass0, int subId) {
        return new InboundSmsTracker(pdu, timestamp, destPort, is3gpp2, address, displayAddr,
                referenceNumber, sequenceNumber, messageCount, is3gpp2WapPdu, messageBody,
                isClass0);
                isClass0, subId);
    }

    /**
+2 −16
Original line number Diff line number Diff line
@@ -321,20 +321,6 @@ public class WapPushOverSms implements ServiceConnection {
        return result;
    }

    /**
     * Dispatches inbound messages that are in the WAP PDU format. See
     * wap-230-wsp-20010705-a section 8 for details on the WAP PDU format.
     *
     * @param pdu The WAP PDU, made up of one or more SMS PDUs
     * @return a result code from {@link android.provider.Telephony.Sms.Intents}, or
     *         {@link Activity#RESULT_OK} if the message has been broadcast
     *         to applications
     */
    @UnsupportedAppUsage
    public int dispatchWapPdu(byte[] pdu, BroadcastReceiver receiver, InboundSmsHandler handler) {
        return dispatchWapPdu(pdu, receiver, handler, null);
    }

    /**
     * Dispatches inbound messages that are in the WAP PDU format. See
     * wap-230-wsp-20010705-a section 8 for details on the WAP PDU format.
@@ -346,7 +332,7 @@ public class WapPushOverSms implements ServiceConnection {
     *         to applications
     */
    public int dispatchWapPdu(byte[] pdu, BroadcastReceiver receiver, InboundSmsHandler handler,
            String address) {
            String address, int subId) {
        DecodedResult result = decodeWapPdu(pdu, handler);
        if (result.statusCode != Activity.RESULT_OK) {
            return result.statusCode;
@@ -441,7 +427,7 @@ public class WapPushOverSms implements ServiceConnection {

        handler.dispatchIntent(intent, getPermissionForType(result.mimeType),
                getAppOpsPermissionForIntent(result.mimeType), options, receiver,
                UserHandle.SYSTEM);
                UserHandle.SYSTEM, subId);
        return Activity.RESULT_OK;
    }

Loading