/*
* 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.CastDevice;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.libraries.cast.companionlibrary.cast.BaseCastManager;
import com.google.android.libraries.cast.companionlibrary.cast.exceptions.OnFailedListener;
import android.support.v7.media.MediaRouter.RouteInfo;
/**
* An interface for receiving callbacks around the connectivity status to a Cast device.
*/
public interface BaseCastConsumer extends OnFailedListener {
/**
* Called when connection is established
*/
void onConnected();
/**
* Called when the client is temporarily in a disconnected state. This can happen if there is a
* problem with the remote service (e.g. a crash or resource problem causes it to be killed by
* the system). When called, all requests have been canceled and no outstanding listeners will
* be executed. Applications could disable UI components that require the service, and wait for
* a call to onConnectivityRecovered() to re-enable them.
*
* @param cause The reason for the disconnection. Defined by constants CAUSE_*.
*/
void onConnectionSuspended(int cause);
/**
* Called when a device is disconnected
*/
void onDisconnected();
/**
* Called when a device is disconnected or fails to reconnect and provides a reason for the
* disconnect or failure.
*
* @param reason The failure/disconnect reason; can be one of the following:
* <ul>
* <li>{@link BaseCastManager#DISCONNECT_REASON_APP_NOT_RUNNING}</li>
* <li>{@link BaseCastManager#DISCONNECT_REASON_EXPLICIT}</li>
* <li>{@link BaseCastManager#DISCONNECT_REASON_CONNECTIVITY}</li>
* <li>{@link BaseCastManager#DISCONNECT_REASON_OTHER}</li>
* </ul>
*/
void onDisconnectionReason(@BaseCastManager.DisconnectReason int reason);
/**
* Called when an error happens while connecting to a device.
*/
void onConnectionFailed(ConnectionResult result);
/**
* Called when the MediaRouterCallback detects a non-default route.
*/
void onCastDeviceDetected(RouteInfo info);
/**
* Called when the number of cast devices present on the network changes from 0 to a positive
* number or vice versa. Can be used, for example, to control the visibility of {@link
* android.support.v7.app.MediaRouteButton}
*
* @param castPresent set to {@code true} if at least one device becomes available,
* {@code false} otherwise
*/
void onCastAvailabilityChanged(boolean castPresent);
/**
* Called when a route is removed.
*/
void onRouteRemoved(RouteInfo info);
/**
* Called after reconnection is established following a temporary disconnection, say, due to
* network issues.
*/
void onConnectivityRecovered();
/**
* Called when visibility of the application has changed.
*/
void onUiVisibilityChanged(boolean visible);
/**
* Called when the status of reconnection changes.
*/
void onReconnectionStatusChanged(int status);
/**
* Called when a device is selected/unselected.
*/
void onDeviceSelected(CastDevice device, RouteInfo routeInfo);
}