1 /* 2 * Copyright (C) 2017 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.googlecode.android_scripting.facade.telephony; 18 19 import android.telephony.DataConnectionRealTimeInfo; 20 import android.telephony.PhysicalChannelConfig; 21 import android.telephony.PreciseCallState; 22 import android.telephony.ServiceState; 23 24 import com.googlecode.android_scripting.jsonrpc.JsonSerializable; 25 26 import java.util.List; 27 28 import org.json.JSONArray; 29 import org.json.JSONException; 30 import org.json.JSONObject; 31 32 public class TelephonyEvents { 33 34 public static class CallStateEvent implements JsonSerializable { 35 private String mCallState; 36 private String mIncomingNumber; 37 private int mSubscriptionId; 38 CallStateEvent(int state, String incomingNumber, int subscriptionId)39 CallStateEvent(int state, String incomingNumber, int subscriptionId) { 40 mCallState = null; 41 mIncomingNumber = TelephonyUtils.formatIncomingNumber( 42 incomingNumber); 43 mCallState = TelephonyUtils.getTelephonyCallStateString( 44 state); 45 mSubscriptionId = subscriptionId; 46 } 47 getIncomingNumber()48 public String getIncomingNumber() { 49 return mIncomingNumber; 50 } 51 getSubscriptionId()52 public int getSubscriptionId() { 53 return mSubscriptionId; 54 } 55 toJSON()56 public JSONObject toJSON() throws JSONException { 57 JSONObject callState = new JSONObject(); 58 59 callState.put( 60 TelephonyConstants.CallStateContainer.SUBSCRIPTION_ID, 61 mSubscriptionId); 62 callState.put( 63 TelephonyConstants.CallStateContainer.INCOMING_NUMBER, 64 mIncomingNumber); 65 callState.put(TelephonyConstants.CallStateContainer.CALL_STATE, 66 mCallState); 67 68 return callState; 69 } 70 } 71 72 public static class PreciseCallStateEvent implements JsonSerializable { 73 private PreciseCallState mPreciseCallState; 74 private String mPreciseCallStateString; 75 private String mType; 76 private int mCause; 77 private int mSubscriptionId; 78 PreciseCallStateEvent(int newState, String type, PreciseCallState preciseCallState, int subscriptionId)79 PreciseCallStateEvent(int newState, String type, 80 PreciseCallState preciseCallState, int subscriptionId) { 81 mPreciseCallStateString = TelephonyUtils.getPreciseCallStateString( 82 newState); 83 mPreciseCallState = preciseCallState; 84 mType = type; 85 mSubscriptionId = subscriptionId; 86 mCause = preciseCallState.getPreciseDisconnectCause(); 87 } 88 getType()89 public String getType() { 90 return mType; 91 } 92 getSubscriptionId()93 public int getSubscriptionId() { 94 return mSubscriptionId; 95 } 96 getPreciseCallState()97 public PreciseCallState getPreciseCallState() { 98 return mPreciseCallState; 99 } 100 getCause()101 public int getCause() { 102 return mCause; 103 } 104 toJSON()105 public JSONObject toJSON() throws JSONException { 106 JSONObject preciseCallState = new JSONObject(); 107 108 preciseCallState.put( 109 TelephonyConstants.PreciseCallStateContainer.SUBSCRIPTION_ID, 110 mSubscriptionId); 111 preciseCallState.put( 112 TelephonyConstants.PreciseCallStateContainer.TYPE, mType); 113 preciseCallState.put( 114 TelephonyConstants.PreciseCallStateContainer.PRECISE_CALL_STATE, 115 mPreciseCallStateString); 116 preciseCallState.put( 117 TelephonyConstants.PreciseCallStateContainer.CAUSE, mCause); 118 119 return preciseCallState; 120 } 121 } 122 123 public static class DataConnectionRealTimeInfoEvent implements JsonSerializable { 124 private DataConnectionRealTimeInfo mDataConnectionRealTimeInfo; 125 private String mDataConnectionPowerState; 126 private int mSubscriptionId; 127 private long mTime; 128 DataConnectionRealTimeInfoEvent( DataConnectionRealTimeInfo dataConnectionRealTimeInfo, int subscriptionId)129 DataConnectionRealTimeInfoEvent( 130 DataConnectionRealTimeInfo dataConnectionRealTimeInfo, 131 int subscriptionId) { 132 mTime = dataConnectionRealTimeInfo.getTime(); 133 mSubscriptionId = subscriptionId; 134 mDataConnectionPowerState = TelephonyUtils.getDcPowerStateString( 135 dataConnectionRealTimeInfo.getDcPowerState()); 136 mDataConnectionRealTimeInfo = dataConnectionRealTimeInfo; 137 } 138 getSubscriptionId()139 public int getSubscriptionId() { 140 return mSubscriptionId; 141 } 142 getTime()143 public long getTime() { 144 return mTime; 145 } 146 toJSON()147 public JSONObject toJSON() throws JSONException { 148 JSONObject dataConnectionRealTimeInfo = new JSONObject(); 149 150 dataConnectionRealTimeInfo.put( 151 TelephonyConstants.DataConnectionRealTimeInfoContainer.SUBSCRIPTION_ID, 152 mSubscriptionId); 153 dataConnectionRealTimeInfo.put( 154 TelephonyConstants.DataConnectionRealTimeInfoContainer.TIME, 155 mTime); 156 dataConnectionRealTimeInfo.put( 157 TelephonyConstants.DataConnectionRealTimeInfoContainer.DATA_CONNECTION_POWER_STATE, 158 mDataConnectionPowerState); 159 160 return dataConnectionRealTimeInfo; 161 } 162 } 163 164 public static class DataConnectionStateEvent implements JsonSerializable { 165 private String mDataConnectionState; 166 private int mSubscriptionId; 167 private int mState; 168 private String mDataNetworkType; 169 DataConnectionStateEvent(int state, String dataNetworkType, int subscriptionId)170 DataConnectionStateEvent(int state, String dataNetworkType, 171 int subscriptionId) { 172 mSubscriptionId = subscriptionId; 173 mDataConnectionState = TelephonyUtils.getDataConnectionStateString( 174 state); 175 mDataNetworkType = dataNetworkType; 176 mState = state; 177 } 178 getSubscriptionId()179 public int getSubscriptionId() { 180 return mSubscriptionId; 181 } 182 getState()183 public int getState() { 184 return mState; 185 } 186 getDataNetworkType()187 public String getDataNetworkType() { 188 return mDataNetworkType; 189 } 190 toJSON()191 public JSONObject toJSON() throws JSONException { 192 JSONObject dataConnectionState = new JSONObject(); 193 194 dataConnectionState.put( 195 TelephonyConstants.DataConnectionStateContainer.SUBSCRIPTION_ID, 196 mSubscriptionId); 197 dataConnectionState.put( 198 TelephonyConstants.DataConnectionStateContainer.DATA_CONNECTION_STATE, 199 mDataConnectionState); 200 dataConnectionState.put( 201 TelephonyConstants.DataConnectionStateContainer.DATA_NETWORK_TYPE, 202 mDataNetworkType); 203 dataConnectionState.put( 204 TelephonyConstants.DataConnectionStateContainer.STATE_CODE, 205 mState); 206 207 return dataConnectionState; 208 } 209 } 210 211 public static class ServiceStateEvent implements JsonSerializable { 212 private String mServiceStateString; 213 private int mSubscriptionId; 214 private ServiceState mServiceState; 215 ServiceStateEvent(ServiceState serviceState, int subscriptionId)216 ServiceStateEvent(ServiceState serviceState, int subscriptionId) { 217 mServiceState = serviceState; 218 mSubscriptionId = subscriptionId; 219 mServiceStateString = TelephonyUtils.getNetworkStateString( 220 serviceState.getState()); 221 if (mServiceStateString.equals( 222 TelephonyConstants.SERVICE_STATE_OUT_OF_SERVICE) && 223 serviceState.isEmergencyOnly()) { 224 mServiceStateString = TelephonyConstants.SERVICE_STATE_EMERGENCY_ONLY; 225 } 226 } 227 getSubscriptionId()228 public int getSubscriptionId() { 229 return mSubscriptionId; 230 } 231 getServiceState()232 public ServiceState getServiceState() { 233 return mServiceState; 234 } 235 toJSON()236 public JSONObject toJSON() throws JSONException { 237 JSONObject serviceState = 238 com.googlecode.android_scripting.jsonrpc.JsonBuilder.buildServiceState( 239 mServiceState); 240 serviceState.put( 241 TelephonyConstants.ServiceStateContainer.SUBSCRIPTION_ID, 242 mSubscriptionId); 243 244 return serviceState; 245 } 246 } 247 248 public static class MessageWaitingIndicatorEvent implements JsonSerializable { 249 private boolean mMessageWaitingIndicator; 250 MessageWaitingIndicatorEvent(boolean messageWaitingIndicator)251 MessageWaitingIndicatorEvent(boolean messageWaitingIndicator) { 252 mMessageWaitingIndicator = messageWaitingIndicator; 253 } 254 getMessageWaitingIndicator()255 public boolean getMessageWaitingIndicator() { 256 return mMessageWaitingIndicator; 257 } 258 toJSON()259 public JSONObject toJSON() throws JSONException { 260 JSONObject messageWaitingIndicator = new JSONObject(); 261 262 messageWaitingIndicator.put( 263 TelephonyConstants.MessageWaitingIndicatorContainer.IS_MESSAGE_WAITING, 264 mMessageWaitingIndicator); 265 266 return messageWaitingIndicator; 267 } 268 } 269 270 public static class PhysicalChannelConfigChangedEvent implements JsonSerializable { 271 private final List<PhysicalChannelConfig> mConfigs; 272 PhysicalChannelConfigChangedEvent(List<PhysicalChannelConfig> configs)273 PhysicalChannelConfigChangedEvent(List<PhysicalChannelConfig> configs) { 274 mConfigs = configs; 275 } 276 getConfigs()277 List<PhysicalChannelConfig> getConfigs() { 278 return mConfigs; 279 } 280 toJSON()281 public JSONObject toJSON() throws JSONException { 282 JSONArray jsonConfigs = new JSONArray(); 283 for(PhysicalChannelConfig c : mConfigs) { 284 JSONObject cfg = new JSONObject(); 285 cfg.put( 286 TelephonyConstants.PhysicalChannelConfigContainer.CELL_BANDWIDTH_DOWNLINK, 287 c.getCellBandwidthDownlink()); 288 cfg.put( 289 TelephonyConstants.PhysicalChannelConfigContainer.CONNECTION_STATUS, 290 c.getConnectionStatus()); 291 jsonConfigs.put(cfg); 292 } 293 return new JSONObject().put( 294 TelephonyConstants.PhysicalChannelConfigContainer.CONFIGS, jsonConfigs); 295 } 296 } 297 } 298