Loading src/java/com/android/internal/telephony/InboundSmsHandler.java +28 −15 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.IPackageManager; import android.content.pm.UserInfo; import android.database.Cursor; import android.database.SQLException; import android.net.Uri; Loading Loading @@ -148,6 +147,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=?"; Loading Loading @@ -758,7 +758,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; Loading @@ -770,7 +771,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); Loading Loading @@ -966,7 +967,7 @@ public abstract class InboundSmsHandler extends StateMachine { if (isWapPush) { 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. Loading Loading @@ -998,7 +999,7 @@ public abstract class InboundSmsHandler extends StateMachine { if (!filterInvoked) { dispatchSmsDeliveryIntent(pdus, format, destPort, resultReceiver, tracker.isClass0()); tracker.isClass0(), tracker.getSubId()); } return true; Loading Loading @@ -1093,7 +1094,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); Loading @@ -1102,7 +1103,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; Loading @@ -1122,7 +1123,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) Loading @@ -1138,6 +1139,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; Loading Loading @@ -1228,7 +1237,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); Loading Loading @@ -1276,7 +1285,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); } /** Loading Loading @@ -1450,6 +1459,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); Loading @@ -1462,7 +1473,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); Loading @@ -1485,7 +1496,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) Loading Loading @@ -1527,16 +1538,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 Loading @@ -1544,7 +1557,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; Loading @@ -1552,7 +1565,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 Loading src/java/com/android/internal/telephony/InboundSmsTracker.java +13 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -119,6 +120,7 @@ public class InboundSmsTracker { mReferenceNumber = -1; mSequenceNumber = getIndexOffset(); // 0 or 1, depending on type mMessageCount = 1; mSubId = subId; } /** Loading @@ -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; Loading @@ -157,6 +160,7 @@ public class InboundSmsTracker { mReferenceNumber = referenceNumber; mSequenceNumber = sequenceNumber; mMessageCount = messageCount; mSubId = subId; } /** Loading Loading @@ -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 Loading Loading @@ -249,6 +255,7 @@ public class InboundSmsTracker { } values.put("count", mMessageCount); values.put("message_body", mMessageBody); values.put("sub_id", mSubId); return values; } Loading Loading @@ -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; Loading src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java +20 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. */ Loading src/java/com/android/internal/telephony/SmsController.java +1 −1 Original line number Diff line number Diff line Loading @@ -400,7 +400,7 @@ public class SmsController extends ISmsImplBase { } // If reached here and multiple SIMs and subs present, sms sim pick activity is needed if (subInfoLength > 0 && telephonyManager.getSimCount() > 1) { if (subInfoLength > 1 && telephonyManager.getSimCount() > 1) { return true; } } Loading src/java/com/android/internal/telephony/TelephonyComponentFactory.java +4 −4 Original line number Diff line number Diff line Loading @@ -348,9 +348,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); } /** Loading @@ -359,10 +359,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); } /** Loading Loading
src/java/com/android/internal/telephony/InboundSmsHandler.java +28 −15 Original line number Diff line number Diff line Loading @@ -36,7 +36,6 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.IPackageManager; import android.content.pm.UserInfo; import android.database.Cursor; import android.database.SQLException; import android.net.Uri; Loading Loading @@ -148,6 +147,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=?"; Loading Loading @@ -758,7 +758,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; Loading @@ -770,7 +771,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); Loading Loading @@ -966,7 +967,7 @@ public abstract class InboundSmsHandler extends StateMachine { if (isWapPush) { 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. Loading Loading @@ -998,7 +999,7 @@ public abstract class InboundSmsHandler extends StateMachine { if (!filterInvoked) { dispatchSmsDeliveryIntent(pdus, format, destPort, resultReceiver, tracker.isClass0()); tracker.isClass0(), tracker.getSubId()); } return true; Loading Loading @@ -1093,7 +1094,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); Loading @@ -1102,7 +1103,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; Loading @@ -1122,7 +1123,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) Loading @@ -1138,6 +1139,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; Loading Loading @@ -1228,7 +1237,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); Loading Loading @@ -1276,7 +1285,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); } /** Loading Loading @@ -1450,6 +1459,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); Loading @@ -1462,7 +1473,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); Loading @@ -1485,7 +1496,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) Loading Loading @@ -1527,16 +1538,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 Loading @@ -1544,7 +1557,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; Loading @@ -1552,7 +1565,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 Loading
src/java/com/android/internal/telephony/InboundSmsTracker.java +13 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading @@ -119,6 +120,7 @@ public class InboundSmsTracker { mReferenceNumber = -1; mSequenceNumber = getIndexOffset(); // 0 or 1, depending on type mMessageCount = 1; mSubId = subId; } /** Loading @@ -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; Loading @@ -157,6 +160,7 @@ public class InboundSmsTracker { mReferenceNumber = referenceNumber; mSequenceNumber = sequenceNumber; mMessageCount = messageCount; mSubId = subId; } /** Loading Loading @@ -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 Loading Loading @@ -249,6 +255,7 @@ public class InboundSmsTracker { } values.put("count", mMessageCount); values.put("message_body", mMessageBody); values.put("sub_id", mSubId); return values; } Loading Loading @@ -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; Loading
src/java/com/android/internal/telephony/SmsBroadcastUndelivered.java +20 −1 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. */ Loading
src/java/com/android/internal/telephony/SmsController.java +1 −1 Original line number Diff line number Diff line Loading @@ -400,7 +400,7 @@ public class SmsController extends ISmsImplBase { } // If reached here and multiple SIMs and subs present, sms sim pick activity is needed if (subInfoLength > 0 && telephonyManager.getSimCount() > 1) { if (subInfoLength > 1 && telephonyManager.getSimCount() > 1) { return true; } } Loading
src/java/com/android/internal/telephony/TelephonyComponentFactory.java +4 −4 Original line number Diff line number Diff line Loading @@ -348,9 +348,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); } /** Loading @@ -359,10 +359,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); } /** Loading