diff --git a/ChangeAppSettings.sh b/ChangeAppSettings.sh index c42e58a6c..4173e9406 100755 --- a/ChangeAppSettings.sh +++ b/ChangeAppSettings.sh @@ -224,6 +224,7 @@ echo echo "Redefine common keys to SDL keysyms" echo "MENU and BACK hardware keys and TOUCHSCREEN virtual 'key' are available on all devices, other keys may be absent" echo "SEARCH and CALL by default return same keycode as DPAD_CENTER - one of those keys is available on most devices" +echo "Use word NO_REMAP if you want to preserve native functionality for certain key " echo "TOUCHSCREEN DPAD_CENTER VOLUMEUP VOLUMEDOWN MENU BACK CAMERA ENTER DEL SEARCH CALL - Java keycodes" echo "$RedefinedKeys - current SDL keycodes" echo -n ": " @@ -512,8 +513,47 @@ else fi KEY2=0 +NoRemapMask="" for KEY in $RedefinedKeys; do - RedefinedKeycodes="$RedefinedKeycodes -DSDL_ANDROID_KEYCODE_$KEY2=$KEY" + if [ "$KEY" = "NO_REMAP" ] ; then + case $KEY2 in + 0) + #not used at the moment + ;; + 1) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_DPAD_CENTER" + ;; + 2) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_VOLUME_UP" + ;; + 3) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_VOLUME_DOWN" + ;; + 4) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_MENU" + ;; + 5) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_BACK" + ;; + 6) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_CAMERA" + ;; + 7) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_ENTER" + ;; + 8) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_DEL" + ;; + 9) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_SEARCH" + ;; + 10) + NoRemapMask="$NoRemapMask|KeyEvent.KEYCODE_CALL" + ;; + esac + else + RedefinedKeycodes="$RedefinedKeycodes -DSDL_ANDROID_KEYCODE_$KEY2=$KEY" + fi KEY2=`expr $KEY2 '+' 1` done @@ -585,7 +625,8 @@ cat project/src/Globals.java | \ sed "s/public static int AppTouchscreenKeyboardKeysAmountAutoFire = .*;/public static int AppTouchscreenKeyboardKeysAmountAutoFire = $AppTouchscreenKeyboardKeysAmountAutoFire;/" | \ sed "s%public static String ReadmeText = .*%public static String ReadmeText = \"$ReadmeText\".replace(\"^\",\"\\\n\");%" | \ sed "s%public static String CommandLine = .*%public static String CommandLine = \"$AppCmdline\";%" | \ - sed "s/public static String AppLibraries.*/public static String AppLibraries[] = { $LibrariesToLoad };/" > \ + sed "s/public static String AppLibraries.*/public static String AppLibraries[] = { $LibrariesToLoad };/" | \ + sed "s/public static int RemapKeymask = .*;/public static int RemapKeymask = 0$NoRemapMask;/" > \ project/src/Globals.java.1 mv -f project/src/Globals.java.1 project/src/Globals.java diff --git a/project/java/Globals.java b/project/java/Globals.java index 03f34439d..fa08c2610 100644 --- a/project/java/Globals.java +++ b/project/java/Globals.java @@ -103,4 +103,5 @@ class Globals { public static String DataDir = new String(""); public static boolean SmoothVideo = false; public static boolean MultiThreadedVideo = false; + public static int RemapKeymask = 0; } diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index 6a522c30f..61046c16a 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -325,10 +325,13 @@ public class MainActivity extends Activity { _screenKeyboard.onKeyDown(keyCode, event); else if( mGLView != null ) - mGLView.nativeKey( keyCode, 1 ); + { + if( !mGLView.callNativeKey( keyCode, 1 ) ) + return super.onKeyDown(keyCode, event); + } else if( keyCode == KeyEvent.KEYCODE_BACK && downloader != null ) - { + { if( downloader.DownloadFailed ) System.exit(1); if( !downloader.DownloadComplete ) @@ -349,7 +352,10 @@ public class MainActivity extends Activity { _screenKeyboard.onKeyUp(keyCode, event); else if( mGLView != null ) - mGLView.nativeKey( keyCode, 0 ); + { + if( !mGLView.callNativeKey( keyCode, 0 ) ) + return super.onKeyUp(keyCode, event); + } return true; } diff --git a/project/java/Settings.java b/project/java/Settings.java index 0f496dfb9..13fd4f083 100644 --- a/project/java/Settings.java +++ b/project/java/Settings.java @@ -869,251 +869,292 @@ class Settings } } - static void showAdditionalInputConfig(final MainActivity p) + static class AdditionalInputConfig extends Menu { - CharSequence[] items = { - p.getResources().getString(R.string.controls_screenkb), - p.getResources().getString(R.string.controls_accelnav) - }; - - boolean defaults[] = { - Globals.UseTouchscreenKeyboard, - Globals.UseAccelerometerAsArrowKeys - }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(p.getResources().getString(R.string.controls_additional)); - builder.setMultiChoiceItems(items, defaults, new DialogInterface.OnMultiChoiceClickListener() + String title(final MainActivity p) { - public void onClick(DialogInterface dialog, int item, boolean isChecked) - { - if( item == 0 ) - Globals.UseTouchscreenKeyboard = isChecked; - if( item == 1 ) - Globals.UseAccelerometerAsArrowKeys = isChecked; - } - }); - builder.setPositiveButton(p.getResources().getString(R.string.ok), new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int item) - { - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } - - static void showAccelerometerConfig(final MainActivity p) - { - if( ! Globals.UseAccelerometerAsArrowKeys || Globals.AppHandlesJoystickSensitivity ) - { - Globals.AccelerometerSensitivity = 2; // Slow, full range - showAccelerometerCenterConfig(p); - return; + return p.getResources().getString(R.string.controls_additional); } - - final CharSequence[] items = { p.getResources().getString(R.string.accel_fast), - p.getResources().getString(R.string.accel_medium), - p.getResources().getString(R.string.accel_slow) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.accel_question); - builder.setSingleChoiceItems(items, Globals.AccelerometerSensitivity, new DialogInterface.OnClickListener() + void run (final MainActivity p) { - public void onClick(DialogInterface dialog, int item) - { - Globals.AccelerometerSensitivity = item; - - dialog.dismiss(); - showAccelerometerCenterConfig(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } - - static void showAccelerometerCenterConfig(final MainActivity p) - { - if( ! Globals.UseAccelerometerAsArrowKeys || Globals.AppHandlesJoystickSensitivity ) - { - Globals.AccelerometerCenterPos = 2; // Fixed horizontal center position - goBack(p); - return; - } - - final CharSequence[] items = { p.getResources().getString(R.string.accel_floating), - p.getResources().getString(R.string.accel_fixed_start), - p.getResources().getString(R.string.accel_fixed_horiz) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.accel_question_center); - builder.setSingleChoiceItems(items, Globals.AccelerometerCenterPos, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int item) - { - Globals.AccelerometerCenterPos = item; - - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } - - - static void showScreenKeyboardSizeConfig(final MainActivity p) - { - final CharSequence[] items = { p.getResources().getString(R.string.controls_screenkb_large), - p.getResources().getString(R.string.controls_screenkb_medium), - p.getResources().getString(R.string.controls_screenkb_small), - p.getResources().getString(R.string.controls_screenkb_tiny) }; - - for( int i = 0; i < Globals.ScreenKbControlsLayout.length; i++ ) - for( int ii = 0; ii < 4; ii++ ) - Globals.ScreenKbControlsLayout[i][ii] = 0; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(p.getResources().getString(R.string.controls_screenkb_size)); - builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardSize, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int item) - { - Globals.TouchscreenKeyboardSize = item; - - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } - - static void showScreenKeyboardThemeConfig(final MainActivity p) - { - final CharSequence[] items = { - p.getResources().getString(R.string.controls_screenkb_by, "Ultimate Droid", "Sean Stieber"), - p.getResources().getString(R.string.controls_screenkb_by, "Simple Theme", "Beholder") + CharSequence[] items = { + p.getResources().getString(R.string.controls_screenkb), + p.getResources().getString(R.string.controls_accelnav) }; - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(p.getResources().getString(R.string.controls_screenkb_theme)); - builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardTheme, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int item) - { - Globals.TouchscreenKeyboardTheme = item; + boolean defaults[] = { + Globals.UseTouchscreenKeyboard, + Globals.UseAccelerometerAsArrowKeys + }; - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(p.getResources().getString(R.string.controls_additional)); + builder.setMultiChoiceItems(items, defaults, new DialogInterface.OnMultiChoiceClickListener() { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); + public void onClick(DialogInterface dialog, int item, boolean isChecked) + { + if( item == 0 ) + Globals.UseTouchscreenKeyboard = isChecked; + if( item == 1 ) + Globals.UseAccelerometerAsArrowKeys = isChecked; + } + }); + builder.setPositiveButton(p.getResources().getString(R.string.ok), new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } } - static void showScreenKeyboardTransparencyConfig(final MainActivity p) + static class AccelerometerConfig extends Menu { - final CharSequence[] items = { p.getResources().getString(R.string.controls_screenkb_trans_0), - p.getResources().getString(R.string.controls_screenkb_trans_1), - p.getResources().getString(R.string.controls_screenkb_trans_2), - p.getResources().getString(R.string.controls_screenkb_trans_3), - p.getResources().getString(R.string.controls_screenkb_trans_4) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(p.getResources().getString(R.string.controls_screenkb_transparency)); - builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardTransparency, new DialogInterface.OnClickListener() + String title(final MainActivity p) { - public void onClick(DialogInterface dialog, int item) - { - Globals.TouchscreenKeyboardTransparency = item; - - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() + return p.getResources().getString(R.string.accel_question); + } + void run (final MainActivity p) { - public void onCancel(DialogInterface dialog) + if( ! Globals.UseAccelerometerAsArrowKeys || Globals.AppHandlesJoystickSensitivity ) { - goBack(p); + Globals.AccelerometerSensitivity = 2; // Slow, full range + showAccelerometerCenterConfig(p); + return; } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); + + final CharSequence[] items = { p.getResources().getString(R.string.accel_fast), + p.getResources().getString(R.string.accel_medium), + p.getResources().getString(R.string.accel_slow) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.accel_question); + builder.setSingleChoiceItems(items, Globals.AccelerometerSensitivity, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + Globals.AccelerometerSensitivity = item; + + dialog.dismiss(); + showAccelerometerCenterConfig(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } + static void showAccelerometerCenterConfig(final MainActivity p) + { + if( ! Globals.UseAccelerometerAsArrowKeys || Globals.AppHandlesJoystickSensitivity ) + { + Globals.AccelerometerCenterPos = 2; // Fixed horizontal center position + goBack(p); + return; + } + + final CharSequence[] items = { p.getResources().getString(R.string.accel_floating), + p.getResources().getString(R.string.accel_fixed_start), + p.getResources().getString(R.string.accel_fixed_horiz) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.accel_question_center); + builder.setSingleChoiceItems(items, Globals.AccelerometerCenterPos, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + Globals.AccelerometerCenterPos = item; + + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } } - static void showAudioConfig(final MainActivity p) - { - final CharSequence[] items = { p.getResources().getString(R.string.audiobuf_verysmall), - p.getResources().getString(R.string.audiobuf_small), - p.getResources().getString(R.string.audiobuf_medium), - p.getResources().getString(R.string.audiobuf_large) }; - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.audiobuf_question); - builder.setSingleChoiceItems(items, Globals.AudioBufferConfig, new DialogInterface.OnClickListener() + static class ScreenKeyboardSizeConfig extends Menu + { + String title(final MainActivity p) { - public void onClick(DialogInterface dialog, int item) - { - Globals.AudioBufferConfig = item; - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() + return p.getResources().getString(R.string.controls_screenkb_size); + } + void run (final MainActivity p) { - public void onCancel(DialogInterface dialog) + final CharSequence[] items = { p.getResources().getString(R.string.controls_screenkb_large), + p.getResources().getString(R.string.controls_screenkb_medium), + p.getResources().getString(R.string.controls_screenkb_small), + p.getResources().getString(R.string.controls_screenkb_tiny) }; + + for( int i = 0; i < Globals.ScreenKbControlsLayout.length; i++ ) + for( int ii = 0; ii < 4; ii++ ) + Globals.ScreenKbControlsLayout[i][ii] = 0; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(p.getResources().getString(R.string.controls_screenkb_size)); + builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardSize, new DialogInterface.OnClickListener() { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); + public void onClick(DialogInterface dialog, int item) + { + Globals.TouchscreenKeyboardSize = item; + + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } + } + + static class ScreenKeyboardThemeConfig extends Menu + { + String title(final MainActivity p) + { + return p.getResources().getString(R.string.controls_screenkb_theme); + } + void run (final MainActivity p) + { + final CharSequence[] items = { + p.getResources().getString(R.string.controls_screenkb_by, "Ultimate Droid", "Sean Stieber"), + p.getResources().getString(R.string.controls_screenkb_by, "Simple Theme", "Beholder") + }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(p.getResources().getString(R.string.controls_screenkb_theme)); + builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardTheme, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + Globals.TouchscreenKeyboardTheme = item; + + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } + } + + static class ScreenKeyboardTransparencyConfig extends Menu + { + String title(final MainActivity p) + { + return p.getResources().getString(R.string.controls_screenkb_transparency); + } + void run (final MainActivity p) + { + final CharSequence[] items = { p.getResources().getString(R.string.controls_screenkb_trans_0), + p.getResources().getString(R.string.controls_screenkb_trans_1), + p.getResources().getString(R.string.controls_screenkb_trans_2), + p.getResources().getString(R.string.controls_screenkb_trans_3), + p.getResources().getString(R.string.controls_screenkb_trans_4) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(p.getResources().getString(R.string.controls_screenkb_transparency)); + builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardTransparency, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + Globals.TouchscreenKeyboardTransparency = item; + + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } + } + + static class AudioConfig extends Menu + { + String title(final MainActivity p) + { + return p.getResources().getString(R.string.audiobuf_question); + } + void run (final MainActivity p) + { + final CharSequence[] items = { p.getResources().getString(R.string.audiobuf_verysmall), + p.getResources().getString(R.string.audiobuf_small), + p.getResources().getString(R.string.audiobuf_medium), + p.getResources().getString(R.string.audiobuf_large) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.audiobuf_question); + builder.setSingleChoiceItems(items, Globals.AudioBufferConfig, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + Globals.AudioBufferConfig = item; + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } } static class DisplaySizeConfig extends Menu @@ -1194,138 +1235,151 @@ class Settings } } - static void showLeftClickConfig(final MainActivity p) + static class LeftClickConfig extends Menu { - final CharSequence[] items = { p.getResources().getString(R.string.leftclick_normal), - p.getResources().getString(R.string.leftclick_near_cursor), - p.getResources().getString(R.string.leftclick_multitouch), - p.getResources().getString(R.string.leftclick_pressure), - p.getResources().getString(R.string.rightclick_key), - p.getResources().getString(R.string.leftclick_timeout), - p.getResources().getString(R.string.leftclick_tap), - p.getResources().getString(R.string.leftclick_tap_or_timeout) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.leftclick_question); - builder.setSingleChoiceItems(items, Globals.LeftClickMethod, new DialogInterface.OnClickListener() + String title(final MainActivity p) { - public void onClick(DialogInterface dialog, int item) + return p.getResources().getString(R.string.leftclick_question); + } + void run (final MainActivity p) + { + final CharSequence[] items = { p.getResources().getString(R.string.leftclick_normal), + p.getResources().getString(R.string.leftclick_near_cursor), + p.getResources().getString(R.string.leftclick_multitouch), + p.getResources().getString(R.string.leftclick_pressure), + p.getResources().getString(R.string.rightclick_key), + p.getResources().getString(R.string.leftclick_timeout), + p.getResources().getString(R.string.leftclick_tap), + p.getResources().getString(R.string.leftclick_tap_or_timeout) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.leftclick_question); + builder.setSingleChoiceItems(items, Globals.LeftClickMethod, new DialogInterface.OnClickListener() { - dialog.dismiss(); - if( item == Mouse.LEFT_CLICK_WITH_KEY ) - p.keyListener = new KeyRemapToolMouseClick(p, true); - else if( item == Mouse.LEFT_CLICK_WITH_TIMEOUT || item == Mouse.LEFT_CLICK_WITH_TAP_OR_TIMEOUT ) - showLeftClickTimeoutConfig(p); - else + public void onClick(DialogInterface dialog, int item) + { + dialog.dismiss(); + if( item == Mouse.LEFT_CLICK_WITH_KEY ) + p.keyListener = new KeyRemapToolMouseClick(p, true); + else if( item == Mouse.LEFT_CLICK_WITH_TIMEOUT || item == Mouse.LEFT_CLICK_WITH_TAP_OR_TIMEOUT ) + showLeftClickTimeoutConfig(p); + else + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } + static void showLeftClickTimeoutConfig(final MainActivity p) { + final CharSequence[] items = { p.getResources().getString(R.string.leftclick_timeout_time_0), + p.getResources().getString(R.string.leftclick_timeout_time_1), + p.getResources().getString(R.string.leftclick_timeout_time_2), + p.getResources().getString(R.string.leftclick_timeout_time_3), + p.getResources().getString(R.string.leftclick_timeout_time_4) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.leftclick_timeout_time); + builder.setSingleChoiceItems(items, Globals.LeftClickTimeout, new DialogInterface.OnClickListener() { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); + public void onClick(DialogInterface dialog, int item) + { + Globals.LeftClickTimeout = item; + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } } - static void showLeftClickTimeoutConfig(final MainActivity p) { - final CharSequence[] items = { p.getResources().getString(R.string.leftclick_timeout_time_0), - p.getResources().getString(R.string.leftclick_timeout_time_1), - p.getResources().getString(R.string.leftclick_timeout_time_2), - p.getResources().getString(R.string.leftclick_timeout_time_3), - p.getResources().getString(R.string.leftclick_timeout_time_4) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.leftclick_timeout_time); - builder.setSingleChoiceItems(items, Globals.LeftClickTimeout, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int item) - { - Globals.LeftClickTimeout = item; - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } - - static void showRightClickConfig(final MainActivity p) + static class RightClickConfig extends Menu { - final CharSequence[] items = { p.getResources().getString(R.string.rightclick_none), - p.getResources().getString(R.string.rightclick_multitouch), - p.getResources().getString(R.string.rightclick_pressure), - p.getResources().getString(R.string.rightclick_key), - p.getResources().getString(R.string.leftclick_timeout) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.rightclick_question); - builder.setSingleChoiceItems(items, Globals.RightClickMethod, new DialogInterface.OnClickListener() + String title(final MainActivity p) { - public void onClick(DialogInterface dialog, int item) + return p.getResources().getString(R.string.rightclick_question); + } + void run (final MainActivity p) + { + final CharSequence[] items = { p.getResources().getString(R.string.rightclick_none), + p.getResources().getString(R.string.rightclick_multitouch), + p.getResources().getString(R.string.rightclick_pressure), + p.getResources().getString(R.string.rightclick_key), + p.getResources().getString(R.string.leftclick_timeout) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.rightclick_question); + builder.setSingleChoiceItems(items, Globals.RightClickMethod, new DialogInterface.OnClickListener() { - Globals.RightClickMethod = item; - dialog.dismiss(); - if( item == Mouse.RIGHT_CLICK_WITH_KEY ) - p.keyListener = new KeyRemapToolMouseClick(p, false); - else if( item == Mouse.RIGHT_CLICK_WITH_TIMEOUT ) - showRightClickTimeoutConfig(p); - else + public void onClick(DialogInterface dialog, int item) + { + Globals.RightClickMethod = item; + dialog.dismiss(); + if( item == Mouse.RIGHT_CLICK_WITH_KEY ) + p.keyListener = new KeyRemapToolMouseClick(p, false); + else if( item == Mouse.RIGHT_CLICK_WITH_TIMEOUT ) + showRightClickTimeoutConfig(p); + else + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } - static void showRightClickTimeoutConfig(final MainActivity p) { - final CharSequence[] items = { p.getResources().getString(R.string.leftclick_timeout_time_0), - p.getResources().getString(R.string.leftclick_timeout_time_1), - p.getResources().getString(R.string.leftclick_timeout_time_2), - p.getResources().getString(R.string.leftclick_timeout_time_3), - p.getResources().getString(R.string.leftclick_timeout_time_4) }; + static void showRightClickTimeoutConfig(final MainActivity p) { + final CharSequence[] items = { p.getResources().getString(R.string.leftclick_timeout_time_0), + p.getResources().getString(R.string.leftclick_timeout_time_1), + p.getResources().getString(R.string.leftclick_timeout_time_2), + p.getResources().getString(R.string.leftclick_timeout_time_3), + p.getResources().getString(R.string.leftclick_timeout_time_4) }; - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.leftclick_timeout_time); - builder.setSingleChoiceItems(items, Globals.RightClickTimeout, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int item) + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.leftclick_timeout_time); + builder.setSingleChoiceItems(items, Globals.RightClickTimeout, new DialogInterface.OnClickListener() { - Globals.RightClickTimeout = item; - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) + public void onClick(DialogInterface dialog, int item) + { + Globals.RightClickTimeout = item; + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } } public static class KeyRemapToolMouseClick implements KeyEventsListener @@ -1357,201 +1411,205 @@ class Settings } } - static void showAdditionalMouseConfig(final MainActivity p) + static class AdditionalMouseConfig extends Menu { - CharSequence[] items = { - p.getResources().getString(R.string.pointandclick_showcreenunderfinger2), - p.getResources().getString(R.string.pointandclick_joystickmouse), - p.getResources().getString(R.string.click_with_dpadcenter), - p.getResources().getString(R.string.pointandclick_relative) - }; - - boolean defaults[] = { - Globals.ShowScreenUnderFinger, - Globals.MoveMouseWithJoystick, - Globals.ClickMouseWithDpad, - Globals.RelativeMouseMovement - }; - - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(p.getResources().getString(R.string.pointandclick_question)); - builder.setMultiChoiceItems(items, defaults, new DialogInterface.OnMultiChoiceClickListener() + String title(final MainActivity p) { - public void onClick(DialogInterface dialog, int item, boolean isChecked) - { - if( item == 0 ) - Globals.ShowScreenUnderFinger = isChecked; - if( item == 1 ) - Globals.MoveMouseWithJoystick = isChecked; - if( item == 2 ) - Globals.ClickMouseWithDpad = isChecked; - if( item == 3 ) - Globals.RelativeMouseMovement = isChecked; - } - }); - builder.setPositiveButton(p.getResources().getString(R.string.ok), new DialogInterface.OnClickListener() + return p.getResources().getString(R.string.pointandclick_question); + } + void run (final MainActivity p) { - public void onClick(DialogInterface dialog, int item) + CharSequence[] items = { + p.getResources().getString(R.string.pointandclick_showcreenunderfinger2), + p.getResources().getString(R.string.pointandclick_joystickmouse), + p.getResources().getString(R.string.click_with_dpadcenter), + p.getResources().getString(R.string.pointandclick_relative) + }; + + boolean defaults[] = { + Globals.ShowScreenUnderFinger, + Globals.MoveMouseWithJoystick, + Globals.ClickMouseWithDpad, + Globals.RelativeMouseMovement + }; + + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(p.getResources().getString(R.string.pointandclick_question)); + builder.setMultiChoiceItems(items, defaults, new DialogInterface.OnMultiChoiceClickListener() { - dialog.dismiss(); - if( Globals.RelativeMouseMovement ) - showRelativeMouseMovementConfig(p); - else + public void onClick(DialogInterface dialog, int item, boolean isChecked) + { + if( item == 0 ) + Globals.ShowScreenUnderFinger = isChecked; + if( item == 1 ) + Globals.MoveMouseWithJoystick = isChecked; + if( item == 2 ) + Globals.ClickMouseWithDpad = isChecked; + if( item == 3 ) + Globals.RelativeMouseMovement = isChecked; + } + }); + builder.setPositiveButton(p.getResources().getString(R.string.ok), new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + dialog.dismiss(); + if( Globals.RelativeMouseMovement ) + showRelativeMouseMovementConfig(p); + else + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } - - static void showRelativeMouseMovementConfig(final MainActivity p) - { - final CharSequence[] items = { p.getResources().getString(R.string.accel_veryslow), - p.getResources().getString(R.string.accel_slow), - p.getResources().getString(R.string.accel_medium), - p.getResources().getString(R.string.accel_fast), - p.getResources().getString(R.string.accel_veryfast) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.pointandclick_relative_speed); - builder.setSingleChoiceItems(items, Globals.RelativeMouseMovementSpeed, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int item) - { - Globals.RelativeMouseMovementSpeed = item; - - dialog.dismiss(); - showRelativeMouseMovementConfig1(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } - - static void showRelativeMouseMovementConfig1(final MainActivity p) - { - final CharSequence[] items = { p.getResources().getString(R.string.none), - p.getResources().getString(R.string.accel_slow), - p.getResources().getString(R.string.accel_medium), - p.getResources().getString(R.string.accel_fast) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(R.string.pointandclick_relative_accel); - builder.setSingleChoiceItems(items, Globals.RelativeMouseMovementAccel, new DialogInterface.OnClickListener() - { - public void onClick(DialogInterface dialog, int item) - { - Globals.RelativeMouseMovementAccel = item; - - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) - { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); - } - - - static void showArrowKeysConfig(final MainActivity p) - { - if( ! Globals.AppNeedsArrowKeys && ! Globals.MoveMouseWithJoystick ) - { - Globals.PhoneHasArrowKeys = false; - Globals.PhoneHasTrackball = false; - showTrackballConfig(p); - return; + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); } - - final CharSequence[] items = { p.getResources().getString(R.string.controls_arrows), - p.getResources().getString(R.string.controls_trackball), - p.getResources().getString(R.string.controls_touch) }; - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(p.getResources().getString(R.string.controls_question)); - builder.setSingleChoiceItems(items, Globals.PhoneHasArrowKeys ? 0 : ( Globals.PhoneHasTrackball ? 1 : 2 ), new DialogInterface.OnClickListener() + static void showRelativeMouseMovementConfig(final MainActivity p) { - public void onClick(DialogInterface dialog, int item) - { - Globals.PhoneHasArrowKeys = (item == 0); - Globals.PhoneHasTrackball = (item == 1); + final CharSequence[] items = { p.getResources().getString(R.string.accel_veryslow), + p.getResources().getString(R.string.accel_slow), + p.getResources().getString(R.string.accel_medium), + p.getResources().getString(R.string.accel_fast), + p.getResources().getString(R.string.accel_veryfast) }; - dialog.dismiss(); - showTrackballConfig(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() - { - public void onCancel(DialogInterface dialog) + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.pointandclick_relative_speed); + builder.setSingleChoiceItems(items, Globals.RelativeMouseMovementSpeed, new DialogInterface.OnClickListener() { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); + public void onClick(DialogInterface dialog, int item) + { + Globals.RelativeMouseMovementSpeed = item; + + dialog.dismiss(); + showRelativeMouseMovementConfig1(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } + + static void showRelativeMouseMovementConfig1(final MainActivity p) + { + final CharSequence[] items = { p.getResources().getString(R.string.none), + p.getResources().getString(R.string.accel_slow), + p.getResources().getString(R.string.accel_medium), + p.getResources().getString(R.string.accel_fast) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.pointandclick_relative_accel); + builder.setSingleChoiceItems(items, Globals.RelativeMouseMovementAccel, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + Globals.RelativeMouseMovementAccel = item; + + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } } - static void showTrackballConfig(final MainActivity p) + + static class ArrowKeysConfig extends Menu { - if( ! Globals.PhoneHasTrackball ) + String title(final MainActivity p) { - Globals.TrackballDampening = 0; - goBack(p); - return; + return p.getResources().getString(R.string.controls_question); } - - final CharSequence[] items = { p.getResources().getString(R.string.trackball_no_dampening), - p.getResources().getString(R.string.trackball_fast), - p.getResources().getString(R.string.trackball_medium), - p.getResources().getString(R.string.trackball_slow) }; - - AlertDialog.Builder builder = new AlertDialog.Builder(p); - builder.setTitle(p.getResources().getString(R.string.trackball_question)); - builder.setSingleChoiceItems(items, Globals.TrackballDampening, new DialogInterface.OnClickListener() + boolean enabled() { - public void onClick(DialogInterface dialog, int item) - { - Globals.TrackballDampening = item; - - dialog.dismiss(); - goBack(p); - } - }); - builder.setOnCancelListener(new DialogInterface.OnCancelListener() + return Globals.AppNeedsArrowKeys || Globals.MoveMouseWithJoystick; + } + void run (final MainActivity p) { - public void onCancel(DialogInterface dialog) + final CharSequence[] items = { p.getResources().getString(R.string.controls_arrows), + p.getResources().getString(R.string.controls_trackball), + p.getResources().getString(R.string.controls_touch) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(p.getResources().getString(R.string.controls_question)); + builder.setSingleChoiceItems(items, Globals.PhoneHasArrowKeys ? 0 : ( Globals.PhoneHasTrackball ? 1 : 2 ), new DialogInterface.OnClickListener() { - goBack(p); - } - }); - AlertDialog alert = builder.create(); - alert.setOwnerActivity(p); - alert.show(); + public void onClick(DialogInterface dialog, int item) + { + Globals.PhoneHasArrowKeys = (item == 0); + Globals.PhoneHasTrackball = (item == 1); + + dialog.dismiss(); + if( Globals.PhoneHasTrackball ) + showTrackballConfig(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } + + static void showTrackballConfig(final MainActivity p) + { + final CharSequence[] items = { p.getResources().getString(R.string.trackball_no_dampening), + p.getResources().getString(R.string.trackball_fast), + p.getResources().getString(R.string.trackball_medium), + p.getResources().getString(R.string.trackball_slow) }; + + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(p.getResources().getString(R.string.trackball_question)); + builder.setSingleChoiceItems(items, Globals.TrackballDampening, new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + Globals.TrackballDampening = item; + + dialog.dismiss(); + goBack(p); + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + goBack(p); + } + }); + AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + } } static void showJoystickMouseConfig(final MainActivity p) diff --git a/project/java/Video.java b/project/java/Video.java index ee8df96c1..a6c7f1a03 100644 --- a/project/java/Video.java +++ b/project/java/Video.java @@ -401,16 +401,28 @@ class DemoGLSurfaceView extends GLSurfaceView_SDL { @Override public boolean onKeyDown(int keyCode, final KeyEvent event) { - nativeKey( keyCode, 1 ); - return true; + if( !callNativeKey( keyCode, 1 ) ) + return super.onKeyDown(keyCode, event); + return true; } @Override public boolean onKeyUp(int keyCode, final KeyEvent event) { - nativeKey( keyCode, 0 ); - return true; + if( !callNativeKey( keyCode, 0 ) ) + return super.onKeyUp(keyCode, event); + return true; } + public boolean callNativeKey(int keyCode, int down) { + if( (Globals.RemapKeymask & keyCode ) == keyCode ) + { + // no remap made for the key + return false; + } + nativeKey( keyCode, down ); + return true; + } + DemoRenderer mRenderer; MainActivity mParent; DifferentTouchInput touchInput = null;