diff options
author | Thomas Nguyen <tnd@google.com> | 2023-01-12 21:59:13 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2023-01-12 21:59:13 +0000 |
commit | d120002396d17e17db0ad7884c1b4837b138c54d (patch) | |
tree | 2c86287137dbf2ad59e1ebae619ed5b89308c236 | |
parent | 3653fce54c4351e43cf9e90d8401ed2d12e23f0f (diff) | |
parent | ff3030932afbbed8532d4af832ffe4d474e4bb8b (diff) | |
download | base-d120002396d17e17db0ad7884c1b4837b138c54d.tar.gz |
Merge "Fix for GSM-8bit encoding error"
4 files changed, 47 insertions, 16 deletions
diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java index c2b65f86ff02..95d513682997 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 7a5bf067f05f..09ead31a3670 100644 --- a/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java +++ b/telephony/java/com/android/internal/telephony/gsm/SmsMessage.java @@ -1462,28 +1462,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) { @@ -1558,6 +1558,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 |