10825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/* 20825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Copyright (C) 2007 The Android Open Source Project 30825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 40825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Licensed under the Apache License, Version 2.0 (the "License"); 50825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * you may not use this file except in compliance with the License. 60825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * You may obtain a copy of the License at 70825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 80825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * http://www.apache.org/licenses/LICENSE-2.0 90825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Unless required by applicable law or agreed to in writing, software 110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * distributed under the License is distributed on an "AS IS" BASIS, 120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * See the License for the specific language governing permissions and 140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * limitations under the License. 150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 170825495a331bb44df395a0cdb79fab85e68db5d5Wink Savillepackage com.android.internal.telephony.cat; 180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 190825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.graphics.Bitmap; 200825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Handler; 210825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport android.os.Message; 220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 230825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.GsmAlphabet; 240825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport com.android.internal.telephony.IccFileHandler; 250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 260825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.Iterator; 270825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleimport java.util.List; 280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville/** 300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Factory class, used for decoding raw byte arrays, received from baseband, 310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * into a CommandParams object. 320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 340825495a331bb44df395a0cdb79fab85e68db5d5Wink Savilleclass CommandParamsFactory extends Handler { 350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private static CommandParamsFactory sInstance = null; 360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private IconLoader mIconLoader; 370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private CommandParams mCmdParams = null; 380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private int mIconLoadState = LOAD_NO_ICON; 390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private RilMessageDecoder mCaller = null; 400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // constants 420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int MSG_ID_LOAD_ICON_DONE = 1; 430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // loading icons state parameters. 450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int LOAD_NO_ICON = 0; 460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int LOAD_SINGLE_ICON = 1; 470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int LOAD_MULTI_ICONS = 2; 480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Command Qualifier values for refresh command 500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int REFRESH_NAA_INIT_AND_FULL_FILE_CHANGE = 0x00; 510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int REFRESH_NAA_INIT_AND_FILE_CHANGE = 0x02; 520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int REFRESH_NAA_INIT = 0x03; 530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int REFRESH_UICC_RESET = 0x04; 540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Command Qualifier values for PLI command 560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int DTTZ_SETTING = 0x03; 570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static final int LANGUAGE_SETTING = 0x04; 580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville static synchronized CommandParamsFactory getInstance(RilMessageDecoder caller, 600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IccFileHandler fh) { 610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (sInstance != null) { 620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return sInstance; 630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (fh != null) { 650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return new CommandParamsFactory(caller, fh); 660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private CommandParamsFactory(RilMessageDecoder caller, IccFileHandler fh) { 710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCaller = caller; 720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader = IconLoader.getInstance(this, fh); 730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private CommandDetails processCommandDetails(List<ComprehensionTlv> ctlvs) { 760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CommandDetails cmdDet = null; 770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlvs != null) { 790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Search for the Command Details object. 800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlvCmdDet = searchForTag( 810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlvTag.COMMAND_DETAILS, ctlvs); 820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlvCmdDet != null) { 830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdDet = ValueParser.retrieveCommandDetails(ctlvCmdDet); 850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (ResultException e) { 860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, 870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville "processCommandDetails: Failed to procees command details e=" + e); 880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return cmdDet; 920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville void make(BerTlv berTlv) { 950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (berTlv == null) { 960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // reset global state parameters. 990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = null; 1000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_NO_ICON; 1010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // only proactive command messages are processed. 1020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (berTlv.getTag() != BerTlv.BER_PROACTIVE_COMMAND_TAG) { 1030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendCmdParams(ResultCode.CMD_TYPE_NOT_UNDERSTOOD); 1040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 1050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean cmdPending = false; 1070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs = berTlv.getComprehensionTlvs(); 1080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // process command dtails from the tlv list. 1090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CommandDetails cmdDet = processCommandDetails(ctlvs); 1100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (cmdDet == null) { 1110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendCmdParams(ResultCode.CMD_TYPE_NOT_UNDERSTOOD); 1120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 1130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // extract command type enumeration from the raw value stored inside 1160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // the Command Details object. 1170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AppInterface.CommandType cmdType = AppInterface.CommandType 1180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .fromInt(cmdDet.typeOfCommand); 1190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (cmdType == null) { 1200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // This PROACTIVE COMMAND is presently not handled. Hence set 1210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // result code as BEYOND_TERMINAL_CAPABILITY in TR. 1220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new CommandParams(cmdDet); 1230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendCmdParams(ResultCode.BEYOND_TERMINAL_CAPABILITY); 1240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 1250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 1280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (cmdType) { 1290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SET_UP_MENU: 1300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processSelectItem(cmdDet, ctlvs); 1310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SELECT_ITEM: 1330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processSelectItem(cmdDet, ctlvs); 1340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DISPLAY_TEXT: 1360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processDisplayText(cmdDet, ctlvs); 1370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SET_UP_IDLE_MODE_TEXT: 1390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processSetUpIdleModeText(cmdDet, ctlvs); 1400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case GET_INKEY: 1420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processGetInkey(cmdDet, ctlvs); 1430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case GET_INPUT: 1450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processGetInput(cmdDet, ctlvs); 1460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SEND_DTMF: 1480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SEND_SMS: 1490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SEND_SS: 1500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SEND_USSD: 1510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processEventNotify(cmdDet, ctlvs); 1520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SET_UP_CALL: 1540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processSetupCall(cmdDet, ctlvs); 1550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case REFRESH: 1570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville processRefresh(cmdDet, ctlvs); 1580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = false; 1590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case LAUNCH_BROWSER: 1610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processLaunchBrowser(cmdDet, ctlvs); 1620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case PLAY_TONE: 1640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processPlayTone(cmdDet, ctlvs); 1650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case PROVIDE_LOCAL_INFORMATION: 1670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processProvideLocalInfo(cmdDet, ctlvs); 1680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case OPEN_CHANNEL: 1700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case CLOSE_CHANNEL: 1710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case RECEIVE_DATA: 1720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case SEND_DATA: 1730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville cmdPending = processBIPClient(cmdDet, ctlvs); 1740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 1760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // unsupported proactive commands 1770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new CommandParams(cmdDet); 1780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendCmdParams(ResultCode.BEYOND_TERMINAL_CAPABILITY); 1790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 1800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (ResultException e) { 1820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "make: caught ResultException e=" + e); 1830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new CommandParams(cmdDet); 1840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendCmdParams(e.result()); 1850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return; 1860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (!cmdPending) { 1880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendCmdParams(ResultCode.OK); 1890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville @Override 1930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville public void handleMessage(Message msg) { 1940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (msg.what) { 1950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case MSG_ID_LOAD_ICON_DONE: 1960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville sendCmdParams(setIcons(msg.obj)); 1970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 1980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 1990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private ResultCode setIcons(Object data) { 2020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Bitmap[] icons = null; 2030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int iconIndex = 0; 2040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (data == null) { 2060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return ResultCode.PRFRMD_ICON_NOT_DISPLAYED; 2070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch(mIconLoadState) { 2090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case LOAD_SINGLE_ICON: 2100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams.setIcon((Bitmap) data); 2110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 2120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case LOAD_MULTI_ICONS: 2130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville icons = (Bitmap[]) data; 2140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // set each item icon. 2150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville for (Bitmap icon : icons) { 2160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams.setIcon(icon); 2170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 2190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return ResultCode.OK; 2210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private void sendCmdParams(ResultCode resCode) { 2240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCaller.sendMsgParamsDecoded(resCode, mCmdParams); 2250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Search for a COMPREHENSION-TLV object with the given tag from a list 2290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param tag A tag to search for 2310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects used to search in 2320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return A ComprehensionTlv object that has the tag value of {@code tag}. 2340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If no object is found with the tag, null is returned. 2350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private ComprehensionTlv searchForTag(ComprehensionTlvTag tag, 2370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) { 2380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Iterator<ComprehensionTlv> iter = ctlvs.iterator(); 2390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return searchForNextTag(tag, iter); 2400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Search for the next COMPREHENSION-TLV object with the given tag from a 2440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * list iterated by {@code iter}. {@code iter} points to the object next to 2450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * the found object when this method returns. Used for searching the same 2460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * list for similar tags, usually item id. 2470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param tag A tag to search for 2490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param iter Iterator for ComprehensionTlv objects used for search 2500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return A ComprehensionTlv object that has the tag value of {@code tag}. 2520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * If no object is found with the tag, null is returned. 2530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private ComprehensionTlv searchForNextTag(ComprehensionTlvTag tag, 2550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Iterator<ComprehensionTlv> iter) { 2560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int tagValue = tag.value(); 2570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville while (iter.hasNext()) { 2580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = iter.next(); 2590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv.getTag() == tagValue) { 2600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return ctlv; 2610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return null; 2640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 2670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes DISPLAY_TEXT proactive command from the SIM card. 2680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 2690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 2700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 2710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 2720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 2730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 2740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @throws ResultException 2750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 2760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processDisplayText(CommandDetails cmdDet, 2770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) 2780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throws ResultException { 2790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process DisplayText"); 2810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextMessage textMsg = new TextMessage(); 2830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId iconId = null; 2840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TEXT_STRING, 2860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlvs); 2870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 2880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.text = ValueParser.retrieveTextString(ctlv); 2890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // If the tlv object doesn't exist or the it is a null object reply 2910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // with command not understood. 2920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (textMsg.text == null) { 2930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); 2940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 2950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 2960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.IMMEDIATE_RESPONSE, ctlvs); 2970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 2980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.responseNeeded = false; 2990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse icon identifier 3010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 3020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 3030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iconId = ValueParser.retrieveIconId(ctlv); 3040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.iconSelfExplanatory = iconId.selfExplanatory; 3050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse tone duration 3070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.DURATION, ctlvs); 3080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 3090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.duration = ValueParser.retrieveDuration(ctlv); 3100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Parse command qualifier parameters. 3130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.isHighPriority = (cmdDet.commandQualifier & 0x01) != 0; 3140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.userClear = (cmdDet.commandQualifier & 0x80) != 0; 3150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new DisplayTextParams(cmdDet, textMsg); 3170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (iconId != null) { 3190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 3200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(iconId.recordNumber, this 3210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 3220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 3230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 3250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes SET_UP_IDLE_MODE_TEXT proactive command from the SIM card. 3290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 3310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 3320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 3330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 3340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 3350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @throws ResultException 3360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processSetUpIdleModeText(CommandDetails cmdDet, 3380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 3390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process SetUpIdleModeText"); 3410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextMessage textMsg = new TextMessage(); 3430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId iconId = null; 3440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TEXT_STRING, 3460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlvs); 3470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 3480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.text = ValueParser.retrieveTextString(ctlv); 3490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // load icons only when text exist. 3510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (textMsg.text != null) { 3520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 3530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 3540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iconId = ValueParser.retrieveIconId(ctlv); 3550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.iconSelfExplanatory = iconId.selfExplanatory; 3560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new DisplayTextParams(cmdDet, textMsg); 3600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (iconId != null) { 3620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 3630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(iconId.recordNumber, this 3640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 3650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 3660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 3680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 3710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes GET_INKEY proactive command from the SIM card. 3720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 3730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 3740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 3750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 3760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 3770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 3780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @throws ResultException 3790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 3800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processGetInkey(CommandDetails cmdDet, 3810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 3820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process GetInkey"); 3840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Input input = new Input(); 3860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId iconId = null; 3870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 3880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TEXT_STRING, 3890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlvs); 3900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 3910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.text = ValueParser.retrieveTextString(ctlv); 3920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 3930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING); 3940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 3950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse icon identifier 3960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 3970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 3980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iconId = ValueParser.retrieveIconId(ctlv); 3990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse duration 4020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.DURATION, ctlvs); 4030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 4040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.duration = ValueParser.retrieveDuration(ctlv); 4050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.minLen = 1; 4080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.maxLen = 1; 4090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.digitOnly = (cmdDet.commandQualifier & 0x01) == 0; 4110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.ucs2 = (cmdDet.commandQualifier & 0x02) != 0; 4120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.yesNo = (cmdDet.commandQualifier & 0x04) != 0; 4130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.helpAvailable = (cmdDet.commandQualifier & 0x80) != 0; 4140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.echo = true; 4150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new GetInputParams(cmdDet, input); 4170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (iconId != null) { 4190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 4200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(iconId.recordNumber, this 4210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 4220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 4230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 4250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes GET_INPUT proactive command from the SIM card. 4290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 4300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 4310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 4320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 4330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 4340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 4350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @throws ResultException 4360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 4370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processGetInput(CommandDetails cmdDet, 4380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 4390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process GetInput"); 4410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Input input = new Input(); 4430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId iconId = null; 4440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TEXT_STRING, 4460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlvs); 4470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 4480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.text = ValueParser.retrieveTextString(ctlv); 4490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 4500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING); 4510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.RESPONSE_LENGTH, ctlvs); 4540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 4550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 4560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] rawValue = ctlv.getRawValue(); 4570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int valueIndex = ctlv.getValueIndex(); 4580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.minLen = rawValue[valueIndex] & 0xff; 4590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.maxLen = rawValue[valueIndex + 1] & 0xff; 4600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IndexOutOfBoundsException e) { 4610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); 4620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 4640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING); 4650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.DEFAULT_TEXT, ctlvs); 4680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 4690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.defaultText = ValueParser.retrieveTextString(ctlv); 4700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse icon identifier 4720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 4730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 4740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iconId = ValueParser.retrieveIconId(ctlv); 4750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.digitOnly = (cmdDet.commandQualifier & 0x01) == 0; 4780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.ucs2 = (cmdDet.commandQualifier & 0x02) != 0; 4790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.echo = (cmdDet.commandQualifier & 0x04) == 0; 4800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.packed = (cmdDet.commandQualifier & 0x08) != 0; 4810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville input.helpAvailable = (cmdDet.commandQualifier & 0x80) != 0; 4820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new GetInputParams(cmdDet, input); 4840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (iconId != null) { 4860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 4870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(iconId.recordNumber, this 4880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 4890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 4900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 4920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 4930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 4940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 4950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes REFRESH proactive command from the SIM card. 4960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 4970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 4980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 4990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 5000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 5010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processRefresh(CommandDetails cmdDet, 5020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) { 5030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process Refresh"); 5050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // REFRESH proactive command is rerouted by the baseband and handled by 5070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // the telephony layer. IDLE TEXT should be removed for a REFRESH command 5080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // with "initialization" or "reset" 5090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (cmdDet.commandQualifier) { 5100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case REFRESH_NAA_INIT_AND_FULL_FILE_CHANGE: 5110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case REFRESH_NAA_INIT_AND_FILE_CHANGE: 5120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case REFRESH_NAA_INIT: 5130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case REFRESH_UICC_RESET: 5140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new DisplayTextParams(cmdDet, null); 5150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 5160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 5180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 5210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes SELECT_ITEM proactive command from the SIM card. 5220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 5230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 5240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 5250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 5260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 5270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 5280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @throws ResultException 5290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 5300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processSelectItem(CommandDetails cmdDet, 5310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 5320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process SelectItem"); 5340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Menu menu = new Menu(); 5360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId titleIconId = null; 5370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ItemsIconId itemsIconId = null; 5380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Iterator<ComprehensionTlv> iter = ctlvs.iterator(); 5390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, 5410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlvs); 5420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 5430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.title = ValueParser.retrieveAlphaId(ctlv); 5440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville while (true) { 5470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForNextTag(ComprehensionTlvTag.ITEM, iter); 5480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 5490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.items.add(ValueParser.retrieveItem(ctlv)); 5500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 5510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 5520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // We must have at least one menu item. 5560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (menu.items.size() == 0) { 5570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING); 5580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ITEM_ID, ctlvs); 5610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 5620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // CAT items are listed 1...n while list start at 0, need to 5630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // subtract one. 5640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.defaultItem = ValueParser.retrieveItemId(ctlv) - 1; 5650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 5680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 5690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 5700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville titleIconId = ValueParser.retrieveIconId(ctlv); 5710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.titleIconSelfExplanatory = titleIconId.selfExplanatory; 5720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ITEM_ICON_ID_LIST, ctlvs); 5750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 5760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_MULTI_ICONS; 5770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville itemsIconId = ValueParser.retrieveItemsIconId(ctlv); 5780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.itemsIconSelfExplanatory = itemsIconId.selfExplanatory; 5790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean presentTypeSpecified = (cmdDet.commandQualifier & 0x01) != 0; 5820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (presentTypeSpecified) { 5830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if ((cmdDet.commandQualifier & 0x02) == 0) { 5840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.presentationType = PresentationType.DATA_VALUES; 5850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 5860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.presentationType = PresentationType.NAVIGATION_OPTIONS; 5870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 5890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.softKeyPreferred = (cmdDet.commandQualifier & 0x04) != 0; 5900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville menu.helpAvailable = (cmdDet.commandQualifier & 0x80) != 0; 5910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new SelectItemParams(cmdDet, menu, titleIconId != null); 5930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 5940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Load icons data if needed. 5950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch(mIconLoadState) { 5960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case LOAD_NO_ICON: 5970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 5980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case LOAD_SINGLE_ICON: 5990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(titleIconId.recordNumber, this 6000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 6010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 6020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case LOAD_MULTI_ICONS: 6030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int[] recordNumbers = itemsIconId.recordNumbers; 6040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (titleIconId != null) { 6050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Create a new array for all the icons (title and items). 6060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville recordNumbers = new int[itemsIconId.recordNumbers.length + 1]; 6070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville recordNumbers[0] = titleIconId.recordNumber; 6080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville System.arraycopy(itemsIconId.recordNumbers, 0, recordNumbers, 6090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 1, itemsIconId.recordNumbers.length); 6100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcons(recordNumbers, this 6120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 6130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 6140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 6160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes EVENT_NOTIFY message from baseband. 6200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 6210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 6220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 6230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 6240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 6250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 6260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processEventNotify(CommandDetails cmdDet, 6280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 6290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process EventNotify"); 6310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextMessage textMsg = new TextMessage(); 6330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId iconId = null; 6340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, 6360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlvs); 6370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.text = ValueParser.retrieveAlphaId(ctlv); 6380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 6400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 6410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iconId = ValueParser.retrieveIconId(ctlv); 6420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.iconSelfExplanatory = iconId.selfExplanatory; 6430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.responseNeeded = false; 6460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new DisplayTextParams(cmdDet, textMsg); 6470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (iconId != null) { 6490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 6500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(iconId.recordNumber, this 6510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 6520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 6530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 6550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes SET_UP_EVENT_LIST proactive command from the SIM card. 6590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 6600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details object retrieved. 6610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 6620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 6630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 6640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 6650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processSetUpEventList(CommandDetails cmdDet, 6670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) { 6680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process SetUpEventList"); 6700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // 6710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.EVENT_LIST, 6720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // ctlvs); 6730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // if (ctlv != null) { 6740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // try { 6750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // byte[] rawValue = ctlv.getRawValue(); 6760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // int valueIndex = ctlv.getValueIndex(); 6770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // int valueLen = ctlv.getLength(); 6780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // 6790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // } catch (IndexOutOfBoundsException e) {} 6800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // } 6810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 6820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 6830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 6850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes LAUNCH_BROWSER proactive command from the SIM card. 6860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 6870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 6880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 6890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 6900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 6910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 6920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @throws ResultException 6930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 6940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processLaunchBrowser(CommandDetails cmdDet, 6950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 6960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process LaunchBrowser"); 6980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 6990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextMessage confirmMsg = new TextMessage(); 7000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId iconId = null; 7010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville String url = null; 7020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.URL, ctlvs); 7040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 7050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 7060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] rawValue = ctlv.getRawValue(); 7070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int valueIndex = ctlv.getValueIndex(); 7080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int valueLen = ctlv.getLength(); 7090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (valueLen > 0) { 7100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville url = GsmAlphabet.gsm8BitUnpackedToString(rawValue, 7110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville valueIndex, valueLen); 7120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } else { 7130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville url = null; 7140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IndexOutOfBoundsException e) { 7160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); 7170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse alpha identifier. 7210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, ctlvs); 7220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville confirmMsg.text = ValueParser.retrieveAlphaId(ctlv); 7230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse icon identifier 7250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 7260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 7270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iconId = ValueParser.retrieveIconId(ctlv); 7280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville confirmMsg.iconSelfExplanatory = iconId.selfExplanatory; 7290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse command qualifier value. 7320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville LaunchBrowserMode mode; 7330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (cmdDet.commandQualifier) { 7340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case 0x00: 7350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 7360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mode = LaunchBrowserMode.LAUNCH_IF_NOT_ALREADY_LAUNCHED; 7370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 7380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case 0x02: 7390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mode = LaunchBrowserMode.USE_EXISTING_BROWSER; 7400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 7410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case 0x03: 7420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mode = LaunchBrowserMode.LAUNCH_NEW_BROWSER; 7430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 7440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new LaunchBrowserParams(cmdDet, confirmMsg, url, mode); 7470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (iconId != null) { 7490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 7500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(iconId.recordNumber, this 7510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 7520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 7530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 7550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 7580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes PLAY_TONE proactive command from the SIM card. 7590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 7600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details container object. 7610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 7620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 7630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 7640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required.t 7650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @throws ResultException 7660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 7670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processPlayTone(CommandDetails cmdDet, 7680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 7690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process PlayTone"); 7710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Tone tone = null; 7730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextMessage textMsg = new TextMessage(); 7740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Duration duration = null; 7750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId iconId = null; 7760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 7770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TONE, ctlvs); 7780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 7790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Nothing to do for null objects. 7800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv.getLength() > 0) { 7810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville try { 7820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville byte[] rawValue = ctlv.getRawValue(); 7830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int valueIndex = ctlv.getValueIndex(); 7840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int toneVal = rawValue[valueIndex]; 7850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville tone = Tone.fromInt(toneVal); 7860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } catch (IndexOutOfBoundsException e) { 7870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException( 7880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ResultCode.CMD_DATA_NOT_UNDERSTOOD); 7890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse alpha identifier 7930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, ctlvs); 7940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 7950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.text = ValueParser.retrieveAlphaId(ctlv); 7960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 7970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse tone duration 7980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.DURATION, ctlvs); 7990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 8000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville duration = ValueParser.retrieveDuration(ctlv); 8010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse icon identifier 8030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 8040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 8050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iconId = ValueParser.retrieveIconId(ctlv); 8060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.iconSelfExplanatory = iconId.selfExplanatory; 8070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean vibrate = (cmdDet.commandQualifier & 0x01) != 0x00; 8100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.responseNeeded = false; 8120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new PlayToneParams(cmdDet, textMsg, tone, duration, vibrate); 8130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (iconId != null) { 8150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 8160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(iconId.recordNumber, this 8170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 8180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 8190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 8210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville /** 8240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * Processes SETUP_CALL proactive command from the SIM card. 8250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * 8260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param cmdDet Command Details object retrieved from the proactive command 8270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object 8280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @param ctlvs List of ComprehensionTlv objects following Command Details 8290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * object and Device Identities object within the proactive command 8300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * @return true if the command is processing is pending and additional 8310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville * asynchronous processing is required. 8320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville */ 8330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processSetupCall(CommandDetails cmdDet, 8340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 8350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process SetupCall"); 8360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville Iterator<ComprehensionTlv> iter = ctlvs.iterator(); 8380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = null; 8390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // User confirmation phase message. 8400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextMessage confirmMsg = new TextMessage(); 8410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // Call set up phase message. 8420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextMessage callMsg = new TextMessage(); 8430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId confirmIconId = null; 8440825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId callIconId = null; 8450825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8460825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // get confirmation message string. 8470825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForNextTag(ComprehensionTlvTag.ALPHA_ID, iter); 8480825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville confirmMsg.text = ValueParser.retrieveAlphaId(ctlv); 8490825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8500825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 8510825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 8520825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville confirmIconId = ValueParser.retrieveIconId(ctlv); 8530825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville confirmMsg.iconSelfExplanatory = confirmIconId.selfExplanatory; 8540825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8550825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8560825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // get call set up message string. 8570825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForNextTag(ComprehensionTlvTag.ALPHA_ID, iter); 8580825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 8590825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville callMsg.text = ValueParser.retrieveAlphaId(ctlv); 8600825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8610825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8620825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 8630825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 8640825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville callIconId = ValueParser.retrieveIconId(ctlv); 8650825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville callMsg.iconSelfExplanatory = callIconId.selfExplanatory; 8660825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8670825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8680825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new CallSetupParams(cmdDet, confirmMsg, callMsg); 8690825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8700825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (confirmIconId != null || callIconId != null) { 8710825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_MULTI_ICONS; 8720825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville int[] recordNumbers = new int[2]; 8730825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville recordNumbers[0] = confirmIconId != null 8740825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ? confirmIconId.recordNumber : -1; 8750825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville recordNumbers[1] = callIconId != null ? callIconId.recordNumber 8760825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville : -1; 8770825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8780825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcons(recordNumbers, this 8790825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 8800825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 8810825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8820825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 8830825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 8840825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 8850825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processProvideLocalInfo(CommandDetails cmdDet, List<ComprehensionTlv> ctlvs) 8860825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throws ResultException { 8870825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process ProvideLocalInfo"); 8880825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville switch (cmdDet.commandQualifier) { 8890825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case DTTZ_SETTING: 8900825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "PLI [DTTZ_SETTING]"); 8910825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new CommandParams(cmdDet); 8920825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 8930825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville case LANGUAGE_SETTING: 8940825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "PLI [LANGUAGE_SETTING]"); 8950825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new CommandParams(cmdDet); 8960825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville break; 8970825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville default: 8980825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "PLI[" + cmdDet.commandQualifier + "] Command Not Supported"); 8990825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new CommandParams(cmdDet); 9000825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville throw new ResultException(ResultCode.BEYOND_TERMINAL_CAPABILITY); 9010825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9020825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 9030825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9040825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9050825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville private boolean processBIPClient(CommandDetails cmdDet, 9060825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville List<ComprehensionTlv> ctlvs) throws ResultException { 9070825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AppInterface.CommandType commandType = 9080825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville AppInterface.CommandType.fromInt(cmdDet.typeOfCommand); 9090825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (commandType != null) { 9100825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "process "+ commandType.name()); 9110825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9120825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9130825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville TextMessage textMsg = new TextMessage(); 9140825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville IconId iconId = null; 9150825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ComprehensionTlv ctlv = null; 9160825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville boolean has_alpha_id = false; 9170825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9180825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse alpha identifier 9190825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, ctlvs); 9200825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 9210825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.text = ValueParser.retrieveAlphaId(ctlv); 9220825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville CatLog.d(this, "alpha TLV text=" + textMsg.text); 9230825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville has_alpha_id = true; 9240825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9250825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9260825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville // parse icon identifier 9270825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 9280825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (ctlv != null) { 9290825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville iconId = ValueParser.retrieveIconId(ctlv); 9300825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.iconSelfExplanatory = iconId.selfExplanatory; 9310825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9320825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9330825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville textMsg.responseNeeded = false; 9340825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mCmdParams = new BIPClientParams(cmdDet, textMsg, has_alpha_id); 9350825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville 9360825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville if (iconId != null) { 9370825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoadState = LOAD_SINGLE_ICON; 9380825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville mIconLoader.loadIcon(iconId.recordNumber, this.obtainMessage(MSG_ID_LOAD_ICON_DONE)); 9390825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return true; 9400825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9410825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville return false; 9420825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville } 9430825495a331bb44df395a0cdb79fab85e68db5d5Wink Saville} 944