// Signature format: 3.0
package androidx.mediarouter.app {

  public class MediaRouteActionProvider extends androidx.core.view.ActionProvider {
    ctor public MediaRouteActionProvider(android.content.Context!);
    method public void enableDynamicGroup();
    method public androidx.mediarouter.app.MediaRouteDialogFactory getDialogFactory();
    method public androidx.mediarouter.app.MediaRouteButton? getMediaRouteButton();
    method public androidx.mediarouter.media.MediaRouteSelector getRouteSelector();
    method public android.view.View! onCreateActionView();
    method public androidx.mediarouter.app.MediaRouteButton! onCreateMediaRouteButton();
    method public void setAlwaysVisible(boolean);
    method public void setDialogFactory(androidx.mediarouter.app.MediaRouteDialogFactory);
    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector);
  }

  public class MediaRouteButton extends android.view.View {
    ctor public MediaRouteButton(android.content.Context!);
    ctor public MediaRouteButton(android.content.Context!, android.util.AttributeSet!);
    ctor public MediaRouteButton(android.content.Context!, android.util.AttributeSet!, int);
    method public void enableDynamicGroup();
    method public androidx.mediarouter.app.MediaRouteDialogFactory getDialogFactory();
    method public androidx.mediarouter.media.MediaRouteSelector getRouteSelector();
    method public void onAttachedToWindow();
    method public void onDetachedFromWindow();
    method public void setAlwaysVisible(boolean);
    method public void setDialogFactory(androidx.mediarouter.app.MediaRouteDialogFactory);
    method public void setRemoteIndicatorDrawable(android.graphics.drawable.Drawable!);
    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector!);
    method public boolean showDialog();
  }

  public class MediaRouteChooserDialog extends androidx.appcompat.app.AppCompatDialog {
    ctor public MediaRouteChooserDialog(android.content.Context!);
    ctor public MediaRouteChooserDialog(android.content.Context!, int);
    method public androidx.mediarouter.media.MediaRouteSelector getRouteSelector();
    method public boolean onFilterRoute(androidx.mediarouter.media.MediaRouter.RouteInfo);
    method public void onFilterRoutes(java.util.List<androidx.mediarouter.media.MediaRouter.RouteInfo>);
    method public void refreshRoutes();
    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector);
  }

  public class MediaRouteChooserDialogFragment extends androidx.fragment.app.DialogFragment {
    ctor public MediaRouteChooserDialogFragment();
    method public androidx.mediarouter.media.MediaRouteSelector! getRouteSelector();
    method public androidx.mediarouter.app.MediaRouteChooserDialog! onCreateChooserDialog(android.content.Context!, android.os.Bundle!);
    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector!);
  }

  public class MediaRouteControllerDialog extends androidx.appcompat.app.AlertDialog {
    ctor public MediaRouteControllerDialog(android.content.Context!);
    ctor public MediaRouteControllerDialog(android.content.Context!, int);
    method public android.view.View! getMediaControlView();
    method public android.support.v4.media.session.MediaSessionCompat.Token! getMediaSession();
    method public androidx.mediarouter.media.MediaRouter.RouteInfo! getRoute();
    method public boolean isVolumeControlEnabled();
    method public android.view.View! onCreateMediaControlView(android.os.Bundle!);
    method public void setVolumeControlEnabled(boolean);
  }

  public class MediaRouteControllerDialogFragment extends androidx.fragment.app.DialogFragment {
    ctor public MediaRouteControllerDialogFragment();
    method public androidx.mediarouter.app.MediaRouteControllerDialog! onCreateControllerDialog(android.content.Context!, android.os.Bundle!);
  }

  public class MediaRouteDialogFactory {
    ctor public MediaRouteDialogFactory();
    method public static androidx.mediarouter.app.MediaRouteDialogFactory getDefault();
    method public androidx.mediarouter.app.MediaRouteChooserDialogFragment onCreateChooserDialogFragment();
    method public androidx.mediarouter.app.MediaRouteControllerDialogFragment onCreateControllerDialogFragment();
  }

  public class MediaRouteDiscoveryFragment extends androidx.fragment.app.Fragment {
    ctor public MediaRouteDiscoveryFragment();
    method public androidx.mediarouter.media.MediaRouter! getMediaRouter();
    method public androidx.mediarouter.media.MediaRouteSelector! getRouteSelector();
    method public androidx.mediarouter.media.MediaRouter.Callback! onCreateCallback();
    method public int onPrepareCallbackFlags();
    method public void setRouteSelector(androidx.mediarouter.media.MediaRouteSelector!);
  }

}

package androidx.mediarouter.media {

  public final class MediaControlIntent {
    field public static final String ACTION_END_SESSION = "android.media.intent.action.END_SESSION";
    field public static final String ACTION_ENQUEUE = "android.media.intent.action.ENQUEUE";
    field public static final String ACTION_GET_SESSION_STATUS = "android.media.intent.action.GET_SESSION_STATUS";
    field public static final String ACTION_GET_STATUS = "android.media.intent.action.GET_STATUS";
    field public static final String ACTION_PAUSE = "android.media.intent.action.PAUSE";
    field public static final String ACTION_PLAY = "android.media.intent.action.PLAY";
    field public static final String ACTION_REMOVE = "android.media.intent.action.REMOVE";
    field public static final String ACTION_RESUME = "android.media.intent.action.RESUME";
    field public static final String ACTION_SEEK = "android.media.intent.action.SEEK";
    field public static final String ACTION_SEND_MESSAGE = "android.media.intent.action.SEND_MESSAGE";
    field public static final String ACTION_START_SESSION = "android.media.intent.action.START_SESSION";
    field public static final String ACTION_STOP = "android.media.intent.action.STOP";
    field public static final String CATEGORY_LIVE_AUDIO = "android.media.intent.category.LIVE_AUDIO";
    field public static final String CATEGORY_LIVE_VIDEO = "android.media.intent.category.LIVE_VIDEO";
    field public static final String CATEGORY_REMOTE_PLAYBACK = "android.media.intent.category.REMOTE_PLAYBACK";
    field public static final int ERROR_INVALID_ITEM_ID = 3; // 0x3
    field public static final int ERROR_INVALID_SESSION_ID = 2; // 0x2
    field public static final int ERROR_UNKNOWN = 0; // 0x0
    field public static final int ERROR_UNSUPPORTED_OPERATION = 1; // 0x1
    field public static final String EXTRA_ERROR_CODE = "android.media.intent.extra.ERROR_CODE";
    field public static final String EXTRA_ITEM_CONTENT_POSITION = "android.media.intent.extra.ITEM_POSITION";
    field public static final String EXTRA_ITEM_HTTP_HEADERS = "android.media.intent.extra.HTTP_HEADERS";
    field public static final String EXTRA_ITEM_ID = "android.media.intent.extra.ITEM_ID";
    field public static final String EXTRA_ITEM_METADATA = "android.media.intent.extra.ITEM_METADATA";
    field public static final String EXTRA_ITEM_STATUS = "android.media.intent.extra.ITEM_STATUS";
    field public static final String EXTRA_ITEM_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.ITEM_STATUS_UPDATE_RECEIVER";
    field public static final String EXTRA_MESSAGE = "android.media.intent.extra.MESSAGE";
    field public static final String EXTRA_MESSAGE_RECEIVER = "android.media.intent.extra.MESSAGE_RECEIVER";
    field public static final String EXTRA_SESSION_ID = "android.media.intent.extra.SESSION_ID";
    field public static final String EXTRA_SESSION_STATUS = "android.media.intent.extra.SESSION_STATUS";
    field public static final String EXTRA_SESSION_STATUS_UPDATE_RECEIVER = "android.media.intent.extra.SESSION_STATUS_UPDATE_RECEIVER";
  }

  public final class MediaItemMetadata {
    field public static final String KEY_ALBUM_ARTIST = "android.media.metadata.ALBUM_ARTIST";
    field public static final String KEY_ALBUM_TITLE = "android.media.metadata.ALBUM_TITLE";
    field public static final String KEY_ARTIST = "android.media.metadata.ARTIST";
    field public static final String KEY_ARTWORK_URI = "android.media.metadata.ARTWORK_URI";
    field public static final String KEY_AUTHOR = "android.media.metadata.AUTHOR";
    field public static final String KEY_COMPOSER = "android.media.metadata.COMPOSER";
    field public static final String KEY_DISC_NUMBER = "android.media.metadata.DISC_NUMBER";
    field public static final String KEY_DURATION = "android.media.metadata.DURATION";
    field public static final String KEY_TITLE = "android.media.metadata.TITLE";
    field public static final String KEY_TRACK_NUMBER = "android.media.metadata.TRACK_NUMBER";
    field public static final String KEY_YEAR = "android.media.metadata.YEAR";
  }

  public final class MediaItemStatus {
    method public android.os.Bundle! asBundle();
    method public static androidx.mediarouter.media.MediaItemStatus! fromBundle(android.os.Bundle!);
    method public long getContentDuration();
    method public long getContentPosition();
    method public android.os.Bundle! getExtras();
    method public int getPlaybackState();
    method public long getTimestamp();
    field public static final String EXTRA_HTTP_RESPONSE_HEADERS = "android.media.status.extra.HTTP_RESPONSE_HEADERS";
    field public static final String EXTRA_HTTP_STATUS_CODE = "android.media.status.extra.HTTP_STATUS_CODE";
    field public static final int PLAYBACK_STATE_BUFFERING = 3; // 0x3
    field public static final int PLAYBACK_STATE_CANCELED = 5; // 0x5
    field public static final int PLAYBACK_STATE_ERROR = 7; // 0x7
    field public static final int PLAYBACK_STATE_FINISHED = 4; // 0x4
    field public static final int PLAYBACK_STATE_INVALIDATED = 6; // 0x6
    field public static final int PLAYBACK_STATE_PAUSED = 2; // 0x2
    field public static final int PLAYBACK_STATE_PENDING = 0; // 0x0
    field public static final int PLAYBACK_STATE_PLAYING = 1; // 0x1
  }

  public static final class MediaItemStatus.Builder {
    ctor public MediaItemStatus.Builder(int);
    ctor public MediaItemStatus.Builder(androidx.mediarouter.media.MediaItemStatus!);
    method public androidx.mediarouter.media.MediaItemStatus! build();
    method public androidx.mediarouter.media.MediaItemStatus.Builder! setContentDuration(long);
    method public androidx.mediarouter.media.MediaItemStatus.Builder! setContentPosition(long);
    method public androidx.mediarouter.media.MediaItemStatus.Builder! setExtras(android.os.Bundle!);
    method public androidx.mediarouter.media.MediaItemStatus.Builder! setPlaybackState(int);
    method public androidx.mediarouter.media.MediaItemStatus.Builder! setTimestamp(long);
  }

  public final class MediaRouteDescriptor {
    method public android.os.Bundle! asBundle();
    method public boolean canDisconnectAndKeepPlaying();
    method public static androidx.mediarouter.media.MediaRouteDescriptor! fromBundle(android.os.Bundle!);
    method public int getConnectionState();
    method public java.util.List<android.content.IntentFilter>! getControlFilters();
    method public String! getDescription();
    method public int getDeviceType();
    method public android.os.Bundle! getExtras();
    method public android.net.Uri! getIconUri();
    method public String! getId();
    method public String! getName();
    method public int getPlaybackStream();
    method public int getPlaybackType();
    method public int getPresentationDisplayId();
    method public android.content.IntentSender! getSettingsActivity();
    method public int getVolume();
    method public int getVolumeHandling();
    method public int getVolumeMax();
    method @Deprecated public boolean isConnecting();
    method public boolean isDynamicGroupRoute();
    method public boolean isEnabled();
    method public boolean isValid();
  }

  public static final class MediaRouteDescriptor.Builder {
    ctor public MediaRouteDescriptor.Builder(String!, String!);
    ctor public MediaRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteDescriptor!);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! addControlFilter(android.content.IntentFilter!);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! addControlFilters(java.util.Collection<android.content.IntentFilter>!);
    method public androidx.mediarouter.media.MediaRouteDescriptor! build();
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setCanDisconnect(boolean);
    method @Deprecated public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setConnecting(boolean);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setConnectionState(int);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setDescription(String!);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setDeviceType(int);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setEnabled(boolean);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setExtras(android.os.Bundle!);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setIconUri(android.net.Uri!);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setId(String!);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setIsDynamicGroupRoute(boolean);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setName(String!);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setPlaybackStream(int);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setPlaybackType(int);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setPresentationDisplayId(int);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setSettingsActivity(android.content.IntentSender!);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setVolume(int);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setVolumeHandling(int);
    method public androidx.mediarouter.media.MediaRouteDescriptor.Builder! setVolumeMax(int);
  }

  public final class MediaRouteDiscoveryRequest {
    ctor public MediaRouteDiscoveryRequest(androidx.mediarouter.media.MediaRouteSelector!, boolean);
    method public android.os.Bundle! asBundle();
    method public static androidx.mediarouter.media.MediaRouteDiscoveryRequest! fromBundle(android.os.Bundle!);
    method public androidx.mediarouter.media.MediaRouteSelector! getSelector();
    method public boolean isActiveScan();
    method public boolean isValid();
  }

  public abstract class MediaRouteProvider {
    ctor public MediaRouteProvider(android.content.Context);
    method public final android.content.Context! getContext();
    method public final androidx.mediarouter.media.MediaRouteProviderDescriptor? getDescriptor();
    method public final androidx.mediarouter.media.MediaRouteDiscoveryRequest? getDiscoveryRequest();
    method public final android.os.Handler! getHandler();
    method public final androidx.mediarouter.media.MediaRouteProvider.ProviderMetadata! getMetadata();
    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController? onCreateDynamicGroupRouteController(String);
    method public androidx.mediarouter.media.MediaRouteProvider.RouteController? onCreateRouteController(String);
    method public void onDiscoveryRequestChanged(androidx.mediarouter.media.MediaRouteDiscoveryRequest?);
    method public final void setCallback(androidx.mediarouter.media.MediaRouteProvider.Callback?);
    method public final void setDescriptor(androidx.mediarouter.media.MediaRouteProviderDescriptor?);
    method public final void setDiscoveryRequest(androidx.mediarouter.media.MediaRouteDiscoveryRequest!);
  }

  public abstract static class MediaRouteProvider.Callback {
    ctor public MediaRouteProvider.Callback();
    method public void onDescriptorChanged(androidx.mediarouter.media.MediaRouteProvider, androidx.mediarouter.media.MediaRouteProviderDescriptor?);
  }

  public abstract static class MediaRouteProvider.DynamicGroupRouteController extends androidx.mediarouter.media.MediaRouteProvider.RouteController {
    ctor public MediaRouteProvider.DynamicGroupRouteController();
    method public String? getGroupableSelectionTitle();
    method public String? getTransferableSectionTitle();
    method public final void notifyDynamicRoutesChanged(java.util.Collection<androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor>!);
    method public abstract void onAddMemberRoute(String);
    method public abstract void onRemoveMemberRoute(String!);
    method public abstract void onUpdateMemberRoutes(java.util.List<java.lang.String>?);
  }

  public static final class MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor {
    method public androidx.mediarouter.media.MediaRouteDescriptor getRouteDescriptor();
    method public int getSelectionState();
    method public boolean isGroupable();
    method public boolean isTransferable();
    method public boolean isUnselectable();
    field public static final int SELECTED = 3; // 0x3
    field public static final int SELECTING = 2; // 0x2
    field public static final int UNSELECTED = 1; // 0x1
    field public static final int UNSELECTING = 0; // 0x0
  }

  public static final class MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder {
    ctor public MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteDescriptor!);
    ctor public MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder(androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor!);
    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor! build();
    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder! setIsGroupable(boolean);
    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder! setIsTransferable(boolean);
    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder! setIsUnselectable(boolean);
    method public androidx.mediarouter.media.MediaRouteProvider.DynamicGroupRouteController.DynamicRouteDescriptor.Builder! setSelectionState(int);
  }

  public static final class MediaRouteProvider.ProviderMetadata {
    method public android.content.ComponentName! getComponentName();
    method public String! getPackageName();
  }

  public abstract static class MediaRouteProvider.RouteController {
    ctor public MediaRouteProvider.RouteController();
    method public boolean onControlRequest(android.content.Intent!, androidx.mediarouter.media.MediaRouter.ControlRequestCallback?);
    method public void onRelease();
    method public void onSelect();
    method public void onSetVolume(int);
    method public void onUnselect();
    method public void onUnselect(int);
    method public void onUpdateVolume(int);
  }

  public final class MediaRouteProviderDescriptor {
    method public android.os.Bundle! asBundle();
    method public static androidx.mediarouter.media.MediaRouteProviderDescriptor! fromBundle(android.os.Bundle!);
    method public java.util.List<androidx.mediarouter.media.MediaRouteDescriptor> getRoutes();
    method public boolean isValid();
    method public boolean supportsDynamicGroupRoute();
  }

  public static final class MediaRouteProviderDescriptor.Builder {
    ctor public MediaRouteProviderDescriptor.Builder();
    ctor public MediaRouteProviderDescriptor.Builder(androidx.mediarouter.media.MediaRouteProviderDescriptor!);
    method public androidx.mediarouter.media.MediaRouteProviderDescriptor.Builder! addRoute(androidx.mediarouter.media.MediaRouteDescriptor!);
    method public androidx.mediarouter.media.MediaRouteProviderDescriptor.Builder! addRoutes(java.util.Collection<androidx.mediarouter.media.MediaRouteDescriptor>!);
    method public androidx.mediarouter.media.MediaRouteProviderDescriptor! build();
    method public androidx.mediarouter.media.MediaRouteProviderDescriptor.Builder! setSupportsDynamicGroupRoute(boolean);
  }

  public abstract class MediaRouteProviderService extends android.app.Service {
    ctor public MediaRouteProviderService();
    method public androidx.mediarouter.media.MediaRouteProvider! getMediaRouteProvider();
    method public android.os.IBinder! onBind(android.content.Intent!);
    method public abstract androidx.mediarouter.media.MediaRouteProvider! onCreateMediaRouteProvider();
    field public static final String SERVICE_INTERFACE = "android.media.MediaRouteProviderService";
  }

  public final class MediaRouteSelector {
    method public android.os.Bundle! asBundle();
    method public boolean contains(androidx.mediarouter.media.MediaRouteSelector!);
    method public static androidx.mediarouter.media.MediaRouteSelector! fromBundle(android.os.Bundle?);
    method public java.util.List<java.lang.String>! getControlCategories();
    method public boolean hasControlCategory(String!);
    method public boolean isEmpty();
    method public boolean isValid();
    method public boolean matchesControlFilters(java.util.List<android.content.IntentFilter>!);
    field public static final androidx.mediarouter.media.MediaRouteSelector! EMPTY;
  }

  public static final class MediaRouteSelector.Builder {
    ctor public MediaRouteSelector.Builder();
    ctor public MediaRouteSelector.Builder(androidx.mediarouter.media.MediaRouteSelector);
    method public androidx.mediarouter.media.MediaRouteSelector.Builder addControlCategories(java.util.Collection<java.lang.String>);
    method public androidx.mediarouter.media.MediaRouteSelector.Builder addControlCategory(String);
    method public androidx.mediarouter.media.MediaRouteSelector.Builder addSelector(androidx.mediarouter.media.MediaRouteSelector);
    method public androidx.mediarouter.media.MediaRouteSelector build();
  }

  public final class MediaRouter {
    method public void addCallback(androidx.mediarouter.media.MediaRouteSelector!, androidx.mediarouter.media.MediaRouter.Callback!);
    method public void addCallback(androidx.mediarouter.media.MediaRouteSelector, androidx.mediarouter.media.MediaRouter.Callback, int);
    method public void addProvider(androidx.mediarouter.media.MediaRouteProvider);
    method public void addRemoteControlClient(Object);
    method public androidx.mediarouter.media.MediaRouter.RouteInfo! getBluetoothRoute();
    method public androidx.mediarouter.media.MediaRouter.RouteInfo getDefaultRoute();
    method public static androidx.mediarouter.media.MediaRouter! getInstance(android.content.Context);
    method public android.support.v4.media.session.MediaSessionCompat.Token! getMediaSessionToken();
    method public java.util.List<androidx.mediarouter.media.MediaRouter.ProviderInfo>! getProviders();
    method public java.util.List<androidx.mediarouter.media.MediaRouter.RouteInfo>! getRoutes();
    method public androidx.mediarouter.media.MediaRouter.RouteInfo getSelectedRoute();
    method public boolean isRouteAvailable(androidx.mediarouter.media.MediaRouteSelector, int);
    method public void removeCallback(androidx.mediarouter.media.MediaRouter.Callback);
    method public void removeProvider(androidx.mediarouter.media.MediaRouteProvider);
    method public void removeRemoteControlClient(Object);
    method public void selectRoute(androidx.mediarouter.media.MediaRouter.RouteInfo);
    method public void setMediaSession(Object!);
    method public void setMediaSessionCompat(android.support.v4.media.session.MediaSessionCompat!);
    method public void unselect(int);
    method public androidx.mediarouter.media.MediaRouter.RouteInfo updateSelectedRoute(androidx.mediarouter.media.MediaRouteSelector);
    field public static final int AVAILABILITY_FLAG_IGNORE_DEFAULT_ROUTE = 1; // 0x1
    field public static final int AVAILABILITY_FLAG_REQUIRE_MATCH = 2; // 0x2
    field public static final int CALLBACK_FLAG_FORCE_DISCOVERY = 8; // 0x8
    field public static final int CALLBACK_FLAG_PERFORM_ACTIVE_SCAN = 1; // 0x1
    field public static final int CALLBACK_FLAG_REQUEST_DISCOVERY = 4; // 0x4
    field public static final int CALLBACK_FLAG_UNFILTERED_EVENTS = 2; // 0x2
    field public static final int UNSELECT_REASON_DISCONNECTED = 1; // 0x1
    field public static final int UNSELECT_REASON_ROUTE_CHANGED = 3; // 0x3
    field public static final int UNSELECT_REASON_STOPPED = 2; // 0x2
    field public static final int UNSELECT_REASON_UNKNOWN = 0; // 0x0
  }

  public abstract static class MediaRouter.Callback {
    ctor public MediaRouter.Callback();
    method public void onProviderAdded(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.ProviderInfo!);
    method public void onProviderChanged(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.ProviderInfo!);
    method public void onProviderRemoved(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.ProviderInfo!);
    method public void onRouteAdded(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
    method public void onRouteChanged(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
    method public void onRoutePresentationDisplayChanged(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
    method public void onRouteRemoved(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
    method public void onRouteSelected(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
    method public void onRouteUnselected(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
    method public void onRouteUnselected(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!, int);
    method public void onRouteVolumeChanged(androidx.mediarouter.media.MediaRouter!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
  }

  public abstract static class MediaRouter.ControlRequestCallback {
    ctor public MediaRouter.ControlRequestCallback();
    method public void onError(String!, android.os.Bundle!);
    method public void onResult(android.os.Bundle!);
  }

  public static final class MediaRouter.ProviderInfo {
    method public android.content.ComponentName! getComponentName();
    method public String! getPackageName();
    method public androidx.mediarouter.media.MediaRouteProvider! getProviderInstance();
    method public java.util.List<androidx.mediarouter.media.MediaRouter.RouteInfo>! getRoutes();
  }

  public static class MediaRouter.RouteInfo {
    method public boolean canDisconnect();
    method public int getConnectionState();
    method public java.util.List<android.content.IntentFilter>! getControlFilters();
    method public String? getDescription();
    method public int getDeviceType();
    method public android.os.Bundle? getExtras();
    method public android.net.Uri! getIconUri();
    method public String getId();
    method public String! getName();
    method public int getPlaybackStream();
    method public int getPlaybackType();
    method public android.view.Display? getPresentationDisplay();
    method public androidx.mediarouter.media.MediaRouter.ProviderInfo! getProvider();
    method public android.content.IntentSender? getSettingsIntent();
    method public int getVolume();
    method public int getVolumeHandling();
    method public int getVolumeMax();
    method public boolean isBluetooth();
    method @Deprecated public boolean isConnecting();
    method public boolean isDefault();
    method public boolean isDeviceSpeaker();
    method public boolean isEnabled();
    method public boolean isSelected();
    method public boolean matchesSelector(androidx.mediarouter.media.MediaRouteSelector);
    method public void requestSetVolume(int);
    method public void requestUpdateVolume(int);
    method public void select();
    method public void sendControlRequest(android.content.Intent, androidx.mediarouter.media.MediaRouter.ControlRequestCallback?);
    method public boolean supportsControlAction(String, String);
    method public boolean supportsControlCategory(String);
    method public boolean supportsControlRequest(android.content.Intent);
    field public static final int CONNECTION_STATE_CONNECTED = 2; // 0x2
    field public static final int CONNECTION_STATE_CONNECTING = 1; // 0x1
    field public static final int CONNECTION_STATE_DISCONNECTED = 0; // 0x0
    field public static final int DEVICE_TYPE_SPEAKER = 2; // 0x2
    field public static final int DEVICE_TYPE_TV = 1; // 0x1
    field public static final int PLAYBACK_TYPE_LOCAL = 0; // 0x0
    field public static final int PLAYBACK_TYPE_REMOTE = 1; // 0x1
    field public static final int PLAYBACK_VOLUME_FIXED = 0; // 0x0
    field public static final int PLAYBACK_VOLUME_VARIABLE = 1; // 0x1
  }

  public final class MediaSessionStatus {
    method public android.os.Bundle! asBundle();
    method public static androidx.mediarouter.media.MediaSessionStatus! fromBundle(android.os.Bundle!);
    method public android.os.Bundle! getExtras();
    method public int getSessionState();
    method public long getTimestamp();
    method public boolean isQueuePaused();
    field public static final int SESSION_STATE_ACTIVE = 0; // 0x0
    field public static final int SESSION_STATE_ENDED = 1; // 0x1
    field public static final int SESSION_STATE_INVALIDATED = 2; // 0x2
  }

  public static final class MediaSessionStatus.Builder {
    ctor public MediaSessionStatus.Builder(int);
    ctor public MediaSessionStatus.Builder(androidx.mediarouter.media.MediaSessionStatus!);
    method public androidx.mediarouter.media.MediaSessionStatus! build();
    method public androidx.mediarouter.media.MediaSessionStatus.Builder! setExtras(android.os.Bundle!);
    method public androidx.mediarouter.media.MediaSessionStatus.Builder! setQueuePaused(boolean);
    method public androidx.mediarouter.media.MediaSessionStatus.Builder! setSessionState(int);
    method public androidx.mediarouter.media.MediaSessionStatus.Builder! setTimestamp(long);
  }

  public class RemotePlaybackClient {
    ctor public RemotePlaybackClient(android.content.Context!, androidx.mediarouter.media.MediaRouter.RouteInfo!);
    method public void endSession(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
    method public void enqueue(android.net.Uri!, String!, android.os.Bundle!, long, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
    method public String! getSessionId();
    method public void getSessionStatus(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
    method public void getStatus(String!, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
    method public boolean hasSession();
    method public boolean isMessagingSupported();
    method public boolean isQueuingSupported();
    method public boolean isRemotePlaybackSupported();
    method public boolean isSessionManagementSupported();
    method public void pause(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
    method public void play(android.net.Uri!, String!, android.os.Bundle!, long, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
    method public void release();
    method public void remove(String!, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
    method public void resume(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
    method public void seek(String!, long, android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.ItemActionCallback!);
    method public void sendMessage(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
    method public void setOnMessageReceivedListener(androidx.mediarouter.media.RemotePlaybackClient.OnMessageReceivedListener!);
    method public void setSessionId(String!);
    method public void setStatusCallback(androidx.mediarouter.media.RemotePlaybackClient.StatusCallback!);
    method public void startSession(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
    method public void stop(android.os.Bundle!, androidx.mediarouter.media.RemotePlaybackClient.SessionActionCallback!);
  }

  public abstract static class RemotePlaybackClient.ActionCallback {
    ctor public RemotePlaybackClient.ActionCallback();
    method public void onError(String!, int, android.os.Bundle!);
  }

  public abstract static class RemotePlaybackClient.ItemActionCallback extends androidx.mediarouter.media.RemotePlaybackClient.ActionCallback {
    ctor public RemotePlaybackClient.ItemActionCallback();
    method public void onResult(android.os.Bundle!, String!, androidx.mediarouter.media.MediaSessionStatus!, String!, androidx.mediarouter.media.MediaItemStatus!);
  }

  public static interface RemotePlaybackClient.OnMessageReceivedListener {
    method public void onMessageReceived(String!, android.os.Bundle!);
  }

  public abstract static class RemotePlaybackClient.SessionActionCallback extends androidx.mediarouter.media.RemotePlaybackClient.ActionCallback {
    ctor public RemotePlaybackClient.SessionActionCallback();
    method public void onResult(android.os.Bundle!, String!, androidx.mediarouter.media.MediaSessionStatus!);
  }

  public abstract static class RemotePlaybackClient.StatusCallback {
    ctor public RemotePlaybackClient.StatusCallback();
    method public void onItemStatusChanged(android.os.Bundle!, String!, androidx.mediarouter.media.MediaSessionStatus!, String!, androidx.mediarouter.media.MediaItemStatus!);
    method public void onSessionChanged(String!);
    method public void onSessionStatusChanged(android.os.Bundle!, String!, androidx.mediarouter.media.MediaSessionStatus!);
  }

}

