MediaRouter: Add route groups

Change-Id: Ideab1c0fccd01a68e3f6a5997b9c66aed9b1332e
diff --git a/samples/Support7Demos/res/values/strings.xml b/samples/Support7Demos/res/values/strings.xml
index accf739..1f42fe8 100644
--- a/samples/Support7Demos/res/values/strings.xml
+++ b/samples/Support7Demos/res/values/strings.xml
@@ -36,6 +36,8 @@
     <string name="variable_volume_basic_route_name">Variable Volume (Basic) Remote Playback Route</string>
     <string name="variable_volume_queuing_route_name">Variable Volume (Queuing) Remote Playback Route</string>
     <string name="variable_volume_session_route_name">Variable Volume (Session) Remote Playback Route</string>
+    <string name="variable_volume_route_group_name">Variable Volume Route Group</string>
+    <string name="mixed_volume_route_group_name">Mixed Volume Route Group</string>
     <string name="sample_route_description">Sample route from Support7Demos</string>
 
     <!-- GridLayout -->
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 15cf19b..7bd6e6f 100644
--- a/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java
+++ b/samples/Support7Demos/src/com/example/android/supportv7/media/SampleMediaRouteProvider.java
@@ -16,31 +16,26 @@
 
 package com.example.android.supportv7.media;
 
-import com.example.android.supportv7.R;
-
+import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.IntentFilter.MalformedMimeTypeException;
 import android.content.IntentSender;
 import android.content.res.Resources;
-import android.graphics.Bitmap;
 import android.media.AudioManager;
 import android.media.MediaRouter;
 import android.net.Uri;
 import android.os.Bundle;
-import android.app.PendingIntent;
 import android.support.v7.media.MediaControlIntent;
-import android.support.v7.media.MediaItemStatus;
-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.support.v7.media.MediaRouteProvider;
+import android.support.v7.media.MediaRouteProviderDescriptor;
+import android.support.v7.media.MediaRouter.ControlRequestCallback;
 import android.support.v7.media.MediaSessionStatus;
 import android.util.Log;
-import android.view.Gravity;
-import android.view.Surface;
-import android.view.SurfaceHolder;
+
+import com.example.android.supportv7.R;
 
 import java.util.ArrayList;
 
@@ -56,6 +51,9 @@
     private static final String VARIABLE_VOLUME_BASIC_ROUTE_ID = "variable_basic";
     private static final String VARIABLE_VOLUME_QUEUING_ROUTE_ID = "variable_queuing";
     private static final String VARIABLE_VOLUME_SESSION_ROUTE_ID = "variable_session";
+    private static final String VARIABLE_VOLUME_ROUTE_GROUP_ID = "variable_group";
+    private static final String MIXED_VOLUME_ROUTE_GROUP_ID = "mixed_group";
+
     private static final int VOLUME_MAX = 10;
 
     /**
@@ -230,12 +228,43 @@
                 .setVolume(mVolume)
                 .build();
 
-        MediaRouteProviderDescriptor providerDescriptor =
-                new MediaRouteProviderDescriptor.Builder()
+        MediaRouteDescriptor routeDescriptor5 = new MediaRouteDescriptor.Builder(
+                VARIABLE_VOLUME_ROUTE_GROUP_ID,
+                r.getString(R.string.variable_volume_route_group_name))
+                .addChildId(VARIABLE_VOLUME_BASIC_ROUTE_ID)
+                .addChildId(VARIABLE_VOLUME_QUEUING_ROUTE_ID)
+                .addChildId(VARIABLE_VOLUME_SESSION_ROUTE_ID)
+                .setDescription(r.getString(R.string.sample_route_description))
+                .addControlFilters(CONTROL_FILTERS_SESSION)
+                .setPlaybackStream(AudioManager.STREAM_MUSIC)
+                .setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE)
+                .setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE)
+                .setVolumeMax(VOLUME_MAX)
+                .setVolume(mVolume)
+                .build();
+
+        MediaRouteDescriptor routeDescriptor6 = new MediaRouteDescriptor.Builder(
+                MIXED_VOLUME_ROUTE_GROUP_ID,
+                r.getString(R.string.mixed_volume_route_group_name))
+                .addChildId(FIXED_VOLUME_ROUTE_ID)
+                .addChildId(VARIABLE_VOLUME_BASIC_ROUTE_ID)
+                .addChildId(VARIABLE_VOLUME_QUEUING_ROUTE_ID)
+                .setDescription(r.getString(R.string.sample_route_description))
+                .addControlFilters(CONTROL_FILTERS_SESSION)
+                .setPlaybackStream(AudioManager.STREAM_MUSIC)
+                .setPlaybackType(MediaRouter.RouteInfo.PLAYBACK_TYPE_REMOTE)
+                .setVolumeHandling(MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE)
+                .setVolumeMax(VOLUME_MAX)
+                .setVolume(mVolume)
+                .build();
+
+        MediaRouteProviderDescriptor providerDescriptor = new MediaRouteProviderDescriptor.Builder()
                 .addRoute(routeDescriptor1)
                 .addRoute(routeDescriptor2)
                 .addRoute(routeDescriptor3)
                 .addRoute(routeDescriptor4)
+                .addRoute(routeDescriptor5)
+                .addRoute(routeDescriptor6)
                 .build();
         setDescriptor(providerDescriptor);
     }