/*
WearTouchProfile.java
Copyright (c) 2015 NTT DOCOMO,INC.
Released under the MIT license
http://opensource.org/licenses/mit-license.php
*/
package org.deviceconnect.android.deviceplugin.wear.profile;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import com.google.android.gms.wearable.MessageApi.SendMessageResult;
import org.deviceconnect.android.deviceplugin.wear.BuildConfig;
import org.deviceconnect.android.deviceplugin.wear.WearDeviceService;
import org.deviceconnect.android.deviceplugin.wear.WearManager;
import org.deviceconnect.android.deviceplugin.wear.WearManager.OnMessageEventListener;
import org.deviceconnect.android.deviceplugin.wear.WearManager.OnMessageResultListener;
import org.deviceconnect.android.event.Event;
import org.deviceconnect.android.event.EventError;
import org.deviceconnect.android.event.EventManager;
import org.deviceconnect.android.message.MessageUtils;
import org.deviceconnect.android.profile.TouchProfile;
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;
import org.deviceconnect.message.intent.message.IntentDConnectMessage;
import java.util.ArrayList;
import java.util.List;
import static org.deviceconnect.android.deviceplugin.wear.profile.WearConst.ATTRIBUTE_ON_TOUCH_CHANGE;
import static org.deviceconnect.android.deviceplugin.wear.profile.WearConst.STATE_CANCEL;
import static org.deviceconnect.android.deviceplugin.wear.profile.WearConst.STATE_DOUBLE_TAP;
import static org.deviceconnect.android.deviceplugin.wear.profile.WearConst.STATE_END;
import static org.deviceconnect.android.deviceplugin.wear.profile.WearConst.STATE_MOVE;
import static org.deviceconnect.android.deviceplugin.wear.profile.WearConst.STATE_START;
/**
* Touch Profile.
*
* @author NTT DOCOMO, INC.
*/
public class WearTouchProfile extends TouchProfile {
/** Tag. */
private static final String TAG = "WEAR";
/** Touch profile onTouch cache. */
Bundle mOnTouchCache = null;
/** Touch profile onTouch cache time. */
long mOnTouchCacheTime = 0;
/** Touch profile onTouchStart cache. */
Bundle mOnTouchStartCache = null;
/** Touch profile onTouchStart cache time. */
long mOnTouchStartCacheTime = 0;
/** Touch profile onTouchEnd cache. */
Bundle mOnTouchEndCache = null;
/** Touch profile onTouchEnd cache time. */
long mOnTouchEndCacheTime = 0;
/** Touch profile onDoubleTap cache. */
Bundle mOnDoubleTapCache = null;
/** Touch profile onDoubleTap cache time. */
long mOnDoubleTapCacheTime = 0;
/** Touch profile onTouchMove cache. */
Bundle mOnTouchMoveCache = null;
/** Touch profile onTouchMove cache time. */
long mOnTouchMoveCacheTime = 0;
/** Touch profile onTouchCancel cache. */
Bundle mOnTouchCancelCache = null;
/** Touch profile onTouchCancel cache time. */
long mOnTouchCancelCacheTime = 0;
/** Touch profile onTouchChange cache. */
Bundle mOnTouchChangeCache = null;
/** Touch profile onTouchChange cache time. */
long mOnTouchChangeCacheTime = 0;
/** Touch profile cache retention time (mSec). */
static final long CACHE_RETENTION_TIME = 10000;
/**
* Get Touch cache data.
*
* @param attr Attribute.
* @return Touch cache data.
*/
public Bundle getTouchCache(final String attr) {
long lCurrentTime = System.currentTimeMillis();
if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH)) {
if (lCurrentTime - mOnTouchCacheTime <= CACHE_RETENTION_TIME) {
return mOnTouchCache;
} else {
return null;
}
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_START)) {
if (lCurrentTime - mOnTouchStartCacheTime <= CACHE_RETENTION_TIME) {
return mOnTouchStartCache;
} else {
return null;
}
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_END)) {
if (lCurrentTime - mOnTouchEndCacheTime <= CACHE_RETENTION_TIME) {
return mOnTouchEndCache;
} else {
return null;
}
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_DOUBLE_TAP)) {
if (lCurrentTime - mOnDoubleTapCacheTime <= CACHE_RETENTION_TIME) {
return mOnDoubleTapCache;
} else {
return null;
}
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_MOVE)) {
if (lCurrentTime - mOnTouchMoveCacheTime <= CACHE_RETENTION_TIME) {
return mOnTouchMoveCache;
} else {
return null;
}
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_CANCEL)) {
if (lCurrentTime - mOnTouchCancelCacheTime <= CACHE_RETENTION_TIME) {
return mOnTouchCancelCache;
} else {
return null;
}
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_CHANGE)) {
if (lCurrentTime - mOnTouchChangeCacheTime <= CACHE_RETENTION_TIME) {
return mOnTouchChangeCache;
} else {
return null;
}
} else {
return null;
}
}
/**
* Set Touch data to cache.
*
* @param attr Attribute.
* @param touchData Touch data.
*/
public void setTouchCache(final String attr, final Bundle touchData) {
long lCurrentTime = System.currentTimeMillis();
if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH)) {
mOnTouchCache = touchData;
mOnTouchCacheTime = lCurrentTime;
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_START)) {
mOnTouchStartCache = touchData;
mOnTouchStartCacheTime = lCurrentTime;
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_END)) {
mOnTouchEndCache = touchData;
mOnTouchEndCacheTime = lCurrentTime;
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_DOUBLE_TAP)) {
mOnDoubleTapCache = touchData;
mOnDoubleTapCacheTime = lCurrentTime;
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_MOVE)) {
mOnTouchMoveCache = touchData;
mOnTouchMoveCacheTime = lCurrentTime;
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_CANCEL)) {
mOnTouchCancelCache = touchData;
mOnTouchCancelCacheTime = lCurrentTime;
} else if (attr.equalsIgnoreCase(ATTRIBUTE_ON_TOUCH_CHANGE)) {
mOnTouchChangeCache = touchData;
mOnTouchChangeCacheTime = lCurrentTime;
}
}
/**
* Event receive listener from Android Wear.
*/
private OnMessageEventListener mListener = new OnMessageEventListener() {
@Override
public void onEvent(final String nodeId, final String message) {
sendMessageToEvent(WearUtils.createServiceId(nodeId), message);
}
};
/**
* Constructor.
* @param mgr Android Wear管理クラス
*/
public WearTouchProfile(final WearManager mgr) {
mgr.addMessageEventListener(WearConst.WEAR_TO_DEVICE_TOUCH_DATA, mListener);
addApi(mGetOnTouch);
addApi(mGetOnTouchStart);
addApi(mGetOnTouchEnd);
addApi(mGetOnDoubleTap);
addApi(mGetOnTouchMove);
addApi(mGetOnTouchCancel);
addApi(mGetOnTouchChange);
addApi(mPutOnTouch);
addApi(mPutOnTouchStart);
addApi(mPutOnTouchEnd);
addApi(mPutOnDoubleTap);
addApi(mPutOnTouchMove);
addApi(mPutOnTouchCancel);
addApi(mPutOnTouchChange);
addApi(mDeleteOnTouch);
addApi(mDeleteOnTouchStart);
addApi(mDeleteOnTouchEnd);
addApi(mDeleteOnDoubleTap);
addApi(mDeleteOnTouchMove);
addApi(mDeleteOnTouchCancel);
addApi(mDeleteOnTouchChange);
}
private final DConnectApi mGetOnTouchChange = new GetApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_CHANGE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
Bundle touches = getTouchCache(ATTRIBUTE_ON_TOUCH_CHANGE);
if (touches == null) {
response.putExtra(TouchProfile.PARAM_TOUCH, "");
} else {
response.putExtra(TouchProfile.PARAM_TOUCH, touches);
}
setResult(response, IntentDConnectMessage.RESULT_OK);
return true;
}
};
private final DConnectApi mGetOnTouch = new GetApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
Bundle touches = getTouchCache(TouchProfile.ATTRIBUTE_ON_TOUCH);
if (touches == null) {
response.putExtra(TouchProfile.PARAM_TOUCH, "");
} else {
response.putExtra(TouchProfile.PARAM_TOUCH, touches);
}
setResult(response, IntentDConnectMessage.RESULT_OK);
return true;
}
};
private final DConnectApi mGetOnTouchStart = new GetApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_START;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
Bundle touches = getTouchCache(TouchProfile.ATTRIBUTE_ON_TOUCH_START);
if (touches == null) {
response.putExtra(TouchProfile.PARAM_TOUCH, "");
} else {
response.putExtra(TouchProfile.PARAM_TOUCH, touches);
}
setResult(response, IntentDConnectMessage.RESULT_OK);
return true;
}
};
private final DConnectApi mGetOnTouchEnd = new GetApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_END;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
Bundle touches = getTouchCache(TouchProfile.ATTRIBUTE_ON_TOUCH_END);
if (touches == null) {
response.putExtra(TouchProfile.PARAM_TOUCH, "");
} else {
response.putExtra(TouchProfile.PARAM_TOUCH, touches);
}
setResult(response, IntentDConnectMessage.RESULT_OK);
return true;
}
};
private final DConnectApi mGetOnDoubleTap = new GetApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_DOUBLE_TAP;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
Bundle touches = getTouchCache(TouchProfile.ATTRIBUTE_ON_DOUBLE_TAP);
if (touches == null) {
response.putExtra(TouchProfile.PARAM_TOUCH, "");
} else {
response.putExtra(TouchProfile.PARAM_TOUCH, touches);
}
setResult(response, IntentDConnectMessage.RESULT_OK);
return true;
}
};
private final DConnectApi mGetOnTouchMove = new GetApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_MOVE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
Bundle touches = getTouchCache(TouchProfile.ATTRIBUTE_ON_TOUCH_MOVE);
if (touches == null) {
response.putExtra(TouchProfile.PARAM_TOUCH, "");
} else {
response.putExtra(TouchProfile.PARAM_TOUCH, touches);
}
setResult(response, IntentDConnectMessage.RESULT_OK);
return true;
}
};
private final DConnectApi mGetOnTouchCancel = new GetApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_CANCEL;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
Bundle touches = getTouchCache(TouchProfile.ATTRIBUTE_ON_TOUCH_CANCEL);
if (touches == null) {
response.putExtra(TouchProfile.PARAM_TOUCH, "");
} else {
response.putExtra(TouchProfile.PARAM_TOUCH, touches);
}
setResult(response, IntentDConnectMessage.RESULT_OK);
return true;
}
};
private final DConnectApi mPutOnTouchChange = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_CHANGE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHCHANGE_REGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
// Event registration.
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
private final DConnectApi mPutOnTouch = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCH_REGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
// Event registration.
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
private final DConnectApi mPutOnTouchStart = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_START;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHSTART_REGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
// Event registration.
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
private final DConnectApi mPutOnTouchEnd = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_END;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHEND_REGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
// Event registration.
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
private final DConnectApi mPutOnDoubleTap = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_DOUBLE_TAP;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONDOUBLETAP_REGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
// Event registration.
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
private final DConnectApi mPutOnTouchMove = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_MOVE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHMOVE_REGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
// Event registration.
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
private final DConnectApi mPutOnTouchCancel = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_CANCEL;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHCANCEL_REGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
// Event registration.
EventError error = EventManager.INSTANCE.addEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
private final DConnectApi mDeleteOnTouchChange = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_CHANGE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHCHANGE_UNREGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
}
@Override
public void onError() {
}
});
// Event release.
EventError error = EventManager.INSTANCE.removeEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
return true;
}
};
private final DConnectApi mDeleteOnTouch = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCH_UNREGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
}
@Override
public void onError() {
}
});
// Event release.
EventError error = EventManager.INSTANCE.removeEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
return true;
}
};
private final DConnectApi mDeleteOnTouchStart = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_START;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHSTART_UNREGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
}
@Override
public void onError() {
}
});
// Event release.
EventError error = EventManager.INSTANCE.removeEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
return true;
}
};
private final DConnectApi mDeleteOnTouchEnd = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_END;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHEND_UNREGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
}
@Override
public void onError() {
}
});
// Event release.
EventError error = EventManager.INSTANCE.removeEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
return true;
}
};
private final DConnectApi mDeleteOnDoubleTap = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_DOUBLE_TAP;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONDOUBLETAP_UNREGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
}
@Override
public void onError() {
}
});
// Event release.
EventError error = EventManager.INSTANCE.removeEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
return true;
}
};
private final DConnectApi mDeleteOnTouchMove = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_MOVE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHMOVE_UNREGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
}
@Override
public void onError() {
}
});
// Event release.
EventError error = EventManager.INSTANCE.removeEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
return true;
}
};
private final DConnectApi mDeleteOnTouchCancel = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_ON_TOUCH_CANCEL;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId,
WearConst.DEVICE_TO_WEAR_TOUCH_ONTOUCHCANCEL_UNREGISTER,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
}
@Override
public void onError() {
}
});
// Event release.
EventError error = EventManager.INSTANCE.removeEvent(request);
if (error == EventError.NONE) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
setResult(response, DConnectMessage.RESULT_ERROR);
}
return true;
}
};
/**
* Send a message to the registration event.
*
* @param nodeId node id
* @param data Received Strings.
*/
private void sendMessageToEvent(final String nodeId, final String data) {
if (BuildConfig.DEBUG) {
Log.i(TAG, "@@@@@@SUCCESS");
}
String[] mDataArray = data.split(",", 0);
String attr;
String action = mDataArray[1];
String state = null;
if (action.equals(WearConst.PARAM_TOUCH_TOUCH)) {
attr = ATTRIBUTE_ON_TOUCH;
} else if (action.equals(WearConst.PARAM_TOUCH_TOUCHSTART)) {
attr = ATTRIBUTE_ON_TOUCH_START;
state = STATE_START;
} else if (action.equals(WearConst.PARAM_TOUCH_TOUCHEND)) {
attr = ATTRIBUTE_ON_TOUCH_END;
state = STATE_END;
} else if (action.equals(WearConst.PARAM_TOUCH_TOUCHMOVE)) {
attr = ATTRIBUTE_ON_TOUCH_MOVE;
state = STATE_MOVE;
} else if (action.equals(WearConst.PARAM_TOUCH_TOUCHCANCEL)) {
attr = ATTRIBUTE_ON_TOUCH_CANCEL;
state = STATE_CANCEL;
} else if (action.equals(WearConst.PARAM_TOUCH_DOUBLETAP)) {
attr = ATTRIBUTE_ON_DOUBLE_TAP;
state = STATE_DOUBLE_TAP;
} else {
attr = null;
state = null;
}
if (BuildConfig.DEBUG) {
Log.i(TAG, "action: " + action + " attr: " + attr);
}
if (attr != null) {
List<Event> events = EventManager.INSTANCE.getEventList(
nodeId, PROFILE_NAME, null, attr);
List<Event> commonEvents = EventManager.INSTANCE.getEventList(
nodeId, PROFILE_NAME, null, ATTRIBUTE_ON_TOUCH_CHANGE);
Bundle touchdata = new Bundle();
List<Bundle> touchlist = new ArrayList<Bundle>();
Bundle touches = new Bundle();
int count = Integer.parseInt(mDataArray[0]);
int index = 2;
for (int n = 0; n < count; n++) {
touchdata.putInt(TouchProfile.PARAM_ID, Integer.parseInt(mDataArray[index++]));
touchdata.putFloat(TouchProfile.PARAM_X, Float.parseFloat(mDataArray[index++]));
touchdata.putFloat(TouchProfile.PARAM_Y, Float.parseFloat(mDataArray[index++]));
touchlist.add((Bundle) touchdata.clone());
}
touches.putParcelableArray(TouchProfile.PARAM_TOUCHES,
touchlist.toArray(new Bundle[touchlist.size()]));
synchronized (events) {
for (Event event : events) {
String eventAttr = event.getAttribute();
Intent intent = EventManager.createEventMessage(event);
intent.putExtra(TouchProfile.PARAM_TOUCH, touches);
((WearDeviceService) getContext()).sendEvent(intent, event.getAccessToken());
setTouchCache(eventAttr, touches);
if (BuildConfig.DEBUG) {
Log.i(TAG, "event: " + event);
Log.i(TAG, "touches: " + touches);
Log.i(TAG, "intent: " + intent);
}
}
}
synchronized (commonEvents) {
for (Event event : commonEvents) {
String eventAttr = event.getAttribute();
Intent intent = EventManager.createEventMessage(event);
if (state != null) {
touches.putString("state", state);
}
intent.putExtra(TouchProfile.PARAM_TOUCH, touches);
((WearDeviceService) getContext()).sendEvent(intent, event.getAccessToken());
setTouchCache(eventAttr, touches);
if (BuildConfig.DEBUG) {
Log.i(TAG, "event: " + event);
Log.i(TAG, "touches: " + touches);
Log.i(TAG, "intent: " + intent);
}
}
}
}
}
/**
* Get Android Wear management class.
* @return WearManager management class.
*/
private WearManager getManager() {
return ((WearDeviceService) getContext()).getManager();
}
}