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

Commit abefd806 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add "Stop" button for remote device"

parents 5cdbfe4c 970be3d6
Loading
Loading
Loading
Loading
+1 −23
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@
            android:id="@+id/header_icon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingEnd="16dp"/>
            android:paddingEnd="@dimen/media_output_dialog_header_icon_padding"/>

        <LinearLayout
            android:layout_width="match_parent"
@@ -70,36 +70,14 @@
        android:id="@+id/device_list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="start|center_vertical"
        android:orientation="vertical">

        <View
            android:layout_width="match_parent"
            android:layout_height="12dp"/>

        <include
            layout="@layout/media_output_list_item"
            android:id="@+id/group_item_controller"
            android:visibility="gone"/>

        <View
            android:id="@+id/group_item_divider"
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="?android:attr/listDivider"
            android:visibility="gone"/>

        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/list_result"
            android:scrollbars="vertical"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:overScrollMode="never"/>

        <View
            android:id="@+id/list_bottom_padding"
            android:layout_width="match_parent"
            android:layout_height="12dp"/>
    </LinearLayout>

    <View
+2 −1
Original line number Diff line number Diff line
@@ -1368,9 +1368,10 @@
    <dimen name="config_rounded_mask_size_bottom">@*android:dimen/rounded_corner_radius_bottom</dimen>

    <!-- Output switcher panel related dimensions -->
    <dimen name="media_output_dialog_padding_top">11dp</dimen>
    <dimen name="media_output_dialog_list_margin">12dp</dimen>
    <dimen name="media_output_dialog_list_max_height">364dp</dimen>
    <dimen name="media_output_dialog_header_album_icon_size">52dp</dimen>
    <dimen name="media_output_dialog_header_back_icon_size">36dp</dimen>
    <dimen name="media_output_dialog_header_icon_padding">16dp</dimen>
    <dimen name="media_output_dialog_icon_corner_radius">16dp</dimen>
</resources>
+28 −27
Original line number Diff line number Diff line
@@ -42,7 +42,7 @@ import java.util.List;
public class MediaOutputAdapter extends MediaOutputBaseAdapter {

    private static final String TAG = "MediaOutputAdapter";
    private static final int PAIR_NEW = 1;
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    public MediaOutputAdapter(MediaOutputController controller) {
        super(controller);
@@ -58,11 +58,14 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {

    @Override
    public void onBindViewHolder(@NonNull MediaDeviceBaseViewHolder viewHolder, int position) {
        if (mController.isZeroMode() && position == (mController.getMediaDevices().size())) {
            viewHolder.onBind(PAIR_NEW);
        } else if (position < (mController.getMediaDevices().size())) {
            viewHolder.onBind(((List<MediaDevice>) (mController.getMediaDevices())).get(position));
        } else {
        final int size = mController.getMediaDevices().size();
        if (mController.isZeroMode() && position == size) {
            viewHolder.onBind(CUSTOMIZED_ITEM_PAIR_NEW, false /* topMargin */,
                    true /* bottomMargin */);
        } else if (position < size) {
            viewHolder.onBind(((List<MediaDevice>) (mController.getMediaDevices())).get(position),
                    position == 0 /* topMargin */, position == (size - 1) /* bottomMargin */);
        } else if (DEBUG) {
            Log.d(TAG, "Incorrect position: " + position);
        }
    }
@@ -83,7 +86,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
    }

    void onItemClick(int customizedItem) {
        if (customizedItem == PAIR_NEW) {
        if (customizedItem == CUSTOMIZED_ITEM_PAIR_NEW) {
            mController.launchBluetoothPairing();
        }
    }
@@ -112,51 +115,49 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
        }

        @Override
        void onBind(MediaDevice device) {
            super.onBind(device);
        void onBind(MediaDevice device, boolean topMargin, boolean bottomMargin) {
            super.onBind(device, topMargin, bottomMargin);
            if (mController.isTransferring()) {
                if (device.getState() == MediaDeviceState.STATE_CONNECTING
                        && !mController.hasAdjustVolumeUserRestriction()) {
                    setTwoLineLayout(device, true);
                    mProgressBar.setVisibility(View.VISIBLE);
                    mSeekBar.setVisibility(View.GONE);
                    mSubTitleText.setVisibility(View.GONE);
                    setTwoLineLayout(device, null /* title */, true /* bFocused */,
                            false /* showSeekBar*/, true /* showProgressBar */,
                            false /* showSubtitle */);
                } else {
                    setSingleLineLayout(getItemTitle(device), false);
                    setSingleLineLayout(getItemTitle(device), false /* bFocused */);
                }
            } else {
                // Set different layout for each device
                if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) {
                    setTwoLineLayout(device, false);
                    mSubTitleText.setVisibility(View.VISIBLE);
                    mSeekBar.setVisibility(View.GONE);
                    mProgressBar.setVisibility(View.GONE);
                    setTwoLineLayout(device, null /* title */, false /* bFocused */,
                            false /* showSeekBar*/, false /* showProgressBar */,
                            true /* showSubtitle */);
                    mSubTitleText.setText(R.string.media_output_dialog_connect_failed);
                    mFrameLayout.setOnClickListener(v -> onItemClick(device));
                } else if (!mController.hasAdjustVolumeUserRestriction()
                        && isCurrentConnected(device)) {
                    setTwoLineLayout(device, true);
                    mSeekBar.setVisibility(View.VISIBLE);
                    mProgressBar.setVisibility(View.GONE);
                    mSubTitleText.setVisibility(View.GONE);
                    setTwoLineLayout(device, null /* title */, true /* bFocused */,
                            true /* showSeekBar*/, false /* showProgressBar */,
                            false /* showSubtitle */);
                    initSeekbar(device);
                } else {
                    setSingleLineLayout(getItemTitle(device), false);
                    setSingleLineLayout(getItemTitle(device), false /* bFocused */);
                    mFrameLayout.setOnClickListener(v -> onItemClick(device));
                }
            }
        }

        @Override
        void onBind(int customizedItem) {
            if (customizedItem == PAIR_NEW) {
        void onBind(int customizedItem, boolean topMargin, boolean bottomMargin) {
            super.onBind(customizedItem, topMargin, bottomMargin);
            if (customizedItem == CUSTOMIZED_ITEM_PAIR_NEW) {
                setSingleLineLayout(mContext.getText(R.string.media_output_dialog_pairing_new),
                        false);
                        false /* bFocused */);
                final Drawable d = mContext.getDrawable(R.drawable.ic_add);
                d.setColorFilter(new PorterDuffColorFilter(
                        Utils.getColorAccentDefaultColor(mContext), PorterDuff.Mode.SRC_IN));
                mTitleIcon.setImageDrawable(d);
                mFrameLayout.setOnClickListener(v -> onItemClick(PAIR_NEW));
                mFrameLayout.setOnClickListener(v -> onItemClick(CUSTOMIZED_ITEM_PAIR_NEW));
            }
        }
    }
+32 −4
Original line number Diff line number Diff line
@@ -44,9 +44,12 @@ public abstract class MediaOutputBaseAdapter extends
    private static final String FONT_SELECTED_TITLE = "sans-serif-medium";
    private static final String FONT_TITLE = "sans-serif";

    static final int CUSTOMIZED_ITEM_PAIR_NEW = 1;

    final MediaOutputController mController;

    private boolean mIsDragging;
    private int mMargin;

    Context mContext;
    View mHolderView;
@@ -60,6 +63,8 @@ public abstract class MediaOutputBaseAdapter extends
    public MediaDeviceBaseViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup,
            int viewType) {
        mContext = viewGroup.getContext();
        mMargin = mContext.getResources().getDimensionPixelSize(
                R.dimen.media_output_dialog_list_margin);
        mHolderView = LayoutInflater.from(mContext).inflate(R.layout.media_output_list_item,
                viewGroup, false);

@@ -106,12 +111,26 @@ public abstract class MediaOutputBaseAdapter extends
            mSeekBar = view.requireViewById(R.id.volume_seekbar);
        }

        void onBind(MediaDevice device) {
        void onBind(MediaDevice device, boolean topMargin, boolean bottomMargin) {
            mTitleIcon.setImageIcon(mController.getDeviceIconCompat(device).toIcon(mContext));
            setMargin(topMargin, bottomMargin);
        }

        void onBind(int customizedItem) { }
        void onBind(int customizedItem, boolean topMargin, boolean bottomMargin) {
            setMargin(topMargin, bottomMargin);
        }

        private void setMargin(boolean topMargin, boolean bottomMargin) {
            ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mFrameLayout
                    .getLayoutParams();
            if (topMargin) {
                params.topMargin = mMargin;
            }
            if (bottomMargin) {
                params.bottomMargin = mMargin;
            }
            mFrameLayout.setLayoutParams(params);
        }
        void setSingleLineLayout(CharSequence title, boolean bFocused) {
            mTitleText.setVisibility(View.VISIBLE);
            mTwoLineLayout.setVisibility(View.GONE);
@@ -123,10 +142,19 @@ public abstract class MediaOutputBaseAdapter extends
            }
        }

        void setTwoLineLayout(MediaDevice device, boolean bFocused) {
        void setTwoLineLayout(MediaDevice device, CharSequence title, boolean bFocused,
                boolean showSeekBar, boolean showProgressBar, boolean showSubtitle) {
            mTitleText.setVisibility(View.GONE);
            mTwoLineLayout.setVisibility(View.VISIBLE);
            mSeekBar.setVisibility(showSeekBar ? View.VISIBLE : View.GONE);
            mProgressBar.setVisibility(showProgressBar ? View.VISIBLE : View.GONE);
            mSubTitleText.setVisibility(showSubtitle ? View.VISIBLE : View.GONE);
            if (device == null) {
                mTwoLineTitleText.setText(title);
            } else {
                mTwoLineTitleText.setText(getItemTitle(device));
            }

            if (bFocused) {
                mTwoLineTitleText.setTypeface(Typeface.create(FONT_SELECTED_TITLE,
                        Typeface.NORMAL));
+7 −14
Original line number Diff line number Diff line
@@ -33,7 +33,6 @@ import android.view.Window;
import android.view.WindowInsets;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -69,12 +68,9 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
    private LinearLayout mDeviceListLayout;
    private Button mDoneButton;
    private Button mStopButton;
    private View mListBottomPadding;
    private int mListMaxHeight;

    MediaOutputBaseAdapter mAdapter;
    FrameLayout mGroupItemController;
    View mGroupDivider;

    private final ViewTreeObserver.OnGlobalLayoutListener mDeviceListLayoutListener = () -> {
        // Set max height for list
@@ -114,12 +110,9 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
        mHeaderSubtitle = mDialogView.requireViewById(R.id.header_subtitle);
        mHeaderIcon = mDialogView.requireViewById(R.id.header_icon);
        mDevicesRecyclerView = mDialogView.requireViewById(R.id.list_result);
        mGroupItemController = mDialogView.requireViewById(R.id.group_item_controller);
        mGroupDivider = mDialogView.requireViewById(R.id.group_item_divider);
        mDeviceListLayout = mDialogView.requireViewById(R.id.device_list);
        mDoneButton = mDialogView.requireViewById(R.id.done);
        mStopButton = mDialogView.requireViewById(R.id.stop);
        mListBottomPadding = mDialogView.requireViewById(R.id.list_bottom_padding);

        mDeviceListLayout.getViewTreeObserver().addOnGlobalLayoutListener(
                mDeviceListLayoutListener);
@@ -162,7 +155,9 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
        }
        if (mHeaderIcon.getVisibility() == View.VISIBLE) {
            final int size = getHeaderIconSize();
            mHeaderIcon.setLayoutParams(new LinearLayout.LayoutParams(size, size));
            final int padding = mContext.getResources().getDimensionPixelSize(
                    R.dimen.media_output_dialog_header_icon_padding);
            mHeaderIcon.setLayoutParams(new LinearLayout.LayoutParams(size + padding, size));
        }
        // Update title and subtitle
        mHeaderTitle.setText(getHeaderText());
@@ -178,12 +173,8 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements
        if (!mAdapter.isDragging()) {
            mAdapter.notifyDataSetChanged();
        }
        // Add extra padding when device amount is less than 6
        if (mMediaOutputController.getMediaDevices().size() < 6) {
            mListBottomPadding.setVisibility(View.VISIBLE);
        } else {
            mListBottomPadding.setVisibility(View.GONE);
        }
        // Show when remote media session is available
        mStopButton.setVisibility(getStopButtonVisibility());
    }

    abstract int getHeaderIconRes();
@@ -196,6 +187,8 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog implements

    abstract CharSequence getHeaderSubtitle();

    abstract int getStopButtonVisibility();

    @Override
    public void onMediaChanged() {
        mMainThreadHandler.post(() -> refresh());
Loading