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

Commit 885726b6 authored by shaoweishen's avatar shaoweishen Committed by Shaowei Shen
Browse files

[Output Switcher] Apply Dynamic group edit logic

please check bug for screenshots.
the remaining bugs for switchuing between cast devices/other devices
will be handled in different changes.

Test: Verified on device
Bug: 203073091
Change-Id: I30a1b1d9f8fa1e85f4b684801e3a12c6a8a3870d
parent 3cb6aecc
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
<!--
  ~ Copyright (C) 2021 The Android Open Source Project
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/checked"
        android:state_checked="true"
        android:drawable="@drawable/media_output_status_check" />
    <item
        android:id="@+id/unchecked"
        android:state_checked="false"
        android:drawable="@drawable/ic_circular_unchecked" />
</selector>
+9 −0
Original line number Diff line number Diff line
<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportWidth="24"
    android:viewportHeight="24">
  <path
      android:fillColor="@color/media_dialog_inactive_item_main_content"
      android:pathData="M12,22q-2.075,0 -3.9,-0.788 -1.825,-0.787 -3.175,-2.137 -1.35,-1.35 -2.137,-3.175Q2,14.075 2,12t0.788,-3.9q0.787,-1.825 2.137,-3.175 1.35,-1.35 3.175,-2.137Q9.925,2 12,2t3.9,0.788q1.825,0.787 3.175,2.137 1.35,1.35 2.137,3.175Q22,9.925 22,12t-0.788,3.9q-0.787,1.825 -2.137,3.175 -1.35,1.35 -3.175,2.137Q14.075,22 12,22zM12,12zM12,20q3.325,0 5.663,-2.337Q20,15.325 20,12t-2.337,-5.662Q15.325,4 12,4T6.338,6.338Q4,8.675 4,12q0,3.325 2.338,5.663Q8.675,20 12,20z"/>
</vector>
+10 −20
Original line number Diff line number Diff line
@@ -96,26 +96,6 @@
                android:textSize="14sp"
                android:fontFamily="@*android:string/config_bodyFontFamily"
                android:visibility="gone"/>
            <ImageView
                android:id="@+id/add_icon"
                android:layout_width="24dp"
                android:layout_height="24dp"
                android:layout_gravity="right"
                android:layout_marginEnd="16dp"
                android:layout_alignParentRight="true"
                android:src="@drawable/ic_add"
                android:tint="?android:attr/colorAccent"
            />
            <CheckBox
                android:id="@+id/check_box"
                android:layout_width="24dp"
                android:layout_height="24dp"
                android:layout_gravity="right"
                android:layout_marginEnd="16dp"
                android:layout_alignParentRight="true"
                android:button="@drawable/ic_check_box"
                android:visibility="gone"
            />
        </RelativeLayout>

        <ProgressBar
@@ -139,5 +119,15 @@
            android:indeterminateOnly="true"
            android:importantForAccessibility="no"
            android:visibility="gone"/>

        <CheckBox
            android:id="@+id/check_box"
            android:layout_width="24dp"
            android:layout_height="24dp"
            android:layout_marginEnd="16dp"
            android:layout_gravity="right|center"
            android:button="@drawable/ic_circle_check_box"
            android:visibility="gone"
        />
    </FrameLayout>
</LinearLayout>
 No newline at end of file
+40 −50
Original line number Diff line number Diff line
@@ -66,18 +66,6 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
        if (position == size && mController.isZeroMode()) {
            viewHolder.onBind(CUSTOMIZED_ITEM_PAIR_NEW, false /* topMargin */,
                    true /* bottomMargin */);
        } else if (mIncludeDynamicGroup) {
            if (position == 0) {
                viewHolder.onBind(CUSTOMIZED_ITEM_DYNAMIC_GROUP, true /* topMargin */,
                        false /* bottomMargin */);
            } else {
                // When group item is added at the first(position == 0), devices will be added from
                // the second item(position == 1). It means that the index of device list starts
                // from "position - 1".
                viewHolder.onBind(((List<MediaDevice>) (mController.getMediaDevices()))
                                .get(position - 1),
                        false /* topMargin */, position == size /* bottomMargin */, position);
            }
        } else if (position < size) {
            viewHolder.onBind(((List<MediaDevice>) (mController.getMediaDevices())).get(position),
                    position == 0 /* topMargin */, position == (size - 1) /* bottomMargin */,
@@ -89,11 +77,6 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {

    @Override
    public int getItemCount() {
        mIncludeDynamicGroup = mController.getSelectedMediaDevice().size() > 1;
        if (mController.isZeroMode() || mIncludeDynamicGroup) {
            // Add extra one for "pair new" or dynamic group
            return mController.getMediaDevices().size() + 1;
        }
        return mController.getMediaDevices().size();
    }

@@ -115,16 +98,6 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
            mStatusIcon.setVisibility(View.GONE);
            mTitleText.setTextColor(Utils.getColorStateListDefaultColor(mContext,
                    R.color.media_dialog_inactive_item_main_content));
            if (currentlyConnected && mController.isActiveRemoteDevice(device)
                    && mController.getSelectableMediaDevice().size() > 0) {
                // Init active device layout
                mAddIcon.setVisibility(View.VISIBLE);
                mAddIcon.setTransitionAlpha(1);
                mAddIcon.setOnClickListener(this::onEndItemClick);
            } else {
                // Init non-active device layout
                mAddIcon.setVisibility(View.GONE);
            }
            if (mCurrentActivePosition == position) {
                mCurrentActivePosition = -1;
            }
@@ -158,6 +131,19 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
                            true /* showSubtitle */, true /* showStatus */);
                    mSubTitleText.setText(R.string.media_output_dialog_connect_failed);
                    mContainerLayout.setOnClickListener(v -> onItemClick(v, device));
                } else if (mController.getSelectedMediaDevice().size() > 1
                        && isDeviceIncluded(mController.getSelectedMediaDevice(), device)) {
                    mTitleText.setTextColor(Utils.getColorStateListDefaultColor(mContext,
                            R.color.media_dialog_active_item_main_content));
                    setSingleLineLayout(getItemTitle(device), true /* bFocused */,
                            true /* showSeekBar */,
                            false /* showProgressBar */, false /* showStatus */);
                    mCheckBox.setVisibility(View.VISIBLE);
                    mCheckBox.setChecked(true);
                    mCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
                        onCheckBoxClicked(false, device);
                    });
                    initSessionSeekbar();
                } else if (!mController.hasAdjustVolumeUserRestriction() && currentlyConnected) {
                    mStatusIcon.setImageDrawable(
                            mContext.getDrawable(R.drawable.media_output_status_check));
@@ -168,6 +154,16 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
                            false /* showProgressBar */, true /* showStatus */);
                    initSeekbar(device);
                    mCurrentActivePosition = position;
                } else if (isDeviceIncluded(mController.getSelectableMediaDevice(), device)) {
                    mCheckBox.setVisibility(View.VISIBLE);
                    mCheckBox.setChecked(false);
                    mCheckBox.setOnCheckedChangeListener((buttonView, isChecked) -> {
                        onCheckBoxClicked(true, device);
                    });
                    setSingleLineLayout(getItemTitle(device), false /* bFocused */,
                            false /* showSeekBar */,
                            false /* showProgressBar */, false /* showStatus */);
                    mContainerLayout.setOnClickListener(v -> onItemClick(v, device));
                } else {
                    setSingleLineLayout(getItemTitle(device), false /* bFocused */);
                    mContainerLayout.setOnClickListener(v -> onItemClick(v, device));
@@ -181,7 +177,6 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
                mTitleText.setTextColor(Utils.getColorStateListDefaultColor(mContext,
                        R.color.media_dialog_inactive_item_main_content));
                mCheckBox.setVisibility(View.GONE);
                mAddIcon.setVisibility(View.GONE);
                setSingleLineLayout(mContext.getText(R.string.media_output_dialog_pairing_new),
                        false /* bFocused */);
                final Drawable d = mContext.getDrawable(R.drawable.ic_add);
@@ -189,28 +184,27 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
                        Utils.getColorAccentDefaultColor(mContext), PorterDuff.Mode.SRC_IN));
                mTitleIcon.setImageDrawable(d);
                mContainerLayout.setOnClickListener(v -> onItemClick(CUSTOMIZED_ITEM_PAIR_NEW));
            } else if (customizedItem == CUSTOMIZED_ITEM_DYNAMIC_GROUP) {
                mTitleText.setTextColor(Utils.getColorStateListDefaultColor(mContext,
                        R.color.media_dialog_active_item_main_content));
                mConnectedItem = mContainerLayout;
                mCheckBox.setVisibility(View.GONE);
                if (mController.getSelectableMediaDevice().size() > 0) {
                    mAddIcon.setVisibility(View.VISIBLE);
                    mAddIcon.setTransitionAlpha(1);
                    mAddIcon.setOnClickListener(this::onEndItemClick);
                } else {
                    mAddIcon.setVisibility(View.GONE);
                }
                mTitleIcon.setImageDrawable(getSpeakerDrawable());
                final CharSequence sessionName = mController.getSessionName();
                final CharSequence title = TextUtils.isEmpty(sessionName)
                        ? mContext.getString(R.string.media_output_dialog_group) : sessionName;
                setTwoLineLayout(title, true /* bFocused */, true /* showSeekBar */,
                        false /* showProgressBar */, false /* showSubtitle */);
                initSessionSeekbar();
            }
        }

        private void onCheckBoxClicked(boolean isChecked, MediaDevice device) {
            if (isChecked && isDeviceIncluded(mController.getSelectableMediaDevice(), device)) {
                mController.addDeviceToPlayMedia(device);
            } else if (!isChecked && isDeviceIncluded(mController.getDeselectableMediaDevice(),
                    device)) {
                mController.removeDeviceFromPlayMedia(device);
            }
        }

        private boolean isDeviceIncluded(List<MediaDevice> deviceList, MediaDevice targetDevice) {
            for (MediaDevice device : deviceList) {
                if (TextUtils.equals(device.getId(), targetDevice.getId())) {
                    return true;
                }
            }
            return false;
        }

        private void onItemClick(View view, MediaDevice device) {
            if (mController.isTransferring()) {
                return;
@@ -229,9 +223,5 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
                mController.launchBluetoothPairing();
            }
        }

        private void onEndItemClick(View view) {
            mController.launchMediaOutputGroupDialog(mMediaOutputDialog.getDialogView());
        }
    }
}
+0 −2
Original line number Diff line number Diff line
@@ -118,7 +118,6 @@ public abstract class MediaOutputBaseAdapter extends
        final TextView mTwoLineTitleText;
        final TextView mSubTitleText;
        final ImageView mTitleIcon;
        final ImageView mAddIcon;
        final ProgressBar mProgressBar;
        final SeekBar mSeekBar;
        final RelativeLayout mTwoLineLayout;
@@ -137,7 +136,6 @@ public abstract class MediaOutputBaseAdapter extends
            mTitleIcon = view.requireViewById(R.id.title_icon);
            mProgressBar = view.requireViewById(R.id.volume_indeterminate_progress);
            mSeekBar = view.requireViewById(R.id.volume_seekbar);
            mAddIcon = view.requireViewById(R.id.add_icon);
            mStatusIcon = view.requireViewById(R.id.media_output_item_status);
            mCheckBox = view.requireViewById(R.id.check_box);
        }
Loading