[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);