diff options
| author | 2023-06-06 08:53:51 +0000 | |
|---|---|---|
| committer | 2023-06-12 08:51:34 +0000 | |
| commit | cbe01fdac956704bcac02d80197b8e512be4ed94 (patch) | |
| tree | 692de4f901d7ff997fb7cf76e28878bb0a901d2b | |
| parent | 7e387fc706c3c21b7ac318bec08f4345884fe7f5 (diff) | |
[Output Switcher] Support ongoing session for active device
Support layout for active device with ongoing session and no subtext
string.
Test: atest MediaOutputAdapterTest
Bug: 286325439
Change-Id: I80f6dacebf0d2b89a2f54f063841f2e638d93db1
4 files changed, 73 insertions, 7 deletions
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 a595566ef817..7105721aff70 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 88ffa8da666b..318cd99a06ed 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 01f790422bc3..b88eba9081f7 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 6d8c9b106881..7df54d44e69e 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 @@ -280,6 +280,50 @@ public class MediaOutputAdapterTest extends SysuiTestCase { } @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); when(mMediaOutputController.isCurrentConnectedDeviceRemote()).thenReturn(false); |