Java程序  |  165行  |  5.57 KB

/*
 * 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;

import com.googlecode.android_scripting.jsonrpc.JsonSerializable;

import org.json.JSONException;
import org.json.JSONObject;

/**
 * Utility class for ConnectivityManager/Service events. Encapsulates the data in a JSON format
 * to be used in the test script.
 *
 * Note that not all information is encapsulated. Add to the *Event classes as more information
 * is needed.
 */
public class ConnectivityEvents {
    /**
     * Translates a packet keep-alive event to JSON.
     */
    public static class PacketKeepaliveEvent implements JsonSerializable {
        private String mId;
        private String mPacketKeepaliveEvent;

        public PacketKeepaliveEvent(String id, String event) {
            mId = id;
            mPacketKeepaliveEvent = event;
        }

        /**
         * Create a JSON data-structure.
         */
        public JSONObject toJSON() throws JSONException {
            JSONObject packetKeepalive = new JSONObject();

            packetKeepalive.put(
                    ConnectivityConstants.PacketKeepaliveContainer.ID,
                    mId);
            packetKeepalive.put(
                    ConnectivityConstants.PacketKeepaliveContainer.PACKET_KEEPALIVE_EVENT,
                    mPacketKeepaliveEvent);

            return packetKeepalive;
        }
    }

    /**
     * Translates a ConnectivityManager.NetworkCallback to JSON.
     */
    public static class NetworkCallbackEventBase implements JsonSerializable {
        private String mId;
        private String mNetworkCallbackEvent;
        private long mCreateTimestamp;
        private long mCurrentTimestamp;

        public NetworkCallbackEventBase(String id, String event, long createTimestamp) {
            mId = id;
            mNetworkCallbackEvent = event;
            mCreateTimestamp = createTimestamp;
            mCurrentTimestamp = System.currentTimeMillis();
        }

        /**
         * Create a JSON data-structure.
         */
        public JSONObject toJSON() throws JSONException {
            JSONObject networkCallback = new JSONObject();

            networkCallback.put(ConnectivityConstants.NetworkCallbackContainer.ID, mId);
            networkCallback.put(
                    ConnectivityConstants.NetworkCallbackContainer.NETWORK_CALLBACK_EVENT,
                    mNetworkCallbackEvent);
            networkCallback.put(ConnectivityConstants.NetworkCallbackContainer.CREATE_TIMESTAMP,
                    mCreateTimestamp);
            networkCallback.put(ConnectivityConstants.NetworkCallbackContainer.CURRENT_TIMESTAMP,
                    mCurrentTimestamp);

            return networkCallback;
        }
    }

    /**
     * Specializes NetworkCallbackEventBase to add information for the onLosing() callback.
     */
    public static class NetworkCallbackEventOnLosing extends NetworkCallbackEventBase {
        private int mMaxMsToLive;

        public NetworkCallbackEventOnLosing(String id, String event, long createTimestamp,
                int maxMsToLive) {
            super(id, event, createTimestamp);
            mMaxMsToLive = maxMsToLive;
        }

        /**
         * Create a JSON data-structure.
         */
        public JSONObject toJSON() throws JSONException {
            JSONObject json = super.toJSON();
            json.put(ConnectivityConstants.NetworkCallbackContainer.MAX_MS_TO_LIVE, mMaxMsToLive);
            return json;
        }
    }

    /**
     * Specializes NetworkCallbackEventBase to add information for the onCapabilitiesChanged()
     * callback.
     */
    public static class NetworkCallbackEventOnCapabilitiesChanged extends NetworkCallbackEventBase {
        private int mRssi;

        public NetworkCallbackEventOnCapabilitiesChanged(String id, String event,
                long createTimestamp, int rssi) {
            super(id, event, createTimestamp);
            mRssi = rssi;
        }

        /**
         * Create a JSON data-structure.
         */
        public JSONObject toJSON() throws JSONException {
            JSONObject json = super.toJSON();
            json.put(ConnectivityConstants.NetworkCallbackContainer.RSSI, mRssi);
            return json;
        }
    }

    /**
     * Specializes NetworkCallbackEventBase to add information for the onCapabilitiesChanged()
     * callback.
     */
    public static class NetworkCallbackEventOnLinkPropertiesChanged extends
            NetworkCallbackEventBase {
        private String mInterfaceName;

        public NetworkCallbackEventOnLinkPropertiesChanged(String id, String event,
                long createTimestamp, String interfaceName) {
            super(id, event, createTimestamp);
            mInterfaceName = interfaceName;
        }

        /**
         * Create a JSON data-structure.
         */
        public JSONObject toJSON() throws JSONException {
            JSONObject json = super.toJSON();
            json.put(ConnectivityConstants.NetworkCallbackContainer.INTERFACE_NAME, mInterfaceName);
            return json;
        }
    }
}