/* SWDeviceOrientationProfile.java Copyright (c) 2014 NTT DOCOMO,INC. Released under the MIT license http://opensource.org/licenses/mit-license.php */ package org.deviceconnect.android.deviceplugin.sw.profile; import android.content.Intent; import android.os.Bundle; import org.deviceconnect.android.deviceplugin.sw.SWApplication; import org.deviceconnect.android.deviceplugin.sw.SWDeviceOrientationCache; import org.deviceconnect.android.deviceplugin.sw.SWDeviceService; import org.deviceconnect.android.event.EventError; import org.deviceconnect.android.event.EventManager; import org.deviceconnect.android.message.MessageUtils; import org.deviceconnect.android.profile.DConnectProfile; import org.deviceconnect.android.profile.DeviceOrientationProfile; import org.deviceconnect.android.profile.api.DConnectApi; import org.deviceconnect.android.profile.api.DeleteApi; import org.deviceconnect.android.profile.api.GetApi; import org.deviceconnect.android.profile.api.PutApi; import org.deviceconnect.message.DConnectMessage; /** * SonySWデバイスプラグインの{@link DeviceOrientationProfile}実装. * @author NTT DOCOMO, INC. */ public class SWDeviceOrientationProfile extends DeviceOrientationProfile { private final DConnectApi mGetOnDeviceOrientationApi = new GetApi() { @Override public String getAttribute() { return ATTRIBUTE_ON_DEVICE_ORIENTATION; } @Override public boolean onRequest(final Intent request, final Intent response) { SWDeviceService service = (SWDeviceService) getContext(); SWApplication application = (SWApplication) service.getApplication(); SWDeviceOrientationCache cache = application.getDeviceOrientation(getServiceID(request)); if (cache == null) { MessageUtils.setNotSupportAttributeError(response); } else { float[] values = cache.getValues(); Bundle acceleration = new Bundle(); acceleration.putDouble(DeviceOrientationProfile.PARAM_X, values[0]); acceleration.putDouble(DeviceOrientationProfile.PARAM_Y, values[1]); acceleration.putDouble(DeviceOrientationProfile.PARAM_Z, values[2]); Bundle orientation = new Bundle(); DeviceOrientationProfile.setAccelerationIncludingGravity(orientation, acceleration); DeviceOrientationProfile.setInterval(orientation, cache.getInterval()); DConnectProfile.setResult(response, DConnectMessage.RESULT_OK); DeviceOrientationProfile.setOrientation(response, orientation); } return true; } }; private final DConnectApi mPutOnDeviceOrientationApi = new PutApi() { @Override public String getAttribute() { return ATTRIBUTE_ON_DEVICE_ORIENTATION; } @Override public boolean onRequest(final Intent request, final Intent response) { EventError error = EventManager.INSTANCE.addEvent(request); if (error == EventError.NONE) { setResult(response, DConnectMessage.RESULT_OK); } else if (error == EventError.INVALID_PARAMETER) { MessageUtils.setInvalidRequestParameterError(response); } else { MessageUtils.setUnknownError(response); } return true; } }; private final DConnectApi mDeleteOnDeviceOrientationApi = new DeleteApi() { @Override public String getAttribute() { return ATTRIBUTE_ON_DEVICE_ORIENTATION; } @Override public boolean onRequest(final Intent request, final Intent response) { EventError error = EventManager.INSTANCE.removeEvent(request); if (error == EventError.NONE) { setResult(response, DConnectMessage.RESULT_OK); } else if (error == EventError.INVALID_PARAMETER) { MessageUtils.setInvalidRequestParameterError(response); } else { MessageUtils.setUnknownError(response); } return true; } }; public SWDeviceOrientationProfile() { addApi(mGetOnDeviceOrientationApi); addApi(mPutOnDeviceOrientationApi); addApi(mDeleteOnDeviceOrientationApi); } }