diff options
6 files changed, 61 insertions, 68 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java index 13276608c03d..69e41a36f48f 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java @@ -618,6 +618,7 @@ public abstract class InfoMediaManager { return getActiveRoutingSession().getVolume(); } + @Nullable CharSequence getSessionName() { return getActiveRoutingSession().getName(); } diff --git a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java index 76f366d3d1b6..ed58c96b33c7 100644 --- a/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java @@ -444,6 +444,7 @@ public class LocalMediaManager implements BluetoothCallback { * * @return current name of the session, and return {@code null} if not found. */ + @Nullable public CharSequence getSessionName() { return mInfoMediaManager.getSessionName(); } diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java index 71cc369e4327..8e8867b80dc2 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java @@ -107,6 +107,9 @@ public class MediaOutputAdapterTest extends SysuiTestCase { when(mMediaSwitchingController.getDeviceIconCompat(mMediaDevice2)).thenReturn(mIconCompat); when(mMediaSwitchingController.getCurrentConnectedMediaDevice()).thenReturn(mMediaDevice1); when(mMediaSwitchingController.isActiveRemoteDevice(mMediaDevice1)).thenReturn(true); + when(mMediaSwitchingController.getSessionVolumeMax()).thenReturn(TEST_MAX_VOLUME); + when(mMediaSwitchingController.getSessionVolume()).thenReturn(TEST_CURRENT_VOLUME); + when(mMediaSwitchingController.getSessionName()).thenReturn(TEST_SESSION_NAME); when(mIconCompat.toIcon(mContext)).thenReturn(mIcon); when(mMediaDevice1.getName()).thenReturn(TEST_DEVICE_NAME_1); when(mMediaDevice1.getId()).thenReturn(TEST_DEVICE_ID_1); @@ -163,6 +166,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { mContext.getText(R.string.media_output_dialog_pairing_new).toString()); } + @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_SESSION_GROUPING) @Test public void onBindViewHolder_bindGroup_withSessionName_verifyView() { when(mMediaSwitchingController.getSelectedMediaDevice()) @@ -184,6 +188,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { assertThat(mViewHolder.mCheckBox.getVisibility()).isEqualTo(View.VISIBLE); } + @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_SESSION_GROUPING) @Test public void onBindViewHolder_bindGroup_noSessionName_verifyView() { when(mMediaSwitchingController.getSelectedMediaDevice()) @@ -232,6 +237,7 @@ public class MediaOutputAdapterTest extends SysuiTestCase { assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.VISIBLE); } + @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_SESSION_GROUPING) @Test public void onBindViewHolder_bindConnectedRemoteDevice_verifyView() { when(mMediaSwitchingController.getSelectableMediaDevice()) @@ -812,26 +818,22 @@ public class MediaOutputAdapterTest extends SysuiTestCase { verify(mMediaSwitchingController).removeDeviceFromPlayMedia(mMediaDevice1); } + @DisableFlags(Flags.FLAG_ENABLE_OUTPUT_SWITCHER_SESSION_GROUPING) @Test - public void onItemClick_onGroupActionTriggered_verifySeekbarDisabled() { - when(mMediaSwitchingController.getSelectedMediaDevice()) - .thenReturn( - mMediaItems.stream() - .map((item) -> item.getMediaDevice().get()) - .collect(Collectors.toList())); - mMediaOutputAdapter = new MediaOutputAdapter(mMediaSwitchingController); - mMediaOutputAdapter.updateItems(); - mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter - .onCreateViewHolder(new LinearLayout(mContext), 0); - List<MediaDevice> selectableDevices = new ArrayList<>(); - selectableDevices.add(mMediaDevice1); - when(mMediaSwitchingController.getSelectableMediaDevice()).thenReturn(selectableDevices); + public void onBindViewHolder_hasVolumeAdjustmentRestriction_verifySeekbarDisabled() { + when(mMediaSwitchingController.getSelectedMediaDevice()).thenReturn( + List.of(mMediaDevice1, mMediaDevice2)); + when(mMediaSwitchingController.isCurrentConnectedDeviceRemote()).thenReturn(true); when(mMediaSwitchingController.hasAdjustVolumeUserRestriction()).thenReturn(true); - mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0); + mMediaOutputAdapter.updateItems(); - mViewHolder.mContainerLayout.performClick(); + // Connected and selected device + mMediaOutputAdapter.onBindViewHolder(mViewHolder, 0); + assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.GONE); - assertThat(mViewHolder.mSeekBar.isEnabled()).isFalse(); + // Selected device + mMediaOutputAdapter.onBindViewHolder(mViewHolder, 1); + assertThat(mViewHolder.mSeekBar.getVisibility()).isEqualTo(View.GONE); } @Test @@ -1037,10 +1039,6 @@ public class MediaOutputAdapterTest extends SysuiTestCase { } private void initializeSession() { - when(mMediaSwitchingController.getSessionVolumeMax()).thenReturn(TEST_MAX_VOLUME); - when(mMediaSwitchingController.getSessionVolume()).thenReturn(TEST_CURRENT_VOLUME); - when(mMediaSwitchingController.getSessionName()).thenReturn(TEST_SESSION_NAME); - List<MediaDevice> selectedDevices = new ArrayList<>(); selectedDevices.add(mMediaDevice1); selectedDevices.add(mMediaDevice2); 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 22d7eb4e2752..c9740811101b 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java @@ -188,7 +188,9 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { GroupStatus groupStatus = null; OngoingSessionStatus ongoingSessionStatus = null; ConnectionState connectionState = ConnectionState.DISCONNECTED; - boolean restrictVolumeAdjustment = false; + boolean restrictVolumeAdjustment = mController.hasAdjustVolumeUserRestriction(); + String subtitle = null; + Drawable deviceStatusIcon = null; boolean deviceDisabled = false; View.OnClickListener clickListener = null; @@ -196,11 +198,9 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { mCurrentActivePosition = -1; } mItemLayout.setVisibility(View.VISIBLE); - mStatusIcon.setVisibility(View.GONE); if (mController.isAnyDeviceTransferring()) { - if (device.getState() == MediaDeviceState.STATE_CONNECTING - && !mController.hasAdjustVolumeUserRestriction()) { + if (device.getState() == MediaDeviceState.STATE_CONNECTING) { connectionState = ConnectionState.CONNECTING; } } else { @@ -221,40 +221,27 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { isDeviceGroup = true; } } else if (device.hasSubtext()) { + subtitle = device.getSubtextString(); boolean isActiveWithOngoingSession = device.hasOngoingSession() && (currentlyConnected || isSelected); if (isActiveWithOngoingSession) { mCurrentActivePosition = position; - mSubTitleText.setText(device.getSubtextString()); ongoingSessionStatus = new OngoingSessionStatus( device.isHostForOngoingSession()); - setSubtextAndStatus(true /* showSubtitle */, false /* showStatus */); connectionState = ConnectionState.CONNECTED; } else { if (currentlyConnected) { mCurrentActivePosition = position; connectionState = ConnectionState.CONNECTED; } - mSubTitleText.setText(device.getSubtextString()); - Drawable deviceStatusIcon = - device.hasOngoingSession() ? mContext.getDrawable( - R.drawable.ic_sound_bars_anim) - : Api34Impl.getDeviceStatusIconBasedOnSelectionBehavior( - device, - mContext); - if (deviceStatusIcon != null) { - updateDeviceStatusIcon(deviceStatusIcon); - } clickListener = getClickListenerBasedOnSelectionBehavior(device); deviceDisabled = clickListener == null; - setSubtextAndStatus(true /* showSubtitle */, - deviceStatusIcon != null /* showStatus */); + deviceStatusIcon = getDeviceStatusIcon(device, device.hasOngoingSession()); } } else if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) { - updateConnectionFailedStatusIcon(); - mSubTitleText.setText(R.string.media_output_dialog_connect_failed); + deviceStatusIcon = mContext.getDrawable(R.drawable.media_output_status_failed); + subtitle = mContext.getString(R.string.media_output_dialog_connect_failed); clickListener = v -> onItemClick(v, device); - setSubtextAndStatus(true /* showSubtitle */, true /* showStatus */); } else if (device.getState() == MediaDeviceState.STATE_GROUPING) { connectionState = ConnectionState.CONNECTING; } else if (mController.getSelectedMediaDevice().size() > 1 && isSelected) { @@ -263,8 +250,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { true /* selected */, isDeselectable /* deselectable */); connectionState = ConnectionState.CONNECTED; - } else if (!mController.hasAdjustVolumeUserRestriction() - && currentlyConnected) { + } else if (currentlyConnected) { // single selected device if (isMutingExpectedDeviceExist && !mController.isCurrentConnectedDeviceRemote()) { @@ -297,23 +283,15 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { } deviceDisabled = clickListener == null; } else { - Drawable deviceStatusIcon = - device.hasOngoingSession() ? mContext.getDrawable( - R.drawable.ic_sound_bars_anim) - : Api34Impl.getDeviceStatusIconBasedOnSelectionBehavior( - device, - mContext); - if (deviceStatusIcon != null) { - updateDeviceStatusIcon(deviceStatusIcon); - mStatusIcon.setVisibility(View.VISIBLE); - } + deviceStatusIcon = getDeviceStatusIcon(device, device.hasOngoingSession()); clickListener = getClickListenerBasedOnSelectionBehavior(device); deviceDisabled = clickListener == null; } } if (isDeviceGroup) { - String sessionName = mController.getSessionName().toString(); + String sessionName = mController.getSessionName() == null ? "" + : mController.getSessionName().toString(); updateTitle(sessionName); updateUnmutedVolumeIcon(null /* device */); updateGroupSeekBar(getGroupItemContentDescription(sessionName)); @@ -328,6 +306,8 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { updateLoadingIndicator(connectionState); updateFullItemClickListener(clickListener); updateContentAlpha(deviceDisabled); + updateSubtitle(subtitle); + updateDeviceStatusIcon(deviceStatusIcon); updateItemBackground(connectionState); } } @@ -428,19 +408,26 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { device, mController, v -> onItemClick(v, device)); } - private void updateConnectionFailedStatusIcon() { - mStatusIcon.setImageDrawable( - mContext.getDrawable(R.drawable.media_output_status_failed)); - mStatusIcon.setImageTintList( - ColorStateList.valueOf(mController.getColorItemContent())); + @Nullable + private Drawable getDeviceStatusIcon(MediaDevice device, boolean hasOngoingSession) { + if (hasOngoingSession) { + return mContext.getDrawable(R.drawable.ic_sound_bars_anim); + } else { + return Api34Impl.getDeviceStatusIconBasedOnSelectionBehavior(device, mContext); + } } - private void updateDeviceStatusIcon(Drawable drawable) { - mStatusIcon.setImageDrawable(drawable); - mStatusIcon.setImageTintList( - ColorStateList.valueOf(mController.getColorItemContent())); - if (drawable instanceof AnimatedVectorDrawable) { - ((AnimatedVectorDrawable) drawable).start(); + void updateDeviceStatusIcon(@Nullable Drawable deviceStatusIcon) { + if (deviceStatusIcon == null) { + mStatusIcon.setVisibility(View.GONE); + } else { + mStatusIcon.setImageDrawable(deviceStatusIcon); + mStatusIcon.setImageTintList( + ColorStateList.valueOf(mController.getColorItemContent())); + if (deviceStatusIcon instanceof AnimatedVectorDrawable) { + ((AnimatedVectorDrawable) deviceStatusIcon).start(); + } + mStatusIcon.setVisibility(View.VISIBLE); } } @@ -570,6 +557,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { } @DoNotInline + @Nullable static Drawable getDeviceStatusIconBasedOnSelectionBehavior(MediaDevice device, Context context) { switch (device.getSelectionBehavior()) { 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 3f635fa281d6..f97b3d3d5e38 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java @@ -241,9 +241,13 @@ public abstract class MediaOutputBaseAdapter extends view.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_AUTO); } - void setSubtextAndStatus(boolean showSubtitle, boolean showStatus) { - mStatusIcon.setVisibility(showStatus ? View.VISIBLE : View.GONE); - mSubTitleText.setVisibility(showSubtitle ? View.VISIBLE : View.GONE); + void updateSubtitle(@Nullable String subtitle) { + if (subtitle == null) { + mSubTitleText.setVisibility(View.GONE); + } else { + mSubTitleText.setText(subtitle); + mSubTitleText.setVisibility(View.VISIBLE); + } } protected void updateLoadingIndicator(ConnectionState connectionState) { diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java index 19409b32a2f6..51437b3bbdaf 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java @@ -948,6 +948,7 @@ public class MediaSwitchingController return mLocalMediaManager.getSessionVolume(); } + @Nullable CharSequence getSessionName() { return mLocalMediaManager.getSessionName(); } |