Loading src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java 100755 → 100644 +8 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.app.Activity; import android.app.PendingIntent; import android.app.PendingIntent.CanceledException; import android.content.Intent; import android.content.Context; import android.os.Message; import android.os.SystemProperties; import android.provider.Telephony.Sms; Loading Loading @@ -152,6 +153,13 @@ public class CdmaSMSDispatcher extends SMSDispatcher { uData.userDataHeader = smsHeader; if (encoding == SmsConstants.ENCODING_7BIT) { uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET; Context context = mPhone.getContext(); boolean ascii7bitForLongMsg = context.getResources(). getBoolean(com.android.internal.R.bool.config_ascii_7bit_support_for_long_message); if (ascii7bitForLongMsg) { Rlog.d(TAG, "ascii7bitForLongMsg = " + ascii7bitForLongMsg); uData.msgEncoding = UserData.ENCODING_7BIT_ASCII; } } else { // assume UTF-16 uData.msgEncoding = UserData.ENCODING_UNICODE_16; } Loading src/java/com/android/internal/telephony/cdma/SmsMessage.java +9 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.cdma; import android.content.Context; import android.os.Parcel; import android.os.SystemProperties; import android.telephony.PhoneNumberUtils; Loading @@ -28,6 +29,7 @@ import android.telephony.Rlog; import android.util.Log; import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.SmsConstants; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsMessageBase; Loading Loading @@ -922,6 +924,13 @@ public class SmsMessage extends SmsMessageBase { int teleservice = bearerData.hasUserDataHeader ? SmsEnvelope.TELESERVICE_WEMT : SmsEnvelope.TELESERVICE_WMT; Context context = PhoneFactory.getContext(); boolean ascii7bitForLongMsg = context.getResources(). getBoolean(com.android.internal.R.bool.config_ascii_7bit_support_for_long_message); if (ascii7bitForLongMsg) { Rlog.d(LOG_TAG, "ascii7bitForLongMsg = " + ascii7bitForLongMsg); teleservice = SmsEnvelope.TELESERVICE_WMT; } SmsEnvelope envelope = new SmsEnvelope(); envelope.messageType = SmsEnvelope.MESSAGE_TYPE_POINT_TO_POINT; envelope.teleService = teleservice; Loading src/java/com/android/internal/telephony/cdma/sms/BearerData.java +41 −0 Original line number Diff line number Diff line Loading @@ -604,6 +604,45 @@ public final class BearerData { System.arraycopy(payload, 0, uData.payload, udhBytes, payload.length); } private static void encode7bitAsciiEms(UserData uData, byte[] udhData, boolean force) throws CodingException { try { Rlog.d(LOG_TAG, "encode7bitAsciiEms"); int udhBytes = udhData.length + 1; // Add length octet. int udhSeptets = ((udhBytes * 8) + 6) / 7; int paddingBits = (udhSeptets * 7) - (udhBytes * 8); String msg = uData.payloadStr; byte[] payload ; int msgLen = msg.length(); BitwiseOutputStream outStream = new BitwiseOutputStream(msgLen + (paddingBits > 0 ? 1 : 0)); outStream.write(paddingBits, 0); for (int i = 0; i < msgLen; i++) { int charCode = UserData.charToAscii.get(msg.charAt(i), -1); if (charCode == -1) { if (force) { outStream.write(7, UserData.UNENCODABLE_7_BIT_CHAR); } else { throw new CodingException("cannot ASCII encode (" + msg.charAt(i) + ")"); } } else { outStream.write(7, charCode); } } payload = outStream.toByteArray(); uData.msgEncoding = UserData.ENCODING_7BIT_ASCII; uData.msgEncodingSet = true; uData.numFields = udhSeptets + uData.payloadStr.length(); uData.payload = new byte[udhBytes + payload.length]; uData.payload[0] = (byte)udhData.length; System.arraycopy(udhData, 0, uData.payload, 1, udhData.length); System.arraycopy(payload, 0, uData.payload, udhBytes, payload.length); } catch (BitwiseOutputStream.AccessException ex) { throw new CodingException("7bit ASCII encode failed: " + ex); } } private static void encodeEmsUserDataPayload(UserData uData) throws CodingException { Loading @@ -613,6 +652,8 @@ public final class BearerData { encode7bitEms(uData, headerData, true); } else if (uData.msgEncoding == UserData.ENCODING_UNICODE_16) { encode16bitEms(uData, headerData); } else if (uData.msgEncoding == UserData.ENCODING_7BIT_ASCII) { encode7bitAsciiEms(uData, headerData, true); } else { throw new CodingException("unsupported EMS user data encoding (" + uData.msgEncoding + ")"); Loading Loading
src/java/com/android/internal/telephony/cdma/CdmaSMSDispatcher.java 100755 → 100644 +8 −0 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import android.app.Activity; import android.app.PendingIntent; import android.app.PendingIntent.CanceledException; import android.content.Intent; import android.content.Context; import android.os.Message; import android.os.SystemProperties; import android.provider.Telephony.Sms; Loading Loading @@ -152,6 +153,13 @@ public class CdmaSMSDispatcher extends SMSDispatcher { uData.userDataHeader = smsHeader; if (encoding == SmsConstants.ENCODING_7BIT) { uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET; Context context = mPhone.getContext(); boolean ascii7bitForLongMsg = context.getResources(). getBoolean(com.android.internal.R.bool.config_ascii_7bit_support_for_long_message); if (ascii7bitForLongMsg) { Rlog.d(TAG, "ascii7bitForLongMsg = " + ascii7bitForLongMsg); uData.msgEncoding = UserData.ENCODING_7BIT_ASCII; } } else { // assume UTF-16 uData.msgEncoding = UserData.ENCODING_UNICODE_16; } Loading
src/java/com/android/internal/telephony/cdma/SmsMessage.java +9 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.telephony.cdma; import android.content.Context; import android.os.Parcel; import android.os.SystemProperties; import android.telephony.PhoneNumberUtils; Loading @@ -28,6 +29,7 @@ import android.telephony.Rlog; import android.util.Log; import com.android.internal.telephony.GsmAlphabet.TextEncodingDetails; import com.android.internal.telephony.PhoneFactory; import com.android.internal.telephony.SmsConstants; import com.android.internal.telephony.SmsHeader; import com.android.internal.telephony.SmsMessageBase; Loading Loading @@ -922,6 +924,13 @@ public class SmsMessage extends SmsMessageBase { int teleservice = bearerData.hasUserDataHeader ? SmsEnvelope.TELESERVICE_WEMT : SmsEnvelope.TELESERVICE_WMT; Context context = PhoneFactory.getContext(); boolean ascii7bitForLongMsg = context.getResources(). getBoolean(com.android.internal.R.bool.config_ascii_7bit_support_for_long_message); if (ascii7bitForLongMsg) { Rlog.d(LOG_TAG, "ascii7bitForLongMsg = " + ascii7bitForLongMsg); teleservice = SmsEnvelope.TELESERVICE_WMT; } SmsEnvelope envelope = new SmsEnvelope(); envelope.messageType = SmsEnvelope.MESSAGE_TYPE_POINT_TO_POINT; envelope.teleService = teleservice; Loading
src/java/com/android/internal/telephony/cdma/sms/BearerData.java +41 −0 Original line number Diff line number Diff line Loading @@ -604,6 +604,45 @@ public final class BearerData { System.arraycopy(payload, 0, uData.payload, udhBytes, payload.length); } private static void encode7bitAsciiEms(UserData uData, byte[] udhData, boolean force) throws CodingException { try { Rlog.d(LOG_TAG, "encode7bitAsciiEms"); int udhBytes = udhData.length + 1; // Add length octet. int udhSeptets = ((udhBytes * 8) + 6) / 7; int paddingBits = (udhSeptets * 7) - (udhBytes * 8); String msg = uData.payloadStr; byte[] payload ; int msgLen = msg.length(); BitwiseOutputStream outStream = new BitwiseOutputStream(msgLen + (paddingBits > 0 ? 1 : 0)); outStream.write(paddingBits, 0); for (int i = 0; i < msgLen; i++) { int charCode = UserData.charToAscii.get(msg.charAt(i), -1); if (charCode == -1) { if (force) { outStream.write(7, UserData.UNENCODABLE_7_BIT_CHAR); } else { throw new CodingException("cannot ASCII encode (" + msg.charAt(i) + ")"); } } else { outStream.write(7, charCode); } } payload = outStream.toByteArray(); uData.msgEncoding = UserData.ENCODING_7BIT_ASCII; uData.msgEncodingSet = true; uData.numFields = udhSeptets + uData.payloadStr.length(); uData.payload = new byte[udhBytes + payload.length]; uData.payload[0] = (byte)udhData.length; System.arraycopy(udhData, 0, uData.payload, 1, udhData.length); System.arraycopy(payload, 0, uData.payload, udhBytes, payload.length); } catch (BitwiseOutputStream.AccessException ex) { throw new CodingException("7bit ASCII encode failed: " + ex); } } private static void encodeEmsUserDataPayload(UserData uData) throws CodingException { Loading @@ -613,6 +652,8 @@ public final class BearerData { encode7bitEms(uData, headerData, true); } else if (uData.msgEncoding == UserData.ENCODING_UNICODE_16) { encode16bitEms(uData, headerData); } else if (uData.msgEncoding == UserData.ENCODING_7BIT_ASCII) { encode7bitAsciiEms(uData, headerData, true); } else { throw new CodingException("unsupported EMS user data encoding (" + uData.msgEncoding + ")"); Loading