MediaRouter: List route devices with representative icons
Bug: 23116853
Change-Id: I91fc86df581b129a12b4c0175b45ea6afd1f51fd
diff --git a/v7/mediarouter/res/drawable-hdpi/ic_speaker_dark.png b/v7/mediarouter/res/drawable-hdpi/ic_speaker_dark.png
new file mode 100755
index 0000000..0e1da44
--- /dev/null
+++ b/v7/mediarouter/res/drawable-hdpi/ic_speaker_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-hdpi/ic_speaker_group_dark.png b/v7/mediarouter/res/drawable-hdpi/ic_speaker_group_dark.png
new file mode 100755
index 0000000..b90bb2f
--- /dev/null
+++ b/v7/mediarouter/res/drawable-hdpi/ic_speaker_group_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-hdpi/ic_speaker_group_light.png b/v7/mediarouter/res/drawable-hdpi/ic_speaker_group_light.png
new file mode 100755
index 0000000..afdb9c1
--- /dev/null
+++ b/v7/mediarouter/res/drawable-hdpi/ic_speaker_group_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-hdpi/ic_speaker_light.png b/v7/mediarouter/res/drawable-hdpi/ic_speaker_light.png
new file mode 100755
index 0000000..e2c88be
--- /dev/null
+++ b/v7/mediarouter/res/drawable-hdpi/ic_speaker_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-mdpi/ic_speaker_dark.png b/v7/mediarouter/res/drawable-mdpi/ic_speaker_dark.png
new file mode 100755
index 0000000..7cc9845
--- /dev/null
+++ b/v7/mediarouter/res/drawable-mdpi/ic_speaker_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-mdpi/ic_speaker_group_dark.png b/v7/mediarouter/res/drawable-mdpi/ic_speaker_group_dark.png
new file mode 100755
index 0000000..4db7209
--- /dev/null
+++ b/v7/mediarouter/res/drawable-mdpi/ic_speaker_group_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-mdpi/ic_speaker_group_light.png b/v7/mediarouter/res/drawable-mdpi/ic_speaker_group_light.png
new file mode 100755
index 0000000..d26bb58
--- /dev/null
+++ b/v7/mediarouter/res/drawable-mdpi/ic_speaker_group_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-mdpi/ic_speaker_light.png b/v7/mediarouter/res/drawable-mdpi/ic_speaker_light.png
new file mode 100755
index 0000000..ae8d47f
--- /dev/null
+++ b/v7/mediarouter/res/drawable-mdpi/ic_speaker_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xhdpi/ic_speaker_dark.png b/v7/mediarouter/res/drawable-xhdpi/ic_speaker_dark.png
new file mode 100755
index 0000000..8f8a552
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xhdpi/ic_speaker_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xhdpi/ic_speaker_group_dark.png b/v7/mediarouter/res/drawable-xhdpi/ic_speaker_group_dark.png
new file mode 100755
index 0000000..6227ca2
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xhdpi/ic_speaker_group_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xhdpi/ic_speaker_group_light.png b/v7/mediarouter/res/drawable-xhdpi/ic_speaker_group_light.png
new file mode 100755
index 0000000..82599f5
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xhdpi/ic_speaker_group_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xhdpi/ic_speaker_light.png b/v7/mediarouter/res/drawable-xhdpi/ic_speaker_light.png
new file mode 100755
index 0000000..74f9f6d
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xhdpi/ic_speaker_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_dark.png b/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_dark.png
new file mode 100755
index 0000000..874c961
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_group_dark.png b/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_group_dark.png
new file mode 100755
index 0000000..6869bdc
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_group_dark.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_group_light.png b/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_group_light.png
new file mode 100755
index 0000000..35de6f4
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_group_light.png
Binary files differ
diff --git a/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_light.png b/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_light.png
new file mode 100755
index 0000000..65ee187
--- /dev/null
+++ b/v7/mediarouter/res/drawable-xxhdpi/ic_speaker_light.png
Binary files differ
diff --git a/v7/mediarouter/res/layout-v17/mr_media_route_list_item.xml b/v7/mediarouter/res/layout-v17/mr_media_route_list_item.xml
index 7832abf..e1ae9e6 100644
--- a/v7/mediarouter/res/layout-v17/mr_media_route_list_item.xml
+++ b/v7/mediarouter/res/layout-v17/mr_media_route_list_item.xml
@@ -24,8 +24,7 @@
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginLeft="24dp"
- android:layout_marginRight="24dp"
- android:src="?attr/mediaRouteDefaultIconDrawable" />
+ android:layout_marginRight="24dp" />
<LinearLayout android:layout_width="0dp"
android:layout_height="wrap_content"
diff --git a/v7/mediarouter/res/values/attrs.xml b/v7/mediarouter/res/values/attrs.xml
index 67727a8..482525e 100644
--- a/v7/mediarouter/res/values/attrs.xml
+++ b/v7/mediarouter/res/values/attrs.xml
@@ -35,4 +35,6 @@
<attr name="mediaRoutePauseDrawable" format="reference" />
<attr name="mediaRouteCastDrawable" format="reference" />
<attr name="mediaRouteDefaultIconDrawable" format="reference" />
-</resources>
\ No newline at end of file
+ <attr name="mediaRouteSpeakerIconDrawable" format="reference" />
+ <attr name="mediaRouteSpeakerGroupIconDrawable" format="reference" />
+</resources>
diff --git a/v7/mediarouter/res/values/themes.xml b/v7/mediarouter/res/values/themes.xml
index 8a91265..c004ab3 100644
--- a/v7/mediarouter/res/values/themes.xml
+++ b/v7/mediarouter/res/values/themes.xml
@@ -28,6 +28,8 @@
<item name="mediaRoutePauseDrawable">@drawable/mr_ic_pause_dark</item>
<item name="mediaRouteCastDrawable">@drawable/mr_ic_cast_dark</item>
<item name="mediaRouteDefaultIconDrawable">@drawable/ic_tv_dark</item>
+ <item name="mediaRouteSpeakerIconDrawable">@drawable/ic_speaker_dark</item>
+ <item name="mediaRouteSpeakerGroupIconDrawable">@drawable/ic_speaker_group_dark</item>
</style>
<style name="Theme.MediaRouter.Light" parent="">
@@ -42,6 +44,8 @@
<item name="mediaRoutePauseDrawable">@drawable/mr_ic_pause_light</item>
<item name="mediaRouteCastDrawable">@drawable/mr_ic_cast_light</item>
<item name="mediaRouteDefaultIconDrawable">@drawable/ic_tv_light</item>
+ <item name="mediaRouteSpeakerIconDrawable">@drawable/ic_speaker_light</item>
+ <item name="mediaRouteSpeakerGroupIconDrawable">@drawable/ic_speaker_group_light</item>
</style>
</resources>
diff --git a/v7/mediarouter/src/android/support/v7/app/MediaRouteChooserDialog.java b/v7/mediarouter/src/android/support/v7/app/MediaRouteChooserDialog.java
index 7746745..fd8a663 100644
--- a/v7/mediarouter/src/android/support/v7/app/MediaRouteChooserDialog.java
+++ b/v7/mediarouter/src/android/support/v7/app/MediaRouteChooserDialog.java
@@ -18,8 +18,8 @@
import android.app.Dialog;
import android.content.Context;
-import android.graphics.Color;
-import android.graphics.drawable.ColorDrawable;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.media.MediaControlIntent;
@@ -30,9 +30,9 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.view.Window;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
+import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
@@ -185,10 +185,21 @@
private final class RouteAdapter extends ArrayAdapter<MediaRouter.RouteInfo>
implements ListView.OnItemClickListener {
private final LayoutInflater mInflater;
+ private final Drawable mDefaultIcon;
+ private final Drawable mSpeakerIcon;
+ private final Drawable mSpeakerGroupIcon;
public RouteAdapter(Context context, List<MediaRouter.RouteInfo> routes) {
super(context, 0, routes);
mInflater = LayoutInflater.from(context);
+ int[] attrs = new int[] {
+ R.attr.mediaRouteDefaultIconDrawable,
+ R.attr.mediaRouteSpeakerIconDrawable,
+ R.attr.mediaRouteSpeakerGroupIconDrawable };
+ TypedArray styledAttributes = getContext().obtainStyledAttributes(attrs);
+ mDefaultIcon = styledAttributes.getDrawable(0);
+ mSpeakerIcon = styledAttributes.getDrawable(1);
+ mSpeakerGroupIcon = styledAttributes.getDrawable(2);
}
@Override
@@ -207,9 +218,10 @@
if (view == null) {
view = mInflater.inflate(R.layout.mr_media_route_list_item, parent, false);
}
+
MediaRouter.RouteInfo route = getItem(position);
- TextView text1 = (TextView)view.findViewById(android.R.id.text1);
- TextView text2 = (TextView)view.findViewById(android.R.id.text2);
+ TextView text1 = (TextView) view.findViewById(android.R.id.text1);
+ TextView text2 = (TextView) view.findViewById(android.R.id.text2);
text1.setText(route.getName());
String description = route.getDescription();
if (TextUtils.isEmpty(description)) {
@@ -220,6 +232,11 @@
text2.setText(description);
}
view.setEnabled(route.isEnabled());
+
+ ImageView iconView = (ImageView) view.findViewById(R.id.routeIcon);
+ if (iconView != null) {
+ iconView.setImageDrawable(getIconDrawable(route));
+ }
return view;
}
@@ -231,6 +248,18 @@
dismiss();
}
}
+
+ private Drawable getIconDrawable(MediaRouter.RouteInfo route) {
+ if (route instanceof MediaRouter.RouteGroup) {
+ // Only speakers can be grouped for now.
+ return mSpeakerGroupIcon;
+ }
+ if (route.supportsControlCategory(MediaControlIntent.CATEGORY_LIVE_AUDIO)
+ && !route.supportsControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO)) {
+ return mSpeakerIcon;
+ }
+ return mDefaultIcon;
+ }
}
private final class MediaRouterCallback extends MediaRouter.Callback {