Merge "MediaRouter: Handle when a group member route becomes unavailable" into mnc-ub-dev
diff --git a/v7/mediarouter/src/android/support/v7/app/MediaRouteControllerDialog.java b/v7/mediarouter/src/android/support/v7/app/MediaRouteControllerDialog.java
index e4c7c7e..4acf5e8 100644
--- a/v7/mediarouter/src/android/support/v7/app/MediaRouteControllerDialog.java
+++ b/v7/mediarouter/src/android/support/v7/app/MediaRouteControllerDialog.java
@@ -452,8 +452,16 @@
                 mVolumeSlider.setMax(mRoute.getVolumeMax());
                 mVolumeSlider.setProgress(mRoute.getVolume());
                 if (USE_GROUP) {
-                    mGroupExpandCollapseButton.setVisibility(
-                            getGroup() != null ? View.VISIBLE : View.GONE);
+                    if (getGroup() == null) {
+                        mGroupExpandCollapseButton.setVisibility(View.GONE);
+                    } else {
+                        mGroupExpandCollapseButton.setVisibility(View.VISIBLE);
+                        VolumeGroupAdapter adapter =
+                                (VolumeGroupAdapter) mVolumeGroupList.getAdapter();
+                        if (adapter != null) {
+                            adapter.notifyDataSetChanged();
+                        }
+                    }
                 }
             } else {
                 mVolumeLayout.setVisibility(View.GONE);
@@ -533,6 +541,8 @@
     }
 
     private class VolumeGroupAdapter extends ArrayAdapter<MediaRouter.RouteInfo> {
+        final static float DISABLED_ALPHA = .3f;
+
         final OnSeekBarChangeListener mOnSeekBarChangeListener = new OnSeekBarChangeListener() {
             @Override
             public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
@@ -566,20 +576,35 @@
             }
             MediaRouter.RouteInfo route = getItem(position);
             if (route != null) {
-                TextView textView = (TextView) v.findViewById(R.id.media_route_name);
-                textView.setText(route.getName());
+                boolean isEnabled = route.isEnabled();
+
+                TextView routeName = (TextView) v.findViewById(R.id.media_route_name);
+                routeName.setEnabled(isEnabled);
+                routeName.setText(route.getName());
 
                 SeekBar volumeSlider = (SeekBar) v.findViewById(R.id.media_route_volume_slider);
-                if (route.getVolumeHandling() == MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE) {
-                    volumeSlider.setMax(route.getVolumeMax());
-                    volumeSlider.setProgress(route.getVolume());
-                    volumeSlider.setOnSeekBarChangeListener(mOnSeekBarChangeListener);
-                } else {
-                    volumeSlider.setMax(100);
-                    volumeSlider.setProgress(100);
-                    volumeSlider.setEnabled(false);
-                }
+                volumeSlider.setEnabled(isEnabled);
                 volumeSlider.setTag(position);
+                if (isEnabled) {
+                    if (route.getVolumeHandling()
+                            == MediaRouter.RouteInfo.PLAYBACK_VOLUME_VARIABLE) {
+                        volumeSlider.setMax(route.getVolumeMax());
+                        volumeSlider.setProgress(route.getVolume());
+                        volumeSlider.setOnSeekBarChangeListener(mOnSeekBarChangeListener);
+                    } else {
+                        volumeSlider.setMax(100);
+                        volumeSlider.setProgress(100);
+                        volumeSlider.setEnabled(false);
+                    }
+                }
+                // TODO: Find a way to hide the scroll thumb.
+                // if (Build.VERSION.SDK_INT >= 16) {
+                //     volumeSlider.getThumb().setAlpha(isEnabled ? 255 : 0);
+                // }
+
+                ImageView volumeItemIcon =
+                        (ImageView) v.findViewById(R.id.media_route_volume_item_icon);
+                volumeItemIcon.setAlpha(isEnabled ? 255 : (int)(255 * DISABLED_ALPHA));
             }
             return v;
         }