/* UVCDeviceService.java Copyright (c) 2015 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.uvc; import org.deviceconnect.android.deviceplugin.uvc.activity.ErrorDialogActivity; import org.deviceconnect.android.deviceplugin.uvc.core.UVCDevice; import org.deviceconnect.android.deviceplugin.uvc.core.UVCDeviceManager; import org.deviceconnect.android.deviceplugin.uvc.profile.UVCMediaStreamRecordingProfile; import org.deviceconnect.android.deviceplugin.uvc.profile.UVCSystemProfile; import org.deviceconnect.android.event.EventManager; import org.deviceconnect.android.event.cache.MemoryCacheController; import org.deviceconnect.android.message.DConnectMessageService; import org.deviceconnect.android.profile.DConnectProfile; import org.deviceconnect.android.profile.SystemProfile; import org.deviceconnect.android.service.DConnectService; import java.util.logging.Logger; /** * UVC Device Service. * * @author NTT DOCOMO, INC. */ public class UVCDeviceService extends DConnectMessageService implements UVCDeviceManager.DeviceListener, UVCDeviceManager.ConnectionListener { private final Logger mLogger = Logger.getLogger("uvc.dplugin"); private UVCDeviceManager mDeviceMgr; private DConnectProfile mMediaStreamRecordinrProfile; @Override public void onCreate() { super.onCreate(); EventManager.INSTANCE.setController(new MemoryCacheController()); mDeviceMgr = getDeviceManager(); mDeviceMgr.addDeviceListener(this); mDeviceMgr.addConnectionListener(this); mDeviceMgr.start(); mMediaStreamRecordinrProfile = new UVCMediaStreamRecordingProfile(mDeviceMgr); } @Override public void onDestroy() { mDeviceMgr.removeDeviceListener(this); mDeviceMgr.removeConnectionListener(this); mDeviceMgr.stop(); super.onDestroy(); } @Override protected void onManagerUninstalled() { // Managerアンインストール検知時の処理。 if (BuildConfig.DEBUG) { mLogger.info("Plug-in : onManagerUninstalled"); } } @Override protected void onManagerTerminated() { // Manager正常終了通知受信時の処理。 if (BuildConfig.DEBUG) { mLogger.info("Plug-in : onManagerTerminated"); } } @Override protected void onDevicePluginReset() { // Device Plug-inへのReset要求受信時の処理。 if (BuildConfig.DEBUG) { mLogger.info("Plug-in : onDevicePluginReset"); } resetPluginResource(); } /** * リソースリセット処理. */ private void resetPluginResource() { ((UVCMediaStreamRecordingProfile) mMediaStreamRecordinrProfile).stopPreviewAllUVCDevice(); } @Override protected SystemProfile getSystemProfile() { return new UVCSystemProfile(); } public UVCDeviceManager getDeviceManager() { UVCDeviceApplication app = (UVCDeviceApplication) getApplication(); return app.getDeviceManager(); } @Override public void onFound(final UVCDevice device) { if (mDeviceMgr.connectDevice(device)) { mLogger.severe("UVC device has been initialized: " + device.getName()); if (!device.canPreview()) { mLogger.info("UVC device CANNOT start preview: " + device.getName()); ErrorDialogActivity.showNotSupportedError(this, device); } else { mLogger.info("UVC device can start preview: " + device.getName()); } } else { mLogger.severe("UVC device COULD NOT be initialized: " + device.getName()); } } @Override public void onConnect(final UVCDevice device) { DConnectService service = getService(device); if (service != null) { service.setOnline(true); } } private DConnectService addService(final UVCDevice device) { DConnectService service = new DConnectService(device.getId()); service.setName("UVC: " + device.getName()); service.addProfile(mMediaStreamRecordinrProfile); getServiceProvider().addService(service); return service; } private DConnectService getService(final UVCDevice device) { DConnectService service = getServiceProvider().getService(device.getId()); if (service == null) { service = addService(device); } return service; } @Override public void onConnectionFailed(final UVCDevice device) { // NOP. } @Override public void onDisconnect(final UVCDevice device) { DConnectService service = getServiceProvider().getService(device.getId()); if (service != null) { service.setOnline(false); } } }