Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0bfa9505 authored by Sungsoo Lim's avatar Sungsoo Lim
Browse files

Show MediaRouteChooserDialog in MediaControlView2

Bug: 72527380
Test: manually using VideoViewTest
Change-Id: I047275f80a67dd27be50cf3387a978935afb7d5e
parent 839daf18
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -16,8 +16,8 @@

<resources>

    <style name="Theme.MediaRouter" parent="ThemeOverlay.AppCompat.Dark">
        <item name="windowNoTitle">true</item>
    <style name="Theme.MediaRouter" parent="android:Theme.Material">
        <item name="android:windowNoTitle">true</item>
        <item name="mediaRouteButtonStyle">@style/Widget.MediaRouter.MediaRouteButton</item>

        <item name="mediaRouteCloseDrawable">@drawable/mr_dialog_close_dark</item>
@@ -37,8 +37,8 @@
        <item name="mediaRouteControlPanelThemeOverlay">@style/ThemeOverlay.MediaRouter.Light</item>
    </style>

    <style name="Theme.MediaRouter.Light" parent="ThemeOverlay.AppCompat.Light">
        <item name="windowNoTitle">true</item>
    <style name="Theme.MediaRouter.Light" parent="android:Theme.Material.Light">
        <item name="android:windowNoTitle">true</item>
        <item name="mediaRouteButtonStyle">@style/Widget.MediaRouter.Light.MediaRouteButton</item>

        <item name="mediaRouteCloseDrawable">@drawable/mr_dialog_close_light</item>
@@ -58,14 +58,14 @@
        <item name="mediaRouteControlPanelThemeOverlay">@style/ThemeOverlay.MediaRouter.Dark</item>
    </style>

    <style name="ThemeOverlay.MediaRouter.Dark" parent="ThemeOverlay.AppCompat.Dark">
    <style name="ThemeOverlay.MediaRouter.Dark" parent="android:Theme.Material">
        <item name="mediaRoutePlayDrawable">@drawable/mr_media_play_dark</item>
        <item name="mediaRoutePauseDrawable">@drawable/mr_media_pause_dark</item>
        <item name="mediaRouteStopDrawable">@drawable/mr_media_stop_dark</item>
        <item name="mediaRouteAudioTrackDrawable">@drawable/mr_vol_type_audiotrack_dark</item>

    </style>
    <style name="ThemeOverlay.MediaRouter.Light" parent="ThemeOverlay.AppCompat.Light">
    <style name="ThemeOverlay.MediaRouter.Light" parent="android:Theme.Material.Light">
        <item name="mediaRoutePlayDrawable">@drawable/mr_media_play_light</item>
        <item name="mediaRoutePauseDrawable">@drawable/mr_media_pause_light</item>
        <item name="mediaRouteStopDrawable">@drawable/mr_media_stop_light</item>
+24 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.media.update;

import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
@@ -24,6 +25,7 @@ import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.android.support.mediarouter.app.MediaRouteButton;

@@ -51,13 +53,23 @@ public class ApiHelper {
        return sInstance.mLibResources;
    }

    public static Resources.Theme getLibTheme() {
    public static Theme getLibTheme() {
        return sInstance.mLibTheme;
    }

    public static Theme getLibTheme(int themeId) {
        Theme theme = sInstance.mLibResources.newTheme();
        theme.applyStyle(themeId, true);
        return theme;
    }

    public static LayoutInflater getLayoutInflater(Context context) {
        return getLayoutInflater(context, getLibTheme());
    }

    public static LayoutInflater getLayoutInflater(Context context, Theme theme) {
        LayoutInflater layoutInflater = LayoutInflater.from(context).cloneInContext(
                new ContextThemeWrapper(context, getLibTheme()));
                new ContextThemeWrapper(context, theme));
        layoutInflater.setFactory2(new LayoutInflater.Factory2() {
            @Override
            public View onCreateView(
@@ -77,8 +89,17 @@ public class ApiHelper {
    }

    public static View inflateLibLayout(Context context, int libResId) {
        return inflateLibLayout(context, getLibTheme(), libResId, null, false);
    }

    public static View inflateLibLayout(Context context, Theme theme, int libResId) {
        return inflateLibLayout(context, theme, libResId, null, false);
    }

    public static View inflateLibLayout(Context context, Theme theme, int libResId,
            @Nullable ViewGroup root, boolean attachToRoot) {
        try (XmlResourceParser parser = getLibResources().getLayout(libResId)) {
            return getLayoutInflater(context).inflate(parser, null);
            return getLayoutInflater(context, theme).inflate(parser, root, attachToRoot);
        }
    }
}
+2 −10
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.support.mediarouter.app;

import android.annotation.NonNull;
import android.app.Activity;
import android.app.FragmentManager;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.ColorStateList;
@@ -27,8 +28,6 @@ import android.graphics.Canvas;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.widget.TooltipCompat;
import android.util.AttributeSet;
@@ -259,7 +258,7 @@ public class MediaRouteButton extends View {
            return false;
        }

        final FragmentManager fm = getFragmentManager();
        final FragmentManager fm = getActivity().getFragmentManager();
        if (fm == null) {
            throw new IllegalStateException("The activity must be a subclass of FragmentActivity");
        }
@@ -286,13 +285,6 @@ public class MediaRouteButton extends View {
        return true;
    }

    private FragmentManager getFragmentManager() {
        Activity activity = getActivity();
        if (activity instanceof FragmentActivity) {
            return ((FragmentActivity)activity).getSupportFragmentManager();
        }
        return null;
    }

    private Activity getActivity() {
        // Gross way of unwrapping the Activity so we can get the FragmentManager
+26 −13
Original line number Diff line number Diff line
@@ -20,7 +20,9 @@ import static com.android.support.mediarouter.media.MediaRouter.RouteInfo.CONNEC
import static com.android.support.mediarouter.media.MediaRouter.RouteInfo.CONNECTION_STATE_CONNECTING;

import android.annotation.NonNull;
import android.app.Dialog;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.net.Uri;
@@ -31,6 +33,7 @@ import android.os.SystemClock;
import android.support.v7.app.AppCompatDialog;
import android.text.TextUtils;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@@ -41,6 +44,7 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

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;
@@ -61,7 +65,7 @@ import java.util.List;
 * @see MediaRouteButton
 * @see MediaRouteActionProvider
 */
public class MediaRouteChooserDialog extends AppCompatDialog {
public class MediaRouteChooserDialog extends Dialog {
    static final String TAG = "MediaRouteChooserDialog";

    // Do not update the route list immediately to avoid unnatural dialog change.
@@ -94,8 +98,9 @@ public class MediaRouteChooserDialog extends AppCompatDialog {
    }

    public MediaRouteChooserDialog(Context context, int theme) {
        super(context = MediaRouterThemeHelper.createThemedDialogContext(context, theme, false),
                MediaRouterThemeHelper.createThemedDialogStyle(context));
        super(new ContextThemeWrapper(context,
                ApiHelper.getLibTheme(MediaRouterThemeHelper.getRouterThemeId(context))),
                theme == 0 ? android.R.style.Animation : theme);
        context = getContext();

        mRouter = MediaRouter.getInstance(context);
@@ -182,7 +187,9 @@ public class MediaRouteChooserDialog extends AppCompatDialog {
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.mr_chooser_dialog);
        setContentView(ApiHelper.inflateLibLayout(getContext(),
                ApiHelper.getLibTheme(MediaRouterThemeHelper.getRouterThemeId(getContext())),
                R.layout.mr_chooser_dialog));

        mRoutes = new ArrayList<>();
        mAdapter = new RouteAdapter(getContext(), mRoutes);
@@ -199,7 +206,7 @@ public class MediaRouteChooserDialog extends AppCompatDialog {
     * Sets the width of the dialog. Also called when configuration changes.
     */
    void updateLayout() {
        getWindow().setLayout(MediaRouteDialogHelper.getDialogWidth(getContext()),
        getWindow().setLayout(MediaRouteDialogHelper.getDialogWidth(),
                ViewGroup.LayoutParams.WRAP_CONTENT);
    }

@@ -248,7 +255,6 @@ public class MediaRouteChooserDialog extends AppCompatDialog {

    private final class RouteAdapter extends ArrayAdapter<MediaRouter.RouteInfo>
            implements ListView.OnItemClickListener {
        private final LayoutInflater mInflater;
        private final Drawable mDefaultIcon;
        private final Drawable mTvIcon;
        private final Drawable mSpeakerIcon;
@@ -256,12 +262,16 @@ public class MediaRouteChooserDialog extends AppCompatDialog {

        public RouteAdapter(Context context, List<MediaRouter.RouteInfo> routes) {
            super(context, 0, routes);
            mInflater = LayoutInflater.from(context);
            TypedArray styledAttributes = getContext().obtainStyledAttributes(new int[] {

            TypedArray styledAttributes = ApiHelper.getLibTheme(
                    MediaRouterThemeHelper.getRouterThemeId(context)).obtainStyledAttributes(
                            new int[] {
                                R.attr.mediaRouteDefaultIconDrawable,
                                R.attr.mediaRouteTvIconDrawable,
                                R.attr.mediaRouteSpeakerIconDrawable,
                    R.attr.mediaRouteSpeakerGroupIconDrawable});
                                R.attr.mediaRouteSpeakerGroupIconDrawable
                            });

            mDefaultIcon = styledAttributes.getDrawable(0);
            mTvIcon = styledAttributes.getDrawable(1);
            mSpeakerIcon = styledAttributes.getDrawable(2);
@@ -283,7 +293,10 @@ public class MediaRouteChooserDialog extends AppCompatDialog {
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            if (view == null) {
                view = mInflater.inflate(R.layout.mr_chooser_list_item, parent, false);
                view = ApiHelper.inflateLibLayout(getContext(),
                        ApiHelper.getLibTheme(
                                MediaRouterThemeHelper.getRouterThemeId(getContext())),
                        R.layout.mr_chooser_list_item, parent, false);
            }

            MediaRouter.RouteInfo route = getItem(position);
+1 −1
Original line number Diff line number Diff line
@@ -17,10 +17,10 @@
package com.android.support.mediarouter.app;

import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;

import com.android.support.mediarouter.media.MediaRouteSelector;

Loading