diff options
4 files changed, 47 insertions, 16 deletions
diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java index e0145e661660..28307d270134 100644 --- a/telephony/java/android/telephony/SmsMessage.java +++ b/telephony/java/android/telephony/SmsMessage.java @@ -1020,6 +1020,17 @@ public class SmsMessage { } /** + * Return the encoding type of a received SMS message, which is specified using ENCODING_* + * GSM: defined in android.telephony.SmsConstants + * CDMA: defined in android.telephony.cdma.UserData + * + * @hide + */ + public int getReceivedEncodingType() { + return mWrappedSmsMessage.getReceivedEncodingType(); + } + + /** * Determines whether or not to use CDMA format for MO SMS. * If SMS over IMS is supported, then format is based on IMS SMS format, * otherwise format is based on current phone type. diff --git a/telephony/java/com/android/internal/telephony/SmsMessageBase.java b/telephony/java/com/android/internal/telephony/SmsMessageBase.java index 6d46ed3b8416..0cc1e98ec165 100644 --- a/telephony/java/com/android/internal/telephony/SmsMessageBase.java +++ b/telephony/java/com/android/internal/telephony/SmsMessageBase.java @@ -16,6 +16,8 @@ package com.android.internal.telephony; +import static com.android.internal.telephony.SmsConstants.ENCODING_UNKNOWN; + import android.compat.annotation.UnsupportedAppUsage; import android.os.Build; import android.telephony.SmsMessage; @@ -94,6 +96,15 @@ public abstract class SmsMessageBase { protected boolean mMwiDontStore; /** + * The encoding type of a received SMS message, which is specified using ENCODING_* + * GSM: defined in android.telephony.SmsConstants + * CDMA: defined in android.telephony.cdma.UserData + * + * @hide + */ + protected int mReceivedEncodingType = ENCODING_UNKNOWN; + + /** * Indicates status for messages stored on the ICC. */ protected int mStatusOnIcc = -1; @@ -512,4 +523,8 @@ public abstract class SmsMessageBase { return mRecipientAddress.getAddressString(); } + + public int getReceivedEncodingType() { + return mReceivedEncodingType; + } } diff --git a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java index f636276f11b8..b51ba31b4eed 100644 --- a/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java +++ b/telephony/java/com/android/internal/telephony/cdma/SmsMessage.java @@ -780,6 +780,7 @@ public class SmsMessage extends SmsMessageBase { mUserData = mBearerData.userData.payload; mUserDataHeader = mBearerData.userData.userDataHeader; mMessageBody = mBearerData.userData.payloadStr; + mReceivedEncodingType = mBearerData.userData.msgEncoding; } if (mOriginatingAddress != null) { @@ -860,6 +861,9 @@ public class SmsMessage extends SmsMessageBase { Rlog.w(LOG_TAG, "BearerData.decode() returned null"); return null; } + if (bData.userData != null) { + mReceivedEncodingType = bData.userData.msgEncoding; + } if (Rlog.isLoggable(LOGGABLE_TAG, Log.VERBOSE)) { Rlog.d(LOG_TAG, "MT raw BearerData = " + HexDump.toHexString(mEnvelope.bearerData)); diff --git a/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java b/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java index b51e8d3d3c5d..a5556505edef 100644 --- a/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java +++ b/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java @@ -1396,28 +1396,28 @@ public class SmsMessage extends SmsMessageBase { } else { switch ((mDataCodingScheme >> 2) & 0x3) { case 0: // GSM 7 bit default alphabet - encodingType = ENCODING_7BIT; - break; + encodingType = ENCODING_7BIT; + break; case 2: // UCS 2 (16bit) - encodingType = ENCODING_16BIT; - break; + encodingType = ENCODING_16BIT; + break; case 1: // 8 bit data - //Support decoding the user data payload as pack GSM 8-bit (a GSM alphabet string - //that's stored in 8-bit unpacked format) characters. - if (r.getBoolean(com.android.internal. - R.bool.config_sms_decode_gsm_8bit_data)) { - encodingType = ENCODING_8BIT; - break; - } + // Support decoding the user data payload as pack GSM 8-bit (a GSM alphabet + // string that's stored in 8-bit unpacked format) characters. + if (r.getBoolean(com.android.internal + .R.bool.config_sms_decode_gsm_8bit_data)) { + encodingType = ENCODING_8BIT; + break; + } case 3: // reserved - Rlog.w(LOG_TAG, "1 - Unsupported SMS data coding scheme " - + (mDataCodingScheme & 0xff)); - encodingType = r.getInteger( - com.android.internal.R.integer.default_reserved_data_coding_scheme); - break; + Rlog.w(LOG_TAG, "1 - Unsupported SMS data coding scheme " + + (mDataCodingScheme & 0xff)); + encodingType = r.getInteger( + com.android.internal.R.integer.default_reserved_data_coding_scheme); + break; } } } else if ((mDataCodingScheme & 0xf0) == 0xf0) { @@ -1492,6 +1492,7 @@ public class SmsMessage extends SmsMessageBase { encodingType == ENCODING_7BIT); this.mUserData = p.getUserData(); this.mUserDataHeader = p.getUserDataHeader(); + this.mReceivedEncodingType = encodingType; /* * Look for voice mail indication in TP_UDH TS23.040 9.2.3.24 |