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

This commit is contained in:
Yiyi Shen
2025-01-22 00:02:30 -08:00
committed by Android (Google) Code Review
2 changed files with 13 additions and 26 deletions

View File

@@ -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();
} }

View File

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