diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java index 7ca3256b849..44921153ce6 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java @@ -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 // popup audio sharing dialog with options to pair new device. private CopyOnWriteArrayList mSinksToWaitFor = new CopyOnWriteArrayList<>(); + private AtomicBoolean mStartingSharing = new AtomicBoolean(false); private AtomicBoolean mStoppingSharing = new AtomicBoolean(false); @VisibleForTesting @@ -160,6 +161,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController @Override public void onBroadcastStartFailed(int reason) { Log.d(TAG, "onBroadcastStartFailed(), reason = " + reason); + mStartingSharing.compareAndSet(true, false); updateSwitch(); showErrorDialog(); mMetricsFeatureProvider.action( @@ -177,16 +179,8 @@ public class AudioSharingSwitchBarController extends BasePreferenceController + 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 @@ public class AudioSharingSwitchBarController extends BasePreferenceController @Override public void onBroadcastStopFailed(int reason) { Log.d(TAG, "onBroadcastStopFailed(), reason = " + reason); + mStoppingSharing.compareAndSet(true, false); updateSwitch(); mMetricsFeatureProvider.action( mContext, @@ -565,6 +560,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController mDeviceItemsForSharing.remove(0); } if (mBroadcast != null) { + mStartingSharing.set(true); mBroadcast.startPrivateBroadcast(); mSinksInAdding.clear(); AudioSharingUtils.postOnMainThread(mContext, @@ -583,7 +579,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController 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 7851b2b38f8..dea98233609 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 @@ public class AudioSharingSwitchBarControllerTest { } @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 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 @@ public class AudioSharingSwitchBarControllerTest { verify(mFeatureFactory.metricsFeatureProvider, never()) .action(any(Context.class), eq(SettingsEnums.ACTION_AUTO_JOIN_AUDIO_SHARING)); - childFragments = mParentFragment.getChildFragmentManager().getFragments(); + List childFragments = mParentFragment.getChildFragmentManager().getFragments(); // No audio sharing dialog. assertThat(childFragments).comparingElementsUsing(CLAZZNAME_EQUALS).doesNotContain( AudioSharingDialogFragment.class.getName()); @@ -613,7 +604,7 @@ public class AudioSharingSwitchBarControllerTest { } @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 @@ public class AudioSharingSwitchBarControllerTest { } @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 @@ public class AudioSharingSwitchBarControllerTest { } @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);