/* * Copyright (C) 2017 Google Inc. * * 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.google.android.mobly.snippet.event; import android.os.Bundle; import com.google.android.mobly.snippet.rpc.JsonBuilder; import org.json.JSONException; import org.json.JSONObject; /** Class used to store information from a callback event. */ public class SnippetEvent { // The ID used to associate an event to a callback object on the client side. private final String mCallbackId; // The name of this event, e.g. startXxxServiceOnSuccess. private final String mName; // The content of this event. We use Android's Bundle because it adheres to Android convention // and adding data to it does not throw checked exceptions, which makes the world a better // place. private final Bundle mData = new Bundle(); private final long mCreationTime; /** * Constructs an {@link SnippetEvent} object. * *

The object is used to store information from a callback method associated with a call to * an {@link com.google.android.mobly.snippet.rpc.AsyncRpc} method. * * @param callbackId The callbackId passed to the {@link * com.google.android.mobly.snippet.rpc.AsyncRpc} method. * @param name The name of the event. */ public SnippetEvent(String callbackId, String name) { if (callbackId == null) { throw new IllegalArgumentException("SnippetEvent's callback ID shall not be null."); } if (name == null) { throw new IllegalArgumentException("SnippetEvent's name shall not be null."); } mCallbackId = callbackId; mName = name; mCreationTime = System.currentTimeMillis(); } public String getCallbackId() { return mCallbackId; } public String getName() { return mName; } /** * Get the internal bundle of this event. * *

This is the only way to add data to the event, because we can't inherit Bundle type and we * don't want to dup all the getter and setters of {@link Bundle}. * * @return The Bundle that holds user data for this {@link SnippetEvent}. */ public Bundle getData() { return mData; } public long getCreationTime() { return mCreationTime; } public JSONObject toJson() throws JSONException { JSONObject result = new JSONObject(); result.put("callbackId", getCallbackId()); result.put("name", getName()); result.put("time", getCreationTime()); result.put("data", JsonBuilder.build(mData)); return result; } }