/* * Copyright (C) 2007 The Android Open Source Project * * 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.cat; import android.os.Parcel; import android.os.Parcelable; /** * Class used to pass CAT messages from telephony to application. Application * should call getXXX() to get commands's specific values. * */ public class CatCmdMessage implements Parcelable { // members CommandDetails mCmdDet; private TextMessage mTextMsg; private Menu mMenu; private Input mInput; private BrowserSettings mBrowserSettings = null; private ToneSettings mToneSettings = null; private CallSettings mCallSettings = null; private SetupEventListSettings mSetupEventListSettings = null; /* * Container for Launch Browser command settings. */ public class BrowserSettings { public String url; public LaunchBrowserMode mode; } /* * Container for Call Setup command settings. */ public class CallSettings { public TextMessage confirmMsg; public TextMessage callMsg; } public class SetupEventListSettings { public int[] eventList; } public final class SetupEventListConstants { // Event values in SETUP_EVENT_LIST Proactive Command as per ETSI 102.223 public static final int USER_ACTIVITY_EVENT = 0x04; public static final int IDLE_SCREEN_AVAILABLE_EVENT = 0x05; public static final int LANGUAGE_SELECTION_EVENT = 0x07; public static final int BROWSER_TERMINATION_EVENT = 0x08; public static final int BROWSING_STATUS_EVENT = 0x0F; } public final class BrowserTerminationCauses { public static final int USER_TERMINATION = 0x00; public static final int ERROR_TERMINATION = 0x01; } CatCmdMessage(CommandParams cmdParams) { mCmdDet = cmdParams.mCmdDet; switch(getCmdType()) { case SET_UP_MENU: case SELECT_ITEM: mMenu = ((SelectItemParams) cmdParams).mMenu; break; case DISPLAY_TEXT: case SET_UP_IDLE_MODE_TEXT: case SEND_DTMF: case SEND_SMS: case SEND_SS: case SEND_USSD: mTextMsg = ((DisplayTextParams) cmdParams).mTextMsg; break; case GET_INPUT: case GET_INKEY: mInput = ((GetInputParams) cmdParams).mInput; break; case LAUNCH_BROWSER: mTextMsg = ((LaunchBrowserParams) cmdParams).mConfirmMsg; mBrowserSettings = new BrowserSettings(); mBrowserSettings.url = ((LaunchBrowserParams) cmdParams).mUrl; mBrowserSettings.mode = ((LaunchBrowserParams) cmdParams).mMode; break; case PLAY_TONE: PlayToneParams params = (PlayToneParams) cmdParams; mToneSettings = params.mSettings; mTextMsg = params.mTextMsg; break; case GET_CHANNEL_STATUS: mTextMsg = ((CallSetupParams) cmdParams).mConfirmMsg; break; case SET_UP_CALL: mCallSettings = new CallSettings(); mCallSettings.confirmMsg = ((CallSetupParams) cmdParams).mConfirmMsg; mCallSettings.callMsg = ((CallSetupParams) cmdParams).mCallMsg; break; case OPEN_CHANNEL: case CLOSE_CHANNEL: case RECEIVE_DATA: case SEND_DATA: BIPClientParams param = (BIPClientParams) cmdParams; mTextMsg = param.mTextMsg; break; case SET_UP_EVENT_LIST: mSetupEventListSettings = new SetupEventListSettings(); mSetupEventListSettings.eventList = ((SetEventListParams) cmdParams).mEventInfo; break; case PROVIDE_LOCAL_INFORMATION: case REFRESH: default: break; } } public CatCmdMessage(Parcel in) { mCmdDet = in.readParcelable(null); mTextMsg = in.readParcelable(null); mMenu = in.readParcelable(null); mInput = in.readParcelable(null); switch (getCmdType()) { case LAUNCH_BROWSER: mBrowserSettings = new BrowserSettings(); mBrowserSettings.url = in.readString(); mBrowserSettings.mode = LaunchBrowserMode.values()[in.readInt()]; break; case PLAY_TONE: mToneSettings = in.readParcelable(null); break; case SET_UP_CALL: mCallSettings = new CallSettings(); mCallSettings.confirmMsg = in.readParcelable(null); mCallSettings.callMsg = in.readParcelable(null); break; case SET_UP_EVENT_LIST: mSetupEventListSettings = new SetupEventListSettings(); int length = in.readInt(); mSetupEventListSettings.eventList = new int[length]; for (int i = 0; i < length; i++) { mSetupEventListSettings.eventList[i] = in.readInt(); } break; default: break; } } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeParcelable(mCmdDet, 0); dest.writeParcelable(mTextMsg, 0); dest.writeParcelable(mMenu, 0); dest.writeParcelable(mInput, 0); switch(getCmdType()) { case LAUNCH_BROWSER: dest.writeString(mBrowserSettings.url); dest.writeInt(mBrowserSettings.mode.ordinal()); break; case PLAY_TONE: dest.writeParcelable(mToneSettings, 0); break; case SET_UP_CALL: dest.writeParcelable(mCallSettings.confirmMsg, 0); dest.writeParcelable(mCallSettings.callMsg, 0); break; case SET_UP_EVENT_LIST: dest.writeIntArray(mSetupEventListSettings.eventList); break; default: break; } } public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { @Override public CatCmdMessage createFromParcel(Parcel in) { return new CatCmdMessage(in); } @Override public CatCmdMessage[] newArray(int size) { return new CatCmdMessage[size]; } }; @Override public int describeContents() { return 0; } /* external API to be used by application */ public AppInterface.CommandType getCmdType() { return AppInterface.CommandType.fromInt(mCmdDet.typeOfCommand); } public Menu getMenu() { return mMenu; } public Input geInput() { return mInput; } public TextMessage geTextMessage() { return mTextMsg; } public BrowserSettings getBrowserSettings() { return mBrowserSettings; } public ToneSettings getToneSettings() { return mToneSettings; } public CallSettings getCallSettings() { return mCallSettings; } public SetupEventListSettings getSetEventList() { return mSetupEventListSettings; } }