diff --git a/ChangeAppSettings.sh b/ChangeAppSettings.sh
index 1c2ed07b5..085a27203 100755
--- a/ChangeAppSettings.sh
+++ b/ChangeAppSettings.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-CHANGE_APP_SETTINGS_VERSION=15
+CHANGE_APP_SETTINGS_VERSION=16
AUTO=
if [ "X$1" = "X-a" ]; then
@@ -176,10 +176,12 @@ fi
fi
if [ -z "$RedefinedKeys" -o -z "$AUTO" ]; then
-echo -n "\nRedefine common keys to SDL keysyms: TOUCHSCREEN DPAD_CENTER VOLUMEUP VOLUMEDOWN MENU BACK CAMERA ENTER DEL SEARCH CALL"
+echo -n "\nRedefine common keys to SDL keysyms"
echo -n "\nMENU and BACK hardware keys and TOUCHSCREEN virtual 'key' are available on all devices, other keys may be absent"
echo -n "\nSEARCH and CALL by default return same keycode as DPAD_CENTER - one of those keys is available on most devices"
-echo -n "\nThe same key values are used if touchscreen keyboard is enabled, except for MENU and BACK\n($RedefinedKeys)\n: "
+echo -n "\nTOUCHSCREEN DPAD_CENTER VOLUMEUP VOLUMEDOWN MENU BACK CAMERA ENTER DEL SEARCH CALL - Java keycodes"
+echo -n "\n$RedefinedKeys - current SDL keycodes"
+echo -n "\n: "
read var
if [ -n "$var" ] ; then
RedefinedKeys="$var"
@@ -202,6 +204,16 @@ if [ -n "$var" ] ; then
fi
fi
+if [ -z "$RedefinedKeysScreenKb" -o -z "$AUTO" ]; then
+echo -n "\nRedefine on-screen keyboard keys to SDL keysyms - 6 keyboard keys + 4 multitouch gestures (zoom and rotate)"
+echo -n "\n$RedefinedKeysScreenKb - current SDL keycodes"
+echo -n "\n: "
+read var
+if [ -n "$var" ] ; then
+ RedefinedKeysScreenKb="$var"
+fi
+fi
+
if [ -z "$MultiABI" -o -z "$AUTO" ]; then
echo -n "\nEnable multi-ABI binary, with hardware FPU support - \nit will also work on old devices, but .apk size is 2x bigger (y) or (n) ($MultiABI): "
read var
@@ -331,6 +343,7 @@ echo NonBlockingSwapBuffers=$NonBlockingSwapBuffers >> AndroidAppSettings.cfg
echo RedefinedKeys=\"$RedefinedKeys\" >> AndroidAppSettings.cfg
echo AppTouchscreenKeyboardKeysAmount=$AppTouchscreenKeyboardKeysAmount >> AndroidAppSettings.cfg
echo AppTouchscreenKeyboardKeysAmountAutoFire=$AppTouchscreenKeyboardKeysAmountAutoFire >> AndroidAppSettings.cfg
+echo RedefinedKeysScreenKb=\"$RedefinedKeysScreenKb\" >> AndroidAppSettings.cfg
echo MultiABI=$MultiABI >> AndroidAppSettings.cfg
echo AppVersionCode=$AppVersionCode >> AndroidAppSettings.cfg
echo AppVersionName=\"$AppVersionName\" >> AndroidAppSettings.cfg
@@ -434,13 +447,18 @@ else
NonBlockingSwapBuffers=false
fi
-RedefinedKeycodes="-DSDL_ANDROID_KEYCODE_MOUSE=$MouseKeycode"
KEY2=0
for KEY in $RedefinedKeys; do
RedefinedKeycodes="$RedefinedKeycodes -DSDL_ANDROID_KEYCODE_$KEY2=$KEY"
KEY2=`expr $KEY2 '+' 1`
done
+KEY2=0
+for KEY in $RedefinedKeysScreenKb; do
+ RedefinedKeycodesScreenKb="$RedefinedKeycodesScreenKb -DSDL_ANDROID_SCREENKB_KEYCODE_$KEY2=$KEY"
+ KEY2=`expr $KEY2 '+' 1`
+done
+
if [ "$MultiABI" = "y" ] ; then
MultiABI="armeabi armeabi-v7a"
else
@@ -518,7 +536,7 @@ cat project/jni/SettingsTemplate.mk | \
sed "s^COMPILED_LIBRARIES := .*^COMPILED_LIBRARIES := $CompiledLibraries^" | \
sed "s^APPLICATION_ADDITIONAL_CFLAGS :=.*^APPLICATION_ADDITIONAL_CFLAGS := $AppCflags^" | \
sed "s^APPLICATION_ADDITIONAL_LDFLAGS :=.*^APPLICATION_ADDITIONAL_LDFLAGS := $AppLdflags^" | \
- sed "s^SDL_ADDITIONAL_CFLAGS :=.*^SDL_ADDITIONAL_CFLAGS := $RedefinedKeycodes^" | \
+ sed "s^SDL_ADDITIONAL_CFLAGS :=.*^SDL_ADDITIONAL_CFLAGS := $RedefinedKeycodes $RedefinedKeycodesScreenKb^" | \
sed "s^APPLICATION_SUBDIRS_BUILD :=.*^APPLICATION_SUBDIRS_BUILD := $AppSubdirsBuild^" | \
sed "s^APPLICATION_CUSTOM_BUILD_SCRIPT :=.*^APPLICATION_CUSTOM_BUILD_SCRIPT := $CustomBuildScript^" | \
sed "s^SDL_VERSION :=.*^SDL_VERSION := $LibSdlVersion^" >> \
diff --git a/project/java/Globals.java b/project/java/Globals.java
index 001e37081..90dd39e08 100644
--- a/project/java/Globals.java
+++ b/project/java/Globals.java
@@ -82,6 +82,8 @@ class Globals {
public static int ClickScreenPressure = 0;
public static int ClickScreenTouchspotSize = 0;
public static int RemapHwKeycode[] = new int[SDL_Keys.JAVA_KEYCODE_LAST];
+ public static int RemapScreenKbKeycode[] = new int[10];
+ public static boolean ScreenKbControlsShown[] = new boolean[12];
}
class LoadLibrary {
diff --git a/project/java/Keycodes.java b/project/java/Keycodes.java
index 398fb1835..7e4e653a0 100644
--- a/project/java/Keycodes.java
+++ b/project/java/Keycodes.java
@@ -496,7 +496,7 @@ class SDL_Keys
public static String [] names = null;
public static Integer [] values = null;
- static final int JAVA_KEYCODE_LAST = android.view.KeyEvent.KEYCODE_MUTE; // = 91
+ static final int JAVA_KEYCODE_LAST = 110; // Android 2.3 added several new gaming keys, it ends up at keycode 110 currently - plz keep in sync with javakeycodes.h
static
{
diff --git a/project/java/Settings.java b/project/java/Settings.java
index f033c2996..ef6926053 100644
--- a/project/java/Settings.java
+++ b/project/java/Settings.java
@@ -64,6 +64,17 @@ class Settings
{
out.writeInt(Globals.RemapHwKeycode[i]);
}
+ out.writeInt(Globals.RemapScreenKbKeycode.length);
+ for( int i = 0; i < Globals.RemapScreenKbKeycode.length; i++ )
+ {
+ out.writeInt(Globals.RemapScreenKbKeycode[i]);
+ }
+ out.writeInt(Globals.ScreenKbControlsShown.length);
+ for( int i = 0; i < Globals.ScreenKbControlsShown.length; i++ )
+ {
+ out.writeBoolean(Globals.ScreenKbControlsShown[i]);
+ out.writeInt(Globals.RemapScreenKbKeycode[i]);
+ }
out.close();
settingsLoaded = true;
@@ -90,6 +101,23 @@ class Settings
idx = ii;
Globals.RemapHwKeycode[i] = idx;
}
+ for( int i = 0; i < Globals.ScreenKbControlsShown.length; i++ )
+ {
+ int sdlKey = nativeGetKeymapKeyScreenKb(i);
+ int idx = 0;
+ for(int ii = 0; ii < SDL_Keys.values.length; ii++)
+ if(SDL_Keys.values[ii] == sdlKey)
+ idx = ii;
+ Globals.RemapHwKeycode[i] = idx;
+ Globals.RemapScreenKbKeycode[i] = idx;
+ }
+ Globals.ScreenKbControlsShown[0] = Globals.AppNeedsArrowKeys;
+ for( int i = 1; i < 7; i++ )
+ Globals.ScreenKbControlsShown[i] = ( i <= Globals.AppTouchscreenKeyboardKeysAmount );
+ Globals.ScreenKbControlsShown[7] = Globals.AppNeedsTextInput;
+ for( int i = 8; i < 12; i++ )
+ Globals.ScreenKbControlsShown[i] = true;
+
try {
ObjectInputStream settingsFile = new ObjectInputStream(new FileInputStream( p.getFilesDir().getAbsolutePath() + "/" + SettingsFileName ));
Globals.DownloadToSdcard = settingsFile.readBoolean();
@@ -116,12 +144,24 @@ class Settings
Globals.KeepAspectRatio = settingsFile.readBoolean();
Globals.MoveMouseWithJoystickSpeed = settingsFile.readInt();
Globals.MoveMouseWithJoystickAccel = settingsFile.readInt();
- if( settingsFile.readInt() != SDL_Keys.JAVA_KEYCODE_LAST )
- throw new IOException();
- for( int i = 0; i < SDL_Keys.JAVA_KEYCODE_LAST; i++ )
+ int readKeys = settingsFile.readInt();
+ for( int i = 0; i < readKeys; i++ )
{
Globals.RemapHwKeycode[i] = settingsFile.readInt();
}
+ if( settingsFile.readInt() != Globals.RemapScreenKbKeycode.length )
+ throw new IOException();
+ for( int i = 0; i < Globals.RemapScreenKbKeycode.length; i++ )
+ {
+ Globals.RemapScreenKbKeycode[i] = settingsFile.readInt();
+ }
+ if( settingsFile.readInt() != Globals.ScreenKbControlsShown.length )
+ throw new IOException();
+ for( int i = 0; i < Globals.ScreenKbControlsShown.length; i++ )
+ {
+ Globals.ScreenKbControlsShown[i] = settingsFile.readBoolean();
+ Globals.RemapScreenKbKeycode[i] = settingsFile.readInt();
+ }
settingsLoaded = true;
@@ -158,6 +198,8 @@ class Settings
p.setUpStatusLabel();
showConfig(p);
}
+
+ // ===============================================================================================
public static void showConfig(final MainActivity p) {
settingsChanged = true;
@@ -203,6 +245,8 @@ class Settings
items.add(p.getResources().getString(R.string.remap_hwkeys));
+ items.add(p.getResources().getString(R.string.remap_screenkb));
+
items.add(p.getResources().getString(R.string.ok));
AlertDialog.Builder builder = new AlertDialog.Builder(p);
@@ -280,6 +324,10 @@ class Settings
if( item == selected )
showRemapHwKeysConfig(p);
selected++;
+
+ if( item == selected )
+ showRemapScreenKbConfig(p);
+ selected++;
if( item == selected )
{
@@ -545,20 +593,17 @@ class Settings
}
final CharSequence[] items = {
- p.getResources().getString(R.string.controls_screenkb_by, "Ultimate Droid", "Sean Stieber"),
- p.getResources().getString(R.string.controls_screenkb_by, "Ugly Arrows", "pelya")
+ p.getResources().getString(R.string.controls_screenkb_by, "Ugly Arrows", "pelya"),
+ p.getResources().getString(R.string.controls_screenkb_by, "Ultimate Droid", "Sean Stieber")
};
AlertDialog.Builder builder = new AlertDialog.Builder(p);
builder.setTitle(p.getResources().getString(R.string.controls_screenkb_theme));
- builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardTheme == 1 ? 0 : 1, new DialogInterface.OnClickListener()
+ builder.setSingleChoiceItems(items, Globals.TouchscreenKeyboardTheme, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int item)
{
- if( item == 0 )
- Globals.TouchscreenKeyboardTheme = 1;
- if( item == 1 )
- Globals.TouchscreenKeyboardTheme = 0;
+ Globals.TouchscreenKeyboardTheme = item;
dialog.dismiss();
showConfigMainMenu(p);
@@ -890,7 +935,132 @@ class Settings
alert.show();
}
}
-
+
+ static void showRemapScreenKbConfig(final MainActivity p)
+ {
+ CharSequence[] items = {
+ p.getResources().getString(R.string.remap_screenkb_joystick),
+ p.getResources().getString(R.string.remap_screenkb_button_text),
+ p.getResources().getString(R.string.remap_screenkb_button) + " 1",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 2",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 3",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 4",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 5",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 6",
+ p.getResources().getString(R.string.remap_screenkb_button_zoomin),
+ p.getResources().getString(R.string.remap_screenkb_button_zoomout),
+ p.getResources().getString(R.string.remap_screenkb_button_rotateleft),
+ p.getResources().getString(R.string.remap_screenkb_button_rotateright),
+ };
+
+ boolean defaults[] = {
+ Globals.ScreenKbControlsShown[0],
+ Globals.ScreenKbControlsShown[1],
+ Globals.ScreenKbControlsShown[2],
+ Globals.ScreenKbControlsShown[3],
+ Globals.ScreenKbControlsShown[4],
+ Globals.ScreenKbControlsShown[5],
+ Globals.ScreenKbControlsShown[6],
+ Globals.ScreenKbControlsShown[7],
+ Globals.ScreenKbControlsShown[8],
+ Globals.ScreenKbControlsShown[9],
+ Globals.ScreenKbControlsShown[10],
+ Globals.ScreenKbControlsShown[11],
+ };
+
+ if( ! Globals.UseTouchscreenKeyboard )
+ {
+ for( int i = 0; i < 8; i++ )
+ Globals.ScreenKbControlsShown[i] = false;
+
+ CharSequence[] items2 = {
+ p.getResources().getString(R.string.remap_screenkb_button_zoomin),
+ p.getResources().getString(R.string.remap_screenkb_button_zoomout),
+ p.getResources().getString(R.string.remap_screenkb_button_rotateleft),
+ p.getResources().getString(R.string.remap_screenkb_button_rotateright),
+ };
+
+ boolean defaults2[] = {
+ Globals.ScreenKbControlsShown[8],
+ Globals.ScreenKbControlsShown[9],
+ Globals.ScreenKbControlsShown[10],
+ Globals.ScreenKbControlsShown[11],
+ };
+
+ items = items2;
+ defaults = defaults2;
+ }
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(p);
+ builder.setTitle(p.getResources().getString(R.string.remap_screenkb));
+ builder.setMultiChoiceItems(items, defaults, new DialogInterface.OnMultiChoiceClickListener()
+ {
+ public void onClick(DialogInterface dialog, int item, boolean isChecked)
+ {
+ if( ! Globals.UseTouchscreenKeyboard )
+ item += 8;
+ Globals.ScreenKbControlsShown[item] = isChecked;
+ }
+ });
+ builder.setPositiveButton(p.getResources().getString(R.string.ok), new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int item)
+ {
+ dialog.dismiss();
+ showRemapScreenKbConfig2(p, 0);
+ }
+ });
+
+ AlertDialog alert = builder.create();
+ alert.setOwnerActivity(p);
+ alert.show();
+ }
+
+ static void showRemapScreenKbConfig2(final MainActivity p, final int currentButton)
+ {
+ CharSequence[] items = {
+ p.getResources().getString(R.string.remap_screenkb_button) + " 1",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 2",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 3",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 4",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 5",
+ p.getResources().getString(R.string.remap_screenkb_button) + " 6",
+ p.getResources().getString(R.string.remap_screenkb_button_zoomin),
+ p.getResources().getString(R.string.remap_screenkb_button_zoomout),
+ p.getResources().getString(R.string.remap_screenkb_button_rotateleft),
+ p.getResources().getString(R.string.remap_screenkb_button_rotateright),
+ };
+
+ if( currentButton >= Globals.RemapScreenKbKeycode.length )
+ {
+ showConfigMainMenu(p);
+ return;
+ }
+ if( ! Globals.ScreenKbControlsShown[currentButton + 2] )
+ {
+ showRemapScreenKbConfig2(p, currentButton + 1);
+ return;
+ }
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(p);
+ builder.setTitle(items[currentButton]);
+ builder.setSingleChoiceItems(SDL_Keys.names, Globals.RemapScreenKbKeycode[currentButton], new DialogInterface.OnClickListener()
+ {
+ public void onClick(DialogInterface dialog, int item)
+ {
+ Globals.RemapScreenKbKeycode[currentButton] = item;
+
+ dialog.dismiss();
+ showRemapScreenKbConfig2(p, currentButton + 1);
+ }
+ });
+ AlertDialog alert = builder.create();
+ alert.setOwnerActivity(p);
+ alert.show();
+ }
+
+ // ===============================================================================================
+
static void Apply(Activity p)
{
nativeIsSdcardUsed( Globals.DownloadToSdcard ? 1 : 0 );
@@ -929,6 +1099,11 @@ class Settings
nativeSetKeymapKey(i, SDL_Keys.values[Globals.RemapHwKeycode[i]]);
}
+ for( int i = 0; i < Globals.ScreenKbControlsShown.length; i++ )
+ {
+ nativeSetKeymapKeyScreenKb(i, i >= 2 ? SDL_Keys.values[Globals.RemapScreenKbKeycode[i-2]] : 0, Globals.ScreenKbControlsShown[i] ? 1 : 0);
+ }
+
String lang = new String(Locale.getDefault().getLanguage());
if( Locale.getDefault().getCountry().length() > 0 )
lang = lang + "_" + Locale.getDefault().getCountry();
@@ -981,7 +1156,9 @@ class Settings
private static native void nativeSetupScreenKeyboardButtons(byte[] img);
private static native void nativeInitKeymap();
private static native int nativeGetKeymapKey(int key);
+ private static native int nativeGetKeymapKeyScreenKb(int key);
private static native void nativeSetKeymapKey(int javakey, int key);
+ private static native void nativeSetKeymapKeyScreenKb(int javakey, int key, int used);
public static native void nativeSetEnv(final String name, final String value);
}
diff --git a/project/java/translations/values-de/strings.xml b/project/java/translations/values-de/strings.xml
index f9860ca46..37f730d41 100644
--- a/project/java/translations/values-de/strings.xml
+++ b/project/java/translations/values-de/strings.xml
@@ -13,7 +13,7 @@
Lade Daten von %s
Fehler beim Download von %s
Fehler beim schreiben auf %s
- Zu %.0f%% abgeschlossen: Datei %s
+ Zu %1$.0f%% abgeschlossen: Datei %2$s
Abgeschlossen
Interner Speicher: %d MiB frei
@@ -52,7 +52,7 @@
Kleine
Winzig
On-Screen-Tastatur Thema
-%s von %s
+%1$s von %2$s
Schwimmend
Feste, wenn die Anwendung startet
Fixiert auf Tisch Schreibtisch Orientierung
@@ -74,7 +74,7 @@
Touchscreen mit Kraft
Trackball klicken Select-Taste
Bewegen Sie die Maus mit Joystick oder Trackball
-Pressure %03d Radius %03d
+Pressure %1$03d Radius %2$03d
Linker Mausklick mit Trackball / Joystick Zentrum
Bewegen Sie die Maus mit Joystick-Geschwindigkeit
Bewegen Sie die Maus mit Joystick-Beschleunigung
diff --git a/project/java/translations/values-fi/strings.xml b/project/java/translations/values-fi/strings.xml
index 8a27939db..d8d1948a4 100644
--- a/project/java/translations/values-fi/strings.xml
+++ b/project/java/translations/values-fi/strings.xml
@@ -13,7 +13,7 @@
Ladataan kohteesta %s
Virhe ladattaessa kohteesta %s
Virhe kirjoittaessa %s
- %.0f%% valmis: tiedosto %s
+ %1$.0f%% valmis: tiedosto %2$s
Valmis
Sisäinen muisti - %d Mt vapaana
@@ -52,7 +52,7 @@
Pienet
Tiny
Näyttönäppäimistöllä teema
-%s %s
+%1$s %2$s
Kelluva
Kiinteät kun sovellus käynnistyy
Korjattu taulukko työpöytä suuntautumiseen
@@ -74,7 +74,7 @@
Kosketusnäyttö voimalla
Trackball Valitse / Select-näppäintä
Siirrä hiiren ohjaimella tai trackball
-Paine %03d säde %03d
+Paine %1$03d säde %2$03d
Vasen hiiren klikkaus trackball-ohjaimella keskusta
Siirrä hiiri ohjainta nopeasti
Siirrä hiiri ohjainta kiihtyvyys
diff --git a/project/java/translations/values-fr/strings.xml b/project/java/translations/values-fr/strings.xml
index e78fd0310..a53d959e1 100644
--- a/project/java/translations/values-fr/strings.xml
+++ b/project/java/translations/values-fr/strings.xml
@@ -13,7 +13,7 @@
Téléchargement à partir de %s
Erreur lors du téléchargement à partir de %s
Erreur d\'écriture dans %s
- %.0f%% fait: fichier %s
+ %1$.0f%% fait: fichier %2$s
Fini
Stockage interne - %d Mo de libre
@@ -38,7 +38,7 @@
Petite
Minuscule
Thème du clavier à l\'écran
- %s par %s
+ %1$s par %2$s
Sans limite
Rapide
@@ -77,7 +77,7 @@
écran tactile avec une force
Trackball cliquez / touche de sélection
Déplacez la souris ou un trackball avec joystick
-pression %03d rayon %03d
+pression %1$03d rayon %2$03d
cliquez gauche de la souris avec trackball centre du joystick /
Déplacez la souris avec la vitesse joystick
Déplacez la souris avec une accélération joystick
diff --git a/project/java/translations/values-ru/strings.xml b/project/java/translations/values-ru/strings.xml
index 2e5b5e8d4..554f7fe24 100644
--- a/project/java/translations/values-ru/strings.xml
+++ b/project/java/translations/values-ru/strings.xml
@@ -11,7 +11,7 @@
Загрузка данных с %s
Ошибка при загрузке данных с %s
Ошибка записи в %s
-%.0f%% готово: файл %s
+%1$.0f%% готово: файл %2$s
Завершенный
Внутреннее хранение - %d Мб
SD карта - %d Мб
@@ -32,7 +32,7 @@
Малые
Крошечный
Тема клавиатуры
-%s от %s
+%1$s от %2$s
Нет
Быстрое
Среднее
@@ -50,7 +50,7 @@
Сохранять соотношение сторон 4:3 на экране
Экранная лупа
Пожалуйста, проведите пальцем по экрану в течение двух секунд
-Давление %03d радиус %03d
+Давление %1$03d радиус %2$03d
Очень мало (быстрые устройства)
Малый
Средний
diff --git a/project/java/translations/values-uk/strings.xml b/project/java/translations/values-uk/strings.xml
index 9c03b0210..d2a0e63d0 100644
--- a/project/java/translations/values-uk/strings.xml
+++ b/project/java/translations/values-uk/strings.xml
@@ -11,7 +11,7 @@
Завантаження даних з %s
Помилка при завантаженні даних з %s
Помилка запису в %s
-%.0f%% готово: файл %s
+%1$.0f%% готово: файл %2$s
Завершений
Внутрішнє зберігання - %d Мб
SD карта - %d Мб
@@ -32,7 +32,7 @@
Малий
Дрібний
Тема кнопок
-%s від %s
+%1$s від %2$s
Немає
Швидке
Середнє
@@ -50,7 +50,7 @@
Зберігати співвідношення сторін 4:3 на екрані
Наекранна лупа
Будь-ласка, проведіть пальцем по екрану на протязі двох секунд
-Тиск %03d радіус %03d
+Тиск %1$03d радіус %2$03d
Дуже мало (швидкі пристрої)
Малий
Середній
diff --git a/project/java/translations/values/strings.xml b/project/java/translations/values/strings.xml
index 4e14f8c05..f8c159a02 100644
--- a/project/java/translations/values/strings.xml
+++ b/project/java/translations/values/strings.xml
@@ -16,7 +16,7 @@
Downloading data from %s
Error downloading data from %s
Error writing to %s
- %.0f%% done: file %s
+ %1$.0f%% done: file %2$s
Finished
Internal storage - %d MB free
@@ -41,7 +41,7 @@
Small
Tiny
On-screen keyboard theme
- %s by %s
+ %1$s by %1$s
No dampening
Fast
@@ -83,7 +83,7 @@
Calibrate touchscreen pressure
Please slide finger across the screen for two seconds
- Pressure %03d radius %03d
+ Pressure %1$03d radius %2$03d
Very small (fast devices, less lag)
Small
@@ -95,4 +95,13 @@
Press any key except HOME and POWER, you may use volume keys
Select SDL keycode
+ Remap on-screen controls
+ On-screen joystick
+ On-screen button
+ On-screen text input button
+ Zoom in two-finger gesture
+ Zoom out two-finger gesture
+ Rotate left two-finger gesture
+ Rotate right two-finger gesture
+
diff --git a/project/jni/application/fheroes2/AndroidAppSettings.cfg b/project/jni/application/fheroes2/AndroidAppSettings.cfg
index 93f2a575b..c43f6d4ad 100644
--- a/project/jni/application/fheroes2/AndroidAppSettings.cfg
+++ b/project/jni/application/fheroes2/AndroidAppSettings.cfg
@@ -1,5 +1,5 @@
# The application settings for Android libSDL port
-AppSettingVersion=15
+AppSettingVersion=16
LibSdlVersion=1.2
AppName="Free Heroes 2"
AppFullName=net.sourceforge.fheroes2
@@ -17,12 +17,13 @@ AppUsesJoystick=n
AppHandlesJoystickSensitivity=n
AppUsesMultitouch=n
NonBlockingSwapBuffers=n
-RedefinedKeys="LCTRL m t h e"
+RedefinedKeys="LCTRL M T H E"
AppTouchscreenKeyboardKeysAmount=0
AppTouchscreenKeyboardKeysAmountAutoFire=0
+RedefinedKeysScreenKb="LCTRL M T H"
MultiABI=n
-AppVersionCode=212506
-AppVersionName="2125.06"
+AppVersionCode=214607
+AppVersionName="2146.07"
CompiledLibraries="sdl_net sdl_mixer sdl_image sdl_ttf png intl"
CustomBuildScript=n
AppCflags='-finline-functions -O2 -DWITH_ZLIB -DWITH_MIXER -DWITH_XML -DWITH_IMAGE -DWITH_TTF'
diff --git a/project/jni/sdl-1.3/src/video/android/SDL_androidinput.h b/project/jni/sdl-1.3/src/video/android/SDL_androidinput.h
index 1b3d110d0..06fd300bb 100644
--- a/project/jni/sdl-1.3/src/video/android/SDL_androidinput.h
+++ b/project/jni/sdl-1.3/src/video/android/SDL_androidinput.h
@@ -151,6 +151,37 @@ extern int SDL_ANDROID_isTouchscreenKeyboardUsed;
#define SDL_ANDROID_KEYCODE_10 SDL_ANDROID_KEYCODE_1
#endif
+// Touchscreen keyboard keys + zoom and rotate keycodes
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_0
+#define SDL_ANDROID_SCREENKB_KEYCODE_0 SDL_ANDROID_KEYCODE_0
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_1
+#define SDL_ANDROID_SCREENKB_KEYCODE_1 SDL_ANDROID_KEYCODE_1
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_2
+#define SDL_ANDROID_SCREENKB_KEYCODE_2 SDL_ANDROID_KEYCODE_2
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_3
+#define SDL_ANDROID_SCREENKB_KEYCODE_3 SDL_ANDROID_KEYCODE_3
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_4
+#define SDL_ANDROID_SCREENKB_KEYCODE_4 SDL_ANDROID_KEYCODE_6
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_5
+#define SDL_ANDROID_SCREENKB_KEYCODE_5 SDL_ANDROID_KEYCODE_7
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_6
+#define SDL_ANDROID_SCREENKB_KEYCODE_6 SDL_ANDROID_KEYCODE_4
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_7
+#define SDL_ANDROID_SCREENKB_KEYCODE_7 SDL_ANDROID_KEYCODE_5
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_8
+#define SDL_ANDROID_SCREENKB_KEYCODE_8 SDL_ANDROID_KEYCODE_8
+#endif
+#ifndef SDL_ANDROID_SCREENKB_KEYCODE_9
+#define SDL_ANDROID_SCREENKB_KEYCODE_9 SDL_ANDROID_KEYCODE_9
+#endif
// Queue events to main thread
extern void SDL_ANDROID_MainThreadPushMouseMotion(int x, int y);
diff --git a/project/jni/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c b/project/jni/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c
index f6fbe460f..21e377998 100644
--- a/project/jni/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c
+++ b/project/jni/sdl-1.3/src/video/android/SDL_touchscreenkeyboard.c
@@ -65,14 +65,13 @@ static int buttonsize = 1;
static SDL_Rect arrows, buttons[MAX_BUTTONS], buttonsAutoFireRect[MAX_BUTTONS_AUTOFIRE];
static SDLKey buttonKeysyms[MAX_BUTTONS] = {
-SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_0)),
-SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_1)),
-SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_2)),
-SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_3)),
-// 4 and 5 are MENU and BACK, always available as HW keys
-SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_6)),
-SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_7)),
-SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_KEYCODE_8))
+SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_0)),
+SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_1)),
+SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_2)),
+SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_3)),
+SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_4)),
+SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_5)),
+0
};
enum { ARROW_LEFT = 1, ARROW_RIGHT = 2, ARROW_UP = 4, ARROW_DOWN = 8 };
diff --git a/project/jni/sdl-1.3/src/video/android/javakeycodes.h b/project/jni/sdl-1.3/src/video/android/javakeycodes.h
index bbf8fc11b..f0c5648ec 100644
--- a/project/jni/sdl-1.3/src/video/android/javakeycodes.h
+++ b/project/jni/sdl-1.3/src/video/android/javakeycodes.h
@@ -97,7 +97,7 @@ KEYCODE_MEDIA_REWIND = 89,
KEYCODE_MEDIA_FAST_FORWARD = 90,
KEYCODE_MUTE = 91,
-KEYCODE_LAST = KEYCODE_MUTE
+KEYCODE_LAST = 110 // Android 2.3 added several new gaming keys, it ends up at keycode 110 currently - plz keep in sync with Keycodes.java
};
#endif