Modify rule of remote media session UI

-Add preference by remote session in Sound Setting
-Add slice item by remote session in Volume panel
-Replace media device data with media session data
-Add test case

Bug: 154918214
Test: make -j50 RunSettingsRoboTests
Change-Id: Ib1c873c9f99eebcba377f4115c4b9b4297b20c3d
This commit is contained in:
Tim Peng
2020-04-30 15:23:58 +08:00
parent 2152d0ce4f
commit e9b91f08c4
6 changed files with 137 additions and 123 deletions

View File

@@ -24,6 +24,7 @@ import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.media.RoutingSessionInfo;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log;
@@ -41,7 +42,6 @@ import com.android.settings.slices.CustomSliceable;
import com.android.settings.slices.SliceBackgroundWorker;
import com.android.settings.slices.SliceBroadcastReceiver;
import com.android.settings.slices.SliceBuilderUtils;
import com.android.settingslib.media.MediaDevice;
import com.android.settingslib.media.MediaOutputSliceConstants;
import java.util.List;
@@ -67,7 +67,7 @@ public class RemoteMediaSlice implements CustomSliceable {
final int newPosition = intent.getIntExtra(EXTRA_RANGE_VALUE, -1);
final String id = intent.getStringExtra(MEDIA_ID);
if (!TextUtils.isEmpty(id)) {
getWorker().adjustVolume(getWorker().getMediaDeviceById(id), newPosition);
getWorker().adjustSessionVolume(id, newPosition);
}
}
@@ -80,9 +80,8 @@ public class RemoteMediaSlice implements CustomSliceable {
return listBuilder.build();
}
// Only displaying remote devices
final List<MediaDevice> mediaDevices = getWorker().getActiveMediaDevice(
MediaDevice.MediaDeviceType.TYPE_CAST_DEVICE);
if (mediaDevices.isEmpty()) {
final List<RoutingSessionInfo> infos = getWorker().getActiveRemoteMediaDevice();
if (infos.isEmpty()) {
Log.d(TAG, "No active remote media device");
return listBuilder.build();
}
@@ -93,27 +92,25 @@ public class RemoteMediaSlice implements CustomSliceable {
// To create an empty icon to indent the row
final IconCompat emptyIcon = createEmptyIcon();
int requestCode = 0;
for (MediaDevice mediaDevice : mediaDevices) {
final int maxVolume = mediaDevice.getMaxVolume();
for (RoutingSessionInfo info : infos) {
final int maxVolume = info.getVolumeMax();
if (maxVolume <= 0) {
Log.d(TAG, "Unable to add Slice. " + mediaDevice.getName() + ": max volume is "
Log.d(TAG, "Unable to add Slice. " + info.getName() + ": max volume is "
+ maxVolume);
continue;
}
final String title = castVolume + " (" + mediaDevice.getClientAppLabel() + ")";
listBuilder.addInputRange(new InputRangeBuilder()
.setTitleItem(icon, ListBuilder.ICON_IMAGE)
.setTitle(title)
.setInputAction(getSliderInputAction(requestCode++, mediaDevice.getId()))
.setPrimaryAction(getSoundSettingAction(title, icon, mediaDevice.getId()))
.setTitle(castVolume)
.setInputAction(getSliderInputAction(requestCode++, info.getId()))
.setPrimaryAction(getSoundSettingAction(castVolume, icon, info.getId()))
.setMax(maxVolume)
.setValue(mediaDevice.getCurrentVolume()));
.setValue(info.getVolume()));
listBuilder.addRow(new ListBuilder.RowBuilder()
.setTitle(outputTitle)
.setSubtitle(mediaDevice.getName())
.setSubtitle(info.getName())
.setTitleItem(emptyIcon, ListBuilder.ICON_IMAGE)
.setPrimaryAction(getMediaOutputSliceAction(
mediaDevice.getClientPackageName())));
.setPrimaryAction(getMediaOutputSliceAction(info.getClientPackageName())));
}
return listBuilder.build();
}
@@ -131,7 +128,8 @@ public class RemoteMediaSlice implements CustomSliceable {
return PendingIntent.getBroadcast(mContext, requestCode, intent, 0);
}
private SliceAction getSoundSettingAction(String actionTitle, IconCompat icon, String id) {
private SliceAction getSoundSettingAction(CharSequence actionTitle, IconCompat icon,
String id) {
final Uri contentUri = new Uri.Builder().appendPath(id).build();
final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
SoundSettings.class.getName(),