Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d4d5f24c authored by Yiyi Shen's avatar Yiyi Shen Committed by Android (Google) Code Review
Browse files

Merge "[OutputSwitcher] Use stop button to stop broadcast during PAS" into main

parents 4553983e 7bacd9fb
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 -->
+39 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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
@@ -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);
    }
@@ -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;
@@ -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;
        };
    }
}
+77 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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);
@@ -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() {
@@ -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.