diff --git a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamHeaderController.java b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamHeaderController.java index 6037577162f..a9cca9ddc99 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamHeaderController.java +++ b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamHeaderController.java @@ -40,6 +40,7 @@ import com.android.settings.dashboard.DashboardFragment; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.bluetooth.BluetoothUtils; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant; +import com.android.settingslib.flags.Flags; import com.android.settingslib.utils.ThreadUtils; import com.android.settingslib.widget.LayoutPreference; @@ -88,8 +89,10 @@ public class AudioStreamHeaderController extends BasePreferenceController var localSourceState = getLocalSourceState(state); if (localSourceState == STREAMING) { updateSummary(); - mAudioStreamsHelper.startMediaService( - mContext, mBroadcastId, mBroadcastName); + if (!Flags.audioStreamMediaServiceByReceiveState()) { + mAudioStreamsHelper.startMediaService( + mContext, mBroadcastId, mBroadcastName); + } } else if (mHysteresisModeFixAvailable && localSourceState == PAUSED) { // if source paused, only update the summary updateSummary(); diff --git a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/SourceAddedState.java b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/SourceAddedState.java index 88393ab1b67..47a6da9510e 100644 --- a/src/com/android/settings/connecteddevice/audiosharing/audiostreams/SourceAddedState.java +++ b/src/com/android/settings/connecteddevice/audiosharing/audiostreams/SourceAddedState.java @@ -26,6 +26,7 @@ import androidx.preference.Preference; import com.android.settings.R; import com.android.settings.core.SubSettingLauncher; import com.android.settings.dashboard.DashboardFragment; +import com.android.settingslib.flags.Flags; class SourceAddedState extends AudioStreamStateHandler { @VisibleForTesting @@ -55,10 +56,12 @@ class SourceAddedState extends AudioStreamStateHandler { if (cached != null) { mAudioStreamsRepository.saveMetadata(context, cached); } - helper.startMediaService( - context, - preference.getAudioStreamBroadcastId(), - String.valueOf(preference.getTitle())); + if (!Flags.audioStreamMediaServiceByReceiveState()) { + helper.startMediaService( + context, + preference.getAudioStreamBroadcastId(), + String.valueOf(preference.getTitle())); + } mMetricsFeatureProvider.action( preference.getContext(), SettingsEnums.ACTION_AUDIO_STREAM_JOIN_SUCCEED, diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamHeaderControllerTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamHeaderControllerTest.java index 056514620d2..820f13028f4 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamHeaderControllerTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/AudioStreamHeaderControllerTest.java @@ -26,6 +26,9 @@ import static com.android.settingslib.flags.Flags.FLAG_ENABLE_LE_AUDIO_SHARING; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; @@ -39,6 +42,7 @@ import android.bluetooth.BluetoothLeBroadcastReceiveState; import android.bluetooth.BluetoothStatusCodes; import android.content.Context; import android.graphics.drawable.Drawable; +import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import androidx.lifecycle.LifecycleOwner; @@ -52,6 +56,7 @@ import com.android.settings.testutils.shadow.ShadowThreadUtils; import com.android.settings.widget.EntityHeaderController; import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant; import com.android.settingslib.core.lifecycle.Lifecycle; +import com.android.settingslib.flags.Flags; import com.android.settingslib.widget.LayoutPreference; import org.junit.After; @@ -254,6 +259,7 @@ public class AudioStreamHeaderControllerTest { } @Test + @EnableFlags(Flags.FLAG_AUDIO_STREAM_MEDIA_SERVICE_BY_RECEIVE_STATE) public void testCallback_onReceiveStateChanged_updateButton() { when(mAudioStreamsHelper.getConnectedBroadcastIdAndState(anyBoolean())) .thenReturn(Map.of(BROADCAST_ID, STREAMING)); @@ -271,6 +277,7 @@ public class AudioStreamHeaderControllerTest { verify(mHeaderController, times(2)) .setSummary(mContext.getString(AUDIO_STREAM_HEADER_LISTENING_NOW_SUMMARY)); verify(mHeaderController, times(2)).done(true); + verify(mAudioStreamsHelper, never()).startMediaService(any(), anyInt(), anyString()); } @Test diff --git a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/SourceAddedStateTest.java b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/SourceAddedStateTest.java index 59a42a1023d..bda0e6ea21a 100644 --- a/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/SourceAddedStateTest.java +++ b/tests/robotests/src/com/android/settings/connecteddevice/audiosharing/audiostreams/SourceAddedStateTest.java @@ -22,9 +22,12 @@ import static com.android.settings.connecteddevice.audiosharing.audiostreams.Sou import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -33,6 +36,9 @@ import android.bluetooth.BluetoothLeBroadcastMetadata; import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.platform.test.annotations.DisableFlags; +import android.platform.test.annotations.EnableFlags; +import android.platform.test.flag.junit.SetFlagsRule; import androidx.fragment.app.FragmentActivity; import androidx.preference.Preference; @@ -43,6 +49,7 @@ import com.android.settings.SettingsActivity; import com.android.settings.testutils.FakeFeatureFactory; import com.android.settings.testutils.shadow.ShadowFragment; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; +import com.android.settingslib.flags.Flags; import org.junit.Before; import org.junit.Rule; @@ -62,6 +69,7 @@ import org.robolectric.annotation.Config; }) public class SourceAddedStateTest { @Rule public final MockitoRule mMockitoRule = MockitoJUnit.rule(); + @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private static final int BROADCAST_ID = 1; private static final String BROADCAST_TITLE = "title"; private final Context mContext = ApplicationProvider.getApplicationContext(); @@ -105,7 +113,8 @@ public class SourceAddedStateTest { } @Test - public void testPerformAction() { + @DisableFlags(Flags.FLAG_AUDIO_STREAM_MEDIA_SERVICE_BY_RECEIVE_STATE) + public void testPerformAction_startService() { mInstance.setAudioStreamsRepositoryForTesting(mRepository); BluetoothLeBroadcastMetadata mockMetadata = mock(BluetoothLeBroadcastMetadata.class); when(mRepository.getCachedMetadata(anyInt())).thenReturn(mockMetadata); @@ -124,6 +133,27 @@ public class SourceAddedStateTest { verify(mHelper).startMediaService(eq(mContext), eq(BROADCAST_ID), eq(BROADCAST_TITLE)); } + @Test + @EnableFlags(Flags.FLAG_AUDIO_STREAM_MEDIA_SERVICE_BY_RECEIVE_STATE) + public void testPerformAction_skipStartService() { + mInstance.setAudioStreamsRepositoryForTesting(mRepository); + BluetoothLeBroadcastMetadata mockMetadata = mock(BluetoothLeBroadcastMetadata.class); + when(mRepository.getCachedMetadata(anyInt())).thenReturn(mockMetadata); + when(mPreference.getContext()).thenReturn(mContext); + when(mPreference.getSourceOriginForLogging()) + .thenReturn(SourceOriginForLogging.QR_CODE_SCAN_SETTINGS); + + mInstance.performAction(mPreference, mController, mHelper); + + verify(mRepository).saveMetadata(eq(mContext), eq(mockMetadata)); + verify(mFeatureFactory.metricsFeatureProvider) + .action( + eq(mContext), + eq(SettingsEnums.ACTION_AUDIO_STREAM_JOIN_SUCCEED), + eq(SourceOriginForLogging.QR_CODE_SCAN_SETTINGS.ordinal())); + verify(mHelper, never()).startMediaService(any(), anyInt(), anyString()); + } + @Test public void testGetOnClickListener_startSubSettings() { when(mController.getFragment()).thenReturn(mFragment);