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

Commit d5b1f00d authored by Sungsoo Lim's avatar Sungsoo Lim
Browse files

Show MediaRouteControllerDialog in MediaControlView2

Bug: 72527216
Test: manually using VideoViewTest
Change-Id: I9067a53739fc60995a8c10e9071472c46de5c4db
parent 1bfabb36
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:orientation="vertical"
        android:background="?attr/colorBackgroundFloating">
        android:background="?android:attr/colorBackgroundFloating">
        <LinearLayout android:id="@+id/mr_title_bar"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
@@ -44,7 +44,7 @@
                android:layout_gravity="center_vertical"
                android:contentDescription="@string/mr_controller_close_description"
                android:src="?attr/mediaRouteCloseDrawable"
                android:background="?attr/selectableItemBackgroundBorderless" />
                android:background="?android:attr/selectableItemBackgroundBorderless" />
        </LinearLayout>
        <FrameLayout android:id="@+id/mr_custom_control"
            android:layout_width="fill_parent"
@@ -58,7 +58,7 @@
                android:layout_height="wrap_content"
                android:adjustViewBounds="true"
                android:scaleType="fitXY"
                android:background="?attr/colorPrimary"
                android:background="?android:attr/colorPrimary"
                android:layout_gravity="top"
                android:contentDescription="@string/mr_controller_album_art"
                android:visibility="gone" />
@@ -89,7 +89,7 @@
                            android:layout_alignParentRight="true"
                            android:layout_centerVertical="true"
                            android:contentDescription="@string/mr_controller_play"
                            android:background="?attr/selectableItemBackgroundBorderless"
                            android:background="?android:attr/selectableItemBackgroundBorderless"
                            android:visibility="gone" />
                        <LinearLayout android:id="@+id/mr_control_title_container"
                            android:orientation="vertical"
@@ -146,7 +146,7 @@
                            android:layout_width="48dp"
                            android:layout_height="48dp"
                            android:padding="12dp"
                            android:background="?attr/selectableItemBackgroundBorderless"
                            android:background="?android:attr/selectableItemBackgroundBorderless"
                            android:visibility="gone"/>
                    </LinearLayout>
                </LinearLayout>
@@ -181,7 +181,7 @@
                android:paddingTop="4dp">
                <Button
                    android:id="@android:id/button3"
                    style="?attr/buttonBarNeutralButtonStyle"
                    style="?android:attr/buttonBarNeutralButtonStyle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
                <android.support.v4.widget.Space
@@ -197,7 +197,7 @@
                    android:layout_height="wrap_content"/>
                <Button
                    android:id="@android:id/button1"
                    style="?attr/buttonBarPositiveButtonStyle"
                    style="?android:attr/buttonBarPositiveButtonStyle"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
            </android.support.v7.widget.ButtonBarLayout>
+17 −0
Original line number Diff line number Diff line
@@ -18,9 +18,12 @@ package com.android.media.update;

import android.annotation.Nullable;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.content.res.XmlResourceParser;
import android.support.v4.widget.Space;
import android.support.v7.widget.ButtonBarLayout;
import android.util.AttributeSet;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
@@ -28,6 +31,9 @@ import android.view.View;
import android.view.ViewGroup;

import com.android.support.mediarouter.app.MediaRouteButton;
import com.android.support.mediarouter.app.MediaRouteExpandCollapseButton;
import com.android.support.mediarouter.app.MediaRouteVolumeSlider;
import com.android.support.mediarouter.app.OverlayListView;

public class ApiHelper {
    private static ApiHelper sInstance;
@@ -68,6 +74,7 @@ public class ApiHelper {
    }

    public static LayoutInflater getLayoutInflater(Context context, Theme theme) {
        // TODO (b/72975976): Avoid to use ContextThemeWrapper with app context and lib theme.
        LayoutInflater layoutInflater = LayoutInflater.from(context).cloneInContext(
                new ContextThemeWrapper(context, theme));
        layoutInflater.setFactory2(new LayoutInflater.Factory2() {
@@ -76,6 +83,16 @@ public class ApiHelper {
                    View parent, String name, Context context, AttributeSet attrs) {
                if (MediaRouteButton.class.getCanonicalName().equals(name)) {
                    return new MediaRouteButton(context, attrs);
                } else if (MediaRouteVolumeSlider.class.getCanonicalName().equals(name)) {
                    return new MediaRouteVolumeSlider(context, attrs);
                } else if (MediaRouteExpandCollapseButton.class.getCanonicalName().equals(name)) {
                    return new MediaRouteExpandCollapseButton(context, attrs);
                } else if (OverlayListView.class.getCanonicalName().equals(name)) {
                    return new OverlayListView(context, attrs);
                } else if (ButtonBarLayout.class.getCanonicalName().equals(name)) {
                    return new ButtonBarLayout(context, attrs);
                } else if (Space.class.getCanonicalName().equals(name)) {
                    return new Space(context, attrs);
                }
                return null;
            }
+2 −2
Original line number Diff line number Diff line
@@ -98,9 +98,9 @@ public class MediaRouteChooserDialog extends Dialog {
    }

    public MediaRouteChooserDialog(Context context, int theme) {
        // TODO (b/72975976): Avoid to use ContextThemeWrapper with app context and lib theme.
        super(new ContextThemeWrapper(context,
                ApiHelper.getLibTheme(MediaRouterThemeHelper.getRouterThemeId(context))),
                theme == 0 ? android.R.style.Animation : theme);
                ApiHelper.getLibTheme(MediaRouterThemeHelper.getRouterThemeId(context))), theme);
        context = getContext();

        mRouter = MediaRouter.getInstance(context);
+32 −28
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY;
import static android.support.v4.media.session.PlaybackStateCompat.ACTION_PLAY_PAUSE;
import static android.support.v4.media.session.PlaybackStateCompat.ACTION_STOP;

import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
@@ -41,11 +42,10 @@ import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;
import android.support.v4.util.ObjectsCompat;
import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.graphics.Palette;

import android.text.TextUtils;
import android.util.Log;
import android.view.ContextThemeWrapper;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -72,6 +72,7 @@ import android.widget.RelativeLayout;
import android.widget.SeekBar;
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;
@@ -204,8 +205,9 @@ public class MediaRouteControllerDialog extends AlertDialog {
    }

    public MediaRouteControllerDialog(Context context, int theme) {
        super(context = MediaRouterThemeHelper.createThemedDialogContext(context, theme, true),
                MediaRouterThemeHelper.createThemedDialogStyle(context));
        // TODO (b/72975976): Avoid to use ContextThemeWrapper with app context and lib theme.
        super(new ContextThemeWrapper(context,
                ApiHelper.getLibTheme(MediaRouterThemeHelper.getRouterThemeId(context))), theme);
        mContext = getContext();

        mControllerCallback = new MediaControllerCallback();
@@ -213,16 +215,14 @@ public class MediaRouteControllerDialog extends AlertDialog {
        mCallback = new MediaRouterCallback();
        mRoute = mRouter.getSelectedRoute();
        setMediaSession(mRouter.getMediaSessionToken());
        mVolumeGroupListPaddingTop = mContext.getResources().getDimensionPixelSize(
        mVolumeGroupListPaddingTop = ApiHelper.getLibResources().getDimensionPixelSize(
                R.dimen.mr_controller_volume_group_list_padding_top);
        mAccessibilityManager =
                (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
                    R.interpolator.mr_linear_out_slow_in);
            mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(context,
                    R.interpolator.mr_fast_out_slow_in);
        }
        mLinearOutSlowInInterpolator = AnimationUtils.loadInterpolator(
                mContext, android.R.interpolator.linear_out_slow_in);
        mFastOutSlowInInterpolator = AnimationUtils.loadInterpolator(
                mContext, android.R.interpolator.fast_out_slow_in);
        mAccelerateDecelerateInterpolator = new AccelerateDecelerateInterpolator();
    }

@@ -332,7 +332,10 @@ public class MediaRouteControllerDialog extends AlertDialog {
        super.onCreate(savedInstanceState);

        getWindow().setBackgroundDrawableResource(android.R.color.transparent);
        setContentView(R.layout.mr_controller_material_dialog_b);

        setContentView(ApiHelper.inflateLibLayout(mContext,
                ApiHelper.getLibTheme(MediaRouterThemeHelper.getRouterThemeId(mContext)),
                R.layout.mr_controller_material_dialog_b));

        // Remove the neutral button.
        findViewById(BUTTON_NEUTRAL_RES_ID).setVisibility(View.GONE);
@@ -355,12 +358,14 @@ public class MediaRouteControllerDialog extends AlertDialog {
        });
        int color = MediaRouterThemeHelper.getButtonTextColor(mContext);
        mDisconnectButton = findViewById(BUTTON_DISCONNECT_RES_ID);
        mDisconnectButton.setText(R.string.mr_controller_disconnect);
        mDisconnectButton.setText(
                ApiHelper.getLibResources().getString(R.string.mr_controller_disconnect));
        mDisconnectButton.setTextColor(color);
        mDisconnectButton.setOnClickListener(listener);

        mStopCastingButton = findViewById(BUTTON_STOP_RES_ID);
        mStopCastingButton.setText(R.string.mr_controller_stop_casting);
        mStopCastingButton.setText(
                ApiHelper.getLibResources().getString(R.string.mr_controller_stop_casting));
        mStopCastingButton.setTextColor(color);
        mStopCastingButton.setOnClickListener(listener);

@@ -435,11 +440,11 @@ public class MediaRouteControllerDialog extends AlertDialog {
            }
        });
        loadInterpolator();
        mGroupListAnimationDurationMs = mContext.getResources().getInteger(
        mGroupListAnimationDurationMs = ApiHelper.getLibResources().getInteger(
                R.integer.mr_controller_volume_group_list_animation_duration_ms);
        mGroupListFadeInDurationMs = mContext.getResources().getInteger(
        mGroupListFadeInDurationMs = ApiHelper.getLibResources().getInteger(
                R.integer.mr_controller_volume_group_list_fade_in_duration_ms);
        mGroupListFadeOutDurationMs = mContext.getResources().getInteger(
        mGroupListFadeOutDurationMs = ApiHelper.getLibResources().getInteger(
                R.integer.mr_controller_volume_group_list_fade_out_duration_ms);

        mCustomControlView = onCreateMediaControlView(savedInstanceState);
@@ -461,7 +466,7 @@ public class MediaRouteControllerDialog extends AlertDialog {
        View decorView = getWindow().getDecorView();
        mDialogContentWidth = width - decorView.getPaddingLeft() - decorView.getPaddingRight();

        Resources res = mContext.getResources();
        Resources res = ApiHelper.getLibResources();
        mVolumeGroupListItemIconSize = res.getDimensionPixelSize(
                R.dimen.mr_controller_volume_group_list_item_icon_size);
        mVolumeGroupListItemHeight = res.getDimensionPixelSize(
@@ -726,12 +731,8 @@ public class MediaRouteControllerDialog extends AlertDialog {
    }

    void loadInterpolator() {
        if (android.os.Build.VERSION.SDK_INT >= 21) {
            mInterpolator = mIsGroupExpanded ? mLinearOutSlowInInterpolator
                    : mFastOutSlowInInterpolator;
        } else {
            mInterpolator = mAccelerateDecelerateInterpolator;
        }
        mInterpolator =
                mIsGroupExpanded ? mLinearOutSlowInInterpolator : mFastOutSlowInInterpolator;
    }

    private void updateVolumeControlLayout() {
@@ -990,14 +991,17 @@ public class MediaRouteControllerDialog extends AlertDialog {
            if (mRoute.getPresentationDisplayId()
                    != MediaRouter.RouteInfo.PRESENTATION_DISPLAY_ID_NONE) {
                // The user is currently casting screen.
                mTitleView.setText(R.string.mr_controller_casting_screen);
                mTitleView.setText(ApiHelper.getLibResources().getString(
                        R.string.mr_controller_casting_screen));
                showTitle = true;
            } else if (mState == null || mState.getState() == PlaybackStateCompat.STATE_NONE) {
                // Show "No media selected" as we don't yet know the playback state.
                mTitleView.setText(R.string.mr_controller_no_media_selected);
                mTitleView.setText(ApiHelper.getLibResources().getString(
                        R.string.mr_controller_no_media_selected));
                showTitle = true;
            } else if (!hasTitle && !hasSubtitle) {
                mTitleView.setText(R.string.mr_controller_no_info_available);
                mTitleView.setText(ApiHelper.getLibResources().getString(
                        R.string.mr_controller_no_info_available));
                showTitle = true;
            } else {
                if (hasTitle) {
@@ -1219,7 +1223,7 @@ public class MediaRouteControllerDialog extends AlertDialog {
                                AccessibilityEventCompat.TYPE_ANNOUNCEMENT);
                        event.setPackageName(mContext.getPackageName());
                        event.setClassName(getClass().getName());
                        event.getText().add(mContext.getString(actionDescResId));
                        event.getText().add(ApiHelper.getLibResources().getString(actionDescResId));
                        mAccessibilityManager.sendAccessibilityEvent(event);
                    }
                }
+10 −7
Original line number Diff line number Diff line
@@ -26,12 +26,13 @@ import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageButton;

import com.android.media.update.ApiHelper;
import com.android.media.update.R;

/**
 * Chevron/Caret button to expand/collapse group volume list with animation.
 */
class MediaRouteExpandCollapseButton extends ImageButton {
public class MediaRouteExpandCollapseButton extends ImageButton {
    final AnimationDrawable mExpandAnimationDrawable;
    final AnimationDrawable mCollapseAnimationDrawable;
    final String mExpandGroupDescription;
@@ -49,10 +50,10 @@ class MediaRouteExpandCollapseButton extends ImageButton {

    public MediaRouteExpandCollapseButton(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mExpandAnimationDrawable = (AnimationDrawable) ContextCompat.getDrawable(
                context, R.drawable.mr_group_expand);
        mCollapseAnimationDrawable = (AnimationDrawable) ContextCompat.getDrawable(
                context, R.drawable.mr_group_collapse);
        mExpandAnimationDrawable = (AnimationDrawable)
                ApiHelper.getLibResources().getDrawable(R.drawable.mr_group_expand);
        mCollapseAnimationDrawable = (AnimationDrawable)
                ApiHelper.getLibResources().getDrawable(R.drawable.mr_group_collapse);

        ColorFilter filter = new PorterDuffColorFilter(
                MediaRouterThemeHelper.getControllerColor(context, defStyleAttr),
@@ -60,8 +61,10 @@ class MediaRouteExpandCollapseButton extends ImageButton {
        mExpandAnimationDrawable.setColorFilter(filter);
        mCollapseAnimationDrawable.setColorFilter(filter);

        mExpandGroupDescription = context.getString(R.string.mr_controller_expand_group);
        mCollapseGroupDescription = context.getString(R.string.mr_controller_collapse_group);
        mExpandGroupDescription =
                ApiHelper.getLibResources().getString(R.string.mr_controller_expand_group);
        mCollapseGroupDescription =
                ApiHelper.getLibResources().getString(R.string.mr_controller_collapse_group);

        setImageDrawable(mExpandAnimationDrawable.getFrame(0));
        setContentDescription(mExpandGroupDescription);
Loading