mirror of
https://github.com/2009scape/2009Scape-mobile.git
synced 2025-12-19 21:10:11 -07:00
Clean up, keyboard is faster now
This commit is contained in:
parent
22b3583ae1
commit
153e991806
3 changed files with 49 additions and 54 deletions
|
|
@ -624,8 +624,10 @@ public class BaseMainActivity extends LoggableActivity {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(isKeyboard(event)) {
|
int index = EfficientAndroidLWJGLKeycode.getIndexByKey(event.getKeyCode());
|
||||||
EfficientAndroidLWJGLKeycode.execKey(event,event.getKeyCode(),event.getAction() == KeyEvent.ACTION_DOWN);
|
if(index >= 0) {
|
||||||
|
Toast.makeText(this,"THIS IS A KEYBOARD EVENT !", Toast.LENGTH_SHORT).show();
|
||||||
|
EfficientAndroidLWJGLKeycode.execKey(event, index);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -734,7 +736,7 @@ public class BaseMainActivity extends LoggableActivity {
|
||||||
private void dialogSendCustomKey() {
|
private void dialogSendCustomKey() {
|
||||||
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
|
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
|
||||||
dialog.setTitle(R.string.control_customkey);
|
dialog.setTitle(R.string.control_customkey);
|
||||||
dialog.setItems(EfficientAndroidLWJGLKeycode.generateKeyName(), (dInterface, position) -> EfficientAndroidLWJGLKeycode.execKeyIndex(BaseMainActivity.this, position));
|
dialog.setItems(EfficientAndroidLWJGLKeycode.generateKeyName(), (dInterface, position) -> EfficientAndroidLWJGLKeycode.execKeyIndex(position));
|
||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -878,8 +880,8 @@ public class BaseMainActivity extends LoggableActivity {
|
||||||
if(doesObjectContainField(KeyEvent.class,"KEYCODE_" + Character.toUpperCase(keyChar))) {
|
if(doesObjectContainField(KeyEvent.class,"KEYCODE_" + Character.toUpperCase(keyChar))) {
|
||||||
try {
|
try {
|
||||||
int keyCode = KeyEvent.class.getField("KEYCODE_" + Character.toUpperCase(keyChar)).getInt(null);
|
int keyCode = KeyEvent.class.getField("KEYCODE_" + Character.toUpperCase(keyChar)).getInt(null);
|
||||||
sendKeyPress(EfficientAndroidLWJGLKeycode.get(keyCode), keyChar, 0, CallbackBridge.getCurrentMods(), true);
|
sendKeyPress(EfficientAndroidLWJGLKeycode.getValue(keyCode), keyChar, 0, CallbackBridge.getCurrentMods(), true);
|
||||||
sendKeyPress(EfficientAndroidLWJGLKeycode.get(keyCode), keyChar, 0, CallbackBridge.getCurrentMods(), false);
|
sendKeyPress(EfficientAndroidLWJGLKeycode.getValue(keyCode), keyChar, 0, CallbackBridge.getCurrentMods(), false);
|
||||||
} catch (IllegalAccessException | NoSuchFieldException e) {
|
} catch (IllegalAccessException | NoSuchFieldException e) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -890,7 +892,7 @@ public class BaseMainActivity extends LoggableActivity {
|
||||||
sendKeyPress(0, keyChar, 0, CallbackBridge.getCurrentMods(), false);
|
sendKeyPress(0, keyChar, 0, CallbackBridge.getCurrentMods(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendKeyPress(int keyCode) {
|
public static void sendKeyPress(int keyCode) {
|
||||||
sendKeyPress(keyCode, CallbackBridge.getCurrentMods(), true);
|
sendKeyPress(keyCode, CallbackBridge.getCurrentMods(), true);
|
||||||
sendKeyPress(keyCode, CallbackBridge.getCurrentMods(), false);
|
sendKeyPress(keyCode, CallbackBridge.getCurrentMods(), false);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,14 @@ import net.kdt.pojavlaunch.prefs.LauncherPreferences;
|
||||||
|
|
||||||
import org.lwjgl.glfw.CallbackBridge;
|
import org.lwjgl.glfw.CallbackBridge;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
public class EfficientAndroidLWJGLKeycode {
|
public class EfficientAndroidLWJGLKeycode {
|
||||||
|
|
||||||
|
//This old version of this class was using an ArrayMap, a generic Key -> Value data structure.
|
||||||
|
//The key being the android keycode from a KeyEvent
|
||||||
|
//The value its LWJGL equivalent.
|
||||||
|
|
||||||
private static final int[] androidKeycodes = new int[103];
|
private static final int[] androidKeycodes = new int[103];
|
||||||
private static final short[] LWJGLKeycodes = new short[androidKeycodes.length];
|
private static final short[] LWJGLKeycodes = new short[androidKeycodes.length];
|
||||||
private static String[] androidKeyNameArray; /* = new String[androidKeycodes.length]; */
|
private static String[] androidKeyNameArray; /* = new String[androidKeycodes.length]; */
|
||||||
|
|
@ -155,36 +162,13 @@ public class EfficientAndroidLWJGLKeycode {
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static short get(int key){
|
|
||||||
//Taken from: https://www.geeksforgeeks.org/binary-search/
|
|
||||||
//Give the value associated to a key
|
|
||||||
int left = 0, right = androidKeycodes.length - 1;
|
|
||||||
while (left <= right) {
|
|
||||||
int m = left + (right - left) / 2;
|
|
||||||
|
|
||||||
// Check if x is present at mid
|
|
||||||
if (androidKeycodes[m] == key)
|
|
||||||
return LWJGLKeycodes[m];
|
|
||||||
|
|
||||||
// If x greater, ignore left half
|
|
||||||
if (androidKeycodes[m] < key)
|
|
||||||
left = m + 1;
|
|
||||||
|
|
||||||
// If x is smaller, ignore right half
|
|
||||||
else
|
|
||||||
right = m - 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we reach here, then element was
|
|
||||||
// not present
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean containsKey(int keycode){
|
public static boolean containsKey(int keycode){
|
||||||
return get(keycode) != -1;
|
return getIndexByKey(keycode) >= 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public static String[] generateKeyName() {
|
public static String[] generateKeyName() {
|
||||||
if (androidKeyNameArray == null) {
|
if (androidKeyNameArray == null) {
|
||||||
androidKeyNameArray = new String[androidKeycodes.length];
|
androidKeyNameArray = new String[androidKeycodes.length];
|
||||||
|
|
@ -195,7 +179,13 @@ public class EfficientAndroidLWJGLKeycode {
|
||||||
return androidKeyNameArray;
|
return androidKeyNameArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void execKey(KeyEvent keyEvent, int i, boolean isDown) {
|
public static void execKey(KeyEvent keyEvent) {
|
||||||
|
execKey(keyEvent, getIndexByKey(keyEvent.getKeyCode()));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static void execKey(KeyEvent keyEvent, int valueIndex) {
|
||||||
|
//valueIndex points to where the value is stored in the array.
|
||||||
CallbackBridge.holdingAlt = keyEvent.isAltPressed();
|
CallbackBridge.holdingAlt = keyEvent.isAltPressed();
|
||||||
CallbackBridge.holdingCapslock = keyEvent.isCapsLockOn();
|
CallbackBridge.holdingCapslock = keyEvent.isCapsLockOn();
|
||||||
CallbackBridge.holdingCtrl = keyEvent.isCtrlPressed();
|
CallbackBridge.holdingCtrl = keyEvent.isCtrlPressed();
|
||||||
|
|
@ -207,36 +197,39 @@ public class EfficientAndroidLWJGLKeycode {
|
||||||
if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK && LauncherPreferences.PREF_BACK_TO_RIGHT_MOUSE) {
|
if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK && LauncherPreferences.PREF_BACK_TO_RIGHT_MOUSE) {
|
||||||
BaseMainActivity.sendMouseButton(LWJGLGLFWKeycode.GLFW_MOUSE_BUTTON_RIGHT, keyEvent.getAction() == KeyEvent.ACTION_DOWN);
|
BaseMainActivity.sendMouseButton(LWJGLGLFWKeycode.GLFW_MOUSE_BUTTON_RIGHT, keyEvent.getAction() == KeyEvent.ACTION_DOWN);
|
||||||
} else {
|
} else {
|
||||||
if(keyEvent.getUnicodeChar() != 0) {
|
char key = (char)(keyEvent.getUnicodeChar() != 0 ? keyEvent.getUnicodeChar() : '\u0000');
|
||||||
char key = (char)keyEvent.getUnicodeChar();
|
|
||||||
BaseMainActivity.sendKeyPress(
|
BaseMainActivity.sendKeyPress(
|
||||||
get(keyEvent.getKeyCode()),
|
getValueByIndex(valueIndex),
|
||||||
key,
|
key,
|
||||||
0,
|
0,
|
||||||
CallbackBridge.getCurrentMods(),
|
CallbackBridge.getCurrentMods(),
|
||||||
keyEvent.getAction() == KeyEvent.ACTION_DOWN);
|
keyEvent.getAction() == KeyEvent.ACTION_DOWN);
|
||||||
}else{
|
|
||||||
BaseMainActivity.sendKeyPress(
|
|
||||||
get(keyEvent.getKeyCode()),
|
|
||||||
CallbackBridge.getCurrentMods(),
|
|
||||||
keyEvent.getAction()==KeyEvent.ACTION_DOWN);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (Throwable th) {
|
} catch (Throwable th) {
|
||||||
th.printStackTrace();
|
th.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void execKeyIndex(BaseMainActivity mainActivity, int index) {
|
public static void execKeyIndex(int index){
|
||||||
mainActivity.sendKeyPress(getKeyByIndex(index));
|
//Send a quick key press.
|
||||||
|
BaseMainActivity.sendKeyPress(getValueByIndex(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getKeyByIndex(int index) {
|
public static int getValueByIndex(int index) {
|
||||||
return LWJGLKeycodes[index];
|
return LWJGLKeycodes[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static int getIndexByLWJGLKey(int lwjglKey) {
|
public static int getIndexByKey(int key){
|
||||||
|
return Arrays.binarySearch(androidKeycodes, key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static short getValue(int key){
|
||||||
|
return LWJGLKeycodes[Arrays.binarySearch(androidKeycodes, key)];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int getIndexByValue(int lwjglKey) {
|
||||||
|
//Since the LWJGL keycodes aren't sorted, linear search is used.
|
||||||
|
//You should avoid using this function on performance critical areas
|
||||||
for (int i = 0; i < LWJGLKeycodes.length; i++) {
|
for (int i = 0; i < LWJGLKeycodes.length; i++) {
|
||||||
if(LWJGLKeycodes[i] == lwjglKey) return i;
|
if(LWJGLKeycodes[i] == lwjglKey) return i;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -234,7 +234,7 @@ public class EditControlButtonPopup {
|
||||||
if (properties.keycodes[i] < 0) {
|
if (properties.keycodes[i] < 0) {
|
||||||
spinnersKeycode[i].setSelection(properties.keycodes[i] + specialArr.length);
|
spinnersKeycode[i].setSelection(properties.keycodes[i] + specialArr.length);
|
||||||
} else {
|
} else {
|
||||||
spinnersKeycode[i].setSelection(EfficientAndroidLWJGLKeycode.getIndexByLWJGLKey(properties.keycodes[i]) + specialArr.length);
|
spinnersKeycode[i].setSelection(EfficientAndroidLWJGLKeycode.getIndexByValue(properties.keycodes[i]) + specialArr.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -272,7 +272,7 @@ public class EditControlButtonPopup {
|
||||||
if (spinnersKeycode[i].getSelectedItemPosition() < specialArr.length) {
|
if (spinnersKeycode[i].getSelectedItemPosition() < specialArr.length) {
|
||||||
properties.keycodes[i] = spinnersKeycode[i].getSelectedItemPosition() - specialArr.length;
|
properties.keycodes[i] = spinnersKeycode[i].getSelectedItemPosition() - specialArr.length;
|
||||||
} else {
|
} else {
|
||||||
properties.keycodes[i] = EfficientAndroidLWJGLKeycode.getKeyByIndex(spinnersKeycode[i].getSelectedItemPosition() - specialArr.length);
|
properties.keycodes[i] = EfficientAndroidLWJGLKeycode.getValueByIndex(spinnersKeycode[i].getSelectedItemPosition() - specialArr.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue