Loading src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java +22 −8 Original line number Diff line number Diff line Loading @@ -201,6 +201,19 @@ public class AudioSharingSwitchBarController extends BasePreferenceController + reason + ", broadcastId = " + broadcastId); 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."); cleanUp(); return; } handleOnBroadcastReady(); } Loading Loading @@ -554,8 +567,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController mGroupedConnectedDevices.getOrDefault( mDeviceItemsForSharing.get(0).getGroupId(), ImmutableList.of()), mBtManager); mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); cleanUp(); // TODO: Add metric for auto add by intent return; } Loading @@ -565,8 +577,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController StartIntentHandleStage.HANDLED.ordinal()); if (mFragment == null) { Log.d(TAG, "handleOnBroadcastReady: dialog fail to show due to null fragment."); mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); cleanUp(); return; } showDialog(eventData); Loading @@ -581,14 +592,12 @@ public class AudioSharingSwitchBarController extends BasePreferenceController mGroupedConnectedDevices.getOrDefault( item.getGroupId(), ImmutableList.of()), mBtManager); mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); cleanUp(); } @Override public void onCancelClick() { mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); cleanUp(); } }; AudioSharingUtils.postOnMainThread( Loading Loading @@ -657,6 +666,11 @@ public class AudioSharingSwitchBarController extends BasePreferenceController }); } private void cleanUp() { mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); } private enum StartIntentHandleStage { TO_HANDLE, HANDLE_AUTO_ADD, Loading tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java +29 −0 Original line number Diff line number Diff line Loading @@ -443,6 +443,7 @@ public class AudioSharingSwitchBarControllerTest { mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true); when(mBtnView.isEnabled()).thenReturn(true); when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1)); when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of()); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); doNothing().when(mBroadcast).startPrivateBroadcast(); mController = Loading @@ -468,12 +469,38 @@ public class AudioSharingSwitchBarControllerTest { assertThat(childFragments).isEmpty(); } @Test public void onPlaybackStarted_hasLocalSource_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)); BluetoothLeBroadcastReceiveState state = mock(BluetoothLeBroadcastReceiveState.class); when(state.getBroadcastId()).thenReturn(1); when(mBroadcast.getLatestBroadcastId()).thenReturn(1); when(mAssistant.getAllSources(mDevice2)).thenReturn(ImmutableList.of(state)); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); doNothing().when(mBroadcast).startPrivateBroadcast(); mController.onCheckedChanged(mBtnView, /* isChecked= */ true); verify(mBroadcast).startPrivateBroadcast(); mController.mBroadcastCallback.onPlaybackStarted(0, 0); shadowOf(Looper.getMainLooper()).idle(); verify(mAssistant, never()).addSource(any(), any(), anyBoolean()); verify(mFeatureFactory.metricsFeatureProvider, never()) .action(any(Context.class), eq(SettingsEnums.ACTION_AUTO_JOIN_AUDIO_SHARING)); List<Fragment> childFragments = mParentFragment.getChildFragmentManager().getFragments(); assertThat(childFragments).isEmpty(); } @Test public void onPlaybackStarted_showJoinAudioSharingDialog() { 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(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of()); doNothing().when(mBroadcast).startPrivateBroadcast(); mController.onCheckedChanged(mBtnView, /* isChecked= */ true); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); Loading Loading @@ -519,6 +546,7 @@ public class AudioSharingSwitchBarControllerTest { mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true); when(mBtnView.isEnabled()).thenReturn(true); when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1)); when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of()); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); doNothing().when(mBroadcast).startPrivateBroadcast(); mController.onCheckedChanged(mBtnView, /* isChecked= */ true); Loading @@ -545,6 +573,7 @@ public class AudioSharingSwitchBarControllerTest { mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true); when(mBtnView.isEnabled()).thenReturn(true); when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1)); when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of()); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); doNothing().when(mBroadcast).startPrivateBroadcast(); mController.onCheckedChanged(mBtnView, /* isChecked= */ true); Loading Loading
src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarController.java +22 −8 Original line number Diff line number Diff line Loading @@ -201,6 +201,19 @@ public class AudioSharingSwitchBarController extends BasePreferenceController + reason + ", broadcastId = " + broadcastId); 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."); cleanUp(); return; } handleOnBroadcastReady(); } Loading Loading @@ -554,8 +567,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController mGroupedConnectedDevices.getOrDefault( mDeviceItemsForSharing.get(0).getGroupId(), ImmutableList.of()), mBtManager); mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); cleanUp(); // TODO: Add metric for auto add by intent return; } Loading @@ -565,8 +577,7 @@ public class AudioSharingSwitchBarController extends BasePreferenceController StartIntentHandleStage.HANDLED.ordinal()); if (mFragment == null) { Log.d(TAG, "handleOnBroadcastReady: dialog fail to show due to null fragment."); mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); cleanUp(); return; } showDialog(eventData); Loading @@ -581,14 +592,12 @@ public class AudioSharingSwitchBarController extends BasePreferenceController mGroupedConnectedDevices.getOrDefault( item.getGroupId(), ImmutableList.of()), mBtManager); mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); cleanUp(); } @Override public void onCancelClick() { mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); cleanUp(); } }; AudioSharingUtils.postOnMainThread( Loading Loading @@ -657,6 +666,11 @@ public class AudioSharingSwitchBarController extends BasePreferenceController }); } private void cleanUp() { mGroupedConnectedDevices.clear(); mDeviceItemsForSharing.clear(); } private enum StartIntentHandleStage { TO_HANDLE, HANDLE_AUTO_ADD, Loading
tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingSwitchBarControllerTest.java +29 −0 Original line number Diff line number Diff line Loading @@ -443,6 +443,7 @@ public class AudioSharingSwitchBarControllerTest { mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true); when(mBtnView.isEnabled()).thenReturn(true); when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1)); when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of()); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); doNothing().when(mBroadcast).startPrivateBroadcast(); mController = Loading @@ -468,12 +469,38 @@ public class AudioSharingSwitchBarControllerTest { assertThat(childFragments).isEmpty(); } @Test public void onPlaybackStarted_hasLocalSource_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)); BluetoothLeBroadcastReceiveState state = mock(BluetoothLeBroadcastReceiveState.class); when(state.getBroadcastId()).thenReturn(1); when(mBroadcast.getLatestBroadcastId()).thenReturn(1); when(mAssistant.getAllSources(mDevice2)).thenReturn(ImmutableList.of(state)); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); doNothing().when(mBroadcast).startPrivateBroadcast(); mController.onCheckedChanged(mBtnView, /* isChecked= */ true); verify(mBroadcast).startPrivateBroadcast(); mController.mBroadcastCallback.onPlaybackStarted(0, 0); shadowOf(Looper.getMainLooper()).idle(); verify(mAssistant, never()).addSource(any(), any(), anyBoolean()); verify(mFeatureFactory.metricsFeatureProvider, never()) .action(any(Context.class), eq(SettingsEnums.ACTION_AUTO_JOIN_AUDIO_SHARING)); List<Fragment> childFragments = mParentFragment.getChildFragmentManager().getFragments(); assertThat(childFragments).isEmpty(); } @Test public void onPlaybackStarted_showJoinAudioSharingDialog() { 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(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of()); doNothing().when(mBroadcast).startPrivateBroadcast(); mController.onCheckedChanged(mBtnView, /* isChecked= */ true); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); Loading Loading @@ -519,6 +546,7 @@ public class AudioSharingSwitchBarControllerTest { mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true); when(mBtnView.isEnabled()).thenReturn(true); when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1)); when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of()); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); doNothing().when(mBroadcast).startPrivateBroadcast(); mController.onCheckedChanged(mBtnView, /* isChecked= */ true); Loading @@ -545,6 +573,7 @@ public class AudioSharingSwitchBarControllerTest { mContext, FeatureFlagUtils.SETTINGS_NEED_CONNECTED_BLE_DEVICE_FOR_BROADCAST, true); when(mBtnView.isEnabled()).thenReturn(true); when(mAssistant.getAllConnectedDevices()).thenReturn(ImmutableList.of(mDevice2, mDevice1)); when(mAssistant.getAllSources(any(BluetoothDevice.class))).thenReturn(ImmutableList.of()); when(mBroadcast.getLatestBluetoothLeBroadcastMetadata()).thenReturn(mMetadata); doNothing().when(mBroadcast).startPrivateBroadcast(); mController.onCheckedChanged(mBtnView, /* isChecked= */ true); Loading