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

This commit is contained in:
Yiyi Shen
2024-02-29 09:50:42 +00:00
committed by Android (Google) Code Review
2 changed files with 90 additions and 31 deletions

View File

@@ -37,6 +37,7 @@ import com.android.settings.media.MediaOutputIndicatorWorker;
import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.CustomSliceRegistry;
import com.android.settings.slices.SliceBackgroundWorker; import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.media.BluetoothMediaDevice; import com.android.settingslib.media.BluetoothMediaDevice;
import com.android.settingslib.media.MediaDevice; import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.media.MediaOutputConstants; import com.android.settingslib.media.MediaOutputConstants;
@@ -94,7 +95,9 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
@VisibleForTesting @VisibleForTesting
boolean isSupportEndItem() { boolean isSupportEndItem() {
return getWorker() != null && getWorker().isBroadcastSupported() return Flags.legacyLeAudioSharing()
&& getWorker() != null
&& getWorker().isBroadcastSupported()
&& (getWorker().isDeviceBroadcasting() || isConnectedBLEDevice()); && (getWorker().isDeviceBroadcasting() || isConnectedBLEDevice());
} }
@@ -114,7 +117,8 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
if (mPreference != null) { if (mPreference != null) {
if (mPreference.isMuted()) { if (mPreference.isMuted()) {
mPreference.updateContentDescription( mPreference.updateContentDescription(
mContext.getString(R.string.volume_content_description_silent_mode, mContext.getString(
R.string.volume_content_description_silent_mode,
mPreference.getTitle())); mPreference.getTitle()));
} else { } else {
mPreference.updateContentDescription(mPreference.getTitle()); mPreference.updateContentDescription(mPreference.getTitle());
@@ -134,10 +138,15 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
if (getWorker().isDeviceBroadcasting()) { if (getWorker().isDeviceBroadcasting()) {
intent.setPackage(MediaOutputConstants.SYSTEMUI_PACKAGE_NAME); intent.setPackage(MediaOutputConstants.SYSTEMUI_PACKAGE_NAME);
intent.setAction(MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG); intent.setAction(MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG);
intent.putExtra(MediaOutputConstants.EXTRA_PACKAGE_NAME, intent.putExtra(
MediaOutputConstants.EXTRA_PACKAGE_NAME,
getWorker().getActiveLocalMediaController().getPackageName()); getWorker().getActiveLocalMediaController().getPackageName());
pi = PendingIntent.getBroadcast(context, 0 /* requestCode */, intent, pi =
PendingIntent.getBroadcast(
context,
0 /* requestCode */,
intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} else { } else {
final CachedBluetoothDevice bluetoothDevice = final CachedBluetoothDevice bluetoothDevice =
@@ -147,14 +156,20 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
return null; return null;
} }
intent.setAction(ACTION_LAUNCH_BROADCAST_DIALOG); intent.setAction(ACTION_LAUNCH_BROADCAST_DIALOG);
intent.putExtra(BluetoothBroadcastDialog.KEY_APP_LABEL, intent.putExtra(
BluetoothBroadcastDialog.KEY_APP_LABEL,
Utils.getApplicationLabel(mContext, getWorker().getPackageName())); Utils.getApplicationLabel(mContext, getWorker().getPackageName()));
intent.putExtra(BluetoothBroadcastDialog.KEY_DEVICE_ADDRESS, intent.putExtra(
bluetoothDevice.getAddress()); BluetoothBroadcastDialog.KEY_DEVICE_ADDRESS, bluetoothDevice.getAddress());
intent.putExtra(BluetoothBroadcastDialog.KEY_MEDIA_STREAMING, getWorker() != null intent.putExtra(
&& getWorker().getActiveLocalMediaController() != null); BluetoothBroadcastDialog.KEY_MEDIA_STREAMING,
getWorker() != null && getWorker().getActiveLocalMediaController() != null);
pi = PendingIntent.getActivity(context, 0 /* requestCode */, intent, pi =
PendingIntent.getActivity(
context,
0 /* requestCode */,
intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} }
@@ -164,8 +179,8 @@ public class MediaVolumePreferenceController extends VolumeSeekBarPreferenceCont
} }
private IconCompat getBroadcastIcon(Context context) { private IconCompat getBroadcastIcon(Context context) {
final Drawable drawable = context.getDrawable( final Drawable drawable =
com.android.settingslib.R.drawable.settings_input_antenna); context.getDrawable(com.android.settingslib.R.drawable.settings_input_antenna);
if (drawable != null) { if (drawable != null) {
drawable.setTint(Utils.getColorAccentDefaultColor(context)); drawable.setTint(Utils.getColorAccentDefaultColor(context));
return Utils.createIconWithDrawable(drawable); return Utils.createIconWithDrawable(drawable);

View File

@@ -31,17 +31,23 @@ import android.content.Intent;
import android.media.AudioManager; import android.media.AudioManager;
import android.media.session.MediaController; import android.media.session.MediaController;
import android.net.Uri; 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 androidx.slice.builders.SliceAction;
import com.android.settings.media.MediaOutputIndicatorWorker; import com.android.settings.media.MediaOutputIndicatorWorker;
import com.android.settings.slices.SliceBackgroundWorker; import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settingslib.bluetooth.CachedBluetoothDevice; import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;
import com.android.settingslib.media.BluetoothMediaDevice; import com.android.settingslib.media.BluetoothMediaDevice;
import com.android.settingslib.media.MediaDevice; import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.media.MediaOutputConstants; import com.android.settingslib.media.MediaOutputConstants;
import org.junit.Before; import org.junit.Before;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
@@ -60,16 +66,16 @@ public class MediaVolumePreferenceControllerTest {
"android.settings.MEDIA_BROADCAST_DIALOG"; "android.settings.MEDIA_BROADCAST_DIALOG";
private static MediaOutputIndicatorWorker sMediaOutputIndicatorWorker; private static MediaOutputIndicatorWorker sMediaOutputIndicatorWorker;
@Rule
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
private MediaVolumePreferenceController mController; private MediaVolumePreferenceController mController;
private Context mContext; private Context mContext;
@Mock @Mock private MediaController mMediaController;
private MediaController mMediaController; @Mock private MediaDevice mDevice1;
@Mock @Mock private MediaDevice mDevice2;
private MediaDevice mDevice1;
@Mock
private MediaDevice mDevice2;
@Before @Before
public void setUp() { public void setUp() {
@@ -77,8 +83,8 @@ public class MediaVolumePreferenceControllerTest {
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mController = new MediaVolumePreferenceController(mContext); mController = new MediaVolumePreferenceController(mContext);
sMediaOutputIndicatorWorker = spy( sMediaOutputIndicatorWorker =
new MediaOutputIndicatorWorker(mContext, VOLUME_MEDIA_URI)); spy(new MediaOutputIndicatorWorker(mContext, VOLUME_MEDIA_URI));
when(mDevice1.isBLEDevice()).thenReturn(true); when(mDevice1.isBLEDevice()).thenReturn(true);
when(mDevice2.isBLEDevice()).thenReturn(false); when(mDevice2.isBLEDevice()).thenReturn(false);
} }
@@ -101,8 +107,8 @@ public class MediaVolumePreferenceControllerTest {
@Test @Test
public void isSliceableCorrectKey_returnsTrue() { public void isSliceableCorrectKey_returnsTrue() {
final MediaVolumePreferenceController controller = new MediaVolumePreferenceController( final MediaVolumePreferenceController controller =
mContext); new MediaVolumePreferenceController(mContext);
assertThat(controller.isSliceable()).isTrue(); assertThat(controller.isSliceable()).isTrue();
} }
@@ -112,6 +118,17 @@ public class MediaVolumePreferenceControllerTest {
} }
@Test @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() { public void isSupportEndItem_withBleDevice_returnsTrue() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -121,6 +138,7 @@ public class MediaVolumePreferenceControllerTest {
} }
@Test @Test
@RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
public void isSupportEndItem_notSupportedBroadcast_returnsFalse() { public void isSupportEndItem_notSupportedBroadcast_returnsFalse() {
doReturn(false).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(false).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
@@ -129,6 +147,7 @@ public class MediaVolumePreferenceControllerTest {
} }
@Test @Test
@RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
public void isSupportEndItem_withNonBleDevice_returnsFalse() { public void isSupportEndItem_withNonBleDevice_returnsFalse() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -138,6 +157,7 @@ public class MediaVolumePreferenceControllerTest {
} }
@Test @Test
@RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
public void isSupportEndItem_deviceIsBroadcastingAndConnectedToNonBleDevice_returnsTrue() { public void isSupportEndItem_deviceIsBroadcastingAndConnectedToNonBleDevice_returnsTrue() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -147,6 +167,7 @@ public class MediaVolumePreferenceControllerTest {
} }
@Test @Test
@RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
public void isSupportEndItem_deviceIsNotBroadcastingAndConnectedToNonBleDevice_returnsFalse() { public void isSupportEndItem_deviceIsNotBroadcastingAndConnectedToNonBleDevice_returnsFalse() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -155,8 +176,20 @@ public class MediaVolumePreferenceControllerTest {
assertThat(mController.isSupportEndItem()).isFalse(); 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 @Test
@RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
public void getSliceEndItem_NotSupportEndItem_getsNullSliceAction() { public void getSliceEndItem_NotSupportEndItem_getsNullSliceAction() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
@@ -168,22 +201,26 @@ public class MediaVolumePreferenceControllerTest {
} }
@Test @Test
@RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
public void getSliceEndItem_deviceIsBroadcasting_getsBroadcastIntent() { public void getSliceEndItem_deviceIsBroadcasting_getsBroadcastIntent() {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(mDevice1).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(true).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
doReturn(mMediaController).when(sMediaOutputIndicatorWorker) doReturn(mMediaController)
.when(sMediaOutputIndicatorWorker)
.getActiveLocalMediaController(); .getActiveLocalMediaController();
final SliceAction sliceAction = mController.getSliceEndItem(mContext); final SliceAction sliceAction = mController.getSliceEndItem(mContext);
final PendingIntent endItemPendingIntent = sliceAction.getAction(); final PendingIntent endItemPendingIntent = sliceAction.getAction();
final PendingIntent expectedToggleIntent = getBroadcastIntent( final PendingIntent expectedToggleIntent =
getBroadcastIntent(
MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG); MediaOutputConstants.ACTION_LAUNCH_MEDIA_OUTPUT_BROADCAST_DIALOG);
assertThat(endItemPendingIntent).isEqualTo(expectedToggleIntent); assertThat(endItemPendingIntent).isEqualTo(expectedToggleIntent);
} }
@Test @Test
@RequiresFlagsEnabled(Flags.FLAG_LEGACY_LE_AUDIO_SHARING)
public void getSliceEndItem_deviceIsNotBroadcasting_getsActivityIntent() { public void getSliceEndItem_deviceIsNotBroadcasting_getsActivityIntent() {
final MediaDevice device = mock(BluetoothMediaDevice.class); final MediaDevice device = mock(BluetoothMediaDevice.class);
final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class); final CachedBluetoothDevice cachedDevice = mock(CachedBluetoothDevice.class);
@@ -192,7 +229,8 @@ public class MediaVolumePreferenceControllerTest {
doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported(); doReturn(true).when(sMediaOutputIndicatorWorker).isBroadcastSupported();
doReturn(device).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice(); doReturn(device).when(sMediaOutputIndicatorWorker).getCurrentConnectedMediaDevice();
doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting(); doReturn(false).when(sMediaOutputIndicatorWorker).isDeviceBroadcasting();
doReturn(mMediaController).when(sMediaOutputIndicatorWorker) doReturn(mMediaController)
.when(sMediaOutputIndicatorWorker)
.getActiveLocalMediaController(); .getActiveLocalMediaController();
final SliceAction sliceAction = mController.getSliceEndItem(mContext); final SliceAction sliceAction = mController.getSliceEndItem(mContext);
@@ -215,13 +253,19 @@ public class MediaVolumePreferenceControllerTest {
private PendingIntent getBroadcastIntent(String action) { private PendingIntent getBroadcastIntent(String action) {
final Intent intent = new Intent(action); final Intent intent = new Intent(action);
intent.setPackage(MediaOutputConstants.SYSTEMUI_PACKAGE_NAME); 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); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} }
private PendingIntent getActivityIntent(String action) { private PendingIntent getActivityIntent(String action) {
final Intent intent = new Intent(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); PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
} }
} }