[Output Switcher] Allow subtext and flags on System Route

Bug: 289093165
Test: make -j64 RunSettingsLibRoboTests ROBOTEST_FILTER="com.android.settingslib.media.MediaDeviceTest"
Change-Id: Id4c0d6832ead544a052ed20f7554f6b72c50192f
Merged-In: Id4c0d6832ead544a052ed20f7554f6b72c50192f
This commit is contained in:
shaoweishen
2023-06-29 04:07:56 +00:00
committed by Shaowei Shen
parent a3b64f08b7
commit 3c9b30a749
4 changed files with 63 additions and 6 deletions

View File

@@ -15,6 +15,8 @@
*/
package com.android.settingslib.media;
import static com.android.settingslib.media.MediaDevice.SelectionBehavior.SELECTION_BEHAVIOR_TRANSFER;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.content.Context;
@@ -22,6 +24,7 @@ import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RouteListingPreference;
import com.android.settingslib.R;
import com.android.settingslib.bluetooth.BluetoothUtils;
@@ -39,7 +42,13 @@ public class BluetoothMediaDevice extends MediaDevice {
BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName) {
super(context, routerManager, info, packageName, null);
this(context, device, routerManager, info, packageName, null);
}
BluetoothMediaDevice(Context context, CachedBluetoothDevice device,
MediaRouter2Manager routerManager, MediaRoute2Info info, String packageName,
RouteListingPreference.Item item) {
super(context, routerManager, info, packageName, item);
mCachedDevice = device;
mAudioManager = context.getSystemService(AudioManager.class);
initDeviceRecord();
@@ -57,6 +66,12 @@ public class BluetoothMediaDevice extends MediaDevice {
: mContext.getString(R.string.bluetooth_disconnected);
}
@Override
public int getSelectionBehavior() {
// We don't allow apps to override the selection behavior of system routes.
return SELECTION_BEHAVIOR_TRANSFER;
}
@Override
public Drawable getIcon() {
return BluetoothUtils.isAdvancedUntetheredDevice(mCachedDevice.getDevice())

View File

@@ -568,8 +568,10 @@ public class InfoMediaManager extends MediaManager {
case TYPE_HDMI:
case TYPE_WIRED_HEADSET:
case TYPE_WIRED_HEADPHONES:
mediaDevice =
new PhoneMediaDevice(mContext, mRouterManager, route, mPackageName);
mediaDevice = mPreferenceItemMap.containsKey(route.getId()) ? new PhoneMediaDevice(
mContext, mRouterManager, route, mPackageName,
mPreferenceItemMap.get(route.getId())) : new PhoneMediaDevice(mContext,
mRouterManager, route, mPackageName);
break;
case TYPE_HEARING_AID:
case TYPE_BLUETOOTH_A2DP:
@@ -579,8 +581,11 @@ public class InfoMediaManager extends MediaManager {
final CachedBluetoothDevice cachedDevice =
mBluetoothManager.getCachedDeviceManager().findDevice(device);
if (cachedDevice != null) {
mediaDevice = new BluetoothMediaDevice(mContext, cachedDevice, mRouterManager,
route, mPackageName);
mediaDevice = mPreferenceItemMap.containsKey(route.getId())
? new BluetoothMediaDevice(mContext, cachedDevice, mRouterManager,
route, mPackageName, mPreferenceItemMap.get(route.getId()))
: new BluetoothMediaDevice(mContext, cachedDevice, mRouterManager,
route, mPackageName);
}
break;
case TYPE_REMOTE_AUDIO_VIDEO_RECEIVER:

View File

@@ -24,10 +24,13 @@ import static android.media.MediaRoute2Info.TYPE_USB_HEADSET;
import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES;
import static android.media.MediaRoute2Info.TYPE_WIRED_HEADSET;
import static com.android.settingslib.media.MediaDevice.SelectionBehavior.SELECTION_BEHAVIOR_TRANSFER;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.RouteListingPreference;
import androidx.annotation.VisibleForTesting;
@@ -51,7 +54,12 @@ public class PhoneMediaDevice extends MediaDevice {
PhoneMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
String packageName) {
super(context, routerManager, info, packageName, null);
this(context, routerManager, info, packageName, null);
}
PhoneMediaDevice(Context context, MediaRouter2Manager routerManager, MediaRoute2Info info,
String packageName, RouteListingPreference.Item item) {
super(context, routerManager, info, packageName, item);
mDeviceIconUtil = new DeviceIconUtil();
initDeviceRecord();
}
@@ -85,6 +93,12 @@ public class PhoneMediaDevice extends MediaDevice {
return name.toString();
}
@Override
public int getSelectionBehavior() {
// We don't allow apps to override the selection behavior of system routes.
return SELECTION_BEHAVIOR_TRANSFER;
}
@Override
public String getSummary() {
return mSummary;

View File

@@ -19,6 +19,9 @@ import static android.media.MediaRoute2Info.TYPE_BLUETOOTH_A2DP;
import static android.media.MediaRoute2Info.TYPE_BUILTIN_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
import static android.media.MediaRoute2Info.TYPE_WIRED_HEADPHONES;
import static android.media.RouteListingPreference.Item.SELECTION_BEHAVIOR_GO_TO_APP;
import static com.android.settingslib.media.MediaDevice.SelectionBehavior.SELECTION_BEHAVIOR_TRANSFER;
import static com.google.common.truth.Truth.assertThat;
@@ -32,6 +35,7 @@ import android.content.Context;
import android.media.MediaRoute2Info;
import android.media.MediaRouter2Manager;
import android.media.NearbyDevice;
import android.media.RouteListingPreference;
import android.os.Parcel;
import com.android.settingslib.bluetooth.A2dpProfile;
@@ -110,6 +114,8 @@ public class MediaDeviceTest {
@Mock
private MediaRouter2Manager mMediaRouter2Manager;
private RouteListingPreference.Item mItem;
private BluetoothMediaDevice mBluetoothMediaDevice1;
private BluetoothMediaDevice mBluetoothMediaDevice2;
private BluetoothMediaDevice mBluetoothMediaDevice3;
@@ -497,4 +503,21 @@ public class MediaDeviceTest {
assertThat(mBluetoothMediaDevice1.getFeatures().size()).isEqualTo(0);
}
@Test
public void getSelectionBehavior_setItemWithSelectionBehaviorOnSystemRoute_returnTransfer() {
mItem = new RouteListingPreference.Item.Builder(DEVICE_ADDRESS_1)
.setSelectionBehavior(SELECTION_BEHAVIOR_GO_TO_APP)
.build();
mBluetoothMediaDevice1 = new BluetoothMediaDevice(mContext, mCachedDevice1,
mMediaRouter2Manager, null /* MediaRoute2Info */, TEST_PACKAGE_NAME, mItem);
mPhoneMediaDevice =
new PhoneMediaDevice(mContext, mMediaRouter2Manager, mPhoneRouteInfo,
TEST_PACKAGE_NAME, mItem);
assertThat(mBluetoothMediaDevice1.getSelectionBehavior()).isEqualTo(
SELECTION_BEHAVIOR_TRANSFER);
assertThat(mPhoneMediaDevice.getSelectionBehavior()).isEqualTo(
SELECTION_BEHAVIOR_TRANSFER);
}
}