package andraus.bluetoothhidemu;
import andraus.bluetoothhidemu.sock.SocketManager;
import andraus.bluetoothhidemu.sock.payload.HidKeyboardPayload;
import android.os.Handler;
import android.os.Message;
import android.text.Editable;
import android.text.TextWatcher;
/**
* TextWatcher to monitor text events.
*/
public class KeyboardTextWatcher implements TextWatcher {
//private static final String TAG = BluetoothHidEmuActivity.TAG;
private static final int MSG_START_COUNT = 0;
private SocketManager mSocketManager = null;
private HidKeyboardPayload mHidPayload = new HidKeyboardPayload();
/**
*
* @param socketManager
*/
public KeyboardTextWatcher(SocketManager socketManager) {
super();
mSocketManager = socketManager;
}
@Override
public void afterTextChanged(Editable content) {
//DoLog.d(TAG, String.format("afterTextChanged(%s)",content));
mHandler.removeMessages(MSG_START_COUNT);
Message msg = Message.obtain(mHandler);
msg.obj = content;
msg.what = MSG_START_COUNT;
mHandler.sendMessageDelayed(msg, 10000 /* ms */ );
}
@Override
public void beforeTextChanged(CharSequence charSeq, int start, int count, int after) {
//DoLog.d(TAG, String.format("%s - beforeTextChanged(%s, %d, %d, %d)", this, charSeq, start, count, after));
}
@Override
public void onTextChanged(CharSequence charSeq, int start, int before, int count) {
//DoLog.d(TAG, String.format("onTextChanged(%s, %d, %d, %d)", charSeq, start, before, count));
if (count > 0) {
// character added
char character = charSeq.charAt(start);
mHidPayload.assemblePayload(character);
mSocketManager.sendPayload(mHidPayload);
mHidPayload.assemblePayload(Character.MIN_VALUE);
mSocketManager.sendPayload(mHidPayload);
}
}
/**
* Handler used to clean-up the local echo EditText, after some time of innactivity
*/
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MSG_START_COUNT:
Editable content = (Editable) msg.obj;
content.clear();
break;
}
}
};
}