blob: a90d9eb6eee76849203c9f01d53a4bc49f889866 [file] [log] [blame]
/*
* 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.
*
* <p>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.
*
* <p>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;
}
}