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

Commit c9e3608f authored by Wink Saville's avatar Wink Saville Committed by Android Git Automerger
Browse files

am 5faaaa5f: am 543c3146: Merge "Handle ProvideLocalInfo stk command." into honeycomb-LTE

* commit '5faaaa5f':
  Handle ProvideLocalInfo stk command.
parents d57f5067 5faaaa5f
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import com.android.internal.telephony.IccRecords;


import java.io.ByteArrayOutputStream;
import java.util.Locale;

/**
 * Enumeration for representing the tag value of COMPREHENSION-TLV objects. If
@@ -273,8 +274,20 @@ public class CatService extends Handler implements AppInterface {
                sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
                break;
            case PROVIDE_LOCAL_INFORMATION:
                ResponseData resp;
                switch (cmdParams.cmdDet.commandQualifier) {
                    case CommandParamsFactory.DTTZ_SETTING:
                        resp = new DTTZResponseData(null);
                        sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, resp);
                        break;
                    case CommandParamsFactory.LANGUAGE_SETTING:
                        resp = new LanguageResponseData(Locale.getDefault().getLanguage());
                        sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, resp);
                        break;
                    default:
                        sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
                        return;
                }
            case LAUNCH_BROWSER:
            case SELECT_ITEM:
            case GET_INPUT:
+5 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ class CommandParamsFactory extends Handler {
    static final int REFRESH_UICC_RESET                     = 0x04;

    // Command Qualifier values for PLI command
    static final int DTTZ_SETTING                           = 0x03;
    static final int LANGUAGE_SETTING                       = 0x04;

    static synchronized CommandParamsFactory getInstance(RilMessageDecoder caller,
@@ -883,6 +884,10 @@ class CommandParamsFactory extends Handler {
            throws ResultException {
        CatLog.d(this, "process ProvideLocalInfo");
        switch (cmdDet.commandQualifier) {
            case DTTZ_SETTING:
                CatLog.d(this, "PLI [DTTZ_SETTING]");
                mCmdParams = new CommandParams(cmdDet);
                break;
            case LANGUAGE_SETTING:
                CatLog.d(this, "PLI [LANGUAGE_SETTING]");
                mCmdParams = new CommandParams(cmdDet);
+107 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.internal.telephony.cat;

import com.android.internal.telephony.EncodeException;
import com.android.internal.telephony.GsmAlphabet;
import java.util.Calendar;
import com.android.internal.telephony.cat.AppInterface.CommandType;

import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
@@ -147,4 +149,109 @@ class GetInkeyInputResponseData extends ResponseData {
    }
}

// For "PROVIDE LOCAL INFORMATION" command.
// See TS 31.111 section 6.4.15/ETSI TS 102 223
// TS 31.124 section 27.22.4.15 for test spec
class LanguageResponseData extends ResponseData {
    private String lang;

    public LanguageResponseData(String lang) {
        super();
        this.lang = lang;
    }

    @Override
    public void format(ByteArrayOutputStream buf) {
        if (buf == null) {
            return;
        }

        // Text string object
        int tag = 0x80 | ComprehensionTlvTag.LANGUAGE.value();
        buf.write(tag); // tag

        byte[] data;

        if (lang != null && lang.length() > 0) {
            data = GsmAlphabet.stringToGsm8BitPacked(lang);
        }
        else {
            data = new byte[0];
        }

        buf.write(data.length);

        for (byte b : data) {
            buf.write(b);
        }
    }
}

// For "PROVIDE LOCAL INFORMATION" command.
// See TS 31.111 section 6.4.15/ETSI TS 102 223
// TS 31.124 section 27.22.4.15 for test spec
class DTTZResponseData extends ResponseData {
    private Calendar calendar;

    public DTTZResponseData(Calendar cal) {
        super();
        calendar = cal;
    }

    @Override
    public void format(ByteArrayOutputStream buf) {
        if (buf == null) {
            return;
        }

        // DTTZ object
        int tag = 0x80 | CommandType.PROVIDE_LOCAL_INFORMATION.value();
        buf.write(tag); // tag

        byte[] data = new byte[8];
        byte btmp; // temp variable

        data[0] = 0x07; // Write length of DTTZ data

        if (calendar == null) {
            calendar = Calendar.getInstance();
        }
        // Fill year byte
        btmp = (byte) (calendar.get(java.util.Calendar.YEAR) % 100);
        data[1] = (byte) (btmp / 10);
        data[1] += (byte) ((btmp % 10) << 4);

        // Fill month byte
        btmp = (byte) (calendar.get(java.util.Calendar.MONTH) + 1);
        data[2] = (byte) (btmp / 10);
        data[2] += (byte) ((btmp % 10) << 4);

        // Fill day byte
        btmp = (byte) (calendar.get(java.util.Calendar.DATE));
        data[3] = (byte) (btmp / 10);
        data[3] += (byte) ((btmp % 10) << 4);

        // Fill hour byte
        btmp = (byte) (calendar.get(java.util.Calendar.HOUR_OF_DAY));
        data[4] = (byte) (btmp / 10);
        data[4] += (byte) ((btmp % 10) << 4);

        // Fill minute byte
        btmp = (byte) (calendar.get(java.util.Calendar.MINUTE));
        data[5] = (byte) (btmp / 10);
        data[5] += (byte) ((btmp % 10) << 4);

        // Fill second byte
        btmp = (byte) (calendar.get(java.util.Calendar.SECOND));
        data[6] = (byte) (btmp / 10);
        data[6] += (byte) ((btmp % 10) << 4);

        // No time zone info
        data[7] = (byte) 0xFF;

        for (byte b : data) {
            buf.write(b);
        }
    }
}