Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 95434bfa authored by Tammo Spalink's avatar Tammo Spalink
Browse files

Allow fragmentText to be called for singleton CDMA messages.

Corrects for previous partner changes, addressing issue:

http://buganizer/issue?id=2063332

Change-Id: I49e564d81c5db3e92a6bad973f21a02a7302875d
parent 33567c5f
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -309,8 +309,13 @@ public class SmsMessage {
        while (pos < textLen) {
            int nextPos = 0;  // Counts code units.
            if (ted.codeUnitSize == ENCODING_7BIT) {
                if (activePhone == PHONE_TYPE_CDMA && ted.msgCount == 1) {
                    // For a singleton CDMA message, the encoding must be ASCII...
                    nextPos = pos + Math.min(limit, textLen - pos);
                } else {
                    // For multi-segment messages, CDMA 7bit equals GSM 7bit encoding (EMS mode).
                    nextPos = GsmAlphabet.findGsmSeptetLimitIndex(text, pos, limit);
                }
            } else {  // Assume unicode.
                nextPos = pos + Math.min(limit / 2, textLen - pos);
            }
+10 −0
Original line number Diff line number Diff line
@@ -116,6 +116,16 @@ public abstract class SmsMessageBase {
         * android.telephony.SmsMessage ENCODING_*).
         */
        public int codeUnitSize;

        @Override
        public String toString() {
            return "TextEncodingDetails " +
                    "{ msgCount=" + msgCount +
                    ", codeUnitCount=" + codeUnitCount +
                    ", codeUnitsRemaining=" + codeUnitsRemaining +
                    ", codeUnitSize=" + codeUnitSize +
                    " }";
        }
    }

    // TODO(): This class is duplicated in SmsMessage.java. Refactor accordingly.
+28 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ import android.test.suitebuilder.annotation.SmallTest;

import android.util.Log;

import java.util.ArrayList;

public class CdmaSmsTest extends AndroidTestCase {
    private final static String LOG_TAG = "XXX CdmaSmsTest XXX";

@@ -815,4 +817,30 @@ public class CdmaSmsTest extends AndroidTestCase {
        BearerData revBearerData = BearerData.decode(encodedSms);
        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
    }

    @SmallTest
    public void testFragmentText() throws Exception {
        // Valid 160 character ASCII text.
        String text1 = "123456789012345678901234567890123456789012345678901234567890" +
                "1234567890123456789012345678901234567890123456789012345678901234567890" +
                "12345678901234567890123456789[";
        TextEncodingDetails ted = SmsMessage.calculateLength(text1, false);
        assertEquals(ted.msgCount, 1);
        assertEquals(ted.codeUnitCount, 160);
        assertEquals(ted.codeUnitSize, 1);
        ArrayList<String> fragments = android.telephony.SmsMessage.fragmentText(text1);
        assertEquals(fragments.size(), 1);
        // Valid 160 character GSM text -- the last character is
        // non-ASCII, and so this will currently generate a singleton
        // EMS message, which is not necessarily supported by Verizon.
        String text2 = "123456789012345678901234567890123456789012345678901234567890" +
                "1234567890123456789012345678901234567890123456789012345678901234567890" +
                "12345678901234567890123456789\u00a3";  // Trailing pound-currency sign.
        ted = SmsMessage.calculateLength(text2, false);
        assertEquals(ted.msgCount, 1);
        assertEquals(ted.codeUnitCount, 160);
        assertEquals(ted.codeUnitSize, 1);
        fragments = android.telephony.SmsMessage.fragmentText(text2);
        assertEquals(fragments.size(), 1);
    }
}