Loading packages/SettingsLib/res/drawable/ic_media_avr_device.xml 0 → 100644 +40 −0 Original line number Diff line number Diff line <!-- ~ 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> No newline at end of file packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java 0 → 100644 +71 −0 Original line number Diff line number Diff line /* * 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; } } packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +18 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 * Loading Loading @@ -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; Loading packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -204,7 +204,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { && mController.isAdvancedLayoutSupported() && device.hasSubtext()) { boolean isActiveWithOngoingSession = (device.hasOngoingSession() && currentlyConnected); boolean isHost = mController.isVolumeControlEnabled(device) boolean isHost = device.isHostForOngoingSession() && isActiveWithOngoingSession; if (isHost) { mCurrentActivePosition = position; Loading Loading
packages/SettingsLib/res/drawable/ic_media_avr_device.xml 0 → 100644 +40 −0 Original line number Diff line number Diff line <!-- ~ 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> No newline at end of file
packages/SettingsLib/src/com/android/settingslib/media/ComplexMediaDevice.java 0 → 100644 +71 −0 Original line number Diff line number Diff line /* * 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; } }
packages/SettingsLib/src/com/android/settingslib/media/InfoMediaManager.java +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading
packages/SettingsLib/src/com/android/settingslib/media/MediaDevice.java +18 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 * Loading Loading @@ -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; Loading
packages/SystemUI/src/com/android/systemui/media/dialog/MediaOutputAdapter.java +1 −1 Original line number Diff line number Diff line Loading @@ -204,7 +204,7 @@ public class MediaOutputAdapter extends MediaOutputBaseAdapter { && mController.isAdvancedLayoutSupported() && device.hasSubtext()) { boolean isActiveWithOngoingSession = (device.hasOngoingSession() && currentlyConnected); boolean isHost = mController.isVolumeControlEnabled(device) boolean isHost = device.isHostForOngoingSession() && isActiveWithOngoingSession; if (isHost) { mCurrentActivePosition = position; Loading