summaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
authorPawit Pornkitprasan <p.pawit@gmail.com>2012-11-30 21:35:50 +0700
committerGerrit Code Review <gerrit@review.cyanogenmod.com>2012-12-09 03:27:56 -0800
commitdb939b01036f7d0ae8ad5c2726e3bac211b58add (patch)
tree9df26c1cb71335c1d82777be02562a050ab69de2 /src/java
parente7111f6792ce1e8a821189972f83a12b1440325a (diff)
downloadframeworks_opt_telephony-db939b01036f7d0ae8ad5c2726e3bac211b58add.zip
frameworks_opt_telephony-db939b01036f7d0ae8ad5c2726e3bac211b58add.tar.gz
frameworks_opt_telephony-db939b01036f7d0ae8ad5c2726e3bac211b58add.tar.bz2
Samsung STK: Add USSD support
Allow USSD-based STK applications to work Change-Id: I483f37a44a6c3ed43eefcf979e17b84877d03f93
Diffstat (limited to 'src/java')
-rw-r--r--src/java/com/android/internal/telephony/cat/CatService.java15
-rw-r--r--src/java/com/android/internal/telephony/cat/CommandParams.java9
-rw-r--r--src/java/com/android/internal/telephony/cat/CommandParamsFactory.java12
-rw-r--r--src/java/com/android/internal/telephony/cat/ValueParser.java30
4 files changed, 66 insertions, 0 deletions
diff --git a/src/java/com/android/internal/telephony/cat/CatService.java b/src/java/com/android/internal/telephony/cat/CatService.java
index ca062af..156c977 100644
--- a/src/java/com/android/internal/telephony/cat/CatService.java
+++ b/src/java/com/android/internal/telephony/cat/CatService.java
@@ -294,6 +294,11 @@ public class CatService extends Handler implements AppInterface {
// Fall through
case SEND_SS:
case SEND_USSD:
+ if (mContext.getResources().
+ getBoolean(com.android.internal.R.bool.config_samsung_stk)) {
+ handleProactiveCommandSendUSSD((SendUSSDParams) cmdParams);
+ }
+
if ((((DisplayTextParams)cmdParams).textMsg.text != null)
&& (((DisplayTextParams)cmdParams).textMsg.text.equals(STK_DEFAULT))) {
message = mContext.getText(com.android.internal.R.string.sending);
@@ -879,6 +884,16 @@ public class CatService extends Handler implements AppInterface {
startTimeOut(WAITING_SMS_RESULT, WAITING_SMS_RESULT_TIME);
}
+ /**
+ * Samsung STK SEND_USSD
+ * @param cmdPar
+ */
+ private void handleProactiveCommandSendUSSD(SendUSSDParams cmdPar) {
+ CatLog.d(this, "The USSD is: " + cmdPar.ussdString);
+ mCmdIf.sendUSSD(cmdPar.ussdString, null);
+ // Sent USSD, let framework handle the rest
+ }
+
private void cancelTimeOut() {
removeMessages(MSG_ID_TIMEOUT);
mTimeoutDest = 0;
diff --git a/src/java/com/android/internal/telephony/cat/CommandParams.java b/src/java/com/android/internal/telephony/cat/CommandParams.java
index b3463be..f140eb5 100644
--- a/src/java/com/android/internal/telephony/cat/CommandParams.java
+++ b/src/java/com/android/internal/telephony/cat/CommandParams.java
@@ -209,3 +209,12 @@ class SendSMSParams extends DisplayTextParams {
pdu = smsPdu;
}
}
+
+class SendUSSDParams extends DisplayTextParams {
+ String ussdString;
+
+ SendUSSDParams(CommandDetails cmdDet, TextMessage textmessage, String ussdstring) {
+ super(cmdDet, textmessage);
+ ussdString = ussdstring;
+ }
+}
diff --git a/src/java/com/android/internal/telephony/cat/CommandParamsFactory.java b/src/java/com/android/internal/telephony/cat/CommandParamsFactory.java
index edd57c1..4f6a7b2 100644
--- a/src/java/com/android/internal/telephony/cat/CommandParamsFactory.java
+++ b/src/java/com/android/internal/telephony/cat/CommandParamsFactory.java
@@ -670,6 +670,18 @@ class CommandParamsFactory extends Handler {
}
mCmdParams = new SendSMSParams(cmdDet, textMsg, smscAddress, pdu);
}
+ else if (cmdType == AppInterface.CommandType.SEND_USSD && isSamsungStk) {
+ String ussdString = null;
+ ctlv = searchForTag(ComprehensionTlvTag.USSD_STRING, ctlvs);
+ if (ctlv != null) {
+ ussdString = ValueParser.retrieveUSSDString(ctlv);
+ CatLog.d(this, "The ussd string is " + ussdString);
+ }
+ else {
+ CatLog.d(this, "The ussd string is null");
+ }
+ mCmdParams = new SendUSSDParams(cmdDet, textMsg, ussdString);
+ }
else {
mCmdParams = new DisplayTextParams(cmdDet, textMsg);
}
diff --git a/src/java/com/android/internal/telephony/cat/ValueParser.java b/src/java/com/android/internal/telephony/cat/ValueParser.java
index 06242cb..edcca87 100644
--- a/src/java/com/android/internal/telephony/cat/ValueParser.java
+++ b/src/java/com/android/internal/telephony/cat/ValueParser.java
@@ -407,4 +407,34 @@ abstract class ValueParser {
return result;
}
+
+ /**
+ * Samsung STK: Read USSD String
+ *
+ * @param ctlv A USSD String COMPREHENSION-TLV object
+ * @return A String object decoded from the USSD String object
+ * @throws ResultException
+ */
+ static String retrieveUSSDString(ComprehensionTlv ctlv) throws ResultException {
+ byte[] rawValue = ctlv.getRawValue();
+ int valueIndex = ctlv.getValueIndex();
+ int length = ctlv.getLength();
+
+ // If length is 0 (shouldn't be), return null
+ if (length == 0) {
+ return null;
+ }
+
+ // Should be 0x0f
+ if (rawValue[valueIndex] != 0x0f) {
+ throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ }
+
+ try {
+ return GsmAlphabet.gsm7BitPackedToString(rawValue,
+ valueIndex + 1, ((length - 1) * 8) / 7);
+ } catch (IndexOutOfBoundsException e) {
+ throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
+ }
+ }
}