1 /*
2  * Copyright (C) 2007 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 
17 package com.android.internal.telephony.cat;
18 
19 import android.os.Parcel;
20 import android.os.Parcelable;
21 
22 /**
23  * Class used to pass CAT messages from telephony to application. Application
24  * should call getXXX() to get commands's specific values.
25  *
26  */
27 public class CatCmdMessage implements Parcelable {
28     // members
29     CommandDetails mCmdDet;
30     private TextMessage mTextMsg;
31     private Menu mMenu;
32     private Input mInput;
33     private BrowserSettings mBrowserSettings = null;
34     private ToneSettings mToneSettings = null;
35     private CallSettings mCallSettings = null;
36     private SetupEventListSettings mSetupEventListSettings = null;
37     private boolean mLoadIconFailed = false;
38 
39     /*
40      * Container for Launch Browser command settings.
41      */
42     public class BrowserSettings {
43         public String url;
44         public LaunchBrowserMode mode;
45     }
46 
47     /*
48      * Container for Call Setup command settings.
49      */
50     public class CallSettings {
51         public TextMessage confirmMsg;
52         public TextMessage callMsg;
53     }
54 
55     public class SetupEventListSettings {
56         public int[] eventList;
57     }
58 
59     public final class SetupEventListConstants {
60         // Event values in SETUP_EVENT_LIST Proactive Command as per ETSI 102.223
61         public static final int USER_ACTIVITY_EVENT          = 0x04;
62         public static final int IDLE_SCREEN_AVAILABLE_EVENT  = 0x05;
63         public static final int LANGUAGE_SELECTION_EVENT     = 0x07;
64         public static final int BROWSER_TERMINATION_EVENT    = 0x08;
65         public static final int BROWSING_STATUS_EVENT        = 0x0F;
66     }
67 
68     public final class BrowserTerminationCauses {
69         public static final int USER_TERMINATION             = 0x00;
70         public static final int ERROR_TERMINATION            = 0x01;
71     }
72 
CatCmdMessage(CommandParams cmdParams)73     CatCmdMessage(CommandParams cmdParams) {
74         mCmdDet = cmdParams.mCmdDet;
75         mLoadIconFailed =  cmdParams.mLoadIconFailed;
76         switch(getCmdType()) {
77         case SET_UP_MENU:
78         case SELECT_ITEM:
79             mMenu = ((SelectItemParams) cmdParams).mMenu;
80             break;
81         case DISPLAY_TEXT:
82         case SET_UP_IDLE_MODE_TEXT:
83         case SEND_DTMF:
84         case SEND_SMS:
85         case SEND_SS:
86         case SEND_USSD:
87             mTextMsg = ((DisplayTextParams) cmdParams).mTextMsg;
88             break;
89         case GET_INPUT:
90         case GET_INKEY:
91             mInput = ((GetInputParams) cmdParams).mInput;
92             break;
93         case LAUNCH_BROWSER:
94             mTextMsg = ((LaunchBrowserParams) cmdParams).mConfirmMsg;
95             mBrowserSettings = new BrowserSettings();
96             mBrowserSettings.url = ((LaunchBrowserParams) cmdParams).mUrl;
97             mBrowserSettings.mode = ((LaunchBrowserParams) cmdParams).mMode;
98             break;
99         case PLAY_TONE:
100             PlayToneParams params = (PlayToneParams) cmdParams;
101             mToneSettings = params.mSettings;
102             mTextMsg = params.mTextMsg;
103             break;
104         case GET_CHANNEL_STATUS:
105             mTextMsg = ((CallSetupParams) cmdParams).mConfirmMsg;
106             break;
107         case SET_UP_CALL:
108             mCallSettings = new CallSettings();
109             mCallSettings.confirmMsg = ((CallSetupParams) cmdParams).mConfirmMsg;
110             mCallSettings.callMsg = ((CallSetupParams) cmdParams).mCallMsg;
111             break;
112         case OPEN_CHANNEL:
113         case CLOSE_CHANNEL:
114         case RECEIVE_DATA:
115         case SEND_DATA:
116             BIPClientParams param = (BIPClientParams) cmdParams;
117             mTextMsg = param.mTextMsg;
118             break;
119         case SET_UP_EVENT_LIST:
120             mSetupEventListSettings = new SetupEventListSettings();
121             mSetupEventListSettings.eventList = ((SetEventListParams) cmdParams).mEventInfo;
122             break;
123         case PROVIDE_LOCAL_INFORMATION:
124         case REFRESH:
125         default:
126             break;
127         }
128     }
129 
CatCmdMessage(Parcel in)130     public CatCmdMessage(Parcel in) {
131         mCmdDet = in.readParcelable(null);
132         mTextMsg = in.readParcelable(null);
133         mMenu = in.readParcelable(null);
134         mInput = in.readParcelable(null);
135         mLoadIconFailed = (in.readByte() == 1);
136         switch (getCmdType()) {
137         case LAUNCH_BROWSER:
138             mBrowserSettings = new BrowserSettings();
139             mBrowserSettings.url = in.readString();
140             mBrowserSettings.mode = LaunchBrowserMode.values()[in.readInt()];
141             break;
142         case PLAY_TONE:
143             mToneSettings = in.readParcelable(null);
144             break;
145         case SET_UP_CALL:
146             mCallSettings = new CallSettings();
147             mCallSettings.confirmMsg = in.readParcelable(null);
148             mCallSettings.callMsg = in.readParcelable(null);
149             break;
150         case SET_UP_EVENT_LIST:
151             mSetupEventListSettings = new SetupEventListSettings();
152             int length = in.readInt();
153             mSetupEventListSettings.eventList = new int[length];
154             for (int i = 0; i < length; i++) {
155                 mSetupEventListSettings.eventList[i] = in.readInt();
156             }
157             break;
158         default:
159             break;
160         }
161     }
162 
163     @Override
writeToParcel(Parcel dest, int flags)164     public void writeToParcel(Parcel dest, int flags) {
165         dest.writeParcelable(mCmdDet, 0);
166         dest.writeParcelable(mTextMsg, 0);
167         dest.writeParcelable(mMenu, 0);
168         dest.writeParcelable(mInput, 0);
169         dest.writeByte((byte) (mLoadIconFailed ? 1 : 0));
170         switch(getCmdType()) {
171         case LAUNCH_BROWSER:
172             dest.writeString(mBrowserSettings.url);
173             dest.writeInt(mBrowserSettings.mode.ordinal());
174             break;
175         case PLAY_TONE:
176             dest.writeParcelable(mToneSettings, 0);
177             break;
178         case SET_UP_CALL:
179             dest.writeParcelable(mCallSettings.confirmMsg, 0);
180             dest.writeParcelable(mCallSettings.callMsg, 0);
181             break;
182         case SET_UP_EVENT_LIST:
183             dest.writeIntArray(mSetupEventListSettings.eventList);
184             break;
185         default:
186             break;
187         }
188     }
189 
190     public static final Parcelable.Creator<CatCmdMessage> CREATOR = new Parcelable.Creator<CatCmdMessage>() {
191         @Override
192         public CatCmdMessage createFromParcel(Parcel in) {
193             return new CatCmdMessage(in);
194         }
195 
196         @Override
197         public CatCmdMessage[] newArray(int size) {
198             return new CatCmdMessage[size];
199         }
200     };
201 
202     @Override
describeContents()203     public int describeContents() {
204         return 0;
205     }
206 
207     /* external API to be used by application */
getCmdType()208     public AppInterface.CommandType getCmdType() {
209         return AppInterface.CommandType.fromInt(mCmdDet.typeOfCommand);
210     }
211 
getMenu()212     public Menu getMenu() {
213         return mMenu;
214     }
215 
geInput()216     public Input geInput() {
217         return mInput;
218     }
219 
geTextMessage()220     public TextMessage geTextMessage() {
221         return mTextMsg;
222     }
223 
getBrowserSettings()224     public BrowserSettings getBrowserSettings() {
225         return mBrowserSettings;
226     }
227 
getToneSettings()228     public ToneSettings getToneSettings() {
229         return mToneSettings;
230     }
231 
getCallSettings()232     public CallSettings getCallSettings() {
233         return mCallSettings;
234     }
235 
getSetEventList()236     public SetupEventListSettings getSetEventList() {
237         return mSetupEventListSettings;
238     }
239 
240     /**
241      * API to be used by application to check if loading optional icon
242      * has failed
243      */
hasIconLoadFailed()244     public boolean hasIconLoadFailed() {
245         return mLoadIconFailed;
246     }
247 }
248