SMS: Add a compatible API getRecipientAddress for 3GPP2 SMS

The method getDisplayOriginatingAddress() return null for submit
pdu of 3GPP, it will cause applicatoin can not get address of sent
message. Thread ID is unable to be created for this invalid message
record.

Add an API getRecipientAddress() for SubmitPdu in SmsMessage.

Bug: 73012819
Change-Id: Ib3e98ad3f115038656db1ea7ff5b05491b28b85d
This commit is contained in:
Mengjun Leng
2019-01-24 10:33:33 +08:00
committed by Jesse Fuentes
parent e3483a5814
commit 43c7335deb
4 changed files with 53 additions and 15 deletions

View File

@@ -981,4 +981,13 @@ public class SmsMessage {
return false;
}
/**
* {@hide}
* Returns the recipient address(receiver) of this SMS message in String form or null if
* unavailable.
*/
public String getRecipientAddress() {
return mWrappedSmsMessage.getRecipientAddress();
}
}

View File

@@ -41,6 +41,9 @@ public abstract class SmsMessageBase {
@UnsupportedAppUsage
protected SmsAddress mOriginatingAddress;
/** {@hide} The address of the receiver */
protected SmsAddress mRecipientAddress;
/** {@hide} The message body as a string. May be null if the message isn't text */
@UnsupportedAppUsage
protected String mMessageBody;
@@ -457,4 +460,17 @@ public abstract class SmsMessageBase {
return ted;
}
/**
* {@hide}
* Returns the receiver address of this SMS message in String
* form or null if unavailable
*/
public String getRecipientAddress() {
if (mRecipientAddress == null) {
return null;
}
return mRecipientAddress.getAddressString();
}
}

View File

@@ -601,18 +601,24 @@ public class SmsMessage extends SmsMessageBase {
} else if (addr.numberMode == CdmaSmsAddress.NUMBER_MODE_DATA_NETWORK) {
if (numberType == 2)
Rlog.e(LOG_TAG, "TODO: Originating Addr is email id");
Rlog.e(LOG_TAG, "TODO: Addr is email id");
else
Rlog.e(LOG_TAG,
"TODO: Originating Addr is data network address");
"TODO: Addr is data network address");
} else {
Rlog.e(LOG_TAG, "Originating Addr is of incorrect type");
Rlog.e(LOG_TAG, "Addr is of incorrect type");
}
} else {
Rlog.e(LOG_TAG, "Incorrect Digit mode");
}
addr.origBytes = data;
Rlog.i(LOG_TAG, "Originating Addr=" + addr.toString());
Rlog.pii(LOG_TAG, "Addr=" + addr.toString());
mOriginatingAddress = addr;
if (parameterId == DESTINATION_ADDRESS) {
// Original address awlays indicates one sender's address for 3GPP2
// Here add recipient address support along with 3GPP
mRecipientAddress = addr;
}
break;
case ORIGINATING_SUB_ADDRESS:
case DESTINATION_SUB_ADDRESS:
@@ -667,7 +673,7 @@ public class SmsMessage extends SmsMessageBase {
}
/**
* Parses a SMS message from its BearerData stream. (mobile-terminated only)
* Parses a SMS message from its BearerData stream.
*/
public void parseSms() {
// Message Waiting Info Record defined in 3GPP2 C.S-0005, 3.7.5.6
@@ -697,16 +703,15 @@ public class SmsMessage extends SmsMessageBase {
}
if (mOriginatingAddress != null) {
mOriginatingAddress.address = new String(mOriginatingAddress.origBytes);
if (mOriginatingAddress.ton == CdmaSmsAddress.TON_INTERNATIONAL_OR_IP) {
if (mOriginatingAddress.address.charAt(0) != '+') {
mOriginatingAddress.address = "+" + mOriginatingAddress.address;
}
}
decodeSmsDisplayAddress(mOriginatingAddress);
if (VDBG) Rlog.v(LOG_TAG, "SMS originating address: "
+ mOriginatingAddress.address);
}
if (mRecipientAddress != null) {
decodeSmsDisplayAddress(mRecipientAddress);
}
if (mBearerData.msgCenterTimeStamp != null) {
mScTimeMillis = mBearerData.msgCenterTimeStamp.toMillis(true);
}
@@ -731,7 +736,8 @@ public class SmsMessage extends SmsMessageBase {
status = mBearerData.errorClass << 8;
status |= mBearerData.messageStatus;
}
} else if (mBearerData.messageType != BearerData.MESSAGE_TYPE_DELIVER) {
} else if (mBearerData.messageType != BearerData.MESSAGE_TYPE_DELIVER
&& mBearerData.messageType != BearerData.MESSAGE_TYPE_SUBMIT) {
throw new RuntimeException("Unsupported message type: " + mBearerData.messageType);
}
@@ -743,6 +749,16 @@ public class SmsMessage extends SmsMessageBase {
}
}
private void decodeSmsDisplayAddress(SmsAddress addr) {
addr.address = new String(addr.origBytes);
if (addr.ton == CdmaSmsAddress.TON_INTERNATIONAL_OR_IP) {
if (addr.address.charAt(0) != '+') {
addr.address = "+" + addr.address;
}
}
Rlog.pii(LOG_TAG, " decodeSmsDisplayAddress = " + addr.address);
}
/**
* Parses a broadcast SMS, possibly containing a CMAS alert.
*

View File

@@ -71,9 +71,6 @@ public class SmsMessage extends SmsMessageBase {
// e.g. 23.040 9.2.2.1
private boolean mReplyPathPresent = false;
/** The address of the receiver. */
private GsmSmsAddress mRecipientAddress;
/**
* TP-Status - status of a previously submitted SMS.
* This field applies to SMS-STATUS-REPORT messages. 0 indicates success;