FileDocCategorySizeDatePackage
MediaRouteControllerDialog.javaAPI DocAndroid 5.1 API15984Thu Mar 12 22:22:56 GMT 2015android.support.v7.app

MediaRouteControllerDialog

public class MediaRouteControllerDialog extends android.app.Dialog
This class implements the route controller dialog for {@link MediaRouter}.

This dialog allows the user to control or disconnect from the currently selected route.

see
MediaRouteButton
see
MediaRouteActionProvider

Fields Summary
private static final String
TAG
private final android.support.v7.media.MediaRouter
mRouter
private final MediaRouterCallback
mCallback
private final MediaRouter.RouteInfo
mRoute
private boolean
mCreated
private boolean
mAttachedToWindow
private android.graphics.drawable.Drawable
mMediaRouteConnectingDrawable
private android.graphics.drawable.Drawable
mMediaRouteOnDrawable
private android.graphics.drawable.Drawable
mCurrentIconDrawable
private android.graphics.drawable.Drawable
mSettingsDrawable
private android.view.View
mControlView
private android.widget.Button
mDisconnectButton
private android.widget.Button
mStopCastingButton
private android.widget.ImageButton
mPlayPauseButton
private android.widget.ImageButton
mSettingsButton
private android.widget.ImageView
mArtView
private android.widget.TextView
mTitleView
private android.widget.TextView
mSubtitleView
private android.widget.TextView
mRouteNameView
private android.view.View
mTitlesWrapper
private android.support.v4.media.session.MediaControllerCompat
mMediaController
private MediaControllerCallback
mControllerCallback
private android.support.v4.media.session.PlaybackStateCompat
mState
private android.support.v4.media.MediaDescriptionCompat
mDescription
Constructors Summary
public MediaRouteControllerDialog(android.content.Context context)



       
        this(context, 0);
    
public MediaRouteControllerDialog(android.content.Context context, int theme)

        super(MediaRouterThemeHelper.createThemedContext(context), theme);
        context = getContext();

        mControllerCallback = new MediaControllerCallback();
        mRouter = MediaRouter.getInstance(context);
        mCallback = new MediaRouterCallback();
        mRoute = mRouter.getSelectedRoute();
        setMediaSession(mRouter.getMediaSessionToken());
    
Methods Summary
private android.graphics.drawable.DrawablegetIconDrawable()

        if (mRoute.isConnecting()) {
            if (mMediaRouteConnectingDrawable == null) {
                mMediaRouteConnectingDrawable = MediaRouterThemeHelper.getThemeDrawable(
                        getContext(), R.attr.mediaRouteConnectingDrawable);
            }
            return mMediaRouteConnectingDrawable;
        } else {
            if (mMediaRouteOnDrawable == null) {
                mMediaRouteOnDrawable = MediaRouterThemeHelper.getThemeDrawable(
                        getContext(), R.attr.mediaRouteOnDrawable);
            }
            return mMediaRouteOnDrawable;
        }
    
public android.view.ViewgetMediaControlView()
Gets the media control view that was created by {@link #onCreateMediaControlView(Bundle)}.

return
The media control view, or null if none.

        return mControlView;
    
public MediaSessionCompat.TokengetMediaSession()
Gets the description being used by the default UI.

return
The current description.

        return mMediaController == null ? null : mMediaController.getSessionToken();
    
public MediaRouter.RouteInfogetRoute()
Gets the route that this dialog is controlling.

        return mRoute;
    
public voidonAttachedToWindow()

        super.onAttachedToWindow();
        mAttachedToWindow = true;

        mRouter.addCallback(MediaRouteSelector.EMPTY, mCallback,
                MediaRouter.CALLBACK_FLAG_UNFILTERED_EVENTS);
        setMediaSession(mRouter.getMediaSessionToken());
    
protected voidonCreate(android.os.Bundle savedInstanceState)

        super.onCreate(savedInstanceState);

        getWindow().requestFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.mr_media_route_controller_material_dialog_b);

        ClickListener listener = new ClickListener();

        mDisconnectButton = (Button) findViewById(R.id.disconnect);
        mDisconnectButton.setOnClickListener(listener);

        mStopCastingButton = (Button) findViewById(R.id.stop);
        mStopCastingButton.setOnClickListener(listener);

        mSettingsButton = (ImageButton) findViewById(R.id.settings);
        mSettingsButton.setOnClickListener(listener);

        mArtView = (ImageView) findViewById(R.id.art);
        mTitleView = (TextView) findViewById(R.id.title);
        mSubtitleView = (TextView) findViewById(R.id.subtitle);
        mTitlesWrapper = findViewById(R.id.text_wrapper);
        mPlayPauseButton = (ImageButton) findViewById(R.id.play_pause);
        mPlayPauseButton.setOnClickListener(listener);
        mRouteNameView = (TextView) findViewById(R.id.route_name);

        mCreated = true;
        if (update()) {
            mControlView = onCreateMediaControlView(savedInstanceState);
            FrameLayout controlFrame =
                    (FrameLayout)findViewById(R.id.media_route_control_frame);
            if (mControlView != null) {
                controlFrame.findViewById(R.id.default_control_frame).setVisibility(View.GONE);
                controlFrame.addView(mControlView);
            }
        }
    
public android.view.ViewonCreateMediaControlView(android.os.Bundle savedInstanceState)
Provides the subclass an opportunity to create a view that will be included within the body of the dialog to offer additional media controls for the currently playing content.

param
savedInstanceState The dialog's saved instance state.
return
The media control view, or null if none.

        return null;
    
public voidonDetachedFromWindow()

        mRouter.removeCallback(mCallback);
        setMediaSession(null);
        mAttachedToWindow = false;
        super.onDetachedFromWindow();
    
public booleanonKeyDown(int keyCode, android.view.KeyEvent event)

        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
                || keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            mRoute.requestUpdateVolume(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ? -1 : 1);
            return true;
        }
        return super.onKeyDown(keyCode, event);
    
public booleanonKeyUp(int keyCode, android.view.KeyEvent event)

        if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN
                || keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            return true;
        }
        return super.onKeyUp(keyCode, event);
    
private voidsetMediaSession(MediaSessionCompat.Token sessionToken)
Set the session to use for metadata and transport controls. The dialog will listen to changes on this session and update the UI automatically in response to changes.

param
sessionToken The token for the session to use.

        if (mMediaController != null) {
            mMediaController.unregisterCallback(mControllerCallback);
            mMediaController = null;
        }
        if (sessionToken == null) {
            return;
        }
        if (!mAttachedToWindow) {
            return;
        }
        try {
            mMediaController = new MediaControllerCompat(getContext(), sessionToken);
        } catch (RemoteException e) {
            Log.e(TAG, "Error creating media controller in setMediaSession.", e);
        }
        if (mMediaController != null) {
            mMediaController.registerCallback(mControllerCallback);
        }
        MediaMetadataCompat metadata = mMediaController == null ? null
                : mMediaController.getMetadata();
        mDescription = metadata == null ? null : metadata.getDescription();
        mState = mMediaController == null ? null : mMediaController.getPlaybackState();
        update();
    
private booleanupdate()

        if (!mRoute.isSelected() || mRoute.isDefault()) {
            dismiss();
            return false;
        }
        if (!mCreated) {
            return false;
        }

        mRouteNameView.setText(mRoute.getName());

        if (mRoute.canDisconnect()) {
            mDisconnectButton.setVisibility(View.VISIBLE);
        } else {
            mDisconnectButton.setVisibility(View.GONE);
        }

        if (mRoute.getSettingsIntent() != null) {
            mSettingsButton.setVisibility(View.VISIBLE);
        } else {
            mSettingsButton.setVisibility(View.GONE);
        }

        if (mControlView == null) {
            if (mDescription != null) {
                if (mDescription.getIconBitmap() != null) {
                    mArtView.setImageBitmap(mDescription.getIconBitmap());
                    mArtView.setVisibility(View.VISIBLE);
                } else if (mDescription.getIconUri() != null) {
                    // TODO replace with background load of icon
                    mArtView.setImageURI(mDescription.getIconUri());
                    mArtView.setVisibility(View.VISIBLE);
                } else {
                    mArtView.setImageDrawable(null);
                    mArtView.setVisibility(View.GONE);
                }

                boolean haveText = false;
                CharSequence text = mDescription.getTitle();
                if (!TextUtils.isEmpty(text)) {
                    mTitleView.setText(text);
                    haveText = true;
                } else {
                    mTitleView.setText(null);
                    mTitleView.setVisibility(View.GONE);
                }
                text = mDescription.getSubtitle();
                if (!TextUtils.isEmpty(text)) {
                    mSubtitleView.setText(mDescription.getSubtitle());
                    haveText = true;
                } else {
                    mSubtitleView.setText(null);
                    mSubtitleView.setVisibility(View.GONE);
                }
                if (!haveText) {
                    mTitlesWrapper.setVisibility(View.GONE);
                } else {
                    mTitlesWrapper.setVisibility(View.VISIBLE);
                }
            } else {
                mArtView.setVisibility(View.GONE);
                mTitlesWrapper.setVisibility(View.GONE);
            }
            if (mState != null) {
                boolean isPlaying = mState.getState() == PlaybackStateCompat.STATE_BUFFERING
                        || mState.getState() == PlaybackStateCompat.STATE_PLAYING;
                boolean supportsPlay = (mState.getActions() & (PlaybackStateCompat.ACTION_PLAY
                        | PlaybackStateCompat.ACTION_PLAY_PAUSE)) != 0;
                boolean supportsPause = (mState.getActions() & (PlaybackStateCompat.ACTION_PAUSE
                                | PlaybackStateCompat.ACTION_PLAY_PAUSE)) != 0;
                if (isPlaying && supportsPause) {
                    mPlayPauseButton.setVisibility(View.VISIBLE);
                    mPlayPauseButton.setImageResource(MediaRouterThemeHelper.getThemeResource(
                            getContext(), R.attr.mediaRoutePauseDrawable));
                    mPlayPauseButton.setContentDescription(getContext().getResources()
                            .getText(R.string.mr_media_route_controller_pause));
                } else if (!isPlaying && supportsPlay) {
                    mPlayPauseButton.setVisibility(View.VISIBLE);
                    mPlayPauseButton.setImageResource(MediaRouterThemeHelper.getThemeResource(
                            getContext(), R.attr.mediaRoutePlayDrawable));
                    mPlayPauseButton.setContentDescription(getContext().getResources()
                            .getText(R.string.mr_media_route_controller_play));
                } else {
                    mPlayPauseButton.setVisibility(View.GONE);
                }
            } else {
                mPlayPauseButton.setVisibility(View.GONE);
            }
        }
        return true;