/* SonyCameraZoomProfile Copyright (c) 2014 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.sonycamera.profile; import android.content.Intent; import org.deviceconnect.android.deviceplugin.sonycamera.SonyCameraDeviceService; import org.deviceconnect.android.deviceplugin.sonycamera.SonyCameraManager; import org.deviceconnect.android.message.MessageUtils; import org.deviceconnect.android.profile.api.DConnectApi; import org.deviceconnect.android.profile.api.GetApi; import org.deviceconnect.android.profile.api.PutApi; import org.deviceconnect.message.DConnectMessage; /** * Sony Camera 用 カメラプロファイル. * @author NTT DOCOMO, INC. */ public class SonyCameraZoomProfile extends CameraProfile { private final DConnectApi mPutZoomApi = new PutApi() { @Override public String getAttribute() { return ATTRIBUTE_ZOOM; } @Override public boolean onRequest(final Intent request, final Intent response) { return onPutActZoom(request, response); } }; private final DConnectApi mGetZoomApi = new GetApi() { @Override public String getAttribute() { return ATTRIBUTE_ZOOM; } @Override public boolean onRequest(final Intent request, final Intent response) { return onGetZoomDiameter(request, response); } }; public SonyCameraZoomProfile() { addApi(mPutZoomApi); addApi(mGetZoomApi); } /** * ズーム倍率を設定します. * * @param request リクエスト * @param response レスポンス * @return 即時レスポンスを返却する場合はtrue、それ以外はfalse */ private boolean onPutActZoom(final Intent request, final Intent response) { String serviceId = getServiceID(request); String direction = getDirection(request); String movement = getMovement(request); response.putExtra(DConnectMessage.EXTRA_RESULT, DConnectMessage.RESULT_OK); if (serviceId == null) { MessageUtils.setEmptyServiceIdError(response); return true; } if (direction == null || movement == null) { MessageUtils.setInvalidRequestParameterError(response); return true; } SonyCameraManager manager = getSonyCameraManager(); if (!manager.isConnectedService(serviceId)) { MessageUtils.setIllegalDeviceStateError(response, "Sony's camera is not ready."); return true; } if (!manager.isSupportedZoom()) { MessageUtils.setNotSupportAttributeError(response, "Sony's camera is not support setZoom."); return true; } if (!direction.equals("in")) { if (!direction.equals("out")) { MessageUtils.setInvalidRequestParameterError(response); return true; } } if (!movement.equals("start")) { if (!movement.equals("stop")) { if (!movement.equals("1shot")) { if (!movement.equals("max")) { MessageUtils.setInvalidRequestParameterError(response); return true; } } } } manager.setZoom(direction, movement, new SonyCameraManager.OnSonyCameraListener() { @Override public void onSuccess() { setResult(response, DConnectMessage.RESULT_OK); sendResponse(response); } @Override public void onError() { MessageUtils.setUnknownError(response); sendResponse(response); } }); return false; } /** * ズーム倍率を取得します. * * @param request request * @param response response * @return 即時レスポンスを返却する場合はtrue、それ以外はfalse */ private boolean onGetZoomDiameter(final Intent request, final Intent response) { String serviceId = getServiceID(request); if (serviceId == null) { MessageUtils.setEmptyServiceIdError(response); sendResponse(response); return true; } SonyCameraManager manager = getSonyCameraManager(); if (!manager.isConnectedService(serviceId)) { MessageUtils.setIllegalDeviceStateError(response, "Sony's camera is not ready."); return true; } if (!manager.isSupportedZoom()) { MessageUtils.setNotSupportAttributeError(response, "Sony's camera is not support setZoom."); return true; } manager.getZoom(new SonyCameraManager.OnZoomListener() { @Override public void onZoom(final double zoom) { response.putExtra("zoomPosition", zoom); setResult(response, DConnectMessage.RESULT_OK); sendResponse(response); } @Override public void onError() { MessageUtils.setUnknownError(response); sendResponse(response); } }); return false; } private SonyCameraManager getSonyCameraManager() { return ((SonyCameraDeviceService) getContext()).getSonyCameraManager(); } }