Search in sources :

Example 1 with RouteInfo

use of androidx.mediarouter.media.MediaRouter.RouteInfo in project zype-android by zype.

the class VideoCastManager method updateVolume.

/**
 * Increments or decrements volume by <code>delta</code> if {@code delta < 0} or
 * {@code delta > 0}, respectively. Note that the volume range is between 0 and {@code
 * RouteInfo.getVolumeMax()}.
 */
public void updateVolume(int delta) {
    RouteInfo info = mMediaRouter.getSelectedRoute();
    info.requestUpdateVolume(delta);
}
Also used : RouteInfo(androidx.mediarouter.media.MediaRouter.RouteInfo)

Example 2 with RouteInfo

use of androidx.mediarouter.media.MediaRouter.RouteInfo in project zype-android by zype.

the class BaseCastManager method reconnectSessionIfPossible.

/**
 * This method tries to automatically re-establish connection to a session if
 * <ul>
 * <li>User had not done a manual disconnect in the last session
 * <li>The Cast Device that user had connected to previously is still running the same session
 * </ul>
 * Under these conditions, a best-effort attempt will be made to continue with the same
 * session.
 * This attempt will go on for <code>timeoutInSeconds</code> seconds.
 *
 * @param timeoutInSeconds the length of time, in seconds, to attempt reconnection before giving
 * up
 * @param ssidName The name of Wifi SSID
 */
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void reconnectSessionIfPossible(final int timeoutInSeconds, String ssidName) {
    LOGD(TAG, String.format("reconnectSessionIfPossible(%d, %s)", timeoutInSeconds, ssidName));
    if (isConnected()) {
        return;
    }
    String routeId = mPreferenceAccessor.getStringFromPreference(PREFS_KEY_ROUTE_ID);
    if (canConsiderSessionRecovery(ssidName)) {
        List<RouteInfo> routes = mMediaRouter.getRoutes();
        RouteInfo theRoute = null;
        if (routes != null) {
            for (RouteInfo route : routes) {
                if (route.getId().equals(routeId)) {
                    theRoute = route;
                    break;
                }
            }
        }
        if (theRoute != null) {
            // route has already been discovered, so lets just get the device
            reconnectSessionIfPossibleInternal(theRoute);
        } else {
            // we set a flag so if the route is discovered within a short period, we let
            // onRouteAdded callback of CastMediaRouterCallback take care of that
            setReconnectionStatus(RECONNECTION_STATUS_STARTED);
        }
        // cancel any prior reconnection task
        if (mReconnectionTask != null && !mReconnectionTask.isCancelled()) {
            mReconnectionTask.cancel(true);
        }
        // we may need to reconnect to an existing session
        mReconnectionTask = new AsyncTask<Void, Integer, Boolean>() {

            @Override
            protected Boolean doInBackground(Void... params) {
                for (int i = 0; i < timeoutInSeconds; i++) {
                    LOGD(TAG, "Reconnection: Attempt " + (i + 1));
                    if (isCancelled()) {
                        return true;
                    }
                    try {
                        if (isConnected()) {
                            cancel(true);
                        }
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                    // ignore
                    }
                }
                return false;
            }

            @Override
            protected void onPostExecute(Boolean result) {
                if (result == null || !result) {
                    LOGD(TAG, "Couldn't reconnect, dropping connection");
                    setReconnectionStatus(RECONNECTION_STATUS_INACTIVE);
                    onDeviceSelected(null);
                }
            }
        };
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
            mReconnectionTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
        } else {
            mReconnectionTask.execute();
        }
    }
}
Also used : RouteInfo(androidx.mediarouter.media.MediaRouter.RouteInfo) TargetApi(android.annotation.TargetApi)

Example 3 with RouteInfo

use of androidx.mediarouter.media.MediaRouter.RouteInfo in project zype-android by zype.

the class VideoCastManager method onApplicationConnected.

@Override
protected void onApplicationConnected(ApplicationMetadata appMetadata, String applicationStatus, String sessionId, boolean wasLaunched) {
    LOGD(TAG, "onApplicationConnected() reached with sessionId: " + sessionId + ", and mReconnectionStatus=" + mReconnectionStatus);
    if (mReconnectionStatus == RECONNECTION_STATUS_IN_PROGRESS) {
        // we have tried to reconnect and successfully launched the app, so
        // it is time to select the route and make the cast icon happy :-)
        List<RouteInfo> routes = mMediaRouter.getRoutes();
        if (routes != null) {
            String routeId = mPreferenceAccessor.getStringFromPreference(PREFS_KEY_ROUTE_ID);
            for (RouteInfo routeInfo : routes) {
                if (routeId.equals(routeInfo.getId())) {
                    // found the right route
                    LOGD(TAG, "Found the correct route during reconnection attempt");
                    mReconnectionStatus = RECONNECTION_STATUS_FINALIZED;
                    mMediaRouter.selectRoute(routeInfo);
                    break;
                }
            }
        }
    }
    startNotificationService();
    try {
        attachDataChannel();
        attachMediaChannel();
        mSessionId = sessionId;
        // saving device for future retrieval; we only save the last session info
        mPreferenceAccessor.saveStringToPreference(PREFS_KEY_SESSION_ID, mSessionId);
        mRemoteMediaPlayer.requestStatus(mApiClient).setResultCallback(new ResultCallback<RemoteMediaPlayer.MediaChannelResult>() {

            @Override
            public void onResult(MediaChannelResult result) {
                if (!result.getStatus().isSuccess()) {
                    onFailed(R.string.ccl_failed_status_request, result.getStatus().getStatusCode());
                }
            }
        });
        for (VideoCastConsumer consumer : mVideoConsumers) {
            consumer.onApplicationConnected(appMetadata, mSessionId, wasLaunched);
        }
    } catch (TransientNetworkDisconnectionException e) {
        LOGE(TAG, "Failed to attach media/data channel due to network issues", e);
        onFailed(R.string.ccl_failed_no_connection_trans, NO_STATUS_CODE);
    } catch (NoConnectionException e) {
        LOGE(TAG, "Failed to attach media/data channel due to network issues", e);
        onFailed(R.string.ccl_failed_no_connection, NO_STATUS_CODE);
    }
}
Also used : VideoCastConsumer(com.google.android.libraries.cast.companionlibrary.cast.callbacks.VideoCastConsumer) NoConnectionException(com.google.android.libraries.cast.companionlibrary.cast.exceptions.NoConnectionException) MediaChannelResult(com.google.android.gms.cast.RemoteMediaPlayer.MediaChannelResult) TransientNetworkDisconnectionException(com.google.android.libraries.cast.companionlibrary.cast.exceptions.TransientNetworkDisconnectionException) RouteInfo(androidx.mediarouter.media.MediaRouter.RouteInfo)

Example 4 with RouteInfo

use of androidx.mediarouter.media.MediaRouter.RouteInfo in project zype-android by zype.

the class DataCastManager method onApplicationConnected.

@Override
public void onApplicationConnected(ApplicationMetadata appMetadata, String applicationStatus, String sessionId, boolean wasLaunched) {
    LOGD(TAG, "onApplicationConnected() reached with sessionId: " + sessionId);
    // saving session for future retrieval; we only save the last session info
    mPreferenceAccessor.saveStringToPreference(PREFS_KEY_SESSION_ID, sessionId);
    if (mReconnectionStatus == RECONNECTION_STATUS_IN_PROGRESS) {
        // we have tried to reconnect and successfully launched the app, so
        // it is time to select the route and make the cast icon happy :-)
        List<RouteInfo> routes = mMediaRouter.getRoutes();
        if (routes != null) {
            String routeId = mPreferenceAccessor.getStringFromPreference(PREFS_KEY_ROUTE_ID);
            boolean found = false;
            for (RouteInfo routeInfo : routes) {
                if (routeId.equals(routeInfo.getId())) {
                    // found the right route
                    LOGD(TAG, "Found the correct route during reconnection attempt");
                    found = true;
                    mReconnectionStatus = RECONNECTION_STATUS_FINALIZED;
                    mMediaRouter.selectRoute(routeInfo);
                    break;
                }
            }
            if (!found) {
                // we were hoping to have the route that we wanted, but we
                // didn't so we deselect the device
                onDeviceSelected(null);
                mReconnectionStatus = RECONNECTION_STATUS_INACTIVE;
                return;
            }
        }
    }
    // registering namespaces, if any
    try {
        attachDataChannels();
        mSessionId = sessionId;
        for (DataCastConsumer consumer : mDataConsumers) {
            consumer.onApplicationConnected(appMetadata, applicationStatus, sessionId, wasLaunched);
        }
    } catch (IllegalStateException | IOException e) {
        LOGE(TAG, "Failed to attach namespaces", e);
    }
}
Also used : IOException(java.io.IOException) RouteInfo(androidx.mediarouter.media.MediaRouter.RouteInfo) DataCastConsumer(com.google.android.libraries.cast.companionlibrary.cast.callbacks.DataCastConsumer)

Aggregations

RouteInfo (androidx.mediarouter.media.MediaRouter.RouteInfo)4 TargetApi (android.annotation.TargetApi)1 MediaChannelResult (com.google.android.gms.cast.RemoteMediaPlayer.MediaChannelResult)1 DataCastConsumer (com.google.android.libraries.cast.companionlibrary.cast.callbacks.DataCastConsumer)1 VideoCastConsumer (com.google.android.libraries.cast.companionlibrary.cast.callbacks.VideoCastConsumer)1 NoConnectionException (com.google.android.libraries.cast.companionlibrary.cast.exceptions.NoConnectionException)1 TransientNetworkDisconnectionException (com.google.android.libraries.cast.companionlibrary.cast.exceptions.TransientNetworkDisconnectionException)1 IOException (java.io.IOException)1