diff --git a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandler.java b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandler.java index 14c19decb6f..6f55a137ba2 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandler.java +++ b/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandler.java @@ -16,7 +16,7 @@ package com.android.settings.connecteddevice.audiosharing; -import static java.util.stream.Collectors.toList; +import static com.android.settingslib.bluetooth.LocalBluetoothLeBroadcast.EXTRA_START_LE_AUDIO_SHARING; import android.app.settings.SettingsEnums; import android.bluetooth.BluetoothCsipSetCoordinator; @@ -25,6 +25,7 @@ import android.bluetooth.BluetoothLeBroadcast; import android.bluetooth.BluetoothLeBroadcastMetadata; import android.bluetooth.BluetoothLeBroadcastReceiveState; import android.content.Context; +import android.os.Bundle; import android.util.Log; import android.util.Pair; @@ -34,6 +35,7 @@ import androidx.annotation.VisibleForTesting; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; +import com.android.settings.R; import com.android.settings.bluetooth.Utils; import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; @@ -63,8 +65,6 @@ public class AudioSharingDialogHandler { @Nullable private final LocalBluetoothLeBroadcast mBroadcast; @Nullable private final LocalBluetoothLeBroadcastAssistant mAssistant; private final MetricsFeatureProvider mMetricsFeatureProvider; - // The target sinks to join broadcast onPlaybackStarted - @Nullable private List mTargetSinks; private boolean mIsStoppingBroadcast = false; @VisibleForTesting @@ -83,15 +83,6 @@ public class AudioSharingDialogHandler { @Override public void onBroadcastStartFailed(int reason) { Log.d(TAG, "onBroadcastStartFailed(), reason = " + reason); - if (mTargetSinks != null) { - mMetricsFeatureProvider.action( - mContext, - SettingsEnums.ACTION_AUDIO_SHARING_START_FAILED, - SettingsEnums.SETTINGS_CONNECTED_DEVICE_CATEGORY); - AudioSharingUtils.toastMessage( - mContext, "Fail to start broadcast, reason " + reason); - mTargetSinks = null; - } } @Override @@ -113,6 +104,9 @@ public class AudioSharingDialogHandler { + reason + ", broadcastId = " + broadcastId); + AudioSharingUtils.toastMessage( + mContext, + mContext.getString(R.string.audio_sharing_sharing_stopped_label)); mIsStoppingBroadcast = false; } @@ -144,18 +138,6 @@ public class AudioSharingDialogHandler { + reason + ", broadcastId = " + broadcastId); - if (mTargetSinks != null) { - AudioSharingUtils.addSourceToTargetSinks(mTargetSinks, mLocalBtManager); - new SubSettingLauncher(mContext) - .setDestination(AudioSharingDashboardFragment.class.getName()) - .setSourceMetricsCategory( - (mHostFragment instanceof DashboardFragment) - ? ((DashboardFragment) mHostFragment) - .getMetricsCategory() - : SettingsEnums.PAGE_UNKNOWN) - .launch(); - mTargetSinks = null; - } } @Override @@ -375,14 +357,18 @@ public class AudioSharingDialogHandler { new AudioSharingJoinDialogFragment.DialogEventListener() { @Override public void onShareClick() { - mTargetSinks = - groupedDevices.values().stream() - .flatMap(items -> items.stream()) - .collect(toList()); - Log.d(TAG, "Start broadcast with sinks = " + mTargetSinks.size()); - if (mBroadcast != null) { - mBroadcast.startPrivateBroadcast(); - } + Bundle args = new Bundle(); + args.putBoolean(EXTRA_START_LE_AUDIO_SHARING, true); + new SubSettingLauncher(mContext) + .setDestination( + AudioSharingDashboardFragment.class.getName()) + .setSourceMetricsCategory( + (mHostFragment instanceof DashboardFragment) + ? ((DashboardFragment) mHostFragment) + .getMetricsCategory() + : SettingsEnums.PAGE_UNKNOWN) + .setArguments(args) + .launch(); } @Override diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandlerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandlerTest.java index 1bff78bc7c2..4933c430c15 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandlerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/AudioSharingDialogHandlerTest.java @@ -24,6 +24,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; @@ -37,6 +38,8 @@ import android.bluetooth.BluetoothLeBroadcastMetadata; import android.bluetooth.BluetoothLeBroadcastReceiveState; import android.bluetooth.BluetoothStatusCodes; import android.content.Context; +import android.content.Intent; +import android.os.Bundle; import android.os.Looper; import android.platform.test.flag.junit.SetFlagsRule; import android.util.Pair; @@ -45,6 +48,7 @@ import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; +import com.android.settings.SettingsActivity; import com.android.settings.bluetooth.Utils; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowBluetoothAdapter; @@ -67,6 +71,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; @@ -132,7 +137,7 @@ public class AudioSharingDialogHandlerTest { FragmentActivity.class, 0 /* containerViewId */, null /* bundle */); - mContext = mParentFragment.getContext(); + mContext = spy(mParentFragment.getContext()); ShadowBluetoothUtils.sLocalBluetoothManager = mLocalBtManager; mLocalBtManager = Utils.getLocalBtManager(mContext); ShadowBluetoothAdapter shadowBluetoothAdapter = @@ -294,7 +299,17 @@ public class AudioSharingDialogHandlerTest { AudioSharingJoinDialogFragment.DialogEventListener listener = fragment.getListener(); assertThat(listener).isNotNull(); listener.onShareClick(); - verify(mBroadcast).startPrivateBroadcast(); + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); + verify(mContext).startActivity(argumentCaptor.capture()); + Intent intent = argumentCaptor.getValue(); + assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) + .isEqualTo(AudioSharingDashboardFragment.class.getName()); + assertThat(intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS)) + .isNotNull(); + Bundle args = intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS); + assertThat(args).isNotNull(); + assertThat(args.getBoolean(LocalBluetoothLeBroadcast.EXTRA_START_LE_AUDIO_SHARING)) + .isTrue(); listener.onCancelClick(); verify(mCachedDevice1).setActive(); } @@ -500,7 +515,17 @@ public class AudioSharingDialogHandlerTest { AudioSharingJoinDialogFragment.DialogEventListener listener = fragment.getListener(); assertThat(listener).isNotNull(); listener.onShareClick(); - verify(mBroadcast).startPrivateBroadcast(); + ArgumentCaptor argumentCaptor = ArgumentCaptor.forClass(Intent.class); + verify(mContext).startActivity(argumentCaptor.capture()); + Intent intent = argumentCaptor.getValue(); + assertThat(intent.getStringExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT)) + .isEqualTo(AudioSharingDashboardFragment.class.getName()); + assertThat(intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS)) + .isNotNull(); + Bundle args = intent.getBundleExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS); + assertThat(args).isNotNull(); + assertThat(args.getBoolean(LocalBluetoothLeBroadcast.EXTRA_START_LE_AUDIO_SHARING)) + .isTrue(); listener.onCancelClick(); verify(mCachedDevice1, never()).setActive(); } @@ -726,58 +751,6 @@ public class AudioSharingDialogHandlerTest { verify(mBroadcast).unregisterServiceCallBack(any(BluetoothLeBroadcast.Callback.class)); } - @Test - public void onBroadcastStartFailed_logAction() { - setUpBroadcast(false); - ImmutableList deviceList = ImmutableList.of(mDevice1, mDevice3); - when(mAssistant.getAllConnectedDevices()).thenReturn(deviceList); - when(mAssistant.getAllSources(any())).thenReturn(ImmutableList.of()); - mHandler.handleDeviceConnected(mCachedDevice1, /* userTriggered= */ false); - shadowOf(Looper.getMainLooper()).idle(); - List childFragments = mParentFragment.getChildFragmentManager().getFragments(); - assertThat(childFragments) - .comparingElementsUsing(TAG_EQUALS) - .containsExactly(AudioSharingJoinDialogFragment.tag()); - AudioSharingJoinDialogFragment fragment = - (AudioSharingJoinDialogFragment) Iterables.getOnlyElement(childFragments); - AudioSharingJoinDialogFragment.DialogEventListener listener = fragment.getListener(); - assertThat(listener).isNotNull(); - listener.onShareClick(); - - mHandler.mBroadcastCallback.onBroadcastStartFailed(/* reason= */ 1); - verify(mFeatureFactory.metricsFeatureProvider) - .action( - mContext, - SettingsEnums.ACTION_AUDIO_SHARING_START_FAILED, - SettingsEnums.SETTINGS_CONNECTED_DEVICE_CATEGORY); - } - - @Test - public void onPlaybackStarted_addSource() { - setUpBroadcast(false); - ImmutableList deviceList = ImmutableList.of(mDevice1, mDevice3); - when(mAssistant.getAllConnectedDevices()).thenReturn(deviceList); - when(mAssistant.getAllSources(any())).thenReturn(ImmutableList.of()); - mHandler.handleDeviceConnected(mCachedDevice1, /* userTriggered= */ true); - shadowOf(Looper.getMainLooper()).idle(); - List childFragments = mParentFragment.getChildFragmentManager().getFragments(); - assertThat(childFragments) - .comparingElementsUsing(TAG_EQUALS) - .containsExactly(AudioSharingJoinDialogFragment.tag()); - AudioSharingJoinDialogFragment fragment = - (AudioSharingJoinDialogFragment) Iterables.getOnlyElement(childFragments); - AudioSharingJoinDialogFragment.DialogEventListener listener = fragment.getListener(); - assertThat(listener).isNotNull(); - listener.onShareClick(); - - setUpBroadcast(true); - mHandler.mBroadcastCallback.onPlaybackStarted(/* reason= */ 1, /* broadcastId= */ 1); - shadowOf(Looper.getMainLooper()).idle(); - - verify(mAssistant).addSource(mDevice1, mMetadata, /* isGroupOp= */ false); - verify(mAssistant).addSource(mDevice3, mMetadata, /* isGroupOp= */ false); - } - @Test public void onBroadcastStopFailed_logAction() { setUpBroadcast(true); @@ -808,6 +781,7 @@ public class AudioSharingDialogHandlerTest { @Test public void testBluetoothLeBroadcastCallbacks_doNothing() { mHandler.mBroadcastCallback.onBroadcastStarted(/* reason= */ 1, /* broadcastId= */ 1); + mHandler.mBroadcastCallback.onBroadcastStartFailed(/* reason= */ 1); mHandler.mBroadcastCallback.onBroadcastMetadataChanged(/* reason= */ 1, mMetadata); mHandler.mBroadcastCallback.onBroadcastUpdated(/* reason= */ 1, /* broadcastId= */ 1); mHandler.mBroadcastCallback.onPlaybackStarted(/* reason= */ 1, /* broadcastId= */ 1);