Skip to content

Commit 72a31ab

Browse files
John WangAndroid (Google) Code Review
authored andcommitted
Merge "[maguro] Fix STK issues" into ics-mr1
2 parents c93a151 + e81932e commit 72a31ab

File tree

5 files changed

+68
-27
lines changed

5 files changed

+68
-27
lines changed

core/res/res/values/strings.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<?xml version="1.0" encoding="utf-8"?>
1+
<?xml version="1.0" encoding="utf-8"?>
22
<!--
33
/* //device/apps/common/assets/res/any/strings.xml
44
**
@@ -3365,4 +3365,13 @@
33653365
<!-- Delimeter used between each item in a textual list; for example "Alpha, Beta". [CHAR LIMIT=3] -->
33663366
<string name="list_delimeter">", "</string>
33673367

3368+
<!-- STK sending DTMF, SMS, USSD, SS -->
3369+
<string name="sending">Sending...</string>
3370+
3371+
<!-- STK launch Browser -->
3372+
<string name="launchBrowserDefault">Launch Browser?</string>
3373+
3374+
<!-- STK setup Call -->
3375+
<string name="SetupCallDefault">Accept Call?</string>
3376+
33683377
</resources>

telephony/java/com/android/internal/telephony/cat/CatService.java

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ public class CatService extends Handler implements AppInterface {
9494
private static final int DEV_ID_TERMINAL = 0x82;
9595
private static final int DEV_ID_NETWORK = 0x83;
9696

97+
static final String STK_DEFAULT = "Defualt Message";
98+
9799
/* Intentionally private for singleton */
98100
private CatService(CommandsInterface ci, IccRecords ir, Context context,
99101
IccFileHandler fh, IccCard ic) {
@@ -157,7 +159,15 @@ private void handleRilMsg(RilMessage rilMsg) {
157159
}
158160
break;
159161
case MSG_ID_PROACTIVE_COMMAND:
160-
cmdParams = (CommandParams) rilMsg.mData;
162+
try {
163+
cmdParams = (CommandParams) rilMsg.mData;
164+
} catch (ClassCastException e) {
165+
// for error handling : cast exception
166+
CatLog.d(this, "Fail to parse proactive command");
167+
sendTerminalResponse(mCurrntCmd.mCmdDet, ResultCode.CMD_DATA_NOT_UNDERSTOOD,
168+
false, 0x00, null);
169+
break;
170+
}
161171
if (cmdParams != null) {
162172
if (rilMsg.mResCode == ResultCode.OK) {
163173
handleProactiveCommand(cmdParams);
@@ -194,6 +204,7 @@ private void handleRilMsg(RilMessage rilMsg) {
194204
private void handleProactiveCommand(CommandParams cmdParams) {
195205
CatLog.d(this, cmdParams.getCommandType().name());
196206

207+
CharSequence message;
197208
CatCmdMessage cmdMsg = new CatCmdMessage(cmdParams);
198209
switch (cmdParams.getCommandType()) {
199210
case SET_UP_MENU:
@@ -224,26 +235,44 @@ private void handleProactiveCommand(CommandParams cmdParams) {
224235
case CommandParamsFactory.DTTZ_SETTING:
225236
resp = new DTTZResponseData(null);
226237
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, resp);
227-
break;
238+
return;
228239
case CommandParamsFactory.LANGUAGE_SETTING:
229240
resp = new LanguageResponseData(Locale.getDefault().getLanguage());
230241
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, resp);
231-
break;
242+
return;
232243
default:
233244
sendTerminalResponse(cmdParams.cmdDet, ResultCode.OK, false, 0, null);
234245
return;
235246
}
236247
case LAUNCH_BROWSER:
248+
if ((((LaunchBrowserParams) cmdParams).confirmMsg.text != null)
249+
&& (((LaunchBrowserParams) cmdParams).confirmMsg.text.equals(STK_DEFAULT))) {
250+
message = mContext.getText(com.android.internal.R.string.launchBrowserDefault);
251+
((LaunchBrowserParams) cmdParams).confirmMsg.text = message.toString();
252+
}
253+
break;
237254
case SELECT_ITEM:
238255
case GET_INPUT:
239256
case GET_INKEY:
257+
break;
240258
case SEND_DTMF:
241259
case SEND_SMS:
242260
case SEND_SS:
243261
case SEND_USSD:
262+
if ((((DisplayTextParams)cmdParams).textMsg.text != null)
263+
&& (((DisplayTextParams)cmdParams).textMsg.text.equals(STK_DEFAULT))) {
264+
message = mContext.getText(com.android.internal.R.string.sending);
265+
((DisplayTextParams)cmdParams).textMsg.text = message.toString();
266+
}
267+
break;
244268
case PLAY_TONE:
269+
break;
245270
case SET_UP_CALL:
246-
// nothing to do on telephony!
271+
if ((((CallSetupParams) cmdParams).confirmMsg.text != null)
272+
&& (((CallSetupParams) cmdParams).confirmMsg.text.equals(STK_DEFAULT))) {
273+
message = mContext.getText(com.android.internal.R.string.SetupCallDefault);
274+
((CallSetupParams) cmdParams).confirmMsg.text = message.toString();
275+
}
247276
break;
248277
default:
249278
CatLog.d(this, "Unsupported command");

telephony/java/com/android/internal/telephony/cat/CommandParamsFactory.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -403,6 +403,7 @@ private boolean processGetInkey(CommandDetails cmdDet,
403403
input.ucs2 = (cmdDet.commandQualifier & 0x02) != 0;
404404
input.yesNo = (cmdDet.commandQualifier & 0x04) != 0;
405405
input.helpAvailable = (cmdDet.commandQualifier & 0x80) != 0;
406+
input.echo = true;
406407

407408
mCmdParams = new GetInputParams(cmdDet, input);
408409

@@ -625,11 +626,7 @@ private boolean processEventNotify(CommandDetails cmdDet,
625626

626627
ComprehensionTlv ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID,
627628
ctlvs);
628-
if (ctlv != null) {
629-
textMsg.text = ValueParser.retrieveAlphaId(ctlv);
630-
} else {
631-
throw new ResultException(ResultCode.REQUIRED_VALUES_MISSING);
632-
}
629+
textMsg.text = ValueParser.retrieveAlphaId(ctlv);
633630

634631
ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs);
635632
if (ctlv != null) {
@@ -714,9 +711,8 @@ private boolean processLaunchBrowser(CommandDetails cmdDet,
714711

715712
// parse alpha identifier.
716713
ctlv = searchForTag(ComprehensionTlvTag.ALPHA_ID, ctlvs);
717-
if (ctlv != null) {
718-
confirmMsg.text = ValueParser.retrieveAlphaId(ctlv);
719-
}
714+
confirmMsg.text = ValueParser.retrieveAlphaId(ctlv);
715+
720716
// parse icon identifier
721717
ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs);
722718
if (ctlv != null) {
@@ -841,9 +837,7 @@ private boolean processSetupCall(CommandDetails cmdDet,
841837

842838
// get confirmation message string.
843839
ctlv = searchForNextTag(ComprehensionTlvTag.ALPHA_ID, iter);
844-
if (ctlv != null) {
845-
confirmMsg.text = ValueParser.retrieveAlphaId(ctlv);
846-
}
840+
confirmMsg.text = ValueParser.retrieveAlphaId(ctlv);
847841

848842
ctlv = searchForTag(ComprehensionTlvTag.ICON_ID, ctlvs);
849843
if (ctlv != null) {

telephony/java/com/android/internal/telephony/cat/ComprehensionTlv.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ public static List<ComprehensionTlv> decodeMany(byte[] data, int startIndex)
9494
startIndex = ctlv.mValueIndex + ctlv.mLength;
9595
} else {
9696
CatLog.d(LOG_TAG, "decodeMany: ctlv is null, stop decoding");
97+
items.clear();
9798
break;
9899
}
99100
}
@@ -123,7 +124,10 @@ public static ComprehensionTlv decode(byte[] data, int startIndex)
123124
case 0:
124125
case 0xff:
125126
case 0x80:
126-
throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
127+
// for error handling
128+
// these one make exception while decoding the abnormal command.
129+
// (in case of Ghana MTN simcard , JDI simcard)
130+
return null;
127131

128132
case 0x7f: // tag is in three-byte format
129133
tag = ((data[curIndex] & 0xff) << 8)

telephony/java/com/android/internal/telephony/cat/ValueParser.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -273,18 +273,23 @@ static List<TextAttribute> retrieveTextAttribute(ComprehensionTlv ctlv)
273273
*/
274274
static String retrieveAlphaId(ComprehensionTlv ctlv) throws ResultException {
275275

276-
byte[] rawValue = ctlv.getRawValue();
277-
int valueIndex = ctlv.getValueIndex();
278-
int length = ctlv.getLength();
279-
if (length != 0) {
280-
try {
281-
return IccUtils.adnStringFieldToString(rawValue, valueIndex,
282-
length);
283-
} catch (IndexOutOfBoundsException e) {
284-
throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
276+
if (ctlv != null) {
277+
byte[] rawValue = ctlv.getRawValue();
278+
int valueIndex = ctlv.getValueIndex();
279+
int length = ctlv.getLength();
280+
if (length != 0) {
281+
try {
282+
return IccUtils.adnStringFieldToString(rawValue, valueIndex,
283+
length);
284+
} catch (IndexOutOfBoundsException e) {
285+
throw new ResultException(ResultCode.CMD_DATA_NOT_UNDERSTOOD);
286+
}
287+
} else {
288+
return CatService.STK_DEFAULT;
285289
}
290+
} else {
291+
return CatService.STK_DEFAULT;
286292
}
287-
return null;
288293
}
289294

290295
/**

0 commit comments

Comments
 (0)