package andraus.bluetoothhidemu;
import andraus.bluetoothhidemu.sock.SocketManager;
import andraus.bluetoothhidemu.sock.payload.HidPointerPayload;
import android.content.Context;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
/**
*
*/
public class TouchpadListener implements OnTouchListener {
//private static final String TAG = BluetoothHidEmuActivity.TAG;
private float mPointerMultiplier = 1.5f;
private GestureDetector mGestureDetector = null;
private SocketManager mSocketManager = null;
private View mButtonView = null;
private HidPointerPayload mHidPayload = null;
/**
*
*/
private class LocalGestureDetector extends GestureDetector.SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2,
float distanceX, float distanceY) {
if (e2.getX() != -distanceX || e2.getY() != -distanceY) {
distanceX = -1 * mPointerMultiplier * distanceX;
distanceY = -1 * mPointerMultiplier * distanceY;
if (Math.abs(distanceX) > HidPointerPayload.MAX_POINTER_MOVE) {
distanceX = distanceX > 0 ? HidPointerPayload.MAX_POINTER_MOVE : -HidPointerPayload.MAX_POINTER_MOVE;
}
if (Math.abs(distanceY) > HidPointerPayload.MAX_POINTER_MOVE) {
distanceY = distanceY > 0 ? HidPointerPayload.MAX_POINTER_MOVE : -HidPointerPayload.MAX_POINTER_MOVE;
}
//DoLog.d(TAG, String.format("moving(%d, %d)", (int)distanceX, (int)distanceY));
mHidPayload.movePointer((int)distanceX, (int)distanceY);
mSocketManager.sendPayload(mHidPayload);
} else {
return true;
}
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
return super.onSingleTapConfirmed(e);
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
mButtonView.performClick();
return super.onSingleTapUp(e);
}
}
/**
*
* @param context
* @param socketManager
*/
public TouchpadListener(Context context, SocketManager socketManager, View view, HidPointerPayload hidPayload) {
super();
mGestureDetector = new GestureDetector(context, new LocalGestureDetector());
mSocketManager = socketManager;
mButtonView = view;
mHidPayload = hidPayload;
}
/**
*
*/
@Override
public boolean onTouch(View v, MotionEvent event) {
return mGestureDetector.onTouchEvent(event);
}
}