diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index 0713bf580..1a48b7984 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -91,6 +91,7 @@ import android.inputmethodservice.KeyboardView; import android.inputmethodservice.Keyboard; import android.app.Notification; import android.app.PendingIntent; +import java.util.TreeSet; public class MainActivity extends Activity { @@ -522,6 +523,7 @@ public class MainActivity extends Activity { public boolean shift = false; public boolean alt = false; + public TreeSet stickyKeys = new TreeSet(); public BuiltInKeyboardView(Context context, android.util.AttributeSet attrs) { super(context, attrs); @@ -552,12 +554,18 @@ public class MainActivity extends Activity setKeyboard(new Keyboard(MainActivity.this, TextInputKeyboardList[idx][keyboard])); setPreviewEnabled(false); setProximityCorrectionEnabled(false); + for (Keyboard.Key k: getKeyboard().getKeys()) + { + if (stickyKeys.contains(k.codes[0])) + { + k.on = true; + invalidateAllKeys(); + } + } } } final BuiltInKeyboardView builtinKeyboard = new BuiltInKeyboardView(MainActivity.this, null); - builtinKeyboard.setKeyboard(new Keyboard(MainActivity.this, TextInputKeyboardList[0][keyboard])); - builtinKeyboard.setPreviewEnabled(false); - builtinKeyboard.setProximityCorrectionEnabled(false); + builtinKeyboard.ChangeKeyboard(); builtinKeyboard.setOnKeyboardActionListener(new KeyboardView.OnKeyboardActionListener() { public void onPress(int key) @@ -566,6 +574,11 @@ public class MainActivity extends Activity return; if (key < 0) return; + for (Keyboard.Key k: builtinKeyboard.getKeyboard().getKeys()) + { + if (k.sticky && key == k.codes[0]) + return; + } if (key > 100000) { key -= 100000; @@ -603,6 +616,23 @@ public class MainActivity extends Activity } if (key < 0) return; + for (Keyboard.Key k: builtinKeyboard.getKeyboard().getKeys()) + { + if (k.sticky && key == k.codes[0]) + { + if (k.on) + { + builtinKeyboard.stickyKeys.add(key); + MainActivity.this.onKeyDown(key, new KeyEvent(KeyEvent.ACTION_DOWN, key)); + } + else + { + builtinKeyboard.stickyKeys.remove(key); + MainActivity.this.onKeyUp(key, new KeyEvent(KeyEvent.ACTION_UP, key)); + } + return; + } + } boolean shifted = false; if (key > 100000) @@ -614,7 +644,18 @@ public class MainActivity extends Activity MainActivity.this.onKeyUp(key, new KeyEvent(KeyEvent.ACTION_UP, key)); if (shifted) + { MainActivity.this.onKeyUp(KeyEvent.KEYCODE_SHIFT_LEFT, new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_SHIFT_LEFT)); + builtinKeyboard.stickyKeys.remove(KeyEvent.KEYCODE_SHIFT_LEFT); + for (Keyboard.Key k: builtinKeyboard.getKeyboard().getKeys()) + { + if (k.sticky && k.codes[0] == KeyEvent.KEYCODE_SHIFT_LEFT && k.on) + { + k.on = false; + builtinKeyboard.invalidateAllKeys(); + } + } + } } public void onText(CharSequence p1) {} public void swipeLeft() {} diff --git a/project/jni/application/xserver/pulseaudio b/project/jni/application/xserver/pulseaudio index f865b8066..bdb11d93b 160000 --- a/project/jni/application/xserver/pulseaudio +++ b/project/jni/application/xserver/pulseaudio @@ -1 +1 @@ -Subproject commit f865b8066561eac3b38b3685688bef3c2b1e6277 +Subproject commit bdb11d93b702c62f0a7083040c96f8848c686a7a diff --git a/project/jni/application/xserver/xserver b/project/jni/application/xserver/xserver index 4dd75cbad..006833ad9 160000 --- a/project/jni/application/xserver/xserver +++ b/project/jni/application/xserver/xserver @@ -1 +1 @@ -Subproject commit 4dd75cbadce270825b3f605443750c8058275eeb +Subproject commit 006833ad955368f3e0ad7ced1250824babeeb115 diff --git a/project/res/xml/qwerty.xml b/project/res/xml/qwerty.xml index ff78c6512..8c6a21dc0 100644 --- a/project/res/xml/qwerty.xml +++ b/project/res/xml/qwerty.xml @@ -30,7 +30,7 @@ - + @@ -38,10 +38,10 @@ - + - + diff --git a/project/res/xml/qwerty_alt.xml b/project/res/xml/qwerty_alt.xml index f7219b05a..90c34dbe2 100644 --- a/project/res/xml/qwerty_alt.xml +++ b/project/res/xml/qwerty_alt.xml @@ -31,7 +31,7 @@ - + @@ -43,15 +43,15 @@ - - - - - - - - - - + + + + + + + + + + diff --git a/project/res/xml/qwerty_alt_shift.xml b/project/res/xml/qwerty_alt_shift.xml index 1fc702c93..a3dd0869b 100644 --- a/project/res/xml/qwerty_alt_shift.xml +++ b/project/res/xml/qwerty_alt_shift.xml @@ -31,7 +31,7 @@ - + @@ -43,7 +43,7 @@ - + diff --git a/project/res/xml/qwerty_shift.xml b/project/res/xml/qwerty_shift.xml index 396a3ae43..610317e35 100644 --- a/project/res/xml/qwerty_shift.xml +++ b/project/res/xml/qwerty_shift.xml @@ -30,7 +30,7 @@ - + @@ -38,10 +38,10 @@ - + - +