[Output Switcher] Add new support for AVR device
Add placeholder method for isHost in MediaDevice. Test: verified on device Bug: 262013662 Change-Id: I10b145ce9519f2d7960314084861d63bb81eedfe
This commit is contained in:
committed by
Shaowei Shen
parent
51ec8b02da
commit
08ca091614
40
packages/SettingsLib/res/drawable/ic_media_avr_device.xml
Normal file
40
packages/SettingsLib/res/drawable/ic_media_avr_device.xml
Normal file
@@ -0,0 +1,40 @@
|
||||
<!--
|
||||
~ Copyright (C) 2023 The Android Open Source Project
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License.
|
||||
-->
|
||||
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:pathData="M18.918,7C18.963,7 19,7.037 19,7.082V14.918C19,14.963 18.963,15 18.918,15H3.082C3.037,15 3,14.963 3,14.918V7.082C3,7.037 3.037,7 3.082,7H18.918ZM18.918,5H3.082C1.932,5 1,5.932 1,7.082V14.918C1,16.068 1.932,17 3.082,17H18.918C20.068,17 21,16.068 21,14.918V7.082C21,5.932 20.068,5 18.918,5Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M18,15H17C16.448,15 16,15.448 16,16V17C16,17.552 16.448,18 17,18H18C18.552,18 19,17.552 19,17V16C19,15.448 18.552,15 18,15Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M5,15H4C3.448,15 3,15.448 3,16V17C3,17.552 3.448,18 4,18H5C5.552,18 6,17.552 6,17V16C6,15.448 5.552,15 5,15Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M15.5,12.5C16.328,12.5 17,11.828 17,11C17,10.172 16.328,9.5 15.5,9.5C14.672,9.5 14,10.172 14,11C14,11.828 14.672,12.5 15.5,12.5Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M15.5,10C16.052,10 16.5,10.448 16.5,11C16.5,11.552 16.052,12 15.5,12C14.948,12 14.5,11.552 14.5,11C14.5,10.448 14.948,10 15.5,10ZM15.5,9C14.397,9 13.5,9.897 13.5,11C13.5,12.103 14.397,13 15.5,13C16.603,13 17.5,12.103 17.5,11C17.5,9.897 16.603,9 15.5,9Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M5,9h7v4h-7z"
|
||||
android:fillColor="#ffffff"/>
|
||||
</vector>
|
||||
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (C) 2023 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settingslib.media;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.media.MediaRoute2Info;
|
||||
import android.media.MediaRouter2Manager;
|
||||
import android.media.RouteListingPreference;
|
||||
|
||||
import com.android.settingslib.R;
|
||||
|
||||
/**
|
||||
* ComplexMediaDevice extends MediaDevice to represents device with signals from a number of
|
||||
* sources.
|
||||
*/
|
||||
public class ComplexMediaDevice extends MediaDevice {
|
||||
|
||||
private final String mSummary = "";
|
||||
|
||||
ComplexMediaDevice(Context context, MediaRouter2Manager routerManager,
|
||||
MediaRoute2Info info, String packageName,
|
||||
RouteListingPreference.Item item) {
|
||||
super(context, routerManager, info, packageName, item);
|
||||
}
|
||||
|
||||
// MediaRoute2Info.getName was made public on API 34, but exists since API 30.
|
||||
@SuppressWarnings("NewApi")
|
||||
@Override
|
||||
public String getName() {
|
||||
return mRouteInfo.getName().toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getSummary() {
|
||||
return mSummary;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable getIcon() {
|
||||
return mContext.getDrawable(R.drawable.ic_media_avr_device);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Drawable getIconWithoutBackground() {
|
||||
return mContext.getDrawable(R.drawable.ic_media_avr_device);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return MediaDeviceUtils.getId(mRouteInfo);
|
||||
}
|
||||
|
||||
public boolean isConnected() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -22,6 +22,7 @@ import static android.media.MediaRoute2Info.TYPE_DOCK;
|
||||
import static android.media.MediaRoute2Info.TYPE_GROUP;
|
||||
import static android.media.MediaRoute2Info.TYPE_HDMI;
|
||||
import static android.media.MediaRoute2Info.TYPE_HEARING_AID;
|
||||
import static android.media.MediaRoute2Info.TYPE_REMOTE_AUDIO_VIDEO_RECEIVER;
|
||||
import static android.media.MediaRoute2Info.TYPE_REMOTE_SPEAKER;
|
||||
import static android.media.MediaRoute2Info.TYPE_REMOTE_TV;
|
||||
import static android.media.MediaRoute2Info.TYPE_UNKNOWN;
|
||||
@@ -562,6 +563,9 @@ public class InfoMediaManager extends MediaManager {
|
||||
route, mPackageName);
|
||||
}
|
||||
break;
|
||||
case TYPE_REMOTE_AUDIO_VIDEO_RECEIVER:
|
||||
mediaDevice = new ComplexMediaDevice(mContext, mRouterManager, route,
|
||||
mPackageName, mPreferenceItemMap.get(route.getId()));
|
||||
default:
|
||||
Log.w(TAG, "addMediaDevice() unknown device type : " + deviceType);
|
||||
break;
|
||||
|
||||
@@ -31,6 +31,7 @@ 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 android.media.RouteListingPreference.Item.FLAG_ONGOING_SESSION;
|
||||
import static android.media.RouteListingPreference.Item.FLAG_ONGOING_SESSION_MANAGED;
|
||||
import static android.media.RouteListingPreference.Item.FLAG_SUGGESTED;
|
||||
import static android.media.RouteListingPreference.Item.SELECTION_BEHAVIOR_TRANSFER;
|
||||
import static android.media.RouteListingPreference.Item.SUBTEXT_AD_ROUTING_DISALLOWED;
|
||||
@@ -256,6 +257,16 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
|
||||
&& Api34Impl.hasOngoingSession(mItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if device is the host for ongoing shared session, which allow user to adjust volume
|
||||
*
|
||||
* @return true if device is the host for ongoing shared session
|
||||
*/
|
||||
public boolean isHostForOngoingSession() {
|
||||
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE
|
||||
&& Api34Impl.isHostForOngoingSession(mItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if device is suggested device from application
|
||||
*
|
||||
@@ -553,6 +564,13 @@ public abstract class MediaDevice implements Comparable<MediaDevice> {
|
||||
|
||||
@RequiresApi(34)
|
||||
private static class Api34Impl {
|
||||
@DoNotInline
|
||||
static boolean isHostForOngoingSession(RouteListingPreference.Item item) {
|
||||
int flags = item != null ? item.getFlags() : 0;
|
||||
return (flags & FLAG_ONGOING_SESSION) != 0
|
||||
&& (flags & FLAG_ONGOING_SESSION_MANAGED) != 0;
|
||||
}
|
||||
|
||||
@DoNotInline
|
||||
static boolean isSuggestedDevice(RouteListingPreference.Item item) {
|
||||
return item != null && (item.getFlags() & FLAG_SUGGESTED) != 0;
|
||||
|
||||
Reference in New Issue
Block a user