[Audiosharing] Avoid popup dialog when broadcast start in SysUI

Test: atest
Bug: 305620450
Flag: com.android.settingslib.flags.enable_le_audio_sharing
Change-Id: I447aeb7e9646a5f9278fd2def8a2a9e6a59ac47e
diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java
index 7ca3256..4492115 100644
--- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java
+++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java
@@ -128,6 +128,7 @@
     // 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.
     private CopyOnWriteArrayList<BluetoothDevice> mSinksToWaitFor = new CopyOnWriteArrayList<>();
+    private AtomicBoolean mStartingSharing = new AtomicBoolean(false);
     private AtomicBoolean mStoppingSharing = new AtomicBoolean(false);
 
     @VisibleForTesting
@@ -160,6 +161,7 @@
                 @Override
                 public void onBroadcastStartFailed(int reason) {
                     Log.d(TAG, "onBroadcastStartFailed(), reason = " + reason);
+                    mStartingSharing.compareAndSet(true, false);
                     updateSwitch();
                     showErrorDialog();
                     mMetricsFeatureProvider.action(
@@ -177,16 +179,8 @@
                                     + broadcastId
                                     + ", metadata = "
                                     + metadata.getBroadcastName());
-                    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.");
+                    if (!mStartingSharing.compareAndSet(true, false)) {
+                        Log.d(TAG, "Skip handleOnBroadcastReady, not in starting process");
                         return;
                     }
                     handleOnBroadcastReady();
@@ -213,6 +207,7 @@
                 @Override
                 public void onBroadcastStopFailed(int reason) {
                     Log.d(TAG, "onBroadcastStopFailed(), reason = " + reason);
+                    mStoppingSharing.compareAndSet(true, false);
                     updateSwitch();
                     mMetricsFeatureProvider.action(
                             mContext,
@@ -565,6 +560,7 @@
             mDeviceItemsForSharing.remove(0);
         }
         if (mBroadcast != null) {
+            mStartingSharing.set(true);
             mBroadcast.startPrivateBroadcast();
             mSinksInAdding.clear();
             AudioSharingUtils.postOnMainThread(mContext,
@@ -583,7 +579,7 @@
             int broadcastId = mBroadcast.getLatestBroadcastId();
             if (broadcastId != -1) {
                 mBroadcast.stopBroadcast(broadcastId);
-                mStoppingSharing.compareAndSet(false, true);
+                mStoppingSharing.set(true);
                 mSinksInAdding.clear();
                 mSinksToWaitFor.clear();
             }
diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java
index 7851b2b..dea9823 100644
--- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java
+++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java
@@ -515,23 +515,14 @@
     }
 
     @Test
-    public void onBroadcastMetadataChanged_hasLocalSource_noDialog() {
+    public void onBroadcastMetadataChanged_notTriggeredHere_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));
-        when(mState.getBroadcastId()).thenReturn(1);
-        when(mBroadcast.getLatestBroadcastId()).thenReturn(1);
-        when(mAssistant.getAllSources(mDevice2)).thenReturn(ImmutableList.of(mState));
+        when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of());
         when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata);
         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);
         shadowOf(Looper.getMainLooper()).idle();
@@ -540,7 +531,7 @@
         verify(mFeatureFactory.metricsFeatureProvider, never())
                 .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.
         assertThat(childFragments).comparingElementsUsing(CLAZZNAME_EQUALS).doesNotContain(
                 AudioSharingDialogFragment.class.getName());
@@ -613,7 +604,7 @@
     }
 
     @Test
-    public void onBroadcastMetadataChanged_oneActiveOnConnected_showJoinAudioSharingDialog() {
+    public void onBroadcastMetadataChanged_oneActiveOneConnected_showJoinAudioSharingDialog() {
         FeatureFlagUtils.setEnabled(
                 mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
         when(mBtnView.isEnabled()).thenReturn(true);
@@ -681,7 +672,7 @@
     }
 
     @Test
-    public void onBroadcastMetadataChanged_oneActiveOnConnected_clickShareBtnOnDialog_addSource() {
+    public void onBroadcastMetadataChanged_oneActiveOneConnected_clickShareBtnOnDialog_addSource() {
         FeatureFlagUtils.setEnabled(
                 mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
         when(mBtnView.isEnabled()).thenReturn(true);
@@ -722,7 +713,7 @@
     }
 
     @Test
-    public void onBroadcastMetadataChanged_oneActiveOnConnected_clickCancelBtnOnDialog_doNothing() {
+    public void onBroadcastMetadataChanged_oneActiveOneConnected_clickCancelBtnOnDlg_doNothing() {
         FeatureFlagUtils.setEnabled(
                 mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true);
         when(mBtnView.isEnabled()).thenReturn(true);