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

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

Merge "[Audiosharing] Avoid popup dialog when broadcast start in SysUI" into main

parents e34c3f9b d77fd968
Loading
Loading
Loading
Loading
+7 −11
Original line number Original line Diff line number Diff line
@@ -128,6 +128,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
    // join the audio sharing, we will wait for the process complete for this list of sinks and then
    // join the audio sharing, we will wait for the process complete for this list of sinks and then
    // popup audio sharing dialog with options to pair new device.
    // popup audio sharing dialog with options to pair new device.
    private CopyOnWriteArrayList<BluetoothDevice> mSinksToWaitFor = new CopyOnWriteArrayList<>();
    private CopyOnWriteArrayList<BluetoothDevice> mSinksToWaitFor = new CopyOnWriteArrayList<>();
    private AtomicBoolean mStartingSharing = new AtomicBoolean(false);
    private AtomicBoolean mStoppingSharing = new AtomicBoolean(false);
    private AtomicBoolean mStoppingSharing = new AtomicBoolean(false);


    @VisibleForTesting
    @VisibleForTesting
@@ -160,6 +161,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                @Override
                @Override
                public void onBroadcastStartFailed(int reason) {
                public void onBroadcastStartFailed(int reason) {
                    Log.d(TAG, "onBroadcastStartFailed(), reason = " + reason);
                    Log.d(TAG, "onBroadcastStartFailed(), reason = " + reason);
                    mStartingSharing.compareAndSet(true, false);
                    updateSwitch();
                    updateSwitch();
                    showErrorDialog();
                    showErrorDialog();
                    mMetricsFeatureProvider.action(
                    mMetricsFeatureProvider.action(
@@ -177,16 +179,8 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                                    + broadcastId
                                    + broadcastId
                                    + ", metadata = "
                                    + ", metadata = "
                                    + metadata.getBroadcastName());
                                    + metadata.getBroadcastName());
                    if (mAssistant == null
                    if (!mStartingSharing.compareAndSet(true, false)) {
                            || mAssistant.getAllConnectedDevices().stream()
                        Log.d(TAG, "Skip handleOnBroadcastReady, not in starting process");
                                    .anyMatch(
                                            device -> BluetoothUtils
                                                    .hasActiveLocalBroadcastSourceForBtDevice(
                                                            device, mBtManager))) {
                        Log.d(
                                TAG,
                                "Skip handleOnBroadcastReady: null assistant or "
                                        + "sink has active local source.");
                        return;
                        return;
                    }
                    }
                    handleOnBroadcastReady();
                    handleOnBroadcastReady();
@@ -213,6 +207,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
                @Override
                @Override
                public void onBroadcastStopFailed(int reason) {
                public void onBroadcastStopFailed(int reason) {
                    Log.d(TAG, "onBroadcastStopFailed(), reason = " + reason);
                    Log.d(TAG, "onBroadcastStopFailed(), reason = " + reason);
                    mStoppingSharing.compareAndSet(true, false);
                    updateSwitch();
                    updateSwitch();
                    mMetricsFeatureProvider.action(
                    mMetricsFeatureProvider.action(
                            mContext,
                            mContext,
@@ -565,6 +560,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
            mDeviceItemsForSharing.remove(0);
            mDeviceItemsForSharing.remove(0);
        }
        }
        if (mBroadcast != null) {
        if (mBroadcast != null) {
            mStartingSharing.set(true);
            mBroadcast.startPrivateBroadcast();
            mBroadcast.startPrivateBroadcast();
            mSinksInAdding.clear();
            mSinksInAdding.clear();
            AudioSharingUtils.postOnMainThread(mContext,
            AudioSharingUtils.postOnMainThread(mContext,
@@ -583,7 +579,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController
            int broadcastId = mBroadcast.getLatestBroadcastId();
            int broadcastId = mBroadcast.getLatestBroadcastId();
            if (broadcastId != -1) {
            if (broadcastId != -1) {
                mBroadcast.stopBroadcast(broadcastId);
                mBroadcast.stopBroadcast(broadcastId);
                mStoppingSharing.compareAndSet(false, true);
                mStoppingSharing.set(true);
                mSinksInAdding.clear();
                mSinksInAdding.clear();
                mSinksToWaitFor.clear();
                mSinksToWaitFor.clear();
            }
            }
+6 −15
Original line number Original line Diff line number Diff line
@@ -515,23 +515,14 @@ public class AudioSharingSwitchBarControllerTest {
    }
    }


    @Test
    @Test
    public void onBroadcastMetadataChanged_hasLocalSource_noDialog() {
    public void onBroadcastMetadataChanged_notTriggeredHere_noDialog() {
        FeatureFlagUtils.setEnabled(
        FeatureFlagUtils.setEnabled(
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1));
        when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1));
        when(mState.getBroadcastId()).thenReturn(1);
        when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of());
        when(mBroadcast.getLatestBroadcastId()).thenReturn(1);
        when(mAssistant.getAllSources(mDevice2)).thenReturn(ImmutableList.of(mState));
        when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata);
        when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata);
        doNothing().when(mBroadcast).startPrivateBroadcast();
        doNothing().when(mBroadcast).startPrivateBroadcast();
        mController.onCheckedChanged(mBtnView, /* isChecked= */ true);
        shadowOf(Looper.getMainLooper()).idle();

        verify(mBroadcast).startPrivateBroadcast();
        List<Fragment> childFragments = mParentFragment.getChildFragmentManager().getFragments();
        assertThat(childFragments).comparingElementsUsing(CLAZZNAME_EQUALS).containsExactly(
                AudioSharingProgressDialogFragment.class.getName());


        mController.mBroadcastCallback.onBroadcastMetadataChanged(/* reason= */ 1, mMetadata);
        mController.mBroadcastCallback.onBroadcastMetadataChanged(/* reason= */ 1, mMetadata);
        shadowOf(Looper.getMainLooper()).idle();
        shadowOf(Looper.getMainLooper()).idle();
@@ -540,7 +531,7 @@ public class AudioSharingSwitchBarControllerTest {
        verify(mFeatureFactory.metricsFeatureProvider, never())
        verify(mFeatureFactory.metricsFeatureProvider, never())
                .action(any(Context.class), eq(SettingsEnums.ACTION_AUTO_JOIN_AUDIO_SHARING));
                .action(any(Context.class), eq(SettingsEnums.ACTION_AUTO_JOIN_AUDIO_SHARING));


        childFragments = mParentFragment.getChildFragmentManager().getFragments();
        List<Fragment> childFragments = mParentFragment.getChildFragmentManager().getFragments();
        // No audio sharing dialog.
        // No audio sharing dialog.
        assertThat(childFragments).comparingElementsUsing(CLAZZNAME_EQUALS).doesNotContain(
        assertThat(childFragments).comparingElementsUsing(CLAZZNAME_EQUALS).doesNotContain(
                AudioSharingDialogFragment.class.getName());
                AudioSharingDialogFragment.class.getName());
@@ -613,7 +604,7 @@ public class AudioSharingSwitchBarControllerTest {
    }
    }


    @Test
    @Test
    public void onBroadcastMetadataChanged_oneActiveOnConnected_showJoinAudioSharingDialog() {
    public void onBroadcastMetadataChanged_oneActiveOneConnected_showJoinAudioSharingDialog() {
        FeatureFlagUtils.setEnabled(
        FeatureFlagUtils.setEnabled(
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mBtnView.isEnabled()).thenReturn(true);
@@ -681,7 +672,7 @@ public class AudioSharingSwitchBarControllerTest {
    }
    }


    @Test
    @Test
    public void onBroadcastMetadataChanged_oneActiveOnConnected_clickShareBtnOnDialog_addSource() {
    public void onBroadcastMetadataChanged_oneActiveOneConnected_clickShareBtnOnDialog_addSource() {
        FeatureFlagUtils.setEnabled(
        FeatureFlagUtils.setEnabled(
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mBtnView.isEnabled()).thenReturn(true);
@@ -722,7 +713,7 @@ public class AudioSharingSwitchBarControllerTest {
    }
    }


    @Test
    @Test
    public void onBroadcastMetadataChanged_oneActiveOnConnected_clickCancelBtnOnDialog_doNothing() {
    public void onBroadcastMetadataChanged_oneActiveOneConnected_clickCancelBtnOnDlg_doNothing() {
        FeatureFlagUtils.setEnabled(
        FeatureFlagUtils.setEnabled(
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
                mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
        when(mBtnView.isEnabled()).thenReturn(true);
        when(mBtnView.isEnabled()).thenReturn(true);