Use MediaRouteButton in MediaControlView2Impl
Show cast button using MediaRouteButton instead of a fake
image button in MediaControlView2Impl.
Test: manually using VideoViewTest
Change-Id: Ibe2f0d1e93de9d54b5e4ec3a554eb506995e87d4
diff --git a/packages/MediaComponents/res/drawable/ic_cast.xml b/packages/MediaComponents/res/drawable/ic_cast.xml
deleted file mode 100644
index ac22a4b..0000000
--- a/packages/MediaComponents/res/drawable/ic_cast.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="24dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:pathData="M21,3L3,3c-1.1,0 -2,0.9 -2,2v3h2L3,5h18v14h-7v2h7c1.1,0 2,-0.9 2,-2L23,5c0,-1.1 -0.9,-2 -2,-2zM1,18v3h3c0,-1.66 -1.34,-3 -3,-3zM1,14v2c2.76,0 5,2.24 5,5h2c0,-3.87 -3.13,-7 -7,-7zM1,10v2c4.97,0 9,4.03 9,9h2c0,-6.08 -4.93,-11 -11,-11z"
- android:fillColor="#FFFFFF"/>
-</vector>
diff --git a/packages/MediaComponents/res/layout/media_controller.xml b/packages/MediaComponents/res/layout/media_controller.xml
index ff4f12a..069fbdd 100644
--- a/packages/MediaComponents/res/layout/media_controller.xml
+++ b/packages/MediaComponents/res/layout/media_controller.xml
@@ -49,11 +49,10 @@
android:text="North by Northwest"
android:textColor="#FFFFFFFF" />
- <ImageButton
- android:id="@+id/cast"
+ <view class="com.android.support.mediarouter.app.MediaRouteButton" android:id="@+id/cast"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
- style="@style/TitleBarButton.MediaRouteButton"/>
+ style="@style/TitleBarButton" />
</RelativeLayout>
diff --git a/packages/MediaComponents/res/values/style.xml b/packages/MediaComponents/res/values/style.xml
index d31b41d..8363dd2 100644
--- a/packages/MediaComponents/res/values/style.xml
+++ b/packages/MediaComponents/res/values/style.xml
@@ -34,11 +34,6 @@
<item name="android:layout_margin">10dp</item>
</style>
- <style name="TitleBarButton.MediaRouteButton">
- <item name="android:src">@drawable/ic_cast</item>
- </style>
-
-
<style name="BottomBarButton">
<item name="android:background">@null</item>
<item name="android:layout_width">24dp</item>
diff --git a/packages/MediaComponents/src/com/android/media/update/ApiHelper.java b/packages/MediaComponents/src/com/android/media/update/ApiHelper.java
index a83e449..b0ca1bd 100644
--- a/packages/MediaComponents/src/com/android/media/update/ApiHelper.java
+++ b/packages/MediaComponents/src/com/android/media/update/ApiHelper.java
@@ -20,10 +20,13 @@
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.content.res.XmlResourceParser;
+import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
+import com.android.support.mediarouter.app.MediaRouteButton;
+
public class ApiHelper {
private static ApiHelper sInstance;
private final Resources mLibResources;
@@ -55,7 +58,21 @@
public static LayoutInflater getLayoutInflater(Context context) {
LayoutInflater layoutInflater = LayoutInflater.from(context).cloneInContext(
new ContextThemeWrapper(context, getLibTheme()));
- // TODO: call layoutInflater.setFactory2()
+ layoutInflater.setFactory2(new LayoutInflater.Factory2() {
+ @Override
+ public View onCreateView(
+ View parent, String name, Context context, AttributeSet attrs) {
+ if (MediaRouteButton.class.getCanonicalName().equals(name)) {
+ return new MediaRouteButton(context, attrs);
+ }
+ return null;
+ }
+
+ @Override
+ public View onCreateView(String name, Context context, AttributeSet attrs) {
+ return onCreateView(null, name, context, attrs);
+ }
+ });
return layoutInflater;
}
diff --git a/packages/MediaComponents/src/com/android/support/mediarouter/app/MediaRouteButton.java b/packages/MediaComponents/src/com/android/support/mediarouter/app/MediaRouteButton.java
index 68e8d3a..65fc88c 100644
--- a/packages/MediaComponents/src/com/android/support/mediarouter/app/MediaRouteButton.java
+++ b/packages/MediaComponents/src/com/android/support/mediarouter/app/MediaRouteButton.java
@@ -21,6 +21,7 @@
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.ColorStateList;
+import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.drawable.AnimationDrawable;
@@ -36,6 +37,7 @@
import android.view.SoundEffectConstants;
import android.view.View;
+import com.android.media.update.ApiHelper;
import com.android.media.update.R;
import com.android.support.mediarouter.media.MediaRouteSelector;
import com.android.support.mediarouter.media.MediaRouter;
@@ -128,8 +130,11 @@
mRouter = MediaRouter.getInstance(context);
mCallback = new MediaRouterCallback();
- TypedArray a = context.obtainStyledAttributes(attrs,
+ Resources.Theme theme = ApiHelper.getLibResources().newTheme();
+ theme.applyStyle(MediaRouterThemeHelper.getRouterThemeId(context), true);
+ TypedArray a = theme.obtainStyledAttributes(attrs,
R.styleable.MediaRouteButton, defStyleAttr, 0);
+
mButtonTint = a.getColorStateList(R.styleable.MediaRouteButton_mediaRouteButtonTint);
mMinWidth = a.getDimensionPixelSize(
R.styleable.MediaRouteButton_android_minWidth, 0);
@@ -290,8 +295,9 @@
* button when the button is long pressed.
*/
void setCheatSheetEnabled(boolean enable) {
- TooltipCompat.setTooltipText(this,
- enable ? getContext().getString(R.string.mr_button_content_description) : null);
+ TooltipCompat.setTooltipText(this, enable
+ ? ApiHelper.getLibResources().getString(R.string.mr_button_content_description)
+ : null);
}
@Override
@@ -533,7 +539,7 @@
} else {
resId = R.string.mr_cast_button_disconnected;
}
- setContentDescription(getContext().getString(resId));
+ setContentDescription(ApiHelper.getLibResources().getString(resId));
}
private final class MediaRouterCallback extends MediaRouter.Callback {
@@ -590,7 +596,7 @@
@Override
protected Drawable doInBackground(Void... params) {
- return getContext().getResources().getDrawable(mResId);
+ return ApiHelper.getLibResources().getDrawable(mResId);
}
@Override
diff --git a/packages/MediaComponents/src/com/android/support/mediarouter/app/MediaRouterThemeHelper.java b/packages/MediaComponents/src/com/android/support/mediarouter/app/MediaRouterThemeHelper.java
index b4b49df..7440130 100644
--- a/packages/MediaComponents/src/com/android/support/mediarouter/app/MediaRouterThemeHelper.java
+++ b/packages/MediaComponents/src/com/android/support/mediarouter/app/MediaRouterThemeHelper.java
@@ -196,7 +196,7 @@
return value.data;
}
- private static int getRouterThemeId(Context context) {
+ static int getRouterThemeId(Context context) {
int themeId;
if (isLightTheme(context)) {
if (getControllerColor(context, 0) == COLOR_DARK_ON_LIGHT_BACKGROUND) {
diff --git a/packages/MediaComponents/src/com/android/support/mediarouter/media/SystemMediaRouteProvider.java b/packages/MediaComponents/src/com/android/support/mediarouter/media/SystemMediaRouteProvider.java
index f5e1e61..33d92b4 100644
--- a/packages/MediaComponents/src/com/android/support/mediarouter/media/SystemMediaRouteProvider.java
+++ b/packages/MediaComponents/src/com/android/support/mediarouter/media/SystemMediaRouteProvider.java
@@ -27,6 +27,7 @@
import android.support.annotation.RequiresApi;
import android.view.Display;
+import com.android.media.update.ApiHelper;
import com.android.media.update.R;
import java.util.ArrayList;
@@ -266,7 +267,7 @@
mCallbackObj = createCallbackObj();
mVolumeCallbackObj = createVolumeCallbackObj();
- Resources r = context.getResources();
+ Resources r = ApiHelper.getLibResources();
mUserRouteCategoryObj = MediaRouterJellybean.createRouteCategory(
mRouterObj, r.getString(R.string.mr_user_route_category_name), false);