Loading packages/SystemUI/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -3457,6 +3457,8 @@ <string name="media_output_end_session_dialog_summary">Stop your shared session to move media to another device</string> <!-- Button text for stopping session [CHAR LIMIT=60] --> <string name="media_output_end_session_dialog_stop">Stop</string> <!-- Button text for stopping sharing [CHAR LIMIT=60] --> <string name="media_output_dialog_button_stop_sharing">Stop sharing</string> <!-- Media Output Broadcast Dialog --> Loading packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java +39 −2 Original line number Diff line number Diff line Loading @@ -16,10 +16,13 @@ package com.android.systemui.media.dialog; import static com.android.settingslib.flags.Flags.legacyLeAudioSharing; import static com.android.media.flags.Flags.enableOutputSwitcherPersonalAudioSharing; import static com.android.media.flags.Flags.enableOutputSwitcherRedesign; import static com.android.settingslib.flags.Flags.legacyLeAudioSharing; import android.annotation.Nullable; import android.content.Context; import android.media.RoutingSessionInfo; import android.os.Bundle; import android.util.FeatureFlagUtils; import android.view.View; Loading Loading @@ -106,10 +109,20 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { mMediaSwitchingController.isActiveRemoteDevice( mMediaSwitchingController.getCurrentConnectedMediaDevice()); } // TODO(b/333324985): Remove these code (code under flag legacy_le_audio_sharing) once flag // enable_le_audio_sharing has reached nextfood. // isBroadcastSupported always returns false when flag legacy_le_audio_sharing is disabled boolean showBroadcastButton = isBroadcastSupported() && mMediaSwitchingController.isPlaying(); return (isActiveRemoteDevice || showBroadcastButton) ? View.VISIBLE : View.GONE; boolean inBroadcast = enableOutputSwitcherPersonalAudioSharing() && mMediaSwitchingController.getSessionReleaseType() == RoutingSessionInfo.RELEASE_TYPE_SHARING; return (isActiveRemoteDevice || showBroadcastButton || inBroadcast) ? View.VISIBLE : View.GONE; } @Override Loading Loading @@ -144,7 +157,16 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { if (isBroadcastSupported() && mMediaSwitchingController.isPlaying() && !mMediaSwitchingController.isBluetoothLeBroadcastEnabled()) { // TODO(b/333324985): Remove these code (code under flag legacy_le_audio_sharing) // once flag enable_le_audio_sharing has reached nextfood. // isBroadcastSupported always returns false when flag legacy_le_audio_sharing is // disabled. resId = R.string.media_output_broadcast; } else if (enableOutputSwitcherPersonalAudioSharing()) { CharSequence stopButtonText = getTextForSessionReleaseType(); if (stopButtonText != null) { return stopButtonText; } } return mContext.getText(resId); } Loading @@ -152,6 +174,10 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { @Override public void onStopButtonClick() { if (isBroadcastSupported() && mMediaSwitchingController.isPlaying()) { // TODO(b/333324985): Remove these code (code under flag legacy_le_audio_sharing) // once flag enable_le_audio_sharing has reached nextfood. // isBroadcastSupported always returns false when flag legacy_le_audio_sharing is // disabled. if (!mMediaSwitchingController.isBluetoothLeBroadcastEnabled()) { if (startLeBroadcastDialogForFirstTime()) { return; Loading Loading @@ -195,4 +221,15 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { return mId; } } @Nullable private CharSequence getTextForSessionReleaseType() { return switch (mMediaSwitchingController.getSessionReleaseType()) { case RoutingSessionInfo.RELEASE_TYPE_CASTING -> mContext.getText(R.string.media_output_dialog_button_stop_casting); case RoutingSessionInfo.RELEASE_TYPE_SHARING -> mContext.getText(R.string.media_output_dialog_button_stop_sharing); default -> null; }; } } packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java +77 −0 Original line number Diff line number Diff line Loading @@ -30,11 +30,14 @@ import android.media.AudioManager; import android.media.MediaDescription; import android.media.MediaMetadata; import android.media.MediaRoute2Info; import android.media.RoutingSessionInfo; import android.media.session.MediaController; import android.media.session.MediaSessionManager; import android.media.session.PlaybackState; import android.os.PowerExemptionManager; import android.os.UserHandle; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; Loading Loading @@ -234,6 +237,26 @@ public class MediaOutputDialogTest extends SysuiTestCase { assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.GONE); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void getStopButtonVisibility_notInBroadcast_returnGone() { when(mLocalMediaManager.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_UNSUPPORTED); assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.GONE); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void getStopButtonVisibility_inBroadcast_returnVisible() { when(mLocalMediaManager.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_TYPE_SHARING); assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.VISIBLE); } @Test public void getStopButtonVisibility_localDevice_returnGone() { mFeatures.add(MediaRoute2Info.FEATURE_LOCAL_PLAYBACK); Loading Loading @@ -408,6 +431,42 @@ public class MediaOutputDialogTest extends SysuiTestCase { }); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void getStopButtonText_notInBroadcast_returnsDefaultText() { String stopText = mContext.getText( R.string.media_output_dialog_button_stop_casting).toString(); MediaSwitchingController mockMediaSwitchingController = mock(MediaSwitchingController.class); when(mockMediaSwitchingController.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_UNSUPPORTED); withTestDialog( mockMediaSwitchingController, testDialog -> { assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText); }); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void getStopButtonText_inBroadcast_returnsDefaultText() { String stopText = mContext.getText( R.string.media_output_dialog_button_stop_sharing).toString(); MediaSwitchingController mockMediaSwitchingController = mock(MediaSwitchingController.class); when(mockMediaSwitchingController.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_TYPE_SHARING); withTestDialog( mockMediaSwitchingController, testDialog -> { assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText); }); } @Test @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) public void getStopButtonText_supportsBroadcast_returnsBroadcastText() { Loading Loading @@ -445,6 +504,24 @@ public class MediaOutputDialogTest extends SysuiTestCase { verify(mDialogTransitionAnimator).disableAllCurrentDialogsExitAnimations(); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void onStopButtonClick_inBroadcast_releaseSession() { MediaSwitchingController mockMediaSwitchingController = mock(MediaSwitchingController.class); when(mockMediaSwitchingController.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_TYPE_SHARING); withTestDialog( mockMediaSwitchingController, testDialog -> { testDialog.onStopButtonClick(); }); verify(mockMediaSwitchingController).releaseSession(); verify(mDialogTransitionAnimator).disableAllCurrentDialogsExitAnimations(); } @Test // Check the visibility metric logging by creating a new MediaOutput dialog, // and verify if the calling times increases. Loading Loading
packages/SystemUI/res/values/strings.xml +2 −0 Original line number Diff line number Diff line Loading @@ -3457,6 +3457,8 @@ <string name="media_output_end_session_dialog_summary">Stop your shared session to move media to another device</string> <!-- Button text for stopping session [CHAR LIMIT=60] --> <string name="media_output_end_session_dialog_stop">Stop</string> <!-- Button text for stopping sharing [CHAR LIMIT=60] --> <string name="media_output_dialog_button_stop_sharing">Stop sharing</string> <!-- Media Output Broadcast Dialog --> Loading
packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputDialog.java +39 −2 Original line number Diff line number Diff line Loading @@ -16,10 +16,13 @@ package com.android.systemui.media.dialog; import static com.android.settingslib.flags.Flags.legacyLeAudioSharing; import static com.android.media.flags.Flags.enableOutputSwitcherPersonalAudioSharing; import static com.android.media.flags.Flags.enableOutputSwitcherRedesign; import static com.android.settingslib.flags.Flags.legacyLeAudioSharing; import android.annotation.Nullable; import android.content.Context; import android.media.RoutingSessionInfo; import android.os.Bundle; import android.util.FeatureFlagUtils; import android.view.View; Loading Loading @@ -106,10 +109,20 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { mMediaSwitchingController.isActiveRemoteDevice( mMediaSwitchingController.getCurrentConnectedMediaDevice()); } // TODO(b/333324985): Remove these code (code under flag legacy_le_audio_sharing) once flag // enable_le_audio_sharing has reached nextfood. // isBroadcastSupported always returns false when flag legacy_le_audio_sharing is disabled boolean showBroadcastButton = isBroadcastSupported() && mMediaSwitchingController.isPlaying(); return (isActiveRemoteDevice || showBroadcastButton) ? View.VISIBLE : View.GONE; boolean inBroadcast = enableOutputSwitcherPersonalAudioSharing() && mMediaSwitchingController.getSessionReleaseType() == RoutingSessionInfo.RELEASE_TYPE_SHARING; return (isActiveRemoteDevice || showBroadcastButton || inBroadcast) ? View.VISIBLE : View.GONE; } @Override Loading Loading @@ -144,7 +157,16 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { if (isBroadcastSupported() && mMediaSwitchingController.isPlaying() && !mMediaSwitchingController.isBluetoothLeBroadcastEnabled()) { // TODO(b/333324985): Remove these code (code under flag legacy_le_audio_sharing) // once flag enable_le_audio_sharing has reached nextfood. // isBroadcastSupported always returns false when flag legacy_le_audio_sharing is // disabled. resId = R.string.media_output_broadcast; } else if (enableOutputSwitcherPersonalAudioSharing()) { CharSequence stopButtonText = getTextForSessionReleaseType(); if (stopButtonText != null) { return stopButtonText; } } return mContext.getText(resId); } Loading @@ -152,6 +174,10 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { @Override public void onStopButtonClick() { if (isBroadcastSupported() && mMediaSwitchingController.isPlaying()) { // TODO(b/333324985): Remove these code (code under flag legacy_le_audio_sharing) // once flag enable_le_audio_sharing has reached nextfood. // isBroadcastSupported always returns false when flag legacy_le_audio_sharing is // disabled. if (!mMediaSwitchingController.isBluetoothLeBroadcastEnabled()) { if (startLeBroadcastDialogForFirstTime()) { return; Loading Loading @@ -195,4 +221,15 @@ public class MediaOutputDialog extends MediaOutputBaseDialog { return mId; } } @Nullable private CharSequence getTextForSessionReleaseType() { return switch (mMediaSwitchingController.getSessionReleaseType()) { case RoutingSessionInfo.RELEASE_TYPE_CASTING -> mContext.getText(R.string.media_output_dialog_button_stop_casting); case RoutingSessionInfo.RELEASE_TYPE_SHARING -> mContext.getText(R.string.media_output_dialog_button_stop_sharing); default -> null; }; } }
packages/SystemUI/tests/src/com/android/systemui/media/dialog/MediaOutputDialogTest.java +77 −0 Original line number Diff line number Diff line Loading @@ -30,11 +30,14 @@ import android.media.AudioManager; import android.media.MediaDescription; import android.media.MediaMetadata; import android.media.MediaRoute2Info; import android.media.RoutingSessionInfo; import android.media.session.MediaController; import android.media.session.MediaSessionManager; import android.media.session.PlaybackState; import android.os.PowerExemptionManager; import android.os.UserHandle; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; Loading Loading @@ -234,6 +237,26 @@ public class MediaOutputDialogTest extends SysuiTestCase { assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.GONE); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void getStopButtonVisibility_notInBroadcast_returnGone() { when(mLocalMediaManager.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_UNSUPPORTED); assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.GONE); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void getStopButtonVisibility_inBroadcast_returnVisible() { when(mLocalMediaManager.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_TYPE_SHARING); assertThat(mMediaOutputDialog.getStopButtonVisibility()).isEqualTo(View.VISIBLE); } @Test public void getStopButtonVisibility_localDevice_returnGone() { mFeatures.add(MediaRoute2Info.FEATURE_LOCAL_PLAYBACK); Loading Loading @@ -408,6 +431,42 @@ public class MediaOutputDialogTest extends SysuiTestCase { }); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void getStopButtonText_notInBroadcast_returnsDefaultText() { String stopText = mContext.getText( R.string.media_output_dialog_button_stop_casting).toString(); MediaSwitchingController mockMediaSwitchingController = mock(MediaSwitchingController.class); when(mockMediaSwitchingController.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_UNSUPPORTED); withTestDialog( mockMediaSwitchingController, testDialog -> { assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText); }); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void getStopButtonText_inBroadcast_returnsDefaultText() { String stopText = mContext.getText( R.string.media_output_dialog_button_stop_sharing).toString(); MediaSwitchingController mockMediaSwitchingController = mock(MediaSwitchingController.class); when(mockMediaSwitchingController.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_TYPE_SHARING); withTestDialog( mockMediaSwitchingController, testDialog -> { assertThat(testDialog.getStopButtonText().toString()).isEqualTo(stopText); }); } @Test @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) public void getStopButtonText_supportsBroadcast_returnsBroadcastText() { Loading Loading @@ -445,6 +504,24 @@ public class MediaOutputDialogTest extends SysuiTestCase { verify(mDialogTransitionAnimator).disableAllCurrentDialogsExitAnimations(); } @Test @DisableFlags(Flags.FLAG_LEGACY_LE_AUDIO_SHARING) @EnableFlags(com.android.media.flags.Flags.FLAG_ENABLE_OUTPUT_SWITCHER_PERSONAL_AUDIO_SHARING) public void onStopButtonClick_inBroadcast_releaseSession() { MediaSwitchingController mockMediaSwitchingController = mock(MediaSwitchingController.class); when(mockMediaSwitchingController.getSessionReleaseType()).thenReturn( RoutingSessionInfo.RELEASE_TYPE_SHARING); withTestDialog( mockMediaSwitchingController, testDialog -> { testDialog.onStopButtonClick(); }); verify(mockMediaSwitchingController).releaseSession(); verify(mDialogTransitionAnimator).disableAllCurrentDialogsExitAnimations(); } @Test // Check the visibility metric logging by creating a new MediaOutput dialog, // and verify if the calling times increases. Loading