blob: 313e56ff9e622327c4322409a779db824fe99f2f [file] [log] [blame]
/*
* 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.annotation.UnsupportedAppUsage;
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
@UnsupportedAppUsage
CommandDetails mCmdDet;
@UnsupportedAppUsage
private TextMessage mTextMsg;
@UnsupportedAppUsage
private Menu mMenu;
@UnsupportedAppUsage
private Input mInput;
private BrowserSettings mBrowserSettings = null;
private ToneSettings mToneSettings = null;
@UnsupportedAppUsage
private CallSettings mCallSettings = null;
private SetupEventListSettings mSetupEventListSettings = null;
private boolean mLoadIconFailed = false;
/*
* Container for Launch Browser command settings.
*/
public class BrowserSettings {
public String url;
public LaunchBrowserMode mode;
}
/*
* Container for Call Setup command settings.
*/
public class CallSettings {
@UnsupportedAppUsage
public TextMessage confirmMsg;
@UnsupportedAppUsage
public TextMessage callMsg;
}
public class SetupEventListSettings {
@UnsupportedAppUsage
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;
mLoadIconFailed = cmdParams.mLoadIconFailed;
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 REFRESH:
case RUN_AT:
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:
default:
break;
}
}
public CatCmdMessage(Parcel in) {
mCmdDet = in.readParcelable(null);
mTextMsg = in.readParcelable(null);
mMenu = in.readParcelable(null);
mInput = in.readParcelable(null);
mLoadIconFailed = (in.readByte() == 1);
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);
dest.writeByte((byte) (mLoadIconFailed ? 1 : 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<CatCmdMessage> CREATOR = new Parcelable.Creator<CatCmdMessage>() {
@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 */
@UnsupportedAppUsage
public AppInterface.CommandType getCmdType() {
return AppInterface.CommandType.fromInt(mCmdDet.typeOfCommand);
}
public Menu getMenu() {
return mMenu;
}
public Input geInput() {
return mInput;
}
@UnsupportedAppUsage
public TextMessage geTextMessage() {
return mTextMsg;
}
public BrowserSettings getBrowserSettings() {
return mBrowserSettings;
}
public ToneSettings getToneSettings() {
return mToneSettings;
}
@UnsupportedAppUsage
public CallSettings getCallSettings() {
return mCallSettings;
}
@UnsupportedAppUsage
public SetupEventListSettings getSetEventList() {
return mSetupEventListSettings;
}
/**
* API to be used by application to check if loading optional icon
* has failed
*/
@UnsupportedAppUsage
public boolean hasIconLoadFailed() {
return mLoadIconFailed;
}
}