Loading src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java +7 −11 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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( Loading @@ -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(); Loading @@ -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, Loading Loading @@ -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, Loading @@ -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(); } } Loading tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java +6 −15 Original line number Original line Diff line number Diff line Loading @@ -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(); Loading @@ -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()); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading
src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java +7 −11 Original line number Original line Diff line number Diff line Loading @@ -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 Loading Loading @@ -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( Loading @@ -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(); Loading @@ -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, Loading Loading @@ -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, Loading @@ -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(); } } Loading
tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java +6 −15 Original line number Original line Diff line number Diff line Loading @@ -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(); Loading @@ -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()); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading