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

Commit e0c3771b authored by Brad Ebinger's avatar Brad Ebinger Committed by Gerrit Code Review
Browse files

Merge "Telephony: Add 7bit Ascii support for long message"

parents b68d92a9 6cb90dea
Loading
Loading
Loading
Loading
+81 −71
Original line number Diff line number Diff line
@@ -676,6 +676,8 @@ public class IccSmsInterfaceManager {
            }
        }

        final long ident = Binder.clearCallingIdentity();
        try {
            destAddr = filterDestAddress(destAddr);

            if (parts.size() > 1 && parts.size() < 10 && !SmsMessage.hasEmsSupport()) {
@@ -715,6 +717,9 @@ public class IccSmsInterfaceManager {
                                          (ArrayList<PendingIntent>) deliveryIntents,
                                          null, callingPackage, persistMessageForNonDefaultSmsApp,
                                          priority, expectMore, validityPeriod);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

    public int getPremiumSmsPermission(String packageName) {
@@ -1152,6 +1157,8 @@ public class IccSmsInterfaceManager {
            return;
        }

        final long ident = Binder.clearCallingIdentity();
        try {
            textAndAddress[1] = filterDestAddress(textAndAddress[1]);

            if (parts.size() > 1 && parts.size() < 10 && !SmsMessage.hasEmsSupport()) {
@@ -1196,6 +1203,9 @@ public class IccSmsInterfaceManager {
                    SMS_MESSAGE_PRIORITY_NOT_SPECIFIED,
                    false /* expectMore */,
                    SMS_MESSAGE_PERIOD_NOT_SPECIFIED);
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

    private boolean isFailedOrDraft(ContentResolver resolver, Uri messageUri) {
+17 −1
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import android.os.AsyncResult;
import android.os.Binder;
import android.os.Handler;
import android.os.Message;
import android.os.PersistableBundle;
import android.os.Process;
import android.os.RemoteException;
import android.os.UserHandle;
@@ -61,6 +62,7 @@ import android.service.carrier.CarrierMessagingService;
import android.service.carrier.ICarrierMessagingCallback;
import android.service.carrier.ICarrierMessagingService;
import android.telephony.CarrierMessagingServiceManager;
import android.telephony.CarrierConfigManager;
import android.telephony.PhoneNumberUtils;
import android.telephony.Rlog;
import android.telephony.ServiceState;
@@ -1063,7 +1065,9 @@ public abstract class SMSDispatcher extends Handler {
            uData.payloadStr = message;
            uData.userDataHeader = smsHeader;
            if (encoding == SmsConstants.ENCODING_7BIT) {
                uData.msgEncoding = UserData.ENCODING_GSM_7BIT_ALPHABET;
                uData.msgEncoding = isAscii7bitSupportedForLongMessage()
                        ? UserData.ENCODING_7BIT_ASCII : UserData.ENCODING_GSM_7BIT_ALPHABET;
                Rlog.d(TAG, "Message encoding for proper 7 bit: " + uData.msgEncoding);
            } else { // assume UTF-16
                uData.msgEncoding = UserData.ENCODING_UNICODE_16;
            }
@@ -1977,4 +1981,16 @@ public abstract class SMSDispatcher extends Handler {
    protected boolean isCdmaMo() {
        return mSmsDispatchersController.isCdmaMo();
    }

    private boolean isAscii7bitSupportedForLongMessage() {
        CarrierConfigManager configManager = (CarrierConfigManager)mContext.getSystemService(
                Context.CARRIER_CONFIG_SERVICE);
        PersistableBundle pb = null;
        pb = configManager.getConfigForSubId(mPhone.getSubId());
        if (pb != null) {
            return pb.getBoolean(CarrierConfigManager
                    .KEY_ASCII_7_BIT_SUPPORT_FOR_LONG_MESSAGE_BOOL);
        }
        return false;
    }
}
+38 −0
Original line number Diff line number Diff line
@@ -262,6 +262,44 @@ public class CdmaSmsTest extends AndroidTestCase {
        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
    }

    @SmallTest
    public void testUserData7BitAsciiFeedback() throws Exception {
        BearerData bearerData = new BearerData();
        bearerData.messageType = BearerData.MESSAGE_TYPE_DELIVER;
        bearerData.messageId = 0;
        bearerData.hasUserDataHeader = false;
        UserData userData = new UserData();
        userData.payloadStr = "Test standard SMS";
        userData.msgEncoding = UserData.ENCODING_7BIT_ASCII;
        userData.msgEncodingSet = true;
        bearerData.userData = userData;
        byte[] encodedSms = BearerData.encode(bearerData);

        BearerData revBearerData = BearerData.decode(encodedSms);
        assertEquals(userData.msgEncoding, revBearerData.userData.msgEncoding);
        assertEquals(userData.payloadStr.length(), revBearerData.userData.numFields);
        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);

        userData.payloadStr = "1234567";
        revBearerData = BearerData.decode(BearerData.encode(bearerData));
        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
        userData.payloadStr = "";
        revBearerData = BearerData.decode(BearerData.encode(bearerData));
        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
        userData.payloadStr = "12345678901234567890123456789012345678901234567890" +
                "12345678901234567890123456789012345678901234567890" +
                "12345678901234567890123456789012345678901234567890" +
                "1234567890";
        revBearerData = BearerData.decode(BearerData.encode(bearerData));
        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
        userData.payloadStr = "Test \u007f illegal \u0000 SMS chars";
        revBearerData = BearerData.decode(BearerData.encode(bearerData));
        assertEquals("Test   illegal   SMS chars", revBearerData.userData.payloadStr);
        userData.payloadStr = "More @ testing\nis great^|^~woohoo";
        revBearerData = BearerData.decode(BearerData.encode(bearerData));
        assertEquals(userData.payloadStr, revBearerData.userData.payloadStr);
    }

    @SmallTest
    public void testMonolithicOne() throws Exception {
        String pdu = "0003200010010410168d2002010503060812011101590501c706069706180000000701c108" +