1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.systemui.media.dialog; 18 19 import androidx.annotation.IntDef; 20 21 import com.android.settingslib.media.MediaDevice; 22 import com.android.systemui.R; 23 24 import java.lang.annotation.Retention; 25 import java.lang.annotation.RetentionPolicy; 26 import java.util.Optional; 27 28 /** 29 * MediaItem represents an item in OutputSwitcher list (could be a MediaDevice, group divider or 30 * connect new device item). 31 */ 32 public class MediaItem { 33 private final Optional<MediaDevice> mMediaDeviceOptional; 34 private final String mTitle; 35 @MediaItemType 36 private final int mMediaItemType; 37 38 @Retention(RetentionPolicy.SOURCE) 39 @IntDef({ 40 MediaItemType.TYPE_DEVICE, 41 MediaItemType.TYPE_GROUP_DIVIDER, 42 MediaItemType.TYPE_PAIR_NEW_DEVICE}) 43 public @interface MediaItemType { 44 int TYPE_DEVICE = 0; 45 int TYPE_GROUP_DIVIDER = 1; 46 int TYPE_PAIR_NEW_DEVICE = 2; 47 } 48 MediaItem()49 public MediaItem() { 50 this.mMediaDeviceOptional = Optional.empty(); 51 this.mTitle = null; 52 this.mMediaItemType = MediaItemType.TYPE_PAIR_NEW_DEVICE; 53 } 54 MediaItem(String title, int mediaItemType)55 public MediaItem(String title, int mediaItemType) { 56 this.mMediaDeviceOptional = Optional.empty(); 57 this.mTitle = title; 58 this.mMediaItemType = mediaItemType; 59 } 60 MediaItem(MediaDevice mediaDevice)61 public MediaItem(MediaDevice mediaDevice) { 62 this.mMediaDeviceOptional = Optional.of(mediaDevice); 63 this.mTitle = mediaDevice.getName(); 64 this.mMediaItemType = MediaItemType.TYPE_DEVICE; 65 } 66 getMediaDevice()67 public Optional<MediaDevice> getMediaDevice() { 68 return mMediaDeviceOptional; 69 } 70 71 /** 72 * Get layout id based on media item Type. 73 */ getMediaLayoutId(int mediaItemType)74 public static int getMediaLayoutId(int mediaItemType) { 75 switch (mediaItemType) { 76 case MediaItemType.TYPE_DEVICE: 77 case MediaItemType.TYPE_PAIR_NEW_DEVICE: 78 return R.layout.media_output_list_item_advanced; 79 case MediaItemType.TYPE_GROUP_DIVIDER: 80 default: 81 return R.layout.media_output_list_group_divider; 82 } 83 } 84 getTitle()85 public String getTitle() { 86 return mTitle; 87 } 88 isMutingExpectedDevice()89 public boolean isMutingExpectedDevice() { 90 return mMediaDeviceOptional.isPresent() 91 && mMediaDeviceOptional.get().isMutingExpectedDevice(); 92 } 93 getMediaItemType()94 public int getMediaItemType() { 95 return mMediaItemType; 96 } 97 } 98