/* * CapabilityFilter * Connect SDK * * Copyright (c) 2014 LG Electronics. * Created by Hyun Kook Khang on 01 Feb 2014 * * 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.connectsdk.discovery; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * CapabilityFilter is an object that wraps a List of required capabilities. This CapabilityFilter is used for determining which devices will appear in DiscoveryManager's compatibleDevices array. The contents of a CapabilityFilter's array must be any of the string constants defined in the Capability Class constants. * * ###CapabilityFilter values * Here are some examples of values for the Capability constants. * * - MediaPlayer.Display_Video = "MediaPlayer.Display.Video" * - MediaPlayer.Display_Image = "MediaPlayer.Display.Image" * - VolumeControl.Volume_Subscribe = "VolumeControl.Subscribe" * - MediaControl.Any = "MediaControl.Any" * * All Capability header files also define a constant array of all capabilities defined in that header (ex. kVolumeControlCapabilities). * * ###AND/OR Filtering * CapabilityFilter is an AND filter. A ConnectableDevice would need to satisfy all conditions of a CapabilityFilter to pass. * * The DiscoveryManager capabilityFilters is an OR filter. a ConnectableDevice only needs to satisfy one condition (CapabilityFilter) to pass. * * ###Examples * Filter for all devices that support video playback AND any media controls AND volume up/down. * @code List<String> capabilities = new ArrayList<String>(); capabilities.add(MediaPlayer.Display_Video); capabilities.add(MediaControl.Any); capabilities.add(VolumeControl.Volume_Up_Down); CapabilityFilter filter = new CapabilityFilter(capabilities); DiscoveryManager.getInstance().setCapabilityFilters(filter); @endcode * * Filter for all devices that support (video playback AND any media controls AND volume up/down) OR (image display). * @code CapabilityFilter videoFilter = new CapabilityFilter( MediaPlayer.Display_Video, MediaControl.Any, VolumeControl.Volume_Up_Down); CapabilityFilter imageFilter = new CapabilityFilter( MediaPlayer.Display_Image); DiscoveryManager.getInstance().setCapabilityFilters(videoFilter, imageFilter); @endcode */ public class CapabilityFilter { /** * List of capabilities required by this filter. This property is readonly -- use the addCapability or addCapabilities to build this object. */ public List<String> capabilities = new ArrayList<String>(); /** * Create an empty CapabilityFilter. */ public CapabilityFilter() { } /** * Create a CapabilityFilter with the given array of required capabilities. * * @param capabilities Capabilities to be added to the new filter */ public CapabilityFilter(String ... capabilities) { for (String capability : capabilities) { addCapability(capability); } } /** * Create a CapabilityFilter with the given array of required capabilities. * * @param capabilities List of capability names (see capability class files for String constants) */ public CapabilityFilter(List<String> capabilities) { addCapabilities(capabilities); } /** * Add a required capability to the filter. * * @param capability Capability name to add (see capability class files for String constants) */ public void addCapability(String capability) { capabilities.add(capability); } /** * Add array of required capabilities to the filter. (see capability class files for String constants) * * @param capabilities List of capability names */ public void addCapabilities(List<String> capabilities) { this.capabilities.addAll(capabilities); } /** * Add array of required capabilities to the filter. (see capability classes files for String constants) * * @param capabilities String[] of capability names */ public void addCapabilities(String... capabilities) { Collections.addAll(this.capabilities, capabilities); } }