/** * Processes PLAY_TONE proactive command from the SIM card. * * @param cmdDet Command Details container object. * @param ctlvs List of ComprehensionTlv objects following Command Details object and Device * Identities object within the proactive command * @return true if the command is processing is pending and additional asynchronous processing is * required.t * @throws ResultException */ private boolean processPlayTone(CommandDetails cmdDet, List<ComprehensionTlv> ctlvs) throws ResultException { CatLog.d(this, "process PlayTone"); Tone tone = null; TextMessage textMsg = new TextMessage(); Duration duration = null; IconId iconId = null; ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.TONE, ctlvs); if (ctlv != null) { // Nothing to do for null objects. if (ctlv.getLength() > 0) { try { byte[] rawValue = ctlv.getRawValue(); int valueIndex = ctlv.getValueIndex(); int toneVal = rawValue[valueIndex]; tone = Tone.fromInt(toneVal); } catch (IndexOutOfBoundsException e) { throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); } } } // parse alpha identifier ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, ctlvs); if (ctlv != null) { textMsg.text = ValueParser.retrieveAlphaId(ctlv); } // parse tone duration ctlv = searchForTag(ComprehensionTlvTag.DURATION, ctlvs); if (ctlv != null) { duration = ValueParser.retrieveDuration(ctlv); } // parse icon identifier ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs); if (ctlv != null) { iconId = ValueParser.retrieveIconId(ctlv); textMsg.iconSelfExplanatory = iconId.selfExplanatory; } boolean vibrate = (cmdDet.commandQualifier & 0x01) != 0x00; textMsg.responseNeeded = false; mCmdParams = new PlayToneParams(cmdDet, textMsg, tone, duration, vibrate); if (iconId != null) { mIconLoadState = LOAD_SINGLE_ICON; mIconLoader.loadIcon(iconId.recordNumber, this.obtainMessage(MSG_ID_LOAD_ICON_DONE)); return true; } return false; }