diff options
| author | 2025-02-03 00:34:35 -0800 | |
|---|---|---|
| committer | 2025-02-05 10:08:21 -0800 | |
| commit | 555964082cf4162d65f1d55c178fff84055e7339 (patch) | |
| tree | 664ba2a8566ff8a2c59f3ad8414928dedf7def28 | |
| parent | d603bf0411256675348aea5ba5d715bc0310e905 (diff) | |
Consolidate the device item click listener assignment.
Flag: EXEMPT refactor
Bug: 387570618
Test: atest SystemUiRoboTests:MediaOutputAdapterTest
atest SystemUIGoogleRoboRNGTests:MediaOutputAdapterScreenshotTest
Change-Id: I26ca12985233dfd2922a96f82289e46296b0f0b4
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); } |