/* * Copyright (C) 2017 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.googlecode.android_scripting.facade.telephony; import android.telephony.DataConnectionRealTimeInfo; import android.telephony.PhysicalChannelConfig; import android.telephony.PreciseCallState; import android.telephony.ServiceState; import com.googlecode.android_scripting.jsonrpc.JsonSerializable; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public class TelephonyEvents { public static class CallStateEvent implements JsonSerializable { private String mCallState; private String mIncomingNumber; private int mSubscriptionId; CallStateEvent(int state, String incomingNumber, int subscriptionId) { mCallState = null; mIncomingNumber = TelephonyUtils.formatIncomingNumber( incomingNumber); mCallState = TelephonyUtils.getTelephonyCallStateString( state); mSubscriptionId = subscriptionId; } public String getIncomingNumber() { return mIncomingNumber; } public int getSubscriptionId() { return mSubscriptionId; } public JSONObject toJSON() throws JSONException { JSONObject callState = new JSONObject(); callState.put( TelephonyConstants.CallStateContainer.SUBSCRIPTION_ID, mSubscriptionId); callState.put( TelephonyConstants.CallStateContainer.INCOMING_NUMBER, mIncomingNumber); callState.put(TelephonyConstants.CallStateContainer.CALL_STATE, mCallState); return callState; } } public static class PreciseCallStateEvent implements JsonSerializable { private PreciseCallState mPreciseCallState; private String mPreciseCallStateString; private String mType; private int mCause; private int mSubscriptionId; PreciseCallStateEvent(int newState, String type, PreciseCallState preciseCallState, int subscriptionId) { mPreciseCallStateString = TelephonyUtils.getPreciseCallStateString( newState); mPreciseCallState = preciseCallState; mType = type; mSubscriptionId = subscriptionId; mCause = preciseCallState.getPreciseDisconnectCause(); } public String getType() { return mType; } public int getSubscriptionId() { return mSubscriptionId; } public PreciseCallState getPreciseCallState() { return mPreciseCallState; } public int getCause() { return mCause; } public JSONObject toJSON() throws JSONException { JSONObject preciseCallState = new JSONObject(); preciseCallState.put( TelephonyConstants.PreciseCallStateContainer.SUBSCRIPTION_ID, mSubscriptionId); preciseCallState.put( TelephonyConstants.PreciseCallStateContainer.TYPE, mType); preciseCallState.put( TelephonyConstants.PreciseCallStateContainer.PRECISE_CALL_STATE, mPreciseCallStateString); preciseCallState.put( TelephonyConstants.PreciseCallStateContainer.CAUSE, mCause); return preciseCallState; } } public static class DataConnectionRealTimeInfoEvent implements JsonSerializable { private DataConnectionRealTimeInfo mDataConnectionRealTimeInfo; private String mDataConnectionPowerState; private int mSubscriptionId; private long mTime; DataConnectionRealTimeInfoEvent( DataConnectionRealTimeInfo dataConnectionRealTimeInfo, int subscriptionId) { mTime = dataConnectionRealTimeInfo.getTime(); mSubscriptionId = subscriptionId; mDataConnectionPowerState = TelephonyUtils.getDcPowerStateString( dataConnectionRealTimeInfo.getDcPowerState()); mDataConnectionRealTimeInfo = dataConnectionRealTimeInfo; } public int getSubscriptionId() { return mSubscriptionId; } public long getTime() { return mTime; } public JSONObject toJSON() throws JSONException { JSONObject dataConnectionRealTimeInfo = new JSONObject(); dataConnectionRealTimeInfo.put( TelephonyConstants.DataConnectionRealTimeInfoContainer.SUBSCRIPTION_ID, mSubscriptionId); dataConnectionRealTimeInfo.put( TelephonyConstants.DataConnectionRealTimeInfoContainer.TIME, mTime); dataConnectionRealTimeInfo.put( TelephonyConstants.DataConnectionRealTimeInfoContainer.DATA_CONNECTION_POWER_STATE, mDataConnectionPowerState); return dataConnectionRealTimeInfo; } } public static class DataConnectionStateEvent implements JsonSerializable { private String mDataConnectionState; private int mSubscriptionId; private int mState; private String mDataNetworkType; DataConnectionStateEvent(int state, String dataNetworkType, int subscriptionId) { mSubscriptionId = subscriptionId; mDataConnectionState = TelephonyUtils.getDataConnectionStateString( state); mDataNetworkType = dataNetworkType; mState = state; } public int getSubscriptionId() { return mSubscriptionId; } public int getState() { return mState; } public String getDataNetworkType() { return mDataNetworkType; } public JSONObject toJSON() throws JSONException { JSONObject dataConnectionState = new JSONObject(); dataConnectionState.put( TelephonyConstants.DataConnectionStateContainer.SUBSCRIPTION_ID, mSubscriptionId); dataConnectionState.put( TelephonyConstants.DataConnectionStateContainer.DATA_CONNECTION_STATE, mDataConnectionState); dataConnectionState.put( TelephonyConstants.DataConnectionStateContainer.DATA_NETWORK_TYPE, mDataNetworkType); dataConnectionState.put( TelephonyConstants.DataConnectionStateContainer.STATE_CODE, mState); return dataConnectionState; } } public static class ServiceStateEvent implements JsonSerializable { private String mServiceStateString; private int mSubscriptionId; private ServiceState mServiceState; ServiceStateEvent(ServiceState serviceState, int subscriptionId) { mServiceState = serviceState; mSubscriptionId = subscriptionId; mServiceStateString = TelephonyUtils.getNetworkStateString( serviceState.getState()); if (mServiceStateString.equals( TelephonyConstants.SERVICE_STATE_OUT_OF_SERVICE) && serviceState.isEmergencyOnly()) { mServiceStateString = TelephonyConstants.SERVICE_STATE_EMERGENCY_ONLY; } } public int getSubscriptionId() { return mSubscriptionId; } public ServiceState getServiceState() { return mServiceState; } public JSONObject toJSON() throws JSONException { JSONObject serviceState = com.googlecode.android_scripting.jsonrpc.JsonBuilder.buildServiceState( mServiceState); serviceState.put( TelephonyConstants.ServiceStateContainer.SUBSCRIPTION_ID, mSubscriptionId); return serviceState; } } public static class MessageWaitingIndicatorEvent implements JsonSerializable { private boolean mMessageWaitingIndicator; MessageWaitingIndicatorEvent(boolean messageWaitingIndicator) { mMessageWaitingIndicator = messageWaitingIndicator; } public boolean getMessageWaitingIndicator() { return mMessageWaitingIndicator; } public JSONObject toJSON() throws JSONException { JSONObject messageWaitingIndicator = new JSONObject(); messageWaitingIndicator.put( TelephonyConstants.MessageWaitingIndicatorContainer.IS_MESSAGE_WAITING, mMessageWaitingIndicator); return messageWaitingIndicator; } } public static class PhysicalChannelConfigChangedEvent implements JsonSerializable { private final List mConfigs; PhysicalChannelConfigChangedEvent(List configs) { mConfigs = configs; } List getConfigs() { return mConfigs; } public JSONObject toJSON() throws JSONException { JSONArray jsonConfigs = new JSONArray(); for(PhysicalChannelConfig c : mConfigs) { JSONObject cfg = new JSONObject(); cfg.put( TelephonyConstants.PhysicalChannelConfigContainer.CELL_BANDWIDTH_DOWNLINK, c.getCellBandwidthDownlink()); cfg.put( TelephonyConstants.PhysicalChannelConfigContainer.CONNECTION_STATUS, c.getConnectionStatus()); jsonConfigs.put(cfg); } return new JSONObject().put( TelephonyConstants.PhysicalChannelConfigContainer.CONFIGS, jsonConfigs); } } }