package andraus.bluetoothhidemu;
import andraus.bluetoothhidemu.sock.SocketManager;
import andraus.bluetoothhidemu.sock.payload.HidPointerPayload;
import andraus.bluetoothhidemu.util.DoLog;
import andraus.bluetoothhidemu.view.ViewUtils;
import android.content.Context;
import android.graphics.LightingColorFilter;
import android.os.Vibrator;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.ImageView;
/**
*
*/
public class ButtonClickListener implements OnClickListener, OnLongClickListener {
private static final String TAG = BluetoothHidEmuActivity.TAG;
private SocketManager mSocketManager = null;
private HidPointerPayload mHidPayload = null;
private Vibrator mVibrator;
private int mButton = HidPointerPayload.MOUSE_BUTTON_NONE;
private boolean mIsLockable = true;
private boolean mIsButtonLocked = false;
/**
*
* @param context
* @param socketManager
* @param button
* @param isLockable
*/
public ButtonClickListener(Context context, SocketManager socketManager, int button, boolean isLockable, HidPointerPayload hidPayload) {
super();
mSocketManager = socketManager;
mHidPayload = hidPayload;
mButton = button;
mIsLockable = isLockable;
mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
}
/**
*
*/
@Override
public void onClick(View view) {
drawButton(view, false);
view.startAnimation(ViewUtils.getClickAnimation());
if (mVibrator != null) {
mVibrator.vibrate(Constants.CLICK_VIBRATE_MS);
}
if (!mIsButtonLocked) {
mHidPayload.movePointer(0, 0);
mHidPayload.clickButton(mButton);
mSocketManager.sendPayload(mHidPayload);
} else {
mIsButtonLocked = false;
}
mHidPayload.movePointer(0, 0);
mHidPayload.releaseButton(mButton);
mSocketManager.sendPayload(mHidPayload);
}
/**
*
*/
@Override
public boolean onLongClick(View view) {
if (mIsLockable) {
if (mIsButtonLocked) {
onClick(view);
} else {
drawButton(view, true);
mIsButtonLocked = true;
DoLog.d(TAG, "set button locked to " + mIsButtonLocked);
mHidPayload.movePointer(0, 0);
mHidPayload.clickButton(mButton);
mSocketManager.sendPayload(mHidPayload);
}
} else {
onClick(view);
}
return true;
}
/**
* Set properties for the button to be drawn as normal or "on hold".
* @param view
* @param isHold
*/
private void drawButton(View view, boolean isHold) {
ImageView imgView = (ImageView) view;
if (isHold) {
imgView.setColorFilter(new LightingColorFilter(0xff4a6c9b, 0xff000055));
} else {
imgView.clearColorFilter();
}
}
}