/* ChromeCastServiceDiscoveryProfile.java Copyright (c) 2014 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.chromecast.profile; import android.content.Intent; import com.google.android.gms.cast.CastDevice; import org.deviceconnect.android.deviceplugin.chromecast.ChromeCastDeviceService; import org.deviceconnect.android.deviceplugin.chromecast.ChromeCastService; import org.deviceconnect.android.deviceplugin.chromecast.R; import org.deviceconnect.android.deviceplugin.chromecast.core.ChromeCastDiscovery; import org.deviceconnect.android.profile.ServiceDiscoveryProfile; import org.deviceconnect.android.profile.api.DConnectApi; import org.deviceconnect.android.profile.api.GetApi; import org.deviceconnect.android.service.DConnectService; import org.deviceconnect.android.service.DConnectServiceProvider; import java.util.Iterator; import java.util.List; /** * Network Service Discovery プロファイル (Chromecast). * <p> * Chromecastの検索機能を提供する * </p> * @author NTT DOCOMO, INC. */ public class ChromeCastServiceDiscoveryProfile extends ServiceDiscoveryProfile { /** * コンストラクタ. * * @param provider プロファイルプロバイダ */ public ChromeCastServiceDiscoveryProfile(final DConnectServiceProvider provider) { super(provider); addApi(mServiceDiscoveryApi); } private final DConnectApi mServiceDiscoveryApi = new GetApi() { @Override public boolean onRequest(final Intent request, final Intent response) { ChromeCastDiscovery discovery = ((ChromeCastService) getContext()).getChromeCastDiscovery(); List<DConnectService> disappeared = getServiceProvider().getServiceList(); for (int i = 0; i < discovery.getDeviceNames().size(); i++) { CastDevice cast = discovery.getDeviceNames().get(i); DConnectService castService = getServiceProvider().getService(cast.getDeviceId()); if (castService == null) { castService = new ChromeCastDeviceService(cast); getServiceProvider().addService(castService); } else { for (Iterator<DConnectService> it = disappeared.iterator(); ; it.hasNext()) { DConnectService cache = it.next(); if (cache.getId().equals(castService.getId())) { it.remove(); break; } } } } // レスポンス作成. appendServiceList(response); return true; } }; private String getDeviceName(final String name) { return getContext().getResources().getString(R.string.device_name, name); } }