/*
* Copyright (C) 2015 Google Inc. All Rights Reserved.
*
* 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.libraries.cast.companionlibrary.cast.callbacks;
import com.google.android.gms.cast.ApplicationMetadata;
import com.google.android.gms.cast.CastDevice;
import com.google.android.gms.common.api.Status;
/**
* An interface that extends {@link BaseCastConsumer} and adds callbacks for application lifecycle
* and success or failure of message exchange with a cast device.
*/
public interface DataCastConsumer extends BaseCastConsumer {
/**
* Called when the application is successfully launched or joined. Upon successful connection, a
* session ID is returned. <code>wasLaunched</code> indicates if the application was launched or
* joined.
*/
void onApplicationConnected(ApplicationMetadata appMetadata,
String applicationStatus, String sessionId, boolean wasLaunched);
/**
* Called when the current application has stopped
*/
void onApplicationDisconnected(int errorCode);
/**
* Called when an attempt to stop a receiver application has failed.
*/
void onApplicationStopFailed(int errorCode);
/**
* Called when an application launch has failed. Failure reason is captured in the
* <code>errorCode</code> argument. Here is a list of possible values:
* <ul>
* <li>4 : Application not found
* <li>5 : Application not currently running
* <li>6 : Application already running
* </ul>
*/
void onApplicationConnectionFailed(int errorCode);
/**
* Called when application status changes. The argument is built by the receiver
*/
void onApplicationStatusChanged(String appStatus);
/**
* Called when the device's volume is changed. Note not to mix that with the stream's volume
*/
void onVolumeChanged(double value, boolean isMute);
/**
* Called when a message is received from a given {@link CastDevice} for a given
* <code>namespace</code>.
*/
void onMessageReceived(CastDevice castDevice, String namespace, String message);
/**
* Called when there is an error sending a message.
*
* @param status The status of the result
*/
void onMessageSendFailed(Status status);
/**
* Called when this callback is removed from the Cast object.
*
* @param castDevice The castDevice from where the message originated.
* @param namespace The associated namespace of the removed listener.
*/
void onRemoved(CastDevice castDevice, String namespace);
}