summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java1
-rw-r--r--packages/SettingsLib/src/com/android/settingslib/media/LocalMediaManager.java1
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java38
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java78
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java10
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaSwitchingController.java1
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();
}