diff options
author | Pawit Pornkitprasan <p.pawit@gmail.com> | 2012-11-30 21:35:50 +0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@review.cyanogenmod.com> | 2012-12-09 03:27:56 -0800 |
commit | db939b01036f7d0ae8ad5c2726e3bac211b58add (patch) | |
tree | 9df26c1cb71335c1d82777be02562a050ab69de2 /src/java | |
parent | e7111f6792ce1e8a821189972f83a12b1440325a (diff) | |
download | frameworks_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')
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); + } + } } |