Skip to content

Instantly share code, notes, and snippets.

/gist:6293894
Created Aug 21, 2013

Embed
What would you like to do?
HelloInputStick
package com.example.helloinputstick;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import com.example.inputsticklibrary.usb.USBDevice;
import com.example.inputsticklibrary.usb.USBDeviceListener;
import com.example.inputsticklibrary.usb.devices.USBKeyboard;
//USBDeviceListener interface allows to receive callbacks
public class HelloInputStick extends Activity implements USBDeviceListener {
//create new instance of USBKeyboard
//if your app consists of more than one Activity
//it might be a good idea to use some sort of Singleton class to share USBKeyboard
private static final USBKeyboard keyb = new USBKeyboard();
private Button buttonConnect;
private Button buttonType;
//called when data is received form USB host
@Override
public void onUSBData(int endpoint, byte[] data) {
// TODO Auto-generated method stub
//USBKeyboard already takes care of handling NumLock/CapsLock/ScrollLock state
}
//Called when connection state has changed, update UI
public void onUSBEvent(int code) {
manageUI();
}
//Set appropriate caption for buttonConnect, depending on current connection state
//Enable buttonType only if InputStick has been successfully enumerated
private void manageUI() {
int state = keyb.getState();
switch (state) {
case USBDevice.STATE_NONE:
buttonConnect.setText(getString(R.string.string_connect));
buttonConnect.setEnabled(true);
enableUI(false);
break;
case USBDevice.STATE_CONNECTING:
buttonConnect.setText(getString(R.string.string_connecting));
buttonConnect.setEnabled(false);
enableUI(false);
break;
case USBDevice.STATE_CONNECTED:
buttonConnect.setText(getString(R.string.string_disconnect));
buttonConnect.setEnabled(true);
enableUI(false);
break;
case USBDevice.STATE_READY:
buttonConnect.setText(getString(R.string.string_disconnect));
buttonConnect.setEnabled(true);
enableUI(true);
break;
}
}
private void enableUI(boolean enabled) {
buttonType.setEnabled(enabled);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hello_input_stick);
//Pass application context!
//It will allow to bind to InputStickService (part of DeviceManager app)
keyb.setContext(this.getApplicationContext());
buttonConnect = (Button) findViewById(R.id.buttonConnect);
buttonConnect.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
//Action depends on current connection state
switch (keyb.getState()) {
case USBDevice.STATE_NONE:
keyb.connect();
break;
case USBDevice.STATE_CONNECTED:
case USBDevice.STATE_READY:
keyb.disconnect();
break;
}
}
});
buttonType = (Button) findViewById(R.id.buttonType);
//choose one!
buttonType.setOnClickListener(new MyOnClickListener());
//buttonType.setOnClickListener(new MyOnClickListenerCaps());
//buttonType.setOnClickListener(new MyOnClickListenerLayout());
}
@Override
protected void onResume() {
super.onResume();
//register as a listener for callbacks
keyb.registerListener(this);
//Update UI depending on current connection state
manageUI();
}
@Override
protected void onPause() {
super.onPause();
//Activity is paused, unregister listener
keyb.unregisterListener();
}
//1) Simple case: ignore CapsLock and assume keyboard layout used in OS is set to EN-US or compatible
private class MyOnClickListener implements OnClickListener {
@Override
public void onClick(View arg0) {
//SHIFT key + H key = 'H'
keyb.pressAndRelease(USBKeyboard.SHIFT_LEFT, USBKeyboard.KEY_H);
//E key = 'e'
keyb.pressAndRelease(USBKeyboard.NONE, USBKeyboard.KEY_E);
//'llo world!', USBKeyboard class takes care of adding SHIFT key when necessary
keyb.type("llo world!");
//press ENTER key
keyb.pressAndRelease(USBKeyboard.NONE, USBKeyboard.KEY_ENTER);
//type 'XyZ'
keyb.type("XyZ");
}
}
//2) Take state of CapsLock into account
private class MyOnClickListenerCaps implements OnClickListener {
@Override
public void onClick(View arg0) {
if (keyb.isCapsLockOn()) {
//CapsLock is on! Change case of keys affected by CapsLock
keyb.type("hELLO WORLD!");
keyb.pressAndRelease(USBKeyboard.NONE, USBKeyboard.KEY_ENTER);
keyb.type("xYz");
} else {
keyb.pressAndRelease(USBKeyboard.SHIFT_LEFT, USBKeyboard.KEY_H);
keyb.pressAndRelease(USBKeyboard.NONE, USBKeyboard.KEY_E);
keyb.type("llo world!");
keyb.pressAndRelease(USBKeyboard.NONE, USBKeyboard.KEY_ENTER);
keyb.type("XyZ");
}
}
}
//3) Assume that USB host uses different keyboard layout: qwertz instead of qwerty
private class MyOnClickListenerLayout implements OnClickListener {
@Override
public void onClick(View arg0) {
if (keyb.isCapsLockOn()) {
//CapsLock is on! Change case of keys affected by CapsLock
keyb.type("hELLO WORLD!");
keyb.pressAndRelease(USBKeyboard.NONE, USBKeyboard.KEY_ENTER);
//replace 'z' and 'y' characters to produce expected result
keyb.type("xZy");
} else {
keyb.pressAndRelease(USBKeyboard.SHIFT_LEFT, USBKeyboard.KEY_H);
keyb.pressAndRelease(USBKeyboard.NONE, USBKeyboard.KEY_E);
keyb.type("llo world!");
keyb.pressAndRelease(USBKeyboard.NONE, USBKeyboard.KEY_ENTER);
//replace 'z' and 'y' characters to produce expected result
keyb.type("XzY");
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.