/* * LaunchSession * Connect SDK * * Copyright (c) 2014 LG Electronics. * Created by Jeffrey Glenn on 07 Mar 2014 * * 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.connectsdk.service.sessions; import java.util.List; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.connectsdk.core.JSONDeserializable; import com.connectsdk.core.JSONSerializable; import com.connectsdk.service.DeviceService; import com.connectsdk.service.capability.listeners.ResponseListener; /** * Any time anything is launched onto a first screen device, there will be important session information that needs to be tracked. LaunchSession will track this data, and must be retained to perform certain actions within the session. */ public class LaunchSession implements JSONSerializable, JSONDeserializable { // @cond INTERNAL protected String appId; protected String appName; protected String sessionId; protected Object rawData; protected DeviceService service; protected LaunchSessionType sessionType; // @endcond /** * LaunchSession type is used to help DeviceService's know how to close a LunchSession. */ public enum LaunchSessionType { /** Unknown LaunchSession type, may be unable to close this launch session */ Unknown, /** LaunchSession represents a launched app */ App, /** LaunchSession represents an external input picker that was launched */ ExternalInputPicker, /** LaunchSession represents a media app */ Media, /** LaunchSession represents a web app */ WebApp } public LaunchSession() { } /** * Instantiates a LaunchSession object for a given app ID. * * @param appId System-specific, unique ID of the app */ public static LaunchSession launchSessionForAppId(String appId) { LaunchSession launchSession = new LaunchSession(); launchSession.appId = appId; return launchSession; } // @cond INTERNAL public static LaunchSession launchSessionFromJSONObject(JSONObject json) { LaunchSession launchSession = new LaunchSession(); try { launchSession.fromJSONObject(json); } catch (JSONException e) { e.printStackTrace(); } return launchSession; } // @endcond /** System-specific, unique ID of the app (ex. youtube.leanback.v4, 0000134, hulu) */ public String getAppId() { return appId; } /** * Sets the system-specific, unique ID of the app (ex. youtube.leanback.v4, 0000134, hulu) * * @param appId Id of the app */ public void setAppId(String appId) { this.appId = appId; } /** User-friendly name of the app (ex. YouTube, Browser, Hulu) */ public String getAppName() { return appName; } /** * Sets the user-friendly name of the app (ex. YouTube, Browser, Hulu) * * @param appName Name of the app */ public void setAppName(String appName) { this.appName = appName; } /** Unique ID for the session (only provided by certain protocols) */ public String getSessionId() { return sessionId; } /** * Sets the session id (only provided by certain protocols) * * @param sessionId Id of the current session */ public void setSessionId(String sessionId) { this.sessionId = sessionId; } /** DeviceService responsible for launching the session. */ public DeviceService getService() { return service; } /** * DeviceService responsible for launching the session. * * @param service Sets the DeviceService */ public void setService(DeviceService service) { this.service = service; } /** Raw data from the first screen device about the session. In most cases, this is a JSONObject. */ public Object getRawData() { return rawData; } /** * Sets the raw data from the first screen device about the session. In most cases, this is a JSONObject. * * @param rawData Sets the raw data */ public void setRawData(Object rawData) { this.rawData = rawData; } /** * When closing a LaunchSession, the DeviceService relies on the sessionType to determine the method of closing the session. */ public LaunchSessionType getSessionType() { return sessionType; } /** * Sets the LaunchSessionType of this LaunchSession. * * @param sessionType The type of LaunchSession */ public void setSessionType(LaunchSessionType sessionType) { this.sessionType = sessionType; } /** * Close the app/media associated with the session. * @param listener */ public void close (ResponseListener<Object> listener) { service.closeLaunchSession(this, listener); } // @cond INTERNAl @Override public JSONObject toJSONObject() throws JSONException { JSONObject obj = new JSONObject(); obj.putOpt("appId", appId); obj.putOpt("sessionId", sessionId); obj.putOpt("name", appName); obj.putOpt("sessionType", sessionType.name()); if (service != null) obj.putOpt("serviceName", service.getServiceName()); if (rawData != null) { if (rawData instanceof JSONObject) obj.putOpt("rawData", rawData); if (rawData instanceof List<?>) { JSONArray arr = new JSONArray(); for (Object item : (List<?>) rawData) arr.put(item); obj.putOpt("rawData", arr); } if (rawData instanceof Object[]) { JSONArray arr = new JSONArray(); for (Object item : (Object[]) rawData) arr.put(item); obj.putOpt("rawData", arr); } if (rawData instanceof String) obj.putOpt("rawData", rawData); } return obj; } @Override public void fromJSONObject(JSONObject obj) throws JSONException { this.appId = obj.optString("appId"); this.sessionId = obj.optString("sessionId"); this.appName = obj.optString("name"); this.sessionType = LaunchSessionType.valueOf(obj.optString("sessionType")); this.rawData = obj.opt("rawData"); } // @endcond /** * Compares two LaunchSession objects. * * @param launchSession LaunchSession object to compare. * * @return true if both LaunchSession id and sessionId values are equal */ @Override public boolean equals(Object launchSession) { // TODO Auto-generated method stub return super.equals(launchSession); } }