diff options
author | Jüri Schultz <jyri@schultz.ee> | 2012-06-27 10:11:20 +0300 |
---|---|---|
committer | codeworkx <daniel.hillenbrand@codeworkx.de> | 2012-07-06 15:54:33 +0200 |
commit | 53757cff2b2d04219c7fdc9bc977af0aa351f64e (patch) | |
tree | a135cf6232a7c9b6d5907bfc60fcf1b9386d5ffb | |
parent | 0dac9bf80c4ef640acd775557378c0c78997ab25 (diff) | |
download | frameworks_base-53757cff2b2d04219c7fdc9bc977af0aa351f64e.zip frameworks_base-53757cff2b2d04219c7fdc9bc977af0aa351f64e.tar.gz frameworks_base-53757cff2b2d04219c7fdc9bc977af0aa351f64e.tar.bz2 |
telephony: update stk service functionality for Samsung phones
Change-Id: I16015d29a969dfe6ed6dac118db39230b1b77ea1
15 files changed, 392 insertions, 40 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index a337d14..d6c00c2 100755 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -835,4 +835,7 @@ kill the foreground app. --> <integer name="config_backKillTimeout">2000</integer> + <!--Boolean to enable stk functionality on Samsung phones--> + <bool name="config_samsung_stk">false</bool> + </resources> diff --git a/telephony/java/com/android/internal/telephony/CommandsInterface.java b/telephony/java/com/android/internal/telephony/CommandsInterface.java index abcee78..5b12e43 100644 --- a/telephony/java/com/android/internal/telephony/CommandsInterface.java +++ b/telephony/java/com/android/internal/telephony/CommandsInterface.java @@ -1652,4 +1652,11 @@ public interface CommandsInterface { * CM-specific: Ask the RIL about the presence of back-compat flags */ public boolean needsOldRilFeature(String feature); + /** + * @hide + * samsung stk service implementation - set up registrant for sending + * sms send result from modem(RIL) to catService + */ + void setOnCatSendSmsResult(Handler h, int what, Object obj); + void unSetOnCatSendSmsResult(Handler h); } diff --git a/telephony/java/com/android/internal/telephony/IccSmsInterfaceManager.java b/telephony/java/com/android/internal/telephony/IccSmsInterfaceManager.java index 9763265..d0da285 100644 --- a/telephony/java/com/android/internal/telephony/IccSmsInterfaceManager.java +++ b/telephony/java/com/android/internal/telephony/IccSmsInterfaceManager.java @@ -212,6 +212,19 @@ public abstract class IccSmsInterfaceManager extends ISms.Stub { return data; } + /** + * stk send sms Samsung way + * @param smsc + * @param pdu + * @param sentIntent + * @param deliveryIntent + */ + public void sendRawPduSat(byte[] smsc, byte[] pdu, PendingIntent sentIntent, + PendingIntent deliveryIntent) { + mPhone.getContext(); + mDispatcher.sendRawPdu(smsc, pdu, sentIntent, deliveryIntent); + } + protected abstract void log(String msg); } diff --git a/telephony/java/com/android/internal/telephony/RIL.java b/telephony/java/com/android/internal/telephony/RIL.java index b8e7029..d4015ae 100644 --- a/telephony/java/com/android/internal/telephony/RIL.java +++ b/telephony/java/com/android/internal/telephony/RIL.java @@ -41,6 +41,7 @@ import android.os.Message; import android.os.Parcel; import android.os.PowerManager; import android.os.SystemProperties; +import android.os.Registrant; import android.os.PowerManager.WakeLock; import android.telephony.NeighboringCellInfo; import android.telephony.PhoneNumberUtils; @@ -267,6 +268,26 @@ public class RIL extends BaseCommands implements CommandsInterface { } }; + protected Registrant mCatSendSmsResultRegistrant; + /** + * samsung stk service implementation - set up registrant for sending + * sms send result from modem(RIL) to catService + * @param h + * @param what + * @param obj + */ + public void setOnCatSendSmsResult(Handler h, int what, Object obj) { + mCatSendSmsResultRegistrant = new Registrant(h, what, obj); + } + + /** + * + * @param h + */ + public void unSetOnCatSendSmsResult(Handler h) { + mCatSendSmsResultRegistrant.clear(); + } + class RILSender extends Handler implements Runnable { public RILSender(Looper looper) { super(looper); @@ -2467,6 +2488,8 @@ public class RIL extends BaseCommands implements CommandsInterface { case RIL_UNSOL_CDMA_PRL_CHANGED: ret = responseInts(p); break; case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: ret = responseVoid(p); break; case RIL_UNSOL_RIL_CONNECTED: ret = responseInts(p); break; + //samsung stk service implementation + case RIL_UNSOL_STK_SEND_SMS_RESULT: ret = responseInts(p); break; default: throw new RuntimeException("Unrecognized unsol response: " + response); @@ -2812,6 +2835,19 @@ public class RIL extends BaseCommands implements CommandsInterface { notifyRegistrantsRilConnectionChanged(((int[])ret)[0]); break; } + + //samsung stk service implementation + case RIL_UNSOL_STK_SEND_SMS_RESULT: + if (Resources.getSystem(). + getBoolean(com.android.internal.R.bool.config_samsung_stk)) { + if (RILJ_LOGD) unsljLogRet(response, ret); + + if (mCatSendSmsResultRegistrant != null) { + mCatSendSmsResultRegistrant.notifyRegistrant( + new AsyncResult (null, ret, null)); + } + } + break; } } @@ -3608,6 +3644,7 @@ public class RIL extends BaseCommands implements CommandsInterface { case RIL_UNSOL_CDMA_PRL_CHANGED: return "UNSOL_CDMA_PRL_CHANGED"; case RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE: return "UNSOL_EXIT_EMERGENCY_CALLBACK_MODE"; case RIL_UNSOL_RIL_CONNECTED: return "UNSOL_RIL_CONNECTED"; + case RIL_UNSOL_STK_SEND_SMS_RESULT: return "RIL_UNSOL_STK_SEND_SMS_RESULT"; default: return "<unknown response: "+request+">"; } } diff --git a/telephony/java/com/android/internal/telephony/RILConstants.java b/telephony/java/com/android/internal/telephony/RILConstants.java index 1bf2064..36c616a 100644 --- a/telephony/java/com/android/internal/telephony/RILConstants.java +++ b/telephony/java/com/android/internal/telephony/RILConstants.java @@ -300,4 +300,5 @@ cat include/telephony/ril.h | \ int RIL_UNSOL_CDMA_PRL_CHANGED = 1032; int RIL_UNSOL_EXIT_EMERGENCY_CALLBACK_MODE = 1033; int RIL_UNSOL_RIL_CONNECTED = 1034; + int RIL_UNSOL_STK_SEND_SMS_RESULT = 11002; /* Samsung specific */ } diff --git a/telephony/java/com/android/internal/telephony/Smdk4210RIL.java b/telephony/java/com/android/internal/telephony/Smdk4210RIL.java index 488b3ba..4226a7e 100644 --- a/telephony/java/com/android/internal/telephony/Smdk4210RIL.java +++ b/telephony/java/com/android/internal/telephony/Smdk4210RIL.java @@ -118,7 +118,7 @@ public class Smdk4210RIL extends RIL implements CommandsInterface { static final int RIL_REQUEST_HANGUP_VT = 10052; static final int RIL_UNSOL_RELEASE_COMPLETE_MESSAGE = 11001; - static final int RIL_UNSOL_STK_SEND_SMS_RESULT = 11002; + //static final int RIL_UNSOL_STK_SEND_SMS_RESULT = 11002; static final int RIL_UNSOL_STK_CALL_CONTROL_RESULT = 11003; static final int RIL_UNSOL_DUN_CALL_STATUS = 11004; diff --git a/telephony/java/com/android/internal/telephony/cat/CallControlResult.java b/telephony/java/com/android/internal/telephony/cat/CallControlResult.java new file mode 100644 index 0000000..2dbc0d4 --- /dev/null +++ b/telephony/java/com/android/internal/telephony/cat/CallControlResult.java @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.telephony.cat; + + +public enum CallControlResult { + + CALL_CONTROL_NO_CONTROL(0x00), + CALL_CONTROL_ALLOWED_NO_MOD(0x01), + CALL_CONTROL_NOT_ALLOWED(0x02), + CALL_CONTROL_ALLOWED_WITH_MOD(0x03); + private int mValue; + + CallControlResult(int value) { + mValue = value; + } + + public static CallControlResult fromInt(int value) { + for (CallControlResult e : CallControlResult.values()) { + if (e.mValue == value) { + return e; + } + } + return null; + } + + public int value() { + return mValue; + } +} diff --git a/telephony/java/com/android/internal/telephony/cat/CatService.java b/telephony/java/com/android/internal/telephony/cat/CatService.java index 74af9fa..55de87a 100644 --- a/telephony/java/com/android/internal/telephony/cat/CatService.java +++ b/telephony/java/com/android/internal/telephony/cat/CatService.java @@ -25,13 +25,14 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Message; import android.os.SystemProperties; +import android.widget.Toast; import com.android.internal.telephony.IccUtils; import com.android.internal.telephony.CommandsInterface; import com.android.internal.telephony.IccCard; import com.android.internal.telephony.IccFileHandler; import com.android.internal.telephony.IccRecords; - +import com.android.internal.telephony.IccSmsInterfaceManager; import java.io.ByteArrayOutputStream; import java.util.List; @@ -73,6 +74,9 @@ public class CatService extends Handler implements AppInterface { private Context mContext; private CatCmdMessage mCurrntCmd = null; private CatCmdMessage mMenuCmd = null; + private IccSmsInterfaceManager mIccSms = null; + private int mTimeoutDest = 0; + private int mCallControlResultCode = 0; private RilMessageDecoder mMsgDecoder = null; private boolean mStkAppInstalled = false; @@ -85,8 +89,10 @@ public class CatService extends Handler implements AppInterface { static final int MSG_ID_REFRESH = 5; static final int MSG_ID_RESPONSE = 6; static final int MSG_ID_SIM_READY = 7; + static final int MSG_ID_TIMEOUT = 9; static final int MSG_ID_RIL_MSG_DECODED = 10; + static final int MSG_ID_SEND_SMS_RESULT = 12;//samsung ril response // Events to signal SIM presence or absent in the device. private static final int MSG_ID_ICC_RECORDS_LOADED = 20; @@ -100,17 +106,25 @@ public class CatService extends Handler implements AppInterface { static final String STK_DEFAULT = "Defualt Message"; + // Sms send result constants. + static final int SMS_SEND_OK = 0; + static final int SMS_SEND_FAIL = 32790; + static final int SMS_SEND_RETRY = 32810; + + static final int WAITING_SMS_RESULT = 2; + static final int WAITING_SMS_RESULT_TIME = 60000; + /* Intentionally private for singleton */ private CatService(CommandsInterface ci, IccRecords ir, Context context, - IccFileHandler fh, IccCard ic) { + IccFileHandler fh, IccCard ic, IccSmsInterfaceManager iccSmsInt) { if (ci == null || ir == null || context == null || fh == null - || ic == null) { + || ic == null || iccSmsInt == null) { throw new NullPointerException( "Service: Input parameters must not be null"); } mCmdIf = ci; mContext = context; - + mIccSms = iccSmsInt; // Get the RilMessagesDecoder for decoding the messages. mMsgDecoder = RilMessageDecoder.getInstance(this, fh); @@ -119,6 +133,8 @@ public class CatService extends Handler implements AppInterface { mCmdIf.setOnCatProactiveCmd(this, MSG_ID_PROACTIVE_COMMAND, null); mCmdIf.setOnCatEvent(this, MSG_ID_EVENT_NOTIFY, null); mCmdIf.setOnCatCallSetUp(this, MSG_ID_CALL_SETUP, null); + // samsung ril sms send result + mCmdIf.setOnCatSendSmsResult(this, MSG_ID_SEND_SMS_RESULT, null); //mCmdIf.setOnSimRefresh(this, MSG_ID_REFRESH, null); mIccRecords = ir; @@ -141,6 +157,7 @@ public class CatService extends Handler implements AppInterface { mCmdIf.unSetOnCatProactiveCmd(this); mCmdIf.unSetOnCatEvent(this); mCmdIf.unSetOnCatCallSetUp(this); + mCmdIf.unSetOnCatSendSmsResult(this); this.removeCallbacksAndMessages(null); } @@ -267,6 +284,19 @@ public class CatService extends Handler implements AppInterface { break; case SEND_DTMF: case SEND_SMS: + if (mContext.getResources(). + getBoolean(com.android.internal.R.bool.config_samsung_stk)) { + handleProactiveCommandSendSMS(cmdParams); + if (((DisplayTextParams)cmdParams).textMsg == null + || ((DisplayTextParams)cmdParams).textMsg.text == null) + break; + if (((DisplayTextParams)cmdParams).textMsg.text.equals(STK_DEFAULT)) { + message = mContext.getText(com.android.internal.R.string.sending); + ((DisplayTextParams)cmdParams).textMsg.text = message.toString(); + Toast.makeText(mContext, ((DisplayTextParams)cmdParams).textMsg.text, 1).show(); + } + } + break; case SEND_SS: case SEND_USSD: if ((((DisplayTextParams)cmdParams).textMsg.text != null) @@ -556,16 +586,16 @@ public class CatService extends Handler implements AppInterface { * @return The only Service object in the system */ public static CatService getInstance(CommandsInterface ci, IccRecords ir, - Context context, IccFileHandler fh, IccCard ic) { + Context context, IccFileHandler fh, IccCard ic, IccSmsInterfaceManager iccSmsInt) { synchronized (sInstanceLock) { if (sInstance == null) { if (ci == null || ir == null || context == null || fh == null - || ic == null) { + || ic == null || iccSmsInt == null) { return null; } HandlerThread thread = new HandlerThread("Cat Telephony service"); thread.start(); - sInstance = new CatService(ci, ir, context, fh, ic); + sInstance = new CatService(ci, ir, context, fh, ic, iccSmsInt); CatLog.d(sInstance, "NEW sInstance"); } else if ((ir != null) && (mIccRecords != ir)) { CatLog.d(sInstance, "Reinitialize the Service with SIMRecords"); @@ -587,7 +617,7 @@ public class CatService extends Handler implements AppInterface { * @return The only Service object in the system */ public static AppInterface getInstance() { - return getInstance(null, null, null, null, null); + return getInstance(null, null, null, null, null, null); } @Override @@ -627,6 +657,64 @@ public class CatService extends Handler implements AppInterface { CatLog.d(this, "SIM ready. Reporting STK service running now..."); mCmdIf.reportStkServiceIsRunning(null); break; + // Samsung ril sms send handling part + case MSG_ID_SEND_SMS_RESULT: + if (mContext.getResources(). + getBoolean(com.android.internal.R.bool.config_samsung_stk)) { + int[] sendResult; + AsyncResult ar; + CatLog.d(this, "handleMsg : MSG_ID_SEND_SMS_RESULT"); + cancelTimeOut(); + CatLog.d(this, "The Msg ID data:" + msg.what); + if (msg.obj == null) + break; + ar = (AsyncResult) msg.obj; + if (ar == null || ar.result == null) + break; + sendResult = (int[]) ar.result; + switch (sendResult[0]) { + default: + CatLog.d(this, "SMS SEND GENERIC FAIL"); + if (CallControlResult.fromInt(mCallControlResultCode) == + CallControlResult.CALL_CONTROL_NOT_ALLOWED) + sendTerminalResponse(mCurrntCmd.mCmdDet, + ResultCode.USIM_CALL_CONTROL_PERMANENT, true, 1, null); + else + sendTerminalResponse(mCurrntCmd.mCmdDet, + ResultCode.TERMINAL_CRNTLY_UNABLE_TO_PROCESS, false, 0, null); + break; + case SMS_SEND_OK: // '\0' + CatLog.d(this, "SMS SEND OK"); + if (CallControlResult.fromInt(mCallControlResultCode) == + CallControlResult.CALL_CONTROL_NOT_ALLOWED) + sendTerminalResponse(mCurrntCmd.mCmdDet, + ResultCode.USIM_CALL_CONTROL_PERMANENT, true, 1, null); + else + sendTerminalResponse(mCurrntCmd.mCmdDet, ResultCode.OK, false, 0, null); + break; + case SMS_SEND_FAIL: + CatLog.d(this, "SMS SEND FAIL - MEMORY NOT AVAILABLE"); + if (CallControlResult.fromInt(mCallControlResultCode) == + CallControlResult.CALL_CONTROL_NOT_ALLOWED) + sendTerminalResponse(mCurrntCmd.mCmdDet, + ResultCode.USIM_CALL_CONTROL_PERMANENT, true, 1, null); + else + sendTerminalResponse(mCurrntCmd.mCmdDet, + ResultCode.TERMINAL_CRNTLY_UNABLE_TO_PROCESS, false, 0, null); + break; + case SMS_SEND_RETRY: + CatLog.d(this, "SMS SEND FAIL RETRY"); + if (CallControlResult.fromInt(mCallControlResultCode) == + CallControlResult.CALL_CONTROL_NOT_ALLOWED) + sendTerminalResponse(mCurrntCmd.mCmdDet, + ResultCode.USIM_CALL_CONTROL_PERMANENT, true, 1, null); + else + sendTerminalResponse(mCurrntCmd.mCmdDet, + ResultCode.NETWORK_CRNTLY_UNABLE_TO_PROCESS, false, 0, null); + break; + } + } + break; default: throw new AssertionError("Unrecognized CAT command: " + msg.what); } @@ -749,4 +837,27 @@ public class CatService extends Handler implements AppInterface { return (numReceiver > 0); } + + /** + * samsung send sms + * @param cmdPar + */ + private void handleProactiveCommandSendSMS(CommandParams cmdPar) { + CatLog.d(this, "The smscaddress is: " + ((SendSMSParams)cmdPar).smscAddress); + CatLog.d(this, "The SMS tpdu is: " + ((SendSMSParams)cmdPar).pdu); + mIccSms.sendRawPduSat(IccUtils.hexStringToBytes(((SendSMSParams)cmdPar).smscAddress), + IccUtils.hexStringToBytes(((SendSMSParams)cmdPar).pdu), null, null); + startTimeOut(WAITING_SMS_RESULT, WAITING_SMS_RESULT_TIME); + } + + private void cancelTimeOut() { + removeMessages(MSG_ID_TIMEOUT); + mTimeoutDest = 0; + } + + private void startTimeOut(int timeout, int delay) { + cancelTimeOut(); + mTimeoutDest = timeout; + sendMessageDelayed(obtainMessage(MSG_ID_TIMEOUT), delay); + } } diff --git a/telephony/java/com/android/internal/telephony/cat/CommandParams.java b/telephony/java/com/android/internal/telephony/cat/CommandParams.java index 959c9e2..31e8bbdb 100644 --- a/telephony/java/com/android/internal/telephony/cat/CommandParams.java +++ b/telephony/java/com/android/internal/telephony/cat/CommandParams.java @@ -192,3 +192,14 @@ class BIPClientParams extends CommandParams { return false; } } + +class SendSMSParams extends DisplayTextParams { + String pdu; + String smscAddress; + + SendSMSParams(CommandDetails cmdDet, TextMessage textmessage, String smscaddress, String smsPdu) { + super(cmdDet, textmessage); + smscAddress = smscaddress; + pdu = smsPdu; + } +} diff --git a/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java b/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java index 89c1329..5b8ec5b 100644 --- a/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java +++ b/telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java @@ -16,6 +16,7 @@ package com.android.internal.telephony.cat; +import android.content.res.Resources; import android.graphics.Bitmap; import android.os.Handler; import android.os.Message; @@ -134,43 +135,43 @@ class CommandParamsFactory extends Handler { case DISPLAY_TEXT: cmdPending = processDisplayText(cmdDet, ctlvs); break; - case SET_UP_IDLE_MODE_TEXT: - cmdPending = processSetUpIdleModeText(cmdDet, ctlvs); - break; - case GET_INKEY: + case SET_UP_IDLE_MODE_TEXT: + cmdPending = processSetUpIdleModeText(cmdDet, ctlvs); + break; + case GET_INKEY: cmdPending = processGetInkey(cmdDet, ctlvs); break; - case GET_INPUT: - cmdPending = processGetInput(cmdDet, ctlvs); - break; - case SEND_DTMF: - case SEND_SMS: - case SEND_SS: - case SEND_USSD: - cmdPending = processEventNotify(cmdDet, ctlvs); - break; - case SET_UP_CALL: - cmdPending = processSetupCall(cmdDet, ctlvs); - break; - case REFRESH: + case GET_INPUT: + cmdPending = processGetInput(cmdDet, ctlvs); + break; + case SEND_DTMF: + case SEND_SMS: + case SEND_SS: + case SEND_USSD: + cmdPending = processEventNotify(cmdDet, ctlvs); + break; + case SET_UP_CALL: + cmdPending = processSetupCall(cmdDet, ctlvs); + break; + case REFRESH: processRefresh(cmdDet, ctlvs); cmdPending = false; break; - case LAUNCH_BROWSER: - cmdPending = processLaunchBrowser(cmdDet, ctlvs); - break; - case PLAY_TONE: + case LAUNCH_BROWSER: + cmdPending = processLaunchBrowser(cmdDet, ctlvs); + break; + case PLAY_TONE: cmdPending = processPlayTone(cmdDet, ctlvs); break; - case PROVIDE_LOCAL_INFORMATION: + case PROVIDE_LOCAL_INFORMATION: cmdPending = processProvideLocalInfo(cmdDet, ctlvs); break; - case OPEN_CHANNEL: - case CLOSE_CHANNEL: - case RECEIVE_DATA: - case SEND_DATA: - cmdPending = processBIPClient(cmdDet, ctlvs); - break; + case OPEN_CHANNEL: + case CLOSE_CHANNEL: + case RECEIVE_DATA: + case SEND_DATA: + cmdPending = processBIPClient(cmdDet, ctlvs); + break; default: // unsupported proactive commands mCmdParams = new CommandParams(cmdDet); @@ -641,7 +642,34 @@ class CommandParamsFactory extends Handler { } textMsg.responseNeeded = false; - mCmdParams = new DisplayTextParams(cmdDet, textMsg); + + // samsung stk overlay + if (Resources.getSystem().getBoolean(com.android.internal.R.bool.config_samsung_stk)) { + String smscAddress = null; + String pdu = null; + + ctlv = searchForTag(ComprehensionTlvTag.ADDRESS, ctlvs); + if (ctlv != null) { + smscAddress = ValueParser.retrieveSMSCaddress(ctlv); + CatLog.d(this, "The smsc address is " + smscAddress); + } + else { + CatLog.d(this, "The smsc address is null"); + } + + ctlv = searchForTag(ComprehensionTlvTag.SMS_TPDU, ctlvs); + if (ctlv != null) { + pdu = ValueParser.retrieveSMSTPDU(ctlv); + CatLog.d(this, "The SMS tpdu is " + pdu); + } + else { + CatLog.d(this, "The SMS tpdu is null"); + } + mCmdParams = new SendSMSParams(cmdDet, textMsg, smscAddress, pdu); + } + else { + mCmdParams = new DisplayTextParams(cmdDet, textMsg); + } if (iconId != null) { mIconLoadState = LOAD_SINGLE_ICON; diff --git a/telephony/java/com/android/internal/telephony/cat/ValueParser.java b/telephony/java/com/android/internal/telephony/cat/ValueParser.java index 584d96c..66c0c67 100644 --- a/telephony/java/com/android/internal/telephony/cat/ValueParser.java +++ b/telephony/java/com/android/internal/telephony/cat/ValueParser.java @@ -338,4 +338,71 @@ abstract class ValueParser { throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); } } + + /** + * samsung part for converting byte[] to hexstring + * @param ctlv + * @return + * @throws ResultException + */ + static String retrieveSMSCaddress(ComprehensionTlv ctlv) + throws ResultException { + byte[] rawValue = ctlv.getRawValue(); + int valueIndex = ctlv.getValueIndex(); + int length = ctlv.getLength(); + byte[] outputValue = new byte[length + 1]; + + for (int k = 0; k <= length; k++) { + try { + outputValue[k] = rawValue[k + (valueIndex - 1)]; + } + catch (IndexOutOfBoundsException indexoutofboundsexception) { + throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); + } + } + if (length != 0) + return IccUtils.bytesToHexString(outputValue); + else + throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); + } + + /** + * + * @param ctlv + * @return + * @throws ResultException + */ + static String retrieveSMSTPDU(ComprehensionTlv ctlv) + throws ResultException { + byte[] rawValue = ctlv.getRawValue(); + int valueIndex = ctlv.getValueIndex(); + int pduLength = ctlv.getLength(); + byte[] outputValue; + int k; + String result; + if (rawValue[valueIndex + 2] % 2 == 0) + k = rawValue[valueIndex + 2] / 2; + else + k = (1 + rawValue[valueIndex + 2]) / 2; + + if (pduLength == k + 6) + outputValue = new byte[pduLength + 1]; + else + outputValue = new byte[pduLength]; + + for (int l = 0; l < pduLength; l++) { + try { + outputValue[l] = rawValue[valueIndex + l]; + } + catch (IndexOutOfBoundsException ex) { + throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); + } + } + if (pduLength != 0) + result = IccUtils.bytesToHexString(outputValue); + else + throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD); + + return result; + } } diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java index 58e3e5f..276c6c5 100755 --- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java +++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java @@ -165,7 +165,7 @@ public class CDMAPhone extends PhoneBase { mSubInfo = new PhoneSubInfo(this); mEriManager = new EriManager(this, context, EriManager.ERI_FROM_XML); mCcatService = CatService.getInstance(mCM, mIccRecords, mContext, - mIccFileHandler, mIccCard); + mIccFileHandler, mIccCard, mRuimSmsInterfaceManager); mCM.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null); mIccRecords.registerForRecordsLoaded(this, EVENT_RUIM_RECORDS_LOADED, null); diff --git a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java index bd80ca9..3a30f9c 100644 --- a/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java +++ b/telephony/java/com/android/internal/telephony/gsm/GSMPhone.java @@ -147,7 +147,8 @@ public class GSMPhone extends PhoneBase { mSimSmsIntManager = new SimSmsInterfaceManager(this, mSMS); mSubInfo = new PhoneSubInfo(this); } - mStkService = CatService.getInstance(mCM, mIccRecords, mContext, mIccFileHandler, mIccCard); + mStkService = CatService.getInstance(mCM, mIccRecords, mContext, mIccFileHandler, mIccCard, + mSimSmsIntManager); mCM.registerForAvailable(this, EVENT_RADIO_AVAILABLE, null); mIccRecords.registerForRecordsLoaded(this, EVENT_SIM_RECORDS_LOADED, null); diff --git a/telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java b/telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java index 583b1a5..e2ba8bf 100644 --- a/telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java +++ b/telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java @@ -414,4 +414,16 @@ class SipCommandInterface extends BaseCommands implements CommandsInterface { } public boolean needsOldRilFeature(String feature) { return false; } + + /** + * added samsung part to command interface + * @param h + * @param what + * @param obj + */ + public void setOnCatSendSmsResult(Handler h, int what, Object obj) { + } + + public void unSetOnCatSendSmsResult(Handler h) { + } } diff --git a/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java b/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java index 710faa6..e662cd3 100644 --- a/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java +++ b/telephony/java/com/android/internal/telephony/test/SimulatedCommands.java @@ -17,6 +17,7 @@ package com.android.internal.telephony.test; import android.os.AsyncResult; +import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; @@ -1519,4 +1520,20 @@ public final class SimulatedCommands extends BaseCommands } public boolean needsOldRilFeature(String feature) { return false; } + + /** + * added samsung part to command interface + * @param h + * @param what + * @param obj + */ + public void setOnCatSendSmsResult(Handler h, int what, Object obj) { + } + + /** + * + * @param h + */ + public void unSetOnCatSendSmsResult(Handler h) { + } } |