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

Commit bece2128 authored by Yiyi Shen's avatar Yiyi Shen
Browse files

[Audiosharing] Avoid dialog when onPlaybackStarted after call ends

Test: atest
Flag: com.android.settingslib.flags.enable_le_audio_sharing
Bug: 362714470
Bug: 355222285
Change-Id: I9f6e1138f0877b607fb75ffef2ff249ef1114e6d
parent 77292869
Loading
Loading
Loading
Loading
+22 −8
Original line number Diff line number Diff line
@@ -201,6 +201,19 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                                    + reason
                                    + ", broadcastId = "
                                    + broadcastId);
                    if (mAssistant == null
                            || mAssistant.getAllConnectedDevices().stream()
                                    .anyMatch(
                                            device -> BluetoothUtils
                                                    .hasActiveLocalBroadcastSourceForBtDevice(
                                                            device, mBtManager))) {
                        Log.d(
                                TAG,
                                "Skip handleOnBroadcastReady: null assistant or "
                                        + "sink has active local source.");
                        cleanUp();
                        return;
                    }
                    handleOnBroadcastReady();
                }

@@ -554,8 +567,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                        mGroupedConnectedDevices.getOrDefault(
                                mDeviceItemsForSharing.get(0).getGroupId(), ImmutableList.of()),
                        mBtManager);
                mGroupedConnectedDevices.clear();
                mDeviceItemsForSharing.clear();
                cleanUp();
                // TODO: Add metric for auto add by intent
                return;
            }
@@ -565,8 +577,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                StartIntentHandleStage.HANDLED.ordinal());
        if (mFragment == null) {
            Log.d(TAG, "handleOnBroadcastReady: dialog fail to show due to null fragment.");
            mGroupedConnectedDevices.clear();
            mDeviceItemsForSharing.clear();
            cleanUp();
            return;
        }
        showDialog(eventData);
@@ -581,14 +592,12 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                                mGroupedConnectedDevices.getOrDefault(
                                        item.getGroupId(), ImmutableList.of()),
                                mBtManager);
                        mGroupedConnectedDevices.clear();
                        mDeviceItemsForSharing.clear();
                        cleanUp();
                    }

                    @Override
                    public void onCancelClick() {
                        mGroupedConnectedDevices.clear();
                        mDeviceItemsForSharing.clear();
                        cleanUp();
                    }
                };
        AudioSharingUtils.postOnMainThread(
@@ -657,6 +666,11 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                        });
    }

    private void cleanUp() {
        mGroupedConnectedDevices.clear();
        mDeviceItemsForSharing.clear();
    }

    private enum StartIntentHandleStage {
        TO_HANDLE,
        HANDLE_AUTO_ADD,
+29 −0
Original line number Diff line number Diff line
@@ -443,6 +443,7 @@ public class AudioSharingSwitchBarControllerTest {
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1));
        when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of());
        when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata);
        doNothing().when(mBroadcast).startPrivateBroadcast();
        mController =
@@ -468,12 +469,38 @@ public class AudioSharingSwitchBarControllerTest {
        assertThat(childFragments).isEmpty();
    }

    @Test
    public void onPlaybackStarted_hasLocalSource_noDialog() {
        FeatureFlagUtils.setEnabled(
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1));
        BluetoothLeBroadcastReceiveState state = mock(BluetoothLeBroadcastReceiveState.class);
        when(state.getBroadcastId()).thenReturn(1);
        when(mBroadcast.getLatestBroadcastId()).thenReturn(1);
        when(mAssistant.getAllSources(mDevice2)).thenReturn(ImmutableList.of(state));
        when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata);
        doNothing().when(mBroadcast).startPrivateBroadcast();
        mController.onCheckedChanged(mBtnView, /* isChecked= */ true);
        verify(mBroadcast).startPrivateBroadcast();
        mController.mBroadcastCallback.onPlaybackStarted(0, 0);
        shadowOf(Looper.getMainLooper()).idle();

        verify(mAssistant, never()).addSource(any(), any(), anyBoolean());
        verify(mFeatureFactory.metricsFeatureProvider, never())
                .action(any(Context.class), eq(SettingsEnums.ACTION_AUTO_JOIN_AUDIO_SHARING));

        List<Fragment> childFragments = mParentFragment.getChildFragmentManager().getFragments();
        assertThat(childFragments).isEmpty();
    }

    @Test
    public void onPlaybackStarted_showJoinAudioSharingDialog() {
        FeatureFlagUtils.setEnabled(
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1));
        when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of());
        doNothing().when(mBroadcast).startPrivateBroadcast();
        mController.onCheckedChanged(mBtnView, /* isChecked= */ true);
        when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata);
@@ -519,6 +546,7 @@ public class AudioSharingSwitchBarControllerTest {
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1));
        when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of());
        when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata);
        doNothing().when(mBroadcast).startPrivateBroadcast();
        mController.onCheckedChanged(mBtnView, /* isChecked= */ true);
@@ -545,6 +573,7 @@ public class AudioSharingSwitchBarControllerTest {
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1));
        when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of());
        when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata);
        doNothing().when(mBroadcast).startPrivateBroadcast();
        mController.onCheckedChanged(mBtnView, /* isChecked= */ true);