summaryrefslogtreecommitdiffstats
path: root/telephony/java/com/android/internal/telephony/cat/ResponseData.java
diff options
context:
space:
mode:
Diffstat (limited to 'telephony/java/com/android/internal/telephony/cat/ResponseData.java')
-rw-r--r--telephony/java/com/android/internal/telephony/cat/ResponseData.java140
1 files changed, 140 insertions, 0 deletions
diff --git a/telephony/java/com/android/internal/telephony/cat/ResponseData.java b/telephony/java/com/android/internal/telephony/cat/ResponseData.java
new file mode 100644
index 0000000..afd1bba
--- /dev/null
+++ b/telephony/java/com/android/internal/telephony/cat/ResponseData.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2006-2007 Google Inc.
+ *
+ * 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.gsm.stk;
+
+import com.android.internal.telephony.EncodeException;
+import com.android.internal.telephony.GsmAlphabet;
+
+import java.io.ByteArrayOutputStream;
+import java.io.UnsupportedEncodingException;
+
+abstract class ResponseData {
+ /**
+ * Format the data appropriate for TERMINAL RESPONSE and write it into
+ * the ByteArrayOutputStream object.
+ */
+ public abstract void format(ByteArrayOutputStream buf);
+}
+
+class SelectItemResponseData extends ResponseData {
+ // members
+ private int id;
+
+ public SelectItemResponseData(int id) {
+ super();
+ this.id = id;
+ }
+
+ @Override
+ public void format(ByteArrayOutputStream buf) {
+ // Item identifier object
+ int tag = 0x80 | ComprehensionTlvTag.ITEM_ID.value();
+ buf.write(tag); // tag
+ buf.write(1); // length
+ buf.write(id); // identifier of item chosen
+ }
+}
+
+class GetInkeyInputResponseData extends ResponseData {
+ // members
+ private boolean mIsUcs2;
+ private boolean mIsPacked;
+ private boolean mIsYesNo;
+ private boolean mYesNoResponse;
+ public String mInData;
+
+ // GetInKey Yes/No response characters constants.
+ protected static final byte GET_INKEY_YES = 0x01;
+ protected static final byte GET_INKEY_NO = 0x00;
+
+ public GetInkeyInputResponseData(String inData, boolean ucs2, boolean packed) {
+ super();
+ this.mIsUcs2 = ucs2;
+ this.mIsPacked = packed;
+ this.mInData = inData;
+ this.mIsYesNo = false;
+ }
+
+ public GetInkeyInputResponseData(boolean yesNoResponse) {
+ super();
+ this.mIsUcs2 = false;
+ this.mIsPacked = false;
+ this.mInData = "";
+ this.mIsYesNo = true;
+ this.mYesNoResponse = yesNoResponse;
+ }
+
+ @Override
+ public void format(ByteArrayOutputStream buf) {
+ if (buf == null) {
+ return;
+ }
+
+ // Text string object
+ int tag = 0x80 | ComprehensionTlvTag.TEXT_STRING.value();
+ buf.write(tag); // tag
+
+ byte[] data;
+
+ if (mIsYesNo) {
+ data = new byte[1];
+ data[0] = mYesNoResponse ? GET_INKEY_YES : GET_INKEY_NO;
+ } else if (mInData != null && mInData.length() > 0) {
+ try {
+ if (mIsUcs2) {
+ data = mInData.getBytes("UTF-16");
+ } else if (mIsPacked) {
+ int size = mInData.length();
+
+ byte[] tempData = GsmAlphabet
+ .stringToGsm7BitPacked(mInData);
+ data = new byte[size];
+ // Since stringToGsm7BitPacked() set byte 0 in the
+ // returned byte array to the count of septets used...
+ // copy to a new array without byte 0.
+ System.arraycopy(tempData, 1, data, 0, size);
+ } else {
+ data = GsmAlphabet.stringToGsm8BitPacked(mInData);
+ }
+ } catch (UnsupportedEncodingException e) {
+ data = new byte[0];
+ } catch (EncodeException e) {
+ data = new byte[0];
+ }
+ } else {
+ data = new byte[0];
+ }
+
+ // length - one more for data coding scheme.
+ buf.write(data.length + 1);
+
+ // data coding scheme
+ if (mIsUcs2) {
+ buf.write(0x08); // UCS2
+ } else if (mIsPacked) {
+ buf.write(0x00); // 7 bit packed
+ } else {
+ buf.write(0x04); // 8 bit unpacked
+ }
+
+ for (byte b : data) {
+ buf.write(b);
+ }
+ }
+}
+
+