/*
WearVibrationProfile.java
Copyright (c) 2014 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 com.google.android.gms.wearable.MessageApi.SendMessageResult;
import org.deviceconnect.android.deviceplugin.wear.WearDeviceService;
import org.deviceconnect.android.deviceplugin.wear.WearManager;
import org.deviceconnect.android.deviceplugin.wear.WearManager.OnMessageResultListener;
import org.deviceconnect.android.message.MessageUtils;
import org.deviceconnect.android.profile.VibrationProfile;
import org.deviceconnect.android.profile.api.DConnectApi;
import org.deviceconnect.android.profile.api.DeleteApi;
import org.deviceconnect.android.profile.api.PutApi;
import org.deviceconnect.message.DConnectMessage;
/**
* Vibration Profile.
*
* @author NTT DOCOMO, INC.
*/
public class WearVibrationProfile extends VibrationProfile {
public WearVibrationProfile() {
addApi(mPutVibrate);
addApi(mDeleteVibrate);
}
private final DConnectApi mPutVibrate = new PutApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_VIBRATE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String pattern = getPattern(request);
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId, WearConst.DEVICE_TO_WEAR_VIBRATION_RUN,
convertPatternToString(parsePattern(pattern)), new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
private final DConnectApi mDeleteVibrate = new DeleteApi() {
@Override
public String getAttribute() {
return ATTRIBUTE_VIBRATE;
}
@Override
public boolean onRequest(final Intent request, final Intent response) {
String nodeId = WearUtils.getNodeId(getServiceID(request));
getManager().sendMessageToWear(nodeId, WearConst.DEVICE_TO_WEAR_VIBRATION_DEL,
"", new OnMessageResultListener() {
@Override
public void onResult(final SendMessageResult result) {
if (result.getStatus().isSuccess()) {
setResult(response, DConnectMessage.RESULT_OK);
} else {
MessageUtils.setIllegalDeviceStateError(response);
}
sendResponse(response);
}
@Override
public void onError() {
MessageUtils.setIllegalDeviceStateError(response);
sendResponse(response);
}
});
return false;
}
};
/**
* バイブレーションのパターンを文字列に変換する.
* @param pattern パターン
* @return 文字列に変換されたパターン
*/
private String convertPatternToString(final long[] pattern) {
// Convert pattern in string.
String patternStr = "";
for (int i = 0; i < pattern.length; i++) {
if (i == 0) {
patternStr += pattern[i];
} else {
patternStr += "," + pattern[i];
}
}
return patternStr;
}
/**
* Android Wear管理クラスを取得する.
* @return WearManager管理クラス
*/
private WearManager getManager() {
return ((WearDeviceService) getContext()).getManager();
}
}