Просмотр исходного кода

Add support for enabling/disabling KeyEvent simulation for soft keyboards on Android similar to MouseEvents.

iwgeric 10 лет назад
Родитель
Сommit
1ed1463476

+ 5 - 0
jme3-android/src/main/java/com/jme3/app/AndroidHarness.java

@@ -107,6 +107,10 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
      * JoyAxisTriggers.
      */
     protected boolean joystickEventsEnabled = false;
+    /**
+     * If true KeyEvents are generated from TouchEvents
+     */
+    protected boolean keyEventsEnabled = true;
     /**
      * If true MouseEvents are generated from TouchEvents
      */
@@ -224,6 +228,7 @@ public class AndroidHarness extends Activity implements TouchListener, DialogInt
             settings.setEmulateMouse(mouseEventsEnabled);
             settings.setEmulateMouseFlipAxis(mouseEventsInvertX, mouseEventsInvertY);
             settings.setUseJoysticks(joystickEventsEnabled);
+            settings.setEmulateKeyboard(keyEventsEnabled);
 
             settings.setBitsPerPixel(eglBitsPerPixel);
             settings.setAlphaBits(eglAlphaBits);

+ 5 - 2
jme3-android/src/main/java/com/jme3/input/android/AndroidInputHandler.java

@@ -136,8 +136,7 @@ public class AndroidInputHandler implements TouchInput {
     }
 
     public void loadSettings(AppSettings settings) {
-        // TODO: add simulate keyboard to settings
-//        keyboardEventsEnabled = true;
+        keyboardEventsEnabled = settings.isEmulateKeyboard();
         mouseEventsEnabled = settings.isEmulateMouse();
         mouseEventsInvertX = settings.isEmulateMouseFlipX();
         mouseEventsInvertY = settings.isEmulateMouseFlipY();
@@ -259,6 +258,10 @@ public class AndroidInputHandler implements TouchInput {
         this.keyboardEventsEnabled = simulate;
     }
 
+    public boolean isSimulateKeyboard() {
+        return keyboardEventsEnabled;
+    }
+
     public void setOmitHistoricEvents(boolean dontSendHistory) {
         this.dontSendHistory = dontSendHistory;
     }

+ 16 - 14
jme3-android/src/main/java/com/jme3/input/android/AndroidKeyHandler.java

@@ -108,20 +108,21 @@ public class AndroidKeyHandler implements View.OnKeyListener {
 
         }
 
-
-        KeyInputEvent kie;
-        char unicodeChar = (char)event.getUnicodeChar();
-        int jmeKeyCode = AndroidKeyMapping.getJmeKey(keyCode);
-
-        boolean pressed = event.getAction() == KeyEvent.ACTION_DOWN;
-        boolean repeating = pressed && event.getRepeatCount() > 0;
-
-        kie = new KeyInputEvent(jmeKeyCode, unicodeChar, pressed, repeating);
-        kie.setTime(event.getEventTime());
-        androidInput.addEvent(kie);
-//        logger.log(Level.FINE, "onKey keyCode: {0}, jmeKeyCode: {1}, pressed: {2}, repeating: {3}",
-//                new Object[]{keyCode, jmeKeyCode, pressed, repeating});
-//        logger.log(Level.FINE, "creating KeyInputEvent: {0}", kie);
+        if (androidInput.isSimulateKeyboard()) {
+            KeyInputEvent kie;
+            char unicodeChar = (char)event.getUnicodeChar();
+            int jmeKeyCode = AndroidKeyMapping.getJmeKey(keyCode);
+
+            boolean pressed = event.getAction() == KeyEvent.ACTION_DOWN;
+            boolean repeating = pressed && event.getRepeatCount() > 0;
+
+            kie = new KeyInputEvent(jmeKeyCode, unicodeChar, pressed, repeating);
+            kie.setTime(event.getEventTime());
+            androidInput.addEvent(kie);
+//            logger.log(Level.FINE, "onKey keyCode: {0}, jmeKeyCode: {1}, pressed: {2}, repeating: {3}",
+//                    new Object[]{keyCode, jmeKeyCode, pressed, repeating});
+//            logger.log(Level.FINE, "creating KeyInputEvent: {0}", kie);
+        }
 
         // consume all keys ourself except Volume Up/Down and Menu
         //   Don't do Menu so that typical Android Menus can be created and used
@@ -133,6 +134,7 @@ public class AndroidKeyHandler implements View.OnKeyListener {
         } else {
             return true;
         }
+
    }
 
 }

+ 26 - 6
jme3-core/src/main/java/com/jme3/system/AppSettings.java

@@ -90,10 +90,10 @@ public final class AppSettings extends HashMap<String, Object> {
     /**
      * Use the Android MediaPlayer / SoundPool based renderer for Android audio capabilities.
      * <p>
-     * NOTE: Supports Android 2.2+ platforms.  
+     * NOTE: Supports Android 2.2+ platforms.
      *
      * @see AppSettings#setAudioRenderer(java.lang.String)
-     * @deprecated This audio renderer has too many limitations. 
+     * @deprecated This audio renderer has too many limitations.
      * use {@link #ANDROID_OPENAL_SOFT} instead.
      */
     @Deprecated
@@ -455,6 +455,26 @@ public final class AppSettings extends HashMap<String, Object> {
         return getBoolean("TouchEmulateMouseFlipY");
     }
 
+    /**
+     * Enable or disable keyboard emulation on touchscreen based devices.
+     * This will convert soft keyboard key presses on the touchscreen
+     * into the appropriate key events.
+     *
+     * @param emulateKeyboard If soft keyboard emulation should be enabled.
+     */
+    public void setEmulateKeyboard(boolean emulateKeyboard) {
+        putBoolean("TouchEmulateKeyboard", emulateKeyboard);
+    }
+
+    /**
+     * Returns true if keyboard emulation is enabled, false otherwise.
+     *
+     * @return Soft keyboard emulation mode.
+     */
+    public boolean isEmulateKeyboard() {
+        return getBoolean("TouchEmulateKeyboard");
+    }
+
     /**
      * @param frameRate The frame-rate is the upper limit on how high
      * the application's frames-per-second can go.
@@ -731,12 +751,12 @@ public final class AppSettings extends HashMap<String, Object> {
     public void setSettingsDialogImage(String path) {
         putString("SettingsDialogImage", path);
     }
-    
+
     /**
      * Enables Gamma Correction
-     * This requires that the GPU supports GL_ARB_framebuffer_sRGB and will 
+     * This requires that the GPU supports GL_ARB_framebuffer_sRGB and will
      * disabled otherwise.
-     * @param gammaCorrection 
+     * @param gammaCorrection
      * (Default : true)
      */
     public void setGammaCorrection(boolean gammaCorrection) {
@@ -911,7 +931,7 @@ public final class AppSettings extends HashMap<String, Object> {
     public String getSettingsDialogImage() {
         return getString("SettingsDialogImage");
     }
-    
+
     public boolean getGammaCorrection() {
         return getBoolean("GammaCorrection");
     }