diff --git a/samples/Support7Demos/AndroidManifest.xml b/samples/Support7Demos/AndroidManifest.xml index 1a8bf8055..1edf3e658 100644 --- a/samples/Support7Demos/AndroidManifest.xml +++ b/samples/Support7Demos/AndroidManifest.xml @@ -46,7 +46,26 @@ + android:label="@string/sample_media_router_activity_dark" + android:theme="@style/Theme.AppCompat"> + + + + + + + + + + + + + + @@ -55,7 +74,7 @@ + android:process=":mrp"> diff --git a/samples/Support7Demos/res/menu/sample_media_router_menu.xml b/samples/Support7Demos/res/menu/sample_media_router_menu.xml index aac1e967d..8057fa800 100644 --- a/samples/Support7Demos/res/menu/sample_media_router_menu.xml +++ b/samples/Support7Demos/res/menu/sample_media_router_menu.xml @@ -1,5 +1,5 @@ - - + diff --git a/samples/Support7Demos/res/values/strings.xml b/samples/Support7Demos/res/values/strings.xml index 4dd65b0ad..1c9f6ffb3 100644 --- a/samples/Support7Demos/res/values/strings.xml +++ b/samples/Support7Demos/res/values/strings.xml @@ -19,10 +19,12 @@ - MediaRouter + MediaRouter/Dark Theme + MediaRouter/Light Theme + MediaRouter/Light Theme, Dark Action Bar This activity demonstrates how to use MediaRouter from the support library. Select a route from the action bar. - Play on... + Play on... Play Show Statistics diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java index 2e3bb5043..8a80bac5e 100644 --- a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java +++ b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java @@ -29,9 +29,12 @@ import android.os.Bundle; import android.support.v7.media.MediaControlIntent; import android.support.v7.media.MediaRouteProvider; import android.support.v7.media.MediaRouter.ControlRequestCallback; +import android.support.v7.media.MediaRouteProviderDescriptor; +import android.support.v7.media.MediaRouteDescriptor; import android.util.Log; import android.widget.Toast; +import java.util.ArrayList; import java.util.UUID; /** @@ -51,7 +54,7 @@ final class SampleMediaRouteProvider extends MediaRouteProvider { * supported by this provider's routes. */ public static final String CATEGORY_SAMPLE_ROUTE = - "com.example.android.supportv4.media.CATEGORY_SAMPLE_ROUTE"; + "com.example.android.supportv7.media.CATEGORY_SAMPLE_ROUTE"; /** * A custom media control intent action for special requests that are @@ -64,29 +67,31 @@ final class SampleMediaRouteProvider extends MediaRouteProvider { * @see #DATA_PLAYBACK_COUNT */ public static final String ACTION_GET_STATISTICS = - "com.example.android.supportv4.media.ACTION_GET_STATISTICS"; + "com.example.android.supportv7.media.ACTION_GET_STATISTICS"; /** * {@link #ACTION_GET_STATISTICS} result data: Number of times the * playback action was invoked. */ public static final String DATA_PLAYBACK_COUNT = - "com.example.android.supportv4.media.EXTRA_PLAYBACK_COUNT"; + "com.example.android.supportv7.media.EXTRA_PLAYBACK_COUNT"; - private static final IntentFilter[] CONTROL_FILTERS; + private static final ArrayList CONTROL_FILTERS; static { - CONTROL_FILTERS = new IntentFilter[2]; + IntentFilter f1 = new IntentFilter(); + f1.addCategory(CATEGORY_SAMPLE_ROUTE); + f1.addAction(ACTION_GET_STATISTICS); - CONTROL_FILTERS[0] = new IntentFilter(); - CONTROL_FILTERS[0].addCategory(CATEGORY_SAMPLE_ROUTE); - CONTROL_FILTERS[0].addAction(ACTION_GET_STATISTICS); + IntentFilter f2 = new IntentFilter(); + f2.addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK); + f2.addAction(MediaControlIntent.ACTION_PLAY); + f2.addDataScheme("http"); + f2.addDataScheme("https"); + addDataTypeUnchecked(f2, "video/*"); - CONTROL_FILTERS[1] = new IntentFilter(); - CONTROL_FILTERS[1].addCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK); - CONTROL_FILTERS[1].addAction(MediaControlIntent.ACTION_PLAY); - CONTROL_FILTERS[1].addDataScheme("http"); - CONTROL_FILTERS[1].addDataScheme("https"); - addDataTypeUnchecked(CONTROL_FILTERS[1], "video/*"); + CONTROL_FILTERS = new ArrayList(); + CONTROL_FILTERS.add(f1); + CONTROL_FILTERS.add(f2); } private static void addDataTypeUnchecked(IntentFilter filter, String type) { @@ -114,29 +119,33 @@ final class SampleMediaRouteProvider extends MediaRouteProvider { private void publishRoutes() { Resources r = getContext().getResources(); - RouteDescriptor routeDescriptor1 = new RouteDescriptor( + MediaRouteDescriptor routeDescriptor1 = new MediaRouteDescriptor.Builder( FIXED_VOLUME_ROUTE_ID, - r.getString(R.string.fixed_volume_route_name)); - routeDescriptor1.setControlFilters(CONTROL_FILTERS); - routeDescriptor1.setIconResource(R.drawable.media_route_icon); - routeDescriptor1.setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE); - routeDescriptor1.setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED); - routeDescriptor1.setVolume(VOLUME_MAX); + r.getString(R.string.fixed_volume_route_name)) + .addControlFilters(CONTROL_FILTERS) + .setIconResource(R.drawable.media_route_icon) + .setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE) + .setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_FIXED) + .setVolume(VOLUME_MAX) + .build(); - RouteDescriptor routeDescriptor2 = new RouteDescriptor( + MediaRouteDescriptor routeDescriptor2 = new MediaRouteDescriptor.Builder( VARIABLE_VOLUME_ROUTE_ID, - r.getString(R.string.variable_volume_route_name)); - routeDescriptor2.setControlFilters(CONTROL_FILTERS); - routeDescriptor2.setIconResource(R.drawable.media_route_icon); - routeDescriptor2.setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE); - routeDescriptor2.setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE); - routeDescriptor2.setVolumeMax(VOLUME_MAX); - routeDescriptor2.setVolume(mVolume); + r.getString(R.string.variable_volume_route_name)) + .addControlFilters(CONTROL_FILTERS) + .setIconResource(R.drawable.media_route_icon) + .setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE) + .setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE) + .setVolumeMax(VOLUME_MAX) + .setVolume(mVolume) + .build(); - ProviderDescriptor providerDescriptor = new ProviderDescriptor(); - providerDescriptor.setRoutes(new RouteDescriptor[] { - routeDescriptor1, routeDescriptor2 - }); + MediaRouteProviderDescriptor providerDescriptor = + new MediaRouteProviderDescriptor.Builder() + .addRoute(routeDescriptor1) + .addRoute(routeDescriptor2) + .addDiscoverableControlFilters(CONTROL_FILTERS) + .build(); setDescriptor(providerDescriptor); } diff --git a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java index 37b22c906..a27e46de5 100644 --- a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java +++ b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouterActivity.java @@ -18,15 +18,17 @@ package com.example.android.supportv7.media; import com.example.android.supportv7.R; -import android.app.Activity; -import android.app.MediaRouteActionProvider; import android.content.Intent; import android.net.Uri; import android.os.Bundle; +import android.support.v4.view.MenuItemCompat; +import android.support.v7.app.ActionBarActivity; +import android.support.v7.app.MediaRouteActionProvider; import android.support.v7.media.MediaControlIntent; import android.support.v7.media.MediaRouter; import android.support.v7.media.MediaRouter.RouteInfo; import android.support.v7.media.MediaRouter.ProviderInfo; +import android.support.v7.media.MediaRouteSelector; import android.util.Log; import android.view.Menu; import android.view.MenuItem; @@ -49,10 +51,11 @@ import android.widget.Toast; * targets. *

*/ -public class SampleMediaRouterActivity extends Activity { +public class SampleMediaRouterActivity extends ActionBarActivity { private final String TAG = "MediaRouterSupport"; private MediaRouter mMediaRouter; + private MediaRouteSelector mSelector; private ArrayAdapter mMediaItems; private TextView mInfoTextView; private ListView mMediaListView; @@ -67,6 +70,14 @@ public class SampleMediaRouterActivity extends Activity { // Get the media router service. mMediaRouter = MediaRouter.getInstance(this); + // Create a route selector for the type of routes that we care about. + mSelector = new MediaRouteSelector.Builder() + .addControlCategory(MediaControlIntent.CATEGORY_LIVE_AUDIO) + .addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO) + .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK) + .addControlCategory(SampleMediaRouteProvider.CATEGORY_SAMPLE_ROUTE) + .build(); + // Populate an array adapter with fake media items. String[] mediaNames = getResources().getStringArray(R.array.media_names); String[] mediaUris = getResources().getStringArray(R.array.media_uris); @@ -114,7 +125,8 @@ public class SampleMediaRouterActivity extends Activity { super.onResume(); // Listen for changes to media routes. - mMediaRouter.addCallback(mMediaRouterCallback); + mMediaRouter.addCallback(mSelector, mCallback, + MediaRouter.CALLBACK_FLAG_UNFILTERED_EVENTS); updateRouteStatus(); } @@ -124,10 +136,9 @@ public class SampleMediaRouterActivity extends Activity { super.onPause(); // Stop listening for changes to media routes. - mMediaRouter.removeCallback(mMediaRouterCallback); + mMediaRouter.removeCallback(mCallback); } - // TODO: Use ActionBar support library. @Override public boolean onCreateOptionsMenu(Menu menu) { // Be sure to call the super class. @@ -136,14 +147,10 @@ public class SampleMediaRouterActivity extends Activity { // Inflate the menu and configure the media router action provider. getMenuInflater().inflate(R.menu.sample_media_router_menu, menu); - // TODO: Use support library media route action provider. - MenuItem mediaRouteMenuItem = menu.findItem(R.id.menu_media_route); + MenuItem mediaRouteMenuItem = menu.findItem(R.id.media_route_menu_item); MediaRouteActionProvider mediaRouteActionProvider = - (MediaRouteActionProvider)mediaRouteMenuItem.getActionProvider(); - mediaRouteActionProvider.setRouteTypes( - android.media.MediaRouter.ROUTE_TYPE_LIVE_AUDIO - | android.media.MediaRouter.ROUTE_TYPE_LIVE_VIDEO - | android.media.MediaRouter.ROUTE_TYPE_USER); + (MediaRouteActionProvider)MenuItemCompat.getActionProvider(mediaRouteMenuItem); + mediaRouteActionProvider.setRouteSelector(mSelector); // Return true to show the menu. return true; @@ -277,7 +284,7 @@ public class SampleMediaRouterActivity extends Activity { return null; } - private final MediaRouter.Callback mMediaRouterCallback = new MediaRouter.Callback() { + private final MediaRouter.Callback mCallback = new MediaRouter.Callback() { @Override public void onRouteAdded(MediaRouter router, RouteInfo route) { Log.d(TAG, "onRouteAdded: route=" + route); @@ -325,6 +332,11 @@ public class SampleMediaRouterActivity extends Activity { public void onProviderRemoved(MediaRouter router, ProviderInfo provider) { Log.d(TAG, "onRouteProviderRemoved: provider=" + provider); } + + @Override + public void onProviderChanged(MediaRouter router, ProviderInfo provider) { + Log.d(TAG, "onRouteProviderChanged: provider=" + provider); + } }; private static final class MediaItem { @@ -341,4 +353,18 @@ public class SampleMediaRouterActivity extends Activity { return mName; } } + + /** + * Trivial subclass of this activity used to provide another copy of the + * same activity using a light theme instead of the dark theme. + */ + public static class Light extends SampleMediaRouterActivity { + } + + /** + * Trivial subclass of this activity used to provide another copy of the + * same activity using a light theme with dark action bar instead of the dark theme. + */ + public static class LightWithDarkActionBar extends SampleMediaRouterActivity { + } }