Merge "Fix for GSM-8bit encoding error" into tm-qpr-dev
diff --git a/telephony/java/android/telephony/SmsMessage.java b/telephony/java/android/telephony/SmsMessage.java
index e0145e6..28307d2 100644
--- a/telephony/java/android/telephony/SmsMessage.java
+++ b/telephony/java/android/telephony/SmsMessage.java
@@ -1020,6 +1020,17 @@
     }
 
     /**
+     * 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 6d46ed3..0cc1e98 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 @@
     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 @@
 
         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 f636276..b51ba31 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 @@
             mUserData = mBearerData.userData.payload;
             mUserDataHeader = mBearerData.userData.userDataHeader;
             mMessageBody = mBearerData.userData.payloadStr;
+            mReceivedEncodingType = mBearerData.userData.msgEncoding;
         }
 
         if (mOriginatingAddress != null) {
@@ -860,6 +861,9 @@
             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 b51e8d3d..a555650 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 @@
             } 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 @@
                 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