package andraus.bluetoothhidemu; import andraus.bluetoothhidemu.sock.SocketManager; import andraus.bluetoothhidemu.sock.payload.HidConsumerPayload; import andraus.bluetoothhidemu.sock.payload.HidKeyboardPayload; import andraus.bluetoothhidemu.sock.payload.HidPayload; import andraus.bluetoothhidemu.view.ViewUtils; import android.content.Context; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; public class SpecialKeyListener implements OnTouchListener { //private static final String TAG = BluetoothHidEmuActivity.TAG; private SocketManager mSocketManager = null; private HidKeyboardPayload mHidKeyboardPayload = null; private HidConsumerPayload mHidMediaPayload = null; /** * * @param socketManager */ public SpecialKeyListener(Context context, SocketManager socketManager) { mSocketManager = socketManager; mHidKeyboardPayload = new HidKeyboardPayload(); mHidMediaPayload = new HidConsumerPayload(); } /** * */ @Override public boolean onTouch(View view, MotionEvent event) { HidPayload hidPayload = null; switch (event.getAction()) { case MotionEvent.ACTION_DOWN: view.startAnimation(ViewUtils.getClickAnimation()); view.setPressed(true); hidPayload = getPayloadDown(view.getId()); mSocketManager.sendPayload(hidPayload); return true; case MotionEvent.ACTION_UP: hidPayload = getPayloadUp(view.getId()); mSocketManager.sendPayload(hidPayload); view.setPressed(false); return true; } return false; } /** * Get the correct payload for a touch down event * * @param resourceId * @return */ private HidPayload getPayloadDown(int resourceId) { switch (resourceId) { case R.id.UpButton: mHidKeyboardPayload.assemblePayload(KeyEvent.KEYCODE_DPAD_UP); return mHidKeyboardPayload; case R.id.DownButton: mHidKeyboardPayload.assemblePayload(KeyEvent.KEYCODE_DPAD_DOWN); return mHidKeyboardPayload; case R.id.LeftButton: mHidKeyboardPayload.assemblePayload(KeyEvent.KEYCODE_DPAD_LEFT); return mHidKeyboardPayload; case R.id.RightButton: mHidKeyboardPayload.assemblePayload(KeyEvent.KEYCODE_DPAD_RIGHT); return mHidKeyboardPayload; case R.id.EnterButton: mHidKeyboardPayload.assemblePayload(KeyEvent.KEYCODE_ENTER); return mHidKeyboardPayload; case R.id.EscButton: mHidKeyboardPayload.assemblePayload(KeyEvent.KEYCODE_BACK); return mHidKeyboardPayload; case R.id.PlayMediaButton: mHidMediaPayload.assemble(HidConsumerPayload.USAGE_MEDIA_PLAY_PAUSE); return mHidMediaPayload; case R.id.PrevMediaButton: mHidMediaPayload.assemble(HidConsumerPayload.USAGE_MEDIA_PREV); return mHidMediaPayload; case R.id.ForwardMediaButton: mHidMediaPayload.assemble(HidConsumerPayload.USAGE_MEDIA_NEXT); return mHidMediaPayload; default: return null; } } /** * Get the correct payload for a touch up * * @param resourceId * @return */ private HidPayload getPayloadUp(int resourceId) { switch (resourceId) { case R.id.UpButton: case R.id.DownButton: case R.id.LeftButton: case R.id.RightButton: case R.id.EnterButton: case R.id.EscButton: mHidKeyboardPayload.resetBytes(); return mHidKeyboardPayload; case R.id.PlayMediaButton: case R.id.PrevMediaButton: case R.id.ForwardMediaButton: mHidMediaPayload.resetBytes(); return mHidMediaPayload; default: return null; } } }