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

Commit b9ee6032 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "When audio sharing is on, prevent user from listening to audio stream." into main

parents a38254a0 5b9c4aa8
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -14435,6 +14435,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(