19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenkapackage com.android.internal.telephony.cat; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Bitmap; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Handler; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Message; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 23767a662ecde33c3979bf02b793d392aca0403162Wink Savilleimport com.android.internal.telephony.GsmAlphabet; 244f1244e0de634c6b7a0e67e1a7cb9bf7f914e574Alex Yakavenkaimport com.android.internal.telephony.IccFileHandler; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.Iterator; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.util.List; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Factory class, used for decoding raw byte arrays, received from baseband, 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * into a CommandParams object. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass CommandParamsFactory extends Handler { 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static CommandParamsFactory sInstance = null; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private IconLoader mIconLoader; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CommandParams mCmdParams = null; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private int mIconLoadState = LOAD_NO_ICON; 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private RilMessageDecoder mCaller = null; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // constants 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int MSG_ID_LOAD_ICON_DONE = 1; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // loading icons state parameters. 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int LOAD_NO_ICON = 0; 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int LOAD_SINGLE_ICON = 1; 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int LOAD_MULTI_ICONS = 2; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Command Qualifier values for refresh command 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int REFRESH_NAA_INIT_AND_FULL_FILE_CHANGE = 0x00; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int REFRESH_NAA_INIT_AND_FILE_CHANGE = 0x02; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int REFRESH_NAA_INIT = 0x03; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static final int REFRESH_UICC_RESET = 0x04; 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 55e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla // Command Qualifier values for PLI command 5638b6999d9e7f6a1193fd3105235afa2502013740Kazuhiro Ondo static final int DTTZ_SETTING = 0x03; 57e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla static final int LANGUAGE_SETTING = 0x04; 58e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static synchronized CommandParamsFactory getInstance(RilMessageDecoder caller, 604f1244e0de634c6b7a0e67e1a7cb9bf7f914e574Alex Yakavenka IccFileHandler fh) { 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (sInstance != null) { 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return sInstance; 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (fh != null) { 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new CommandParamsFactory(caller, fh); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 704f1244e0de634c6b7a0e67e1a7cb9bf7f914e574Alex Yakavenka private CommandParamsFactory(RilMessageDecoder caller, IccFileHandler fh) { 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCaller = caller; 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader = IconLoader.getInstance(this, fh); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private CommandDetails processCommandDetails(List<ComprehensionTlv> ctlvs) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CommandDetails cmdDet = null; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlvs != null) { 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Search for the Command Details object. 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlvCmdDet = searchForTag( 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlvTag.COMMAND_DETAILS, ctlvs); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlvCmdDet != null) { 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdDet = ValueParser.retrieveCommandDetails(ctlvCmdDet); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (ResultException e) { 86a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "Failed to procees command details"); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return cmdDet; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void make(BerTlv berTlv) { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (berTlv == null) { 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // reset global state parameters. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = null; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_NO_ICON; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // only proactive command messages are processed. 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (berTlv.getTag() != BerTlv.BER_PROACTIVE_COMMAND_TAG) { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendCmdParams(ResultCode.CMD_TYPE_NOT_UNDERSTOOD); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean cmdPending = false; 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs = berTlv.getComprehensionTlvs(); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // process command dtails from the tlv list. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CommandDetails cmdDet = processCommandDetails(ctlvs); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cmdDet == null) { 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendCmdParams(ResultCode.CMD_TYPE_NOT_UNDERSTOOD); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // extract command type enumeration from the raw value stored inside 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the Command Details object. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AppInterface.CommandType cmdType = AppInterface.CommandType 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .fromInt(cmdDet.typeOfCommand); 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (cmdType == null) { 119e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla // This PROACTIVE COMMAND is presently not handled. Hence set 120e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla // result code as BEYOND_TERMINAL_CAPABILITY in TR. 121e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla mCmdParams = new CommandParams(cmdDet); 122e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla sendCmdParams(ResultCode.BEYOND_TERMINAL_CAPABILITY); 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (cmdType) { 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_UP_MENU: 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processSelectItem(cmdDet, ctlvs); 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SELECT_ITEM: 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processSelectItem(cmdDet, ctlvs); 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case DISPLAY_TEXT: 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processDisplayText(cmdDet, ctlvs); 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_UP_IDLE_MODE_TEXT: 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processSetUpIdleModeText(cmdDet, ctlvs); 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GET_INKEY: 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processGetInkey(cmdDet, ctlvs); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GET_INPUT: 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processGetInput(cmdDet, ctlvs); 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SEND_DTMF: 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SEND_SMS: 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SEND_SS: 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SEND_USSD: 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processEventNotify(cmdDet, ctlvs); 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case SET_UP_CALL: 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processSetupCall(cmdDet, ctlvs); 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case REFRESH: 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project processRefresh(cmdDet, ctlvs); 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = false; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LAUNCH_BROWSER: 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processLaunchBrowser(cmdDet, ctlvs); 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case PLAY_TONE: 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project cmdPending = processPlayTone(cmdDet, ctlvs); 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 165e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla case PROVIDE_LOCAL_INFORMATION: 166e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla cmdPending = processProvideLocalInfo(cmdDet, ctlvs); 167e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla break; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // unsupported proactive commands 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new CommandParams(cmdDet); 171e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla sendCmdParams(ResultCode.BEYOND_TERMINAL_CAPABILITY); 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (ResultException e) { 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new CommandParams(cmdDet); 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendCmdParams(e.result()); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!cmdPending) { 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendCmdParams(ResultCode.OK); 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void handleMessage(Message msg) { 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (msg.what) { 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case MSG_ID_LOAD_ICON_DONE: 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sendCmdParams(setIcons(msg.obj)); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ResultCode setIcons(Object data) { 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Bitmap[] icons = null; 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int iconIndex = 0; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (data == null) { 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ResultCode.PRFRMD_ICON_NOT_DISPLAYED; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch(mIconLoadState) { 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LOAD_SINGLE_ICON: 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams.setIcon((Bitmap) data); 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LOAD_MULTI_ICONS: 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project icons = (Bitmap[]) data; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // set each item icon. 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (Bitmap icon : icons) { 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams.setIcon(icon); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ResultCode.OK; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private void sendCmdParams(ResultCode resCode) { 216fc5b4802a544b6ca304aa7e58a26018ef714d233Wink Saville mCaller.sendMsgParamsDecoded(resCode, mCmdParams); 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Search for a COMPREHENSION-TLV object with the given tag from a list 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tag A tag to search for 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects used to search in 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A ComprehensionTlv object that has the tag value of {@code tag}. 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If no object is found with the tag, null is returned. 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ComprehensionTlv searchForTag(ComprehensionTlvTag tag, 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) { 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Iterator<ComprehensionTlv> iter = ctlvs.iterator(); 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return searchForNextTag(tag, iter); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Search for the next COMPREHENSION-TLV object with the given tag from a 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * list iterated by {@code iter}. {@code iter} points to the object next to 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the found object when this method returns. Used for searching the same 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * list for similar tags, usually item id. 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param tag A tag to search for 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param iter Iterator for ComprehensionTlv objects used for search 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return A ComprehensionTlv object that has the tag value of {@code tag}. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * If no object is found with the tag, null is returned. 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private ComprehensionTlv searchForNextTag(ComprehensionTlvTag tag, 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Iterator<ComprehensionTlv> iter) { 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int tagValue = tag.value(); 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (iter.hasNext()) { 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = iter.next(); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv.getTag() == tagValue) { 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ctlv; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return null; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes DISPLAY_TEXT proactive command from the SIM card. 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws ResultException 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean processDisplayText(CommandDetails cmdDet, 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws ResultException { 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 272a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process DisplayText"); 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextMessage textMsg = new TextMessage(); 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId iconId = null; 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TEXT_STRING, 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlvs); 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.text = ValueParser.retrieveTextString(ctlv); 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If the tlv object doesn't exist or the it is a null object reply 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // with command not understood. 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (textMsg.text == null) { 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.IMMEDIATE_RESPONSE, ctlvs); 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.responseNeeded = false; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse icon identifier 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = ValueParser.retrieveIconId(ctlv); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.iconSelfExplanatory = iconId.selfExplanatory; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse tone duration 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.DURATION, ctlvs); 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.duration = ValueParser.retrieveDuration(ctlv); 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Parse command qualifier parameters. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.isHighPriority = (cmdDet.commandQualifier & 0x01) != 0; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.userClear = (cmdDet.commandQualifier & 0x80) != 0; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new DisplayTextParams(cmdDet, textMsg); 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iconId != null) { 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_SINGLE_ICON; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcon(iconId.recordNumber, this 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes SET_UP_IDLE_MODE_TEXT proactive command from the SIM card. 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws ResultException 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean processSetUpIdleModeText(CommandDetails cmdDet, 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) throws ResultException { 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 332a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process SetUpIdleModeText"); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextMessage textMsg = new TextMessage(); 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId iconId = null; 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TEXT_STRING, 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlvs); 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.text = ValueParser.retrieveTextString(ctlv); 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // load icons only when text exist. 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (textMsg.text != null) { 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = ValueParser.retrieveIconId(ctlv); 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.iconSelfExplanatory = iconId.selfExplanatory; 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new DisplayTextParams(cmdDet, textMsg); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iconId != null) { 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_SINGLE_ICON; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcon(iconId.recordNumber, this 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes GET_INKEY proactive command from the SIM card. 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws ResultException 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean processGetInkey(CommandDetails cmdDet, 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) throws ResultException { 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 375a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process GetInkey"); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Input input = new Input(); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId iconId = null; 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TEXT_STRING, 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlvs); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.text = ValueParser.retrieveTextString(ctlv); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING); 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse icon identifier 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = ValueParser.retrieveIconId(ctlv); 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 393e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla // parse duration 394e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla ctlv = searchForTag(ComprehensionTlvTag.DURATION, ctlvs); 395e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla if (ctlv != null) { 396e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla input.duration = ValueParser.retrieveDuration(ctlv); 397e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla } 398e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.minLen = 1; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.maxLen = 1; 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.digitOnly = (cmdDet.commandQualifier & 0x01) == 0; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.ucs2 = (cmdDet.commandQualifier & 0x02) != 0; 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.yesNo = (cmdDet.commandQualifier & 0x04) != 0; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.helpAvailable = (cmdDet.commandQualifier & 0x80) != 0; 406e81932e92a773538e1ad1ad1d4bfd8f241860c8ddujin.cha input.echo = true; 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new GetInputParams(cmdDet, input); 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iconId != null) { 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_SINGLE_ICON; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcon(iconId.recordNumber, this 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes GET_INPUT proactive command from the SIM card. 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws ResultException 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean processGetInput(CommandDetails cmdDet, 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) throws ResultException { 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 432a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process GetInput"); 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Input input = new Input(); 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId iconId = null; 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TEXT_STRING, 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlvs); 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.text = ValueParser.retrieveTextString(ctlv); 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING); 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.RESPONSE_LENGTH, ctlvs); 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] rawValue = ctlv.getRawValue(); 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int valueIndex = ctlv.getValueIndex(); 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.minLen = rawValue[valueIndex] & 0xff; 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.maxLen = rawValue[valueIndex + 1] & 0xff; 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IndexOutOfBoundsException e) { 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.DEFAULT_TEXT, ctlvs); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.defaultText = ValueParser.retrieveTextString(ctlv); 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse icon identifier 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = ValueParser.retrieveIconId(ctlv); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.digitOnly = (cmdDet.commandQualifier & 0x01) == 0; 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.ucs2 = (cmdDet.commandQualifier & 0x02) != 0; 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.echo = (cmdDet.commandQualifier & 0x04) == 0; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.packed = (cmdDet.commandQualifier & 0x08) != 0; 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project input.helpAvailable = (cmdDet.commandQualifier & 0x80) != 0; 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new GetInputParams(cmdDet, input); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iconId != null) { 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_SINGLE_ICON; 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcon(iconId.recordNumber, this 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes REFRESH proactive command from the SIM card. 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean processRefresh(CommandDetails cmdDet, 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) { 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 496a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process Refresh"); 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // REFRESH proactive command is rerouted by the baseband and handled by 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the telephony layer. IDLE TEXT should be removed for a REFRESH command 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // with "initialization" or "reset" 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (cmdDet.commandQualifier) { 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case REFRESH_NAA_INIT_AND_FULL_FILE_CHANGE: 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case REFRESH_NAA_INIT_AND_FILE_CHANGE: 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case REFRESH_NAA_INIT: 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case REFRESH_UICC_RESET: 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new DisplayTextParams(cmdDet, null); 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes SELECT_ITEM proactive command from the SIM card. 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws ResultException 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean processSelectItem(CommandDetails cmdDet, 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) throws ResultException { 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 525a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process SelectItem"); 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Menu menu = new Menu(); 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId titleIconId = null; 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ItemsIconId itemsIconId = null; 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Iterator<ComprehensionTlv> iter = ctlvs.iterator(); 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlvs); 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.title = ValueParser.retrieveAlphaId(ctlv); 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project while (true) { 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForNextTag(ComprehensionTlvTag.ITEM, iter); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.items.add(ValueParser.retrieveItem(ctlv)); 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We must have at least one menu item. 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (menu.items.size() == 0) { 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ITEM_ID, ctlvs); 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 554a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka // CAT items are listed 1...n while list start at 0, need to 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // subtract one. 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.defaultItem = ValueParser.retrieveItemId(ctlv) - 1; 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_SINGLE_ICON; 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project titleIconId = ValueParser.retrieveIconId(ctlv); 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.titleIconSelfExplanatory = titleIconId.selfExplanatory; 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ITEM_ICON_ID_LIST, ctlvs); 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_MULTI_ICONS; 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project itemsIconId = ValueParser.retrieveItemsIconId(ctlv); 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.itemsIconSelfExplanatory = itemsIconId.selfExplanatory; 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean presentTypeSpecified = (cmdDet.commandQualifier & 0x01) != 0; 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (presentTypeSpecified) { 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((cmdDet.commandQualifier & 0x02) == 0) { 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.presentationType = PresentationType.DATA_VALUES; 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.presentationType = PresentationType.NAVIGATION_OPTIONS; 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.softKeyPreferred = (cmdDet.commandQualifier & 0x04) != 0; 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project menu.helpAvailable = (cmdDet.commandQualifier & 0x80) != 0; 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new SelectItemParams(cmdDet, menu, titleIconId != null); 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Load icons data if needed. 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch(mIconLoadState) { 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LOAD_NO_ICON: 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LOAD_SINGLE_ICON: 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcon(titleIconId.recordNumber, this 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case LOAD_MULTI_ICONS: 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] recordNumbers = itemsIconId.recordNumbers; 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (titleIconId != null) { 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Create a new array for all the icons (title and items). 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project recordNumbers = new int[itemsIconId.recordNumbers.length + 1]; 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project recordNumbers[0] = titleIconId.recordNumber; 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project System.arraycopy(itemsIconId.recordNumbers, 0, recordNumbers, 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1, itemsIconId.recordNumbers.length); 6029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcons(recordNumbers, this 6049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 6059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 6069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes EVENT_NOTIFY message from baseband. 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean processEventNotify(CommandDetails cmdDet, 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) throws ResultException { 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 622a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process EventNotify"); 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextMessage textMsg = new TextMessage(); 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId iconId = null; 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlvs); 629e81932e92a773538e1ad1ad1d4bfd8f241860c8ddujin.cha textMsg.text = ValueParser.retrieveAlphaId(ctlv); 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 6339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = ValueParser.retrieveIconId(ctlv); 6349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.iconSelfExplanatory = iconId.selfExplanatory; 6359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.responseNeeded = false; 6389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new DisplayTextParams(cmdDet, textMsg); 6399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iconId != null) { 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_SINGLE_ICON; 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcon(iconId.recordNumber, this 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes SET_UP_EVENT_LIST proactive command from the SIM card. 6512563a3ac05dd3cf8a07203ae682c243f2e793137Wink Saville * 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details object retrieved. 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 6549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 6559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 6569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 6579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 6589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private boolean processSetUpEventList(CommandDetails cmdDet, 6599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) { 6609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 661a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process SetUpEventList"); 6629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.EVENT_LIST, 6649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // ctlvs); 6659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if (ctlv != null) { 6669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // try { 6679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // byte[] rawValue = ctlv.getRawValue(); 6689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // int valueIndex = ctlv.getValueIndex(); 6699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // int valueLen = ctlv.getLength(); 6709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 6719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } catch (IndexOutOfBoundsException e) {} 6729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // } 6739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 6749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 6779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes LAUNCH_BROWSER proactive command from the SIM card. 6789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 6799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 6809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 6819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 6829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 6839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 6849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws ResultException 6859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 686a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka private boolean processLaunchBrowser(CommandDetails cmdDet, 6879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) throws ResultException { 6889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process LaunchBrowser"); 6909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextMessage confirmMsg = new TextMessage(); 6929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId iconId = null; 6939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project String url = null; 6949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.URL, ctlvs); 6969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 6979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 6989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] rawValue = ctlv.getRawValue(); 6999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int valueIndex = ctlv.getValueIndex(); 7009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int valueLen = ctlv.getLength(); 7019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (valueLen > 0) { 7029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project url = GsmAlphabet.gsm8BitUnpackedToString(rawValue, 7039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project valueIndex, valueLen); 7049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } else { 7059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project url = null; 7069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IndexOutOfBoundsException e) { 7089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); 7099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse alpha identifier. 7139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, ctlvs); 714e81932e92a773538e1ad1ad1d4bfd8f241860c8ddujin.cha confirmMsg.text = ValueParser.retrieveAlphaId(ctlv); 715e81932e92a773538e1ad1ad1d4bfd8f241860c8ddujin.cha 7169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse icon identifier 7179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 7189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 7199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = ValueParser.retrieveIconId(ctlv); 7209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project confirmMsg.iconSelfExplanatory = iconId.selfExplanatory; 7219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse command qualifier value. 7249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LaunchBrowserMode mode; 7259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (cmdDet.commandQualifier) { 7269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 0x00: 7279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 7289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mode = LaunchBrowserMode.LAUNCH_IF_NOT_ALREADY_LAUNCHED; 7299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 0x02: 7319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mode = LaunchBrowserMode.USE_EXISTING_BROWSER; 7329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case 0x03: 7349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mode = LaunchBrowserMode.LAUNCH_NEW_BROWSER; 7359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 7369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new LaunchBrowserParams(cmdDet, confirmMsg, url, mode); 7399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iconId != null) { 7419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_SINGLE_ICON; 7429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcon(iconId.recordNumber, this 7439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 7449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 7459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 7479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 7509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes PLAY_TONE proactive command from the SIM card. 7519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 7529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details container object. 7539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 7549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 7559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 7569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required.t 7579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @throws ResultException 7589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka private boolean processPlayTone(CommandDetails cmdDet, 7609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) throws ResultException { 7619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 762a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process PlayTone"); 7639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Tone tone = null; 7659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextMessage textMsg = new TextMessage(); 7669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Duration duration = null; 7679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId iconId = null; 7689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TONE, ctlvs); 7709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 7719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Nothing to do for null objects. 7729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv.getLength() > 0) { 7739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project try { 7749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project byte[] rawValue = ctlv.getRawValue(); 7759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int valueIndex = ctlv.getValueIndex(); 7769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int toneVal = rawValue[valueIndex]; 7779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project tone = Tone.fromInt(toneVal); 7789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } catch (IndexOutOfBoundsException e) { 7799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throw new ResultException( 7809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ResultCode.CMD_DATA_NOT_UNDERSTOOD); 7819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse alpha identifier 7859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, ctlvs); 7869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 7879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.text = ValueParser.retrieveAlphaId(ctlv); 7889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse tone duration 7909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.DURATION, ctlvs); 7919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 7929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project duration = ValueParser.retrieveDuration(ctlv); 7939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 7949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // parse icon identifier 7959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 7969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 7979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project iconId = ValueParser.retrieveIconId(ctlv); 7989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.iconSelfExplanatory = iconId.selfExplanatory; 7999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project boolean vibrate = (cmdDet.commandQualifier & 0x01) != 0x00; 8029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project textMsg.responseNeeded = false; 8049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new PlayToneParams(cmdDet, textMsg, tone, duration, vibrate); 8059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (iconId != null) { 8079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_SINGLE_ICON; 8089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcon(iconId.recordNumber, this 8099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 8109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 8119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 8139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 8169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Processes SETUP_CALL proactive command from the SIM card. 8179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 8189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param cmdDet Command Details object retrieved from the proactive command 8199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object 8209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param ctlvs List of ComprehensionTlv objects following Command Details 8219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * object and Device Identities object within the proactive command 8229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @return true if the command is processing is pending and additional 8239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * asynchronous processing is required. 8249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 825a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka private boolean processSetupCall(CommandDetails cmdDet, 8269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project List<ComprehensionTlv> ctlvs) throws ResultException { 827a27353c1965911f69be8d02a01b15389189eab9dAlex Yakavenka CatLog.d(this, "process SetupCall"); 8289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project Iterator<ComprehensionTlv> iter = ctlvs.iterator(); 8309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ComprehensionTlv ctlv = null; 8319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // User confirmation phase message. 8329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextMessage confirmMsg = new TextMessage(); 8339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // Call set up phase message. 8349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TextMessage callMsg = new TextMessage(); 8359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId confirmIconId = null; 8369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project IconId callIconId = null; 8379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get confirmation message string. 8399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForNextTag(ComprehensionTlvTag.ALPHA_ID, iter); 840e81932e92a773538e1ad1ad1d4bfd8f241860c8ddujin.cha confirmMsg.text = ValueParser.retrieveAlphaId(ctlv); 8419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 8439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 8449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project confirmIconId = ValueParser.retrieveIconId(ctlv); 8459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project confirmMsg.iconSelfExplanatory = confirmIconId.selfExplanatory; 8469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // get call set up message string. 8499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForNextTag(ComprehensionTlvTag.ALPHA_ID, iter); 8509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 8519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMsg.text = ValueParser.retrieveAlphaId(ctlv); 8529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); 8559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (ctlv != null) { 8569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callIconId = ValueParser.retrieveIconId(ctlv); 8579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project callMsg.iconSelfExplanatory = callIconId.selfExplanatory; 8589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mCmdParams = new CallSetupParams(cmdDet, confirmMsg, callMsg); 8619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (confirmIconId != null || callIconId != null) { 8639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoadState = LOAD_MULTI_ICONS; 8649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int[] recordNumbers = new int[2]; 8659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project recordNumbers[0] = confirmIconId != null 8669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ? confirmIconId.recordNumber : -1; 8679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project recordNumbers[1] = callIconId != null ? callIconId.recordNumber 8689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project : -1; 8699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mIconLoader.loadIcons(recordNumbers, this 8719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project .obtainMessage(MSG_ID_LOAD_ICON_DONE)); 8729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 8739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 8749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 8759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 876e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla 877e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla private boolean processProvideLocalInfo(CommandDetails cmdDet, List<ComprehensionTlv> ctlvs) 878e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla throws ResultException { 879e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla CatLog.d(this, "process ProvideLocalInfo"); 880e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla switch (cmdDet.commandQualifier) { 88138b6999d9e7f6a1193fd3105235afa2502013740Kazuhiro Ondo case DTTZ_SETTING: 88238b6999d9e7f6a1193fd3105235afa2502013740Kazuhiro Ondo CatLog.d(this, "PLI [DTTZ_SETTING]"); 88338b6999d9e7f6a1193fd3105235afa2502013740Kazuhiro Ondo mCmdParams = new CommandParams(cmdDet); 88438b6999d9e7f6a1193fd3105235afa2502013740Kazuhiro Ondo break; 885e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla case LANGUAGE_SETTING: 886e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla CatLog.d(this, "PLI [LANGUAGE_SETTING]"); 887e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla mCmdParams = new CommandParams(cmdDet); 888e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla break; 889e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla default: 890e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla CatLog.d(this, "PLI[" + cmdDet.commandQualifier + "] Command Not Supported"); 891e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla mCmdParams = new CommandParams(cmdDet); 892e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla throw new ResultException(ResultCode.BEYOND_TERMINAL_CAPABILITY); 893e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla } 894e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla return false; 895e4866d016512d6670f98508846ccfb92a439a79cNaveen Kalla } 8969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 897