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

Commit e5302bc1 authored by Yiyi Shen's avatar Yiyi Shen Committed by Android (Google) Code Review
Browse files

Merge "[Audiosharing] Gates legacy le audio sharing UI in sound Settings." into main

parents 8b62b28f 27fb8531
Loading
Loading
Loading
Loading
+31 −16
Original line number Diff line number Diff line
@@ -37,6 +37,7 @@ import com.android.settings.media.MediaOutputIndicatorWorker;
import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.media.BluetoothMediaDevice;
import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.media.MediaOutputConstants;
@@ -94,7 +95,9 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont

    @VisibleForTesting
    boolean isSupportEndItem() {
        return getWorker() != null && getWorker().isBroadcastSupported()
        return Flags.legacyLeAudioSharing()
                && getWorker() != null
                && getWorker().isBroadcastSupported()
                && (getWorker().isDeviceBroadcasting() || isConnectedBLEDevice());
    }

@@ -114,7 +117,8 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
        if (mPreference != null) {
            if (mPreference.isMuted()) {
                mPreference.updateContentDescription(
                        mContext.getString(R.string.volume_content_description_silent_mode,
                        mContext.getString(
                                R.string.volume_content_description_silent_mode,
                                mPreference.getTitle()));
            } else {
                mPreference.updateContentDescription(mPreference.getTitle());
@@ -134,10 +138,15 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
        if (getWorker().isDeviceBroadcasting()) {
            intent.setPackage(MediaOutputConstants.SYSTEMUI_PACKAGE_NAME);
            intent.setAction(MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG);
            intent.putExtra(MediaOutputConstants.EXTRA_PACKAGE_NAME,
            intent.putExtra(
                    MediaOutputConstants.EXTRA_PACKAGE_NAME,
                    getWorker().getActiveLocalMediaController().getPackageName());

            pi = PendingIntent.getBroadcast(context, 0 /* requestCode */, intent,
            pi =
                    PendingIntent.getBroadcast(
                            context,
                            0 /* requestCode */,
                            intent,
                            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
        } else {
            final CachedBluetoothDevice bluetoothDevice =
@@ -147,14 +156,20 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
                return null;
            }
            intent.setAction(ACTION_LAUNCH_BROADCAST_DIALOG);
            intent.putExtra(BluetoothBroadcastDialog.KEY_APP_LABEL,
            intent.putExtra(
                    BluetoothBroadcastDialog.KEY_APP_LABEL,
                    Utils.getApplicationLabel(mContext, getWorker().getPackageName()));
            intent.putExtra(BluetoothBroadcastDialog.KEY_DEVICE_ADDRESS,
                    bluetoothDevice.getAddress());
            intent.putExtra(BluetoothBroadcastDialog.KEY_MEDIA_STREAMING, getWorker() != null
                    && getWorker().getActiveLocalMediaController() != null);

            pi = PendingIntent.getActivity(context, 0 /* requestCode */, intent,
            intent.putExtra(
                    BluetoothBroadcastDialog.KEY_DEVICE_ADDRESS, bluetoothDevice.getAddress());
            intent.putExtra(
                    BluetoothBroadcastDialog.KEY_MEDIA_STREAMING,
                    getWorker() != null && getWorker().getActiveLocalMediaController() != null);

            pi =
                    PendingIntent.getActivity(
                            context,
                            0 /* requestCode */,
                            intent,
                            PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
        }

@@ -164,8 +179,8 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
    }

    private IconCompat getBroadcastIcon(Context context) {
        final Drawable drawable = context.getDrawable(
                com.android.settingslib.R.drawable.settings_input_antenna);
        final Drawable drawable =
                context.getDrawable(com.android.settingslib.R.drawable.settings_input_antenna);
        if (drawable != null) {
            drawable.setTint(Utils.getColorAccentDefaultColor(context));
            return Utils.createIconWithDrawable(drawable);
+60 −16
Original line number Diff line number Diff line
@@ -31,17 +31,23 @@ import android.content.Intent;
import android.media.AudioManager;
import android.media.session.MediaController;
import android.net.Uri;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;

import androidx.slice.builders.SliceAction;

import com.android.settings.media.MediaOutputIndicatorWorker;
import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.media.BluetoothMediaDevice;
import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.media.MediaOutputConstants;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
@@ -60,16 +66,16 @@ public class MediaVolumePreferenceControllerTest {
            "android.settings.MEDIA_BROADCAST_DIALOG";
    private static MediaOutputIndicatorWorker sMediaOutputIndicatorWorker;

    @Rule
    public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();

    private MediaVolumePreferenceController mController;

    private Context mContext;

    @Mock
    private MediaController mMediaController;
    @Mock
    private MediaDevice mDevice1;
    @Mock
    private MediaDevice mDevice2;
    @Mock private MediaController mMediaController;
    @Mock private MediaDevice mDevice1;
    @Mock private MediaDevice mDevice2;

    @Before
    public void setUp() {
@@ -77,8 +83,8 @@ public class MediaVolumePreferenceControllerTest {

        mContext = RuntimeEnvironment.application;
        mController = new MediaVolumePreferenceController(mContext);
        sMediaOutputIndicatorWorker = spy(
                new MediaOutputIndicatorWorker(mContext, VOLUME_MEDIA_URI));
        sMediaOutputIndicatorWorker =
                spy(new MediaOutputIndicatorWorker(mContext, VOLUME_MEDIA_URI));
        when(mDevice1.isBLEDevice()).thenReturn(true);
        when(mDevice2.isBLEDevice()).thenReturn(false);
    }
@@ -101,8 +107,8 @@ public class MediaVolumePreferenceControllerTest {

    @Test
    public void isSliceableCorrectKey_returnsTrue() {
        final MediaVolumePreferenceController controller = new MediaVolumePreferenceController(
                mContext);
        final MediaVolumePreferenceController controller =
                new MediaVolumePreferenceController(mContext);
        assertThat(controller.isSliceable()).isTrue();
    }

@@ -112,6 +118,17 @@ public class MediaVolumePreferenceControllerTest {
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void isSupportEndItem_flagOff_returnsFalse() {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
        doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();

        assertThat(mController.isSupportEndItem()).isFalse();
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void isSupportEndItem_withBleDevice_returnsTrue() {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -121,6 +138,7 @@ public class MediaVolumePreferenceControllerTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void isSupportEndItem_notSupportedBroadcast_returnsFalse() {
        doReturn(false).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
@@ -129,6 +147,7 @@ public class MediaVolumePreferenceControllerTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void isSupportEndItem_withNonBleDevice_returnsFalse() {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -138,6 +157,7 @@ public class MediaVolumePreferenceControllerTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void isSupportEndItem_deviceIsBroadcastingAndConnectedToNonBleDevice_returnsTrue() {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -147,6 +167,7 @@ public class MediaVolumePreferenceControllerTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void isSupportEndItem_deviceIsNotBroadcastingAndConnectedToNonBleDevice_returnsFalse() {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -155,8 +176,20 @@ public class MediaVolumePreferenceControllerTest {
        assertThat(mController.isSupportEndItem()).isFalse();
    }

    @Test
    @RequiresFlagsDisabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void getSliceEndItem_flagOff_getsNullSliceAction() {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
        doReturn(mDevice2).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();

        final SliceAction sliceAction = mController.getSliceEndItem(mContext);

        assertThat(sliceAction).isNull();
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void getSliceEndItem_NotSupportEndItem_getsNullSliceAction() {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -168,22 +201,26 @@ public class MediaVolumePreferenceControllerTest {
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void getSliceEndItem_deviceIsBroadcasting_getsBroadcastIntent() {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
        doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
        doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
        doReturn(mMediaController)
                .when(sMediaOutputIndicatorWorker)
                .getActiveLocalMediaController();

        final SliceAction sliceAction = mController.getSliceEndItem(mContext);

        final PendingIntent endItemPendingIntent = sliceAction.getAction();
        final PendingIntent expectedToggleIntent = getBroadcastIntent(
        final PendingIntent expectedToggleIntent =
                getBroadcastIntent(
                        MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG);
        assertThat(endItemPendingIntent).isEqualTo(expectedToggleIntent);
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
    public void getSliceEndItem_deviceIsNotBroadcasting_getsActivityIntent() {
        final MediaDevice device = mock(BluetoothMediaDevice.class);
        final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
@@ -192,7 +229,8 @@ public class MediaVolumePreferenceControllerTest {
        doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
        doReturn(device).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
        doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
        doReturn(mMediaController).when(sMediaOutputIndicatorWorker)
        doReturn(mMediaController)
                .when(sMediaOutputIndicatorWorker)
                .getActiveLocalMediaController();

        final SliceAction sliceAction = mController.getSliceEndItem(mContext);
@@ -215,13 +253,19 @@ public class MediaVolumePreferenceControllerTest {
    private PendingIntent getBroadcastIntent(String action) {
        final Intent intent = new Intent(action);
        intent.setPackage(MediaOutputConstants.SYSTEMUI_PACKAGE_NAME);
        return PendingIntent.getBroadcast(mContext, 0 /* requestCode */, intent,
        return PendingIntent.getBroadcast(
                mContext,
                0 /* requestCode */,
                intent,
                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
    }

    private PendingIntent getActivityIntent(String action) {
        final Intent intent = new Intent(action);
        return PendingIntent.getActivity(mContext, 0 /* requestCode */, intent,
        return PendingIntent.getActivity(
                mContext,
                0 /* requestCode */,
                intent,
                PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
    }
}