summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Alex Shabalin <ashabalin@google.com> 2025-02-03 00:34:35 -0800
committer Alex Shabalin <ashabalin@google.com> 2025-02-05 10:08:21 -0800
commit555964082cf4162d65f1d55c178fff84055e7339 (patch)
tree664ba2a8566ff8a2c59f3ad8414928dedf7def28
parentd603bf0411256675348aea5ba5d715bc0310e905 (diff)
Consolidate the device item click listener assignment.
Flag: EXEMPT refactor Bug: 387570618 Test: atest SystemUiRoboTests:MediaOutputAdapterTest atest SystemUIGoogleRoboRNGTests:MediaOutputAdapterScreenshotTest Change-Id: I26ca12985233dfd2922a96f82289e46296b0f0b4
-rw-r--r--packages/SystemUI/multivalentTests/src/com/android/systemui/media/dialog/MediaOutputAdapterTest.java19
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java41
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java2
3 files changed, 42 insertions, 20 deletions
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 0b9f454712a0..71cc369e4327 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
@@ -625,6 +625,25 @@ public class MediaOutputAdapterTest extends SysuiTestCase {
}
@Test
+ public void onItemClick_selectionBehaviorGoToApp_sendsLaunchIntent() {
+ when(mMediaSwitchingController.isCurrentOutputDeviceHasSessionOngoing()).thenReturn(true);
+ when(mMediaDevice2.getState()).thenReturn(
+ LocalMediaManager.MediaDeviceState.STATE_DISCONNECTED);
+ when(mMediaDevice2.getSelectionBehavior()).thenReturn(SELECTION_BEHAVIOR_GO_TO_APP);
+ mMediaOutputAdapter = new MediaOutputAdapter(mMediaSwitchingController);
+ mMediaOutputAdapter.updateItems();
+ mViewHolder = (MediaOutputAdapter.MediaDeviceViewHolder) mMediaOutputAdapter
+ .onCreateViewHolder(new LinearLayout(mContext), 0);
+ MediaOutputAdapter.MediaDeviceViewHolder spyMediaDeviceViewHolder = spy(mViewHolder);
+
+ mMediaOutputAdapter.onBindViewHolder(spyMediaDeviceViewHolder, 1);
+ spyMediaDeviceViewHolder.mContainerLayout.performClick();
+
+ verify(mMediaSwitchingController).tryToLaunchInAppRoutingIntent(TEST_DEVICE_ID_2,
+ mViewHolder.mContainerLayout);
+ }
+
+ @Test
public void onItemClick_clicksWithMutingExpectedDeviceExist_cancelsMuteAwaitConnection() {
when(mMediaSwitchingController.isAnyDeviceTransferring()).thenReturn(false);
when(mMediaSwitchingController.hasMutingExpectedDevice()).thenReturn(true);
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 ded410318f53..22d7eb4e2752 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java
@@ -55,8 +55,8 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
private static final String TAG = "MediaOutputAdapter";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- private static final float DEVICE_DISCONNECTED_ALPHA = 0.5f;
- private static final float DEVICE_CONNECTED_ALPHA = 1f;
+ private static final float DEVICE_DISABLED_ALPHA = 0.5f;
+ private static final float DEVICE_ACTIVE_ALPHA = 1f;
protected List<MediaItem> mMediaItemList = new CopyOnWriteArrayList<>();
private boolean mShouldGroupSelectedMediaItems = Flags.enableOutputSwitcherSessionGrouping();
@@ -189,6 +189,8 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
OngoingSessionStatus ongoingSessionStatus = null;
ConnectionState connectionState = ConnectionState.DISCONNECTED;
boolean restrictVolumeAdjustment = false;
+ boolean deviceDisabled = false;
+ View.OnClickListener clickListener = null;
if (mCurrentActivePosition == position) {
mCurrentActivePosition = -1;
@@ -208,7 +210,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
connectionState = ConnectionState.CONNECTED;
restrictVolumeAdjustment = true;
mCurrentActivePosition = position;
- updateFullItemClickListener(v -> onItemClick(v, device));
+ clickListener = v -> onItemClick(v, device);
} else if (mShouldGroupSelectedMediaItems
&& mController.getSelectedMediaDevice().size() > 1
&& isDeviceIncluded(mController.getSelectedMediaDevice(), device)) {
@@ -224,7 +226,6 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
if (isActiveWithOngoingSession) {
mCurrentActivePosition = position;
mSubTitleText.setText(device.getSubtextString());
- updateContentAlpha(DEVICE_CONNECTED_ALPHA);
ongoingSessionStatus = new OngoingSessionStatus(
device.isHostForOngoingSession());
setSubtextAndStatus(true /* showSubtitle */, false /* showStatus */);
@@ -244,16 +245,15 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
if (deviceStatusIcon != null) {
updateDeviceStatusIcon(deviceStatusIcon);
}
- updateContentAlpha(
- updateClickActionBasedOnSelectionBehavior(device)
- ? DEVICE_CONNECTED_ALPHA : DEVICE_DISCONNECTED_ALPHA);
+ clickListener = getClickListenerBasedOnSelectionBehavior(device);
+ deviceDisabled = clickListener == null;
setSubtextAndStatus(true /* showSubtitle */,
deviceStatusIcon != null /* showStatus */);
}
} else if (device.getState() == MediaDeviceState.STATE_CONNECTING_FAILED) {
updateConnectionFailedStatusIcon();
mSubTitleText.setText(R.string.media_output_dialog_connect_failed);
- updateFullItemClickListener(v -> onItemClick(v, device));
+ clickListener = v -> onItemClick(v, device);
setSubtextAndStatus(true /* showSubtitle */, true /* showStatus */);
} else if (device.getState() == MediaDeviceState.STATE_GROUPING) {
connectionState = ConnectionState.CONNECTING;
@@ -269,7 +269,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
if (isMutingExpectedDeviceExist
&& !mController.isCurrentConnectedDeviceRemote()) {
// mark as disconnected and set special click listener
- updateFullItemClickListener(v -> cancelMuteAwaitConnection());
+ clickListener = v -> cancelMuteAwaitConnection();
} else if (device.hasOngoingSession()) {
mCurrentActivePosition = position;
ongoingSessionStatus = new OngoingSessionStatus(
@@ -293,8 +293,9 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
if (!Flags.disableTransferWhenAppsDoNotSupport()
|| isTransferable
|| hasRouteListingPreferenceItem) {
- updateFullItemClickListener(v -> onItemClick(v, device));
+ clickListener = v -> onItemClick(v, device);
}
+ deviceDisabled = clickListener == null;
} else {
Drawable deviceStatusIcon =
device.hasOngoingSession() ? mContext.getDrawable(
@@ -306,9 +307,8 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
updateDeviceStatusIcon(deviceStatusIcon);
mStatusIcon.setVisibility(View.VISIBLE);
}
- updateContentAlpha(
- updateClickActionBasedOnSelectionBehavior(device)
- ? DEVICE_CONNECTED_ALPHA : DEVICE_DISCONNECTED_ALPHA);
+ clickListener = getClickListenerBasedOnSelectionBehavior(device);
+ deviceDisabled = clickListener == null;
}
}
@@ -326,6 +326,8 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
getDeviceItemContentDescription(device));
updateEndArea(device, connectionState, groupStatus, ongoingSessionStatus);
updateLoadingIndicator(connectionState);
+ updateFullItemClickListener(clickListener);
+ updateContentAlpha(deviceDisabled);
updateItemBackground(connectionState);
}
}
@@ -369,7 +371,8 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
ColorStateList(states, colors));
}
- private void updateContentAlpha(float alphaValue) {
+ private void updateContentAlpha(boolean deviceDisabled) {
+ float alphaValue = deviceDisabled ? DEVICE_DISABLED_ALPHA : DEVICE_ACTIVE_ALPHA;
mTitleIcon.setAlpha(alphaValue);
mTitleText.setAlpha(alphaValue);
mSubTitleText.setAlpha(alphaValue);
@@ -418,11 +421,11 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
ColorStateList.valueOf(color));
}
- private boolean updateClickActionBasedOnSelectionBehavior(MediaDevice device) {
- View.OnClickListener clickListener = Api34Impl.getClickListenerBasedOnSelectionBehavior(
+ @Nullable
+ private View.OnClickListener getClickListenerBasedOnSelectionBehavior(
+ @NonNull MediaDevice device) {
+ return Api34Impl.getClickListenerBasedOnSelectionBehavior(
device, mController, v -> onItemClick(v, device));
- updateFullItemClickListener(clickListener);
- return clickListener != null;
}
private void updateConnectionFailedStatusIcon() {
@@ -458,7 +461,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter {
setCheckBoxColor(mCheckBox, mController.getColorItemContent());
}
- private void updateFullItemClickListener(View.OnClickListener listener) {
+ private void updateFullItemClickListener(@Nullable View.OnClickListener listener) {
mContainerLayout.setOnClickListener(listener);
updateIconAreaClickListener(listener);
}
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 4b9553c02884..3f635fa281d6 100644
--- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseAdapter.java
@@ -455,7 +455,7 @@ public abstract class MediaOutputBaseAdapter extends
: R.drawable.media_output_icon_volume;
}
- void updateIconAreaClickListener(View.OnClickListener listener) {
+ void updateIconAreaClickListener(@Nullable View.OnClickListener listener) {
mIconAreaLayout.setOnClickListener(listener);
}