diff --git a/packages/SystemUI/res/layout/media_output_list_item_advanced.xml b/packages/SystemUI/res/layout/media_output_list_item_advanced.xml index a595566ef8178..7105721aff706 100644 --- a/packages/SystemUI/res/layout/media_output_list_item_advanced.xml +++ b/packages/SystemUI/res/layout/media_output_list_item_advanced.xml @@ -110,7 +110,9 @@ android:id="@+id/subtitle" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:ellipsize="end" + android:marqueeRepeatLimit="marquee_forever" + android:ellipsize="marquee" + android:singleLine="true" android:maxLines="1" android:textColor="@color/media_dialog_item_main_content" android:textSize="14sp" diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java index 88ffa8da666b9..318cd99a06ed6 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java @@ -24,7 +24,6 @@ import android.content.Context; import android.content.res.ColorStateList; import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; -import android.os.Build; import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -175,9 +174,8 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { mCurrentActivePosition = position; updateFullItemClickListener(v -> onItemClick(v, device)); setSingleLineLayout(getItemTitle(device)); - initMutingExpectedDevice(); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU - && device.hasSubtext()) { + initFakeActiveDevice(); + } else if (device.hasSubtext()) { boolean isActiveWithOngoingSession = (device.hasOngoingSession() && (currentlyConnected || isDeviceIncluded( mController.getSelectedMediaDevice(), device))); @@ -267,6 +265,27 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { setUpDeviceIcon(device); updateFullItemClickListener(v -> cancelMuteAwaitConnection()); setSingleLineLayout(getItemTitle(device)); + } else if (device.hasOngoingSession()) { + mCurrentActivePosition = position; + if (device.isHostForOngoingSession()) { + updateTitleIcon(R.drawable.media_output_icon_volume, + mController.getColorItemContent()); + updateEndClickAreaAsSessionEditing(device); + mEndClickIcon.setVisibility(View.VISIBLE); + setSingleLineLayout(getItemTitle(device), true /* showSeekBar */, + false /* showProgressBar */, false /* showCheckBox */, + true /* showEndTouchArea */); + initSeekbar(device, isCurrentSeekbarInvisible); + } else { + updateDeviceStatusIcon(mContext.getDrawable( + R.drawable.ic_sound_bars_anim)); + mStatusIcon.setVisibility(View.VISIBLE); + updateSingleLineLayoutContentAlpha( + updateClickActionBasedOnSelectionBehavior(device) + ? DEVICE_CONNECTED_ALPHA : DEVICE_DISCONNECTED_ALPHA); + setSingleLineLayout(getItemTitle(device)); + initFakeActiveDevice(); + } } else if (mController.isCurrentConnectedDeviceRemote() && !mController.getSelectableMediaDevice().isEmpty()) { //If device is connected and there's other selectable devices, layout as @@ -351,7 +370,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { ColorStateList.valueOf(mController.getColorItemContent())); mEndClickIcon.setOnClickListener( v -> mController.tryToLaunchInAppRoutingIntent(device.getId(), v)); - mEndTouchArea.setOnClickListener(v -> mCheckBox.performClick()); + mEndTouchArea.setOnClickListener(v -> mEndClickIcon.performClick()); } public void updateEndClickAreaColor(int color) { diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java index 01f790422bc39..b88eba9081f72 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java @@ -188,6 +188,7 @@ public abstract class MediaOutputBaseAdapter extends mContainerLayout.setContentDescription(null); mTitleText.setTextColor(mController.getColorItemContent()); mSubTitleText.setTextColor(mController.getColorItemContent()); + mSubTitleText.setSelected(true); mTwoLineTitleText.setTextColor(mController.getColorItemContent()); mVolumeValueText.setTextColor(mController.getColorItemContent()); mSeekBar.setProgressTintList( @@ -417,7 +418,7 @@ public abstract class MediaOutputBaseAdapter extends mIconAreaLayout.setOnClickListener(listener); } - void initMutingExpectedDevice() { + void initFakeActiveDevice() { disableSeekBar(); updateTitleIcon(R.drawable.media_output_icon_volume, mController.getColorItemContent()); diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java index 6d8c9b1068818..7df54d44e69e5 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java @@ -279,6 +279,50 @@ public class MediaOutputAdapterTest extends SysuiTestCase { assertThat(mViewHolder.mEndTouchArea.getVisibility()).isEqualTo(View.GONE); } + @Test + public void onBindViewHolder_bindConnectedRemoteDeviceWithOnGoingSession_verifyView() { + when(mMediaDevice1.hasOngoingSession()).thenReturn(true); + when(mMediaOutputController.getSelectableMediaDevice()).thenReturn( + ImmutableList.of()); + when(mMediaOutputController.isCurrentConnectedDeviceRemote()).thenReturn(true); + mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter + .onCreateViewHolder(new LinearLayout(mContext), 0); + mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0); + + assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mViewHolder.mTitleText.getText().toString()).isEqualTo(TEST_DEVICE_NAME_1); + assertThat(mViewHolder.mStatusIcon.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mTwoLineLayout.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mEndTouchArea.getVisibility()).isEqualTo(View.GONE); + } + + @Test + public void onBindViewHolder_bindConnectedRemoteDeviceWithHostOnGoingSession_verifyView() { + when(mMediaDevice1.hasOngoingSession()).thenReturn(true); + when(mMediaDevice1.isHostForOngoingSession()).thenReturn(true); + when(mMediaOutputController.getSelectableMediaDevice()).thenReturn( + ImmutableList.of()); + when(mMediaOutputController.isCurrentConnectedDeviceRemote()).thenReturn(true); + mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter + .onCreateViewHolder(new LinearLayout(mContext), 0); + mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0); + + assertThat(mViewHolder.mTitleText.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mViewHolder.mTitleText.getText().toString()).isEqualTo(TEST_DEVICE_NAME_1); + assertThat(mViewHolder.mStatusIcon.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mEndClickIcon.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mViewHolder.mSubTitleText.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mProgressBar.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mTwoLineLayout.getVisibility()).isEqualTo(View.GONE); + assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE); + assertThat(mViewHolder.mEndTouchArea.getVisibility()).isEqualTo(View.VISIBLE); + } + @Test public void onBindViewHolder_bindConnectedDeviceWithMutingExpectedDeviceExist_verifyView() { when(mMediaOutputController.hasMutingExpectedDevice()).thenReturn(true);