1/*
2 * Copyright (C) 2006 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.internal.telephony.cat;
18
19import android.content.ComponentName;
20
21/**
22 * Interface for communication between STK App and CAT Telephony
23 *
24 * {@hide}
25 */
26public interface AppInterface {
27
28    /*
29     * Intent's actions which are broadcasted by the Telephony once a new CAT
30     * proactive command, session end, ALPHA during STK CC arrive.
31     */
32    public static final String CAT_CMD_ACTION =
33                                    "com.android.internal.stk.command";
34    public static final String CAT_SESSION_END_ACTION =
35                                    "com.android.internal.stk.session_end";
36    public static final String CAT_ALPHA_NOTIFY_ACTION =
37                                    "com.android.internal.stk.alpha_notify";
38
39    //This is used to send ALPHA string from card to STK App.
40    public static final String ALPHA_STRING = "alpha_string";
41
42    // This is used to send refresh-result when MSG_ID_ICC_REFRESH is received.
43    public static final String REFRESH_RESULT = "refresh_result";
44    //This is used to send card status from card to STK App.
45    public static final String CARD_STATUS = "card_status";
46    //Intent's actions are broadcasted by Telephony once IccRefresh occurs.
47    public static final String CAT_ICC_STATUS_CHANGE =
48                                    "com.android.internal.stk.icc_status_change";
49
50    // Permission required by STK command receiver
51    public static final String STK_PERMISSION = "android.permission.RECEIVE_STK_COMMANDS";
52
53    // Only forwards cat broadcast to the system default stk app
54    public static ComponentName getDefaultSTKApplication() {
55        return ComponentName.unflattenFromString("com.android.stk/.StkCmdReceiver");
56    }
57
58    /*
59     * Callback function from app to telephony to pass a result code and user's
60     * input back to the ICC.
61     */
62    void onCmdResponse(CatResponseMessage resMsg);
63
64    /*
65     * Enumeration for representing "Type of Command" of proactive commands.
66     * Those are the only commands which are supported by the Telephony. Any app
67     * implementation should support those.
68     * Refer to ETSI TS 102.223 section 9.4
69     */
70    public static enum CommandType {
71        DISPLAY_TEXT(0x21),
72        GET_INKEY(0x22),
73        GET_INPUT(0x23),
74        LAUNCH_BROWSER(0x15),
75        PLAY_TONE(0x20),
76        REFRESH(0x01),
77        SELECT_ITEM(0x24),
78        SEND_SS(0x11),
79        SEND_USSD(0x12),
80        SEND_SMS(0x13),
81        SEND_DTMF(0x14),
82        SET_UP_EVENT_LIST(0x05),
83        SET_UP_IDLE_MODE_TEXT(0x28),
84        SET_UP_MENU(0x25),
85        SET_UP_CALL(0x10),
86        PROVIDE_LOCAL_INFORMATION(0x26),
87        OPEN_CHANNEL(0x40),
88        CLOSE_CHANNEL(0x41),
89        RECEIVE_DATA(0x42),
90        SEND_DATA(0x43),
91        GET_CHANNEL_STATUS(0x44);
92
93        private int mValue;
94
95        CommandType(int value) {
96            mValue = value;
97        }
98
99        public int value() {
100            return mValue;
101        }
102
103        /**
104         * Create a CommandType object.
105         *
106         * @param value Integer value to be converted to a CommandType object.
107         * @return CommandType object whose "Type of Command" value is {@code
108         *         value}. If no CommandType object has that value, null is
109         *         returned.
110         */
111        public static CommandType fromInt(int value) {
112            for (CommandType e : CommandType.values()) {
113                if (e.mValue == value) {
114                    return e;
115                }
116            }
117            return null;
118        }
119    }
120}
121