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