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

Commit 5b9c4aa8 authored by chelseahao's avatar chelseahao
Browse files

When audio sharing is on, prevent user from listening to audio stream.

Flag: com.android.settingslib.flags.enable_le_audio_sharing
Test: atest
Bug: 398156855
Change-Id: I4ce35cd0d1deaed3de273ca3f0843fa3f5992a4b
parent 2fd96bee
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -14423,6 +14423,10 @@ Data usage charges may apply.</string>
    <string name="audio_streams_dialog_turn_off_talkback_subtitle">Talkback cannot be used when listening to audio streams. Turn off talkback to start listening.</string>
    <!-- Le audio streams turn off talkback dialog button [CHAR LIMIT=NONE] -->
    <string name="audio_streams_dialog_turn_off_talkback_button">Turn off</string>
    <!-- Le audio streams turn off audio sharing dialog title [CHAR LIMIT=NONE] -->
    <string name="audio_streams_dialog_turn_off_audio_sharing_title">Can\u0027t listen to audio streams while sharing</string>
    <!-- Le audio streams turn off audio sharing dialog subtitle [CHAR LIMIT=NONE] -->
    <string name="audio_streams_dialog_turn_off_audio_sharing_subtitle">To listen to this stream, turn off audio sharing.</string>
    <!-- Le audio streams no le device dialog button [CHAR LIMIT=NONE] -->
    <string name="audio_streams_dialog_no_le_device_button">Connect a device</string>
    <!-- Le audio streams detail page title [CHAR LIMIT=NONE] -->
+25 −0
Original line number Diff line number Diff line
@@ -90,6 +90,8 @@ public class AudioStreamConfirmDialog extends InstrumentedDialogFragment {
            case SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_NO_LE_DEVICE -> getNoLeDeviceDialog();
            case SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_TURN_OFF_TALKBACK ->
                    getTurnOffTalkbackDialog();
            case SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_TURN_OFF_AUDIO_SHARING ->
                    getTurnOffAudioSharingDialog();
            case SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_LISTEN -> getConfirmDialog();
            default -> getErrorDialog();
        };
@@ -202,6 +204,26 @@ public class AudioStreamConfirmDialog extends InstrumentedDialogFragment {
                .build();
    }

    private Dialog getTurnOffAudioSharingDialog() {
        return new AudioStreamsDialogFragment.DialogBuilder(getActivity())
                .setTitle(getString(R.string.audio_streams_dialog_turn_off_audio_sharing_title))
                .setSubTitle1(
                        mBroadcastMetadata != null
                                ? AudioStreamsHelper.getBroadcastName(mBroadcastMetadata)
                                : "")
                .setSubTitle2(
                        getString(R.string.audio_streams_dialog_turn_off_audio_sharing_subtitle))
                .setRightButtonText(getString(R.string.audio_streams_dialog_close))
                .setRightButtonOnClickListener(
                        unused -> {
                            dismiss();
                            if (mActivity != null) {
                                mActivity.finish();
                            }
                        })
                .build();
    }

    private Dialog getNoLeDeviceDialog() {
        return new AudioStreamsDialogFragment.DialogBuilder(getActivity())
                .setTitle(getString(R.string.audio_streams_dialog_no_le_device_title))
@@ -271,6 +293,9 @@ public class AudioStreamConfirmDialog extends InstrumentedDialogFragment {
            if (!getEnabledScreenReaderServices(mContext).isEmpty()) {
                return SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_TURN_OFF_TALKBACK;
            }
            if (BluetoothUtils.isBroadcasting(Utils.getLocalBluetoothManager(mContext))) {
                return SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_TURN_OFF_AUDIO_SHARING;
            }
            return hasMetadata
                    ? SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_LISTEN
                    : SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_DATA_ERROR;
+54 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import static com.android.settings.connecteddevice.audiosharing.audiostreams.Aud

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
@@ -441,6 +442,59 @@ public class AudioStreamConfirmDialogTest {
        verify(mDialogFragment.mActivity, times(2)).finish();
    }

    @Test
    public void showDialog_turnOffAudioSharing() {
        ShadowAudioStreamsHelper.setCachedBluetoothDeviceInSharingOrLeConnected(
                mCachedBluetoothDevice);
        when(mCachedBluetoothDevice.getName()).thenReturn("");
        when(mBroadcast.isEnabled(any())).thenReturn(true);

        Intent intent = new Intent();
        intent.putExtra(KEY_BROADCAST_METADATA, VALID_METADATA);
        FragmentController.of(mDialogFragment, intent)
                .create(/* containerViewId= */ 0, /* bundle= */ null)
                .start()
                .resume()
                .visible()
                .get();
        shadowMainLooper().idle();

        assertThat(mDialogFragment.getMetricsCategory())
                .isEqualTo(SettingsEnums.DIALOG_AUDIO_STREAM_CONFIRM_TURN_OFF_AUDIO_SHARING);
        assertThat(mDialogFragment.mActivity).isNotNull();
        mDialogFragment.mActivity = spy(mDialogFragment.mActivity);

        var dialog = mDialogFragment.getDialog();
        assertThat(dialog).isNotNull();
        assertThat(dialog.isShowing()).isTrue();

        TextView title = dialog.findViewById(R.id.dialog_title);
        assertThat(title).isNotNull();
        assertThat(title.getText())
                .isEqualTo(mContext.getString(
                        R.string.audio_streams_dialog_turn_off_audio_sharing_title));
        TextView subtitle1 = dialog.findViewById(R.id.dialog_subtitle);
        assertThat(subtitle1).isNotNull();
        assertThat(subtitle1.getVisibility()).isEqualTo(View.VISIBLE);
        TextView subtitle2 = dialog.findViewById(R.id.dialog_subtitle_2);
        assertThat(subtitle2).isNotNull();
        assertThat(subtitle2.getText())
                .isEqualTo(mContext.getString(
                        R.string.audio_streams_dialog_turn_off_audio_sharing_subtitle));
        View leftButton = dialog.findViewById(R.id.left_button);
        assertThat(leftButton).isNotNull();
        assertThat(leftButton.getVisibility()).isEqualTo(View.GONE);
        assertThat(leftButton.hasOnClickListeners()).isFalse();
        View rightButton = dialog.findViewById(R.id.right_button);
        assertThat(rightButton).isNotNull();
        assertThat(rightButton.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(rightButton.hasOnClickListeners()).isTrue();

        rightButton.callOnClick();
        assertThat(dialog.isShowing()).isFalse();
        verify(mDialogFragment.mActivity).finish();
    }

    @Test
    public void showDialog_getDataStringFromIntent_confirmListen() {
        ShadowAudioStreamsHelper.setCachedBluetoothDeviceInSharingOrLeConnected(