summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJüri Schultz <jyri@schultz.ee>2012-06-27 10:11:20 +0300
committercodeworkx <daniel.hillenbrand@codeworkx.de>2012-07-06 15:54:33 +0200
commit53757cff2b2d04219c7fdc9bc977af0aa351f64e (patch)
treea135cf6232a7c9b6d5907bfc60fcf1b9386d5ffb
parent0dac9bf80c4ef640acd775557378c0c78997ab25 (diff)
downloadframeworks_base-53757cff2b2d04219c7fdc9bc977af0aa351f64e.zip
frameworks_base-53757cff2b2d04219c7fdc9bc977af0aa351f64e.tar.gz
frameworks_base-53757cff2b2d04219c7fdc9bc977af0aa351f64e.tar.bz2
telephony: update stk service functionality for Samsung phones
Change-Id: I16015d29a969dfe6ed6dac118db39230b1b77ea1
-rwxr-xr-xcore/res/res/values/config.xml3
-rw-r--r--telephony/java/com/android/internal/telephony/CommandsInterface.java7
-rw-r--r--telephony/java/com/android/internal/telephony/IccSmsInterfaceManager.java13
-rw-r--r--telephony/java/com/android/internal/telephony/RIL.java37
-rw-r--r--telephony/java/com/android/internal/telephony/RILConstants.java1
-rw-r--r--telephony/java/com/android/internal/telephony/Smdk4210RIL.java2
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CallControlResult.java44
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CatService.java127
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CommandParams.java11
-rw-r--r--telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java86
-rw-r--r--telephony/java/com/android/internal/telephony/cat/ValueParser.java67
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CDMAPhone.java2
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GSMPhone.java3
-rw-r--r--telephony/java/com/android/internal/telephony/sip/SipCommandInterface.java12
-rw-r--r--telephony/java/com/android/internal/telephony/test/SimulatedCommands.java17
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) {
+ }
}