Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a4106f1 authored by chelseahao's avatar chelseahao Committed by Chelsea Hao
Browse files

Skip starting audio stream service by UI events when flag is on.

The service will be started by broadcast receiver.

Test: atest
Bug: 398700619
Flag: com.android.settingslib.flags.audio_stream_media_service_by_receive_state
Change-Id: Idead58bc10dffaeb969643e967760a36106071cb
parent 56fe19d9
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -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();
                        if (!Flags.audioStreamMediaServiceByReceiveState()) {
                            mAudioStreamsHelper.startMediaService(
                                    mContext, mBroadcastId, mBroadcastName);
                        }
                    } else if (mHysteresisModeFixAvailable && localSourceState == PAUSED) {
                        // if source paused, only update the summary
                        updateSummary();
+7 −4
Original line number Diff line number Diff line
@@ -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);
        }
        if (!Flags.audioStreamMediaServiceByReceiveState()) {
            helper.startMediaService(
                    context,
                    preference.getAudioStreamBroadcastId(),
                    String.valueOf(preference.getTitle()));
        }
        mMetricsFeatureProvider.action(
                preference.getContext(),
                SettingsEnums.ACTION_AUDIO_STREAM_JOIN_SUCCEED,
+7 −0
Original line number Diff line number Diff line
@@ -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
+31 −1
Original line number Diff line number Diff line
@@ -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);