summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputBaseDialog.java7
-rw-r--r--packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputBaseDialogTest.java54
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