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

View File

@@ -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<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 @@ public class AudioSharingSwitchBarControllerTest {
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 @@ 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);