diff options
| author | 2024-12-23 09:39:19 -0800 | |
|---|---|---|
| committer | 2024-12-23 09:39:19 -0800 | |
| commit | ab0eb70101ae370af194005e42d99a9e4b85d50f (patch) | |
| tree | e73b87c25c70cded485eb7479bf99970295c8b7f | |
| parent | e6f496179145e2d6fe63d570c04681f6004f5a14 (diff) | |
| parent | f2662cc18118df4a0ceaeafcc50156ca19af4cdd (diff) | |
Merge "Make the metadata section clickable only if the intent is available." into main
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java | 7 | ||||
| -rw-r--r-- | packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java | 54 |
2 files changed, 53 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java index 9e50fb86fda0..64256f97fd78 100644 --- a/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java +++ b/packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java @@ -268,8 +268,11 @@ public abstract class MediaOutputBaseDialog extends SystemUIDialog // Init bottom buttons mDoneButton.setOnClickListener(v -> dismiss()); mStopButton.setOnClickListener(v -> onStopButtonClick()); - mMediaMetadataSectionLayout.setOnClickListener( - mMediaSwitchingController::tryToLaunchMediaApplication); + if (mMediaSwitchingController.getAppLaunchIntent() != null) { + // For a11y purposes only add listener if a section is clickable. + mMediaMetadataSectionLayout.setOnClickListener( + mMediaSwitchingController::tryToLaunchMediaApplication); + } mDismissing = false; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java index 47371dfd8895..23282b16d8a8 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.any; import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; @@ -27,6 +28,8 @@ import static org.mockito.Mockito.when; import android.app.KeyguardManager; import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.media.AudioManager; import android.media.session.MediaController; @@ -38,6 +41,7 @@ import android.testing.TestableLooper; import android.view.View; import android.widget.Button; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.TextView; import androidx.core.graphics.drawable.IconCompat; @@ -128,6 +132,21 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { when(mMediaController.getPackageName()).thenReturn(TEST_PACKAGE); mMediaControllers.add(mMediaController); when(mMediaSessionManager.getActiveSessions(any())).thenReturn(mMediaControllers); + createMediaSwitchingController(TEST_PACKAGE); + + // Using a fake package will cause routing operations to fail, so we intercept + // scanning-related operations. + mMediaSwitchingController.mLocalMediaManager = mock(LocalMediaManager.class); + doNothing().when(mMediaSwitchingController.mLocalMediaManager).startScan(); + doNothing().when(mMediaSwitchingController.mLocalMediaManager).stopScan(); + + mMediaOutputBaseDialogImpl = + new MediaOutputBaseDialogImpl( + mContext, mBroadcastSender, mMediaSwitchingController); + mMediaOutputBaseDialogImpl.onCreate(new Bundle()); + } + + private void createMediaSwitchingController(String testPackage) { VolumePanelGlobalStateInteractor volumePanelGlobalStateInteractor = VolumePanelGlobalStateInteractorKosmosKt.getVolumePanelGlobalStateInteractor( mKosmos); @@ -135,7 +154,7 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { mMediaSwitchingController = new MediaSwitchingController( mContext, - TEST_PACKAGE, + testPackage, mContext.getUser(), /* token */ null, mMediaSessionManager, @@ -150,17 +169,40 @@ public class MediaOutputBaseDialogTest extends SysuiTestCase { mFlags, volumePanelGlobalStateInteractor, mUserTracker); + } - // Using a fake package will cause routing operations to fail, so we intercept - // scanning-related operations. - mMediaSwitchingController.mLocalMediaManager = mock(LocalMediaManager.class); - doNothing().when(mMediaSwitchingController.mLocalMediaManager).startScan(); - doNothing().when(mMediaSwitchingController.mLocalMediaManager).stopScan(); + @Test + public void onCreate_noAppOpenIntent_metadataSectionNonClickable() { + createMediaSwitchingController(null); mMediaOutputBaseDialogImpl = new MediaOutputBaseDialogImpl( mContext, mBroadcastSender, mMediaSwitchingController); mMediaOutputBaseDialogImpl.onCreate(new Bundle()); + final LinearLayout mediaMetadataSectionLayout = + mMediaOutputBaseDialogImpl.mDialogView.requireViewById( + R.id.media_metadata_section); + + assertThat(mediaMetadataSectionLayout.isClickable()).isFalse(); + } + + @Test + public void onCreate_appOpenIntentAvailable_metadataSectionClickable() { + final PackageManager packageManager = mock(PackageManager.class); + mContext.setMockPackageManager(packageManager); + Intent intent = new Intent(TEST_PACKAGE); + doReturn(intent).when(packageManager).getLaunchIntentForPackage(TEST_PACKAGE); + createMediaSwitchingController(TEST_PACKAGE); + + mMediaOutputBaseDialogImpl = + new MediaOutputBaseDialogImpl( + mContext, mBroadcastSender, mMediaSwitchingController); + mMediaOutputBaseDialogImpl.onCreate(new Bundle()); + final LinearLayout mediaMetadataSectionLayout = + mMediaOutputBaseDialogImpl.mDialogView.requireViewById( + R.id.media_metadata_section); + + assertThat(mediaMetadataSectionLayout.isClickable()).isTrue(); } @Test |