diff --git a/changeAppSettings.sh b/changeAppSettings.sh index bd9d3d19b..27c94c996 100755 --- a/changeAppSettings.sh +++ b/changeAppSettings.sh @@ -442,6 +442,16 @@ if [ -n "$var" ] ; then fi fi +if [ -z "$AppMinimumRAM" -o -z "$AUTO" ]; then +echo +echo -n "Minimum amount of RAM application requires, in Mb, SDL will print warning to user if it's lower ($AppMinimumRAM): " +read var +if [ -n "$var" ] ; then + AppMinimumRAM="$var" + CHANGED=1 +fi +fi + if [ -z "$AppVersionCode" -o "-$AUTO" != "-a" ]; then echo echo -n "Application version code (integer) ($AppVersionCode): " @@ -655,6 +665,7 @@ echo StartupMenuButtonTimeout=$StartupMenuButtonTimeout >> AndroidAppSettings.cf echo HiddenMenuOptions=\'$HiddenMenuOptions\' >> AndroidAppSettings.cfg echo FirstStartMenuOptions=\'$FirstStartMenuOptions\' >> AndroidAppSettings.cfg echo MultiABI=$MultiABI >> AndroidAppSettings.cfg +echo AppMinimumRAM=$AppMinimumRAM >> AndroidAppSettings.cfg echo AppVersionCode=$AppVersionCode >> AndroidAppSettings.cfg echo AppVersionName=\"$AppVersionName\" >> AndroidAppSettings.cfg echo ResetSdlConfigForThisVersion=$ResetSdlConfigForThisVersion >> AndroidAppSettings.cfg @@ -944,6 +955,7 @@ cat project/src/Globals.java | \ sed "s/public static int AppTouchscreenKeyboardKeysAmount = .*;/public static int AppTouchscreenKeyboardKeysAmount = $AppTouchscreenKeyboardKeysAmount;/" | \ sed "s/public static int AppTouchscreenKeyboardKeysAmountAutoFire = .*;/public static int AppTouchscreenKeyboardKeysAmountAutoFire = $AppTouchscreenKeyboardKeysAmountAutoFire;/" | \ sed "s/public static int StartupMenuButtonTimeout = .*;/public static int StartupMenuButtonTimeout = $StartupMenuButtonTimeout;/" | \ + sed "s/public static int AppMinimumRAM = .*;/public static int AppMinimumRAM = $AppMinimumRAM;/" | \ sed "s/public static Settings.Menu HiddenMenuOptions .*;/public static Settings.Menu HiddenMenuOptions [] = { $HiddenMenuOptions1 };/" | \ sed "s@public static Settings.Menu FirstStartMenuOptions .*;@public static Settings.Menu FirstStartMenuOptions [] = { $FirstStartMenuOptions };@" | \ sed "s%public static String ReadmeText = .*%public static String ReadmeText = \"$ReadmeText\".replace(\"^\",\"\\\n\");%" | \ diff --git a/project/java/Globals.java b/project/java/Globals.java index decc8571c..c2bf3b677 100644 --- a/project/java/Globals.java +++ b/project/java/Globals.java @@ -60,6 +60,7 @@ class Globals public static int AppTouchscreenKeyboardKeysAmount = 4; public static int AppTouchscreenKeyboardKeysAmountAutoFire = 1; public static int StartupMenuButtonTimeout = 3000; + public static int AppMinimumRAM = 0; public static Settings.Menu HiddenMenuOptions [] = {}; public static Settings.Menu FirstStartMenuOptions [] = { (AppUsesMouse && ! ForceRelativeMouseMode ? new Settings.DisplaySizeConfig(true) : new Settings.DummyMenu()), new Settings.OptionalDownloadConfig(true) }; public static String AdmobPublisherId = ""; diff --git a/project/java/Settings.java b/project/java/Settings.java index 074e08e45..40939696d 100644 --- a/project/java/Settings.java +++ b/project/java/Settings.java @@ -60,6 +60,8 @@ import android.content.Intent; import android.app.PendingIntent; import android.app.AlarmManager; import android.util.DisplayMetrics; +import android.net.Uri; +import java.util.concurrent.Semaphore; // TODO: too much code here, split into multiple files, possibly auto-generated menus? class Settings @@ -346,7 +348,8 @@ class Settings System.out.println("libSDL: Settings.Load(): loading settings failed, running config dialog"); p.setUpStatusLabel(); - showConfig(p, true); + if( checkRamSize(p) ) + showConfig(p, true); } // =============================================================================================== @@ -2606,6 +2609,61 @@ class Settings } } + static boolean checkRamSize(final MainActivity p) + { + try { + BufferedReader reader = new BufferedReader(new FileReader("/proc/meminfo")); + String line = null; + while( ( line = reader.readLine() ) != null ) + { + if( line.indexOf("MemTotal:") == 0 ) + { + String[] fields = line.split("[ \t]+"); + Long size = Long.parseLong(fields[1]); + System.out.println("Device RAM size: " + size / 1024 + " Mb, required minimum RAM: " + Globals.AppMinimumRAM + " Mb" ); + if( size / 1024 < Globals.AppMinimumRAM ) + { + settingsChanged = true; + AlertDialog.Builder builder = new AlertDialog.Builder(p); + builder.setTitle(R.string.not_enough_ram); + builder.setMessage(p.getResources().getString( R.string.not_enough_ram_size, (int)(size / 1024), Globals.AppMinimumRAM) ); + builder.setPositiveButton(p.getResources().getString(R.string.ok), new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + p.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + p.getPackageName()))); + System.exit(0); + } + }); + builder.setNegativeButton(p.getResources().getString(R.string.ignore), new DialogInterface.OnClickListener() + { + public void onClick(DialogInterface dialog, int item) + { + showConfig(p, true); + return; + } + }); + builder.setOnCancelListener(new DialogInterface.OnCancelListener() + { + public void onCancel(DialogInterface dialog) + { + p.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + p.getPackageName()))); + System.exit(0); + } + }); + final AlertDialog alert = builder.create(); + alert.setOwnerActivity(p); + alert.show(); + return false; + } + } + } + } catch ( Exception e ) { + System.out.println("Error: cannot parse /proc/meminfo: " + e.toString()); + } + return true; + } + private static native void nativeSetTrackballUsed(); private static native void nativeSetTrackballDampening(int value); private static native void nativeSetAccelerometerSettings(int sensitivity, int centerPos); diff --git a/project/java/translations/generate.sh b/project/java/translations/generate.sh index faa278007..392e66ce5 100755 --- a/project/java/translations/generate.sh +++ b/project/java/translations/generate.sh @@ -15,6 +15,7 @@ grep '\([^<]*\).*/\1/'` if [ -z "$transtext" ] ; then transtext=`./translate.py en $lang "$text"` + echo "$transtext" | grep 'Suspected Terms of Service Abuse' > /dev/null && transtext="$text" grep -v "^[<]/resources[>]\$" $dir/strings.xml > $dir/strings.1.xml echo "$transtext" >> $dir/strings.1.xml echo "" >> $dir/strings.1.xml diff --git a/project/java/translations/values-fr/strings.xml b/project/java/translations/values-fr/strings.xml index d9261b790..d1ae820c8 100644 --- a/project/java/translations/values-fr/strings.xml +++ b/project/java/translations/values-fr/strings.xml @@ -115,13 +115,11 @@ Glisser les doigts sur l\'écran pendant deux secondes Pression %1$03d rayon %2$03d - - Très petite (appareils rapides, plus de réactivité) - Petite (appareils rapides) - Moyenne - Grande (appareils anciens, si le son est saccadé) - Taille du tampon audio - +Très petite (appareils rapides, plus de réactivité) +Petite (appareils rapides) +Moyenne +Grande (appareils anciens, si le son est saccadé) +Taille du tampon audio Reconfigurer les touches physiques Appuyez sur n\'importe quelle touche sauf HOME et POWER, vous pouvez utiliser les touches de volume @@ -144,7 +142,6 @@ Calibrer l\'écran tactile Touchez les bords de l\'écran, appuyez sur Retour/BACK lorsque vous avez terminé - Paramètres vidéo Fluidité de la vidéo Thread séparé pour la vidéo : permet paroifs d\'augmenter FPS @@ -158,13 +155,14 @@ Petit, mode touchpad Très petit Très petit, mode touchpad - -Afficher plus d\'options +Afficher plus d\'options Erreur interne détectée (OS/LibC) Certaines librairies sont mal installées et cette application va probablement ne pas fonctionner. Merci de mettre à jour votre système, flash, ROM custom, ou bien de copier le fichier /system/lib/libc.so depuis un autre système (Attention, Experts uniquement !). - - +Hardware mouse detected, disabling mouse emulation +Not enough RAM +This app needs %1$d Mb RAM, your device has %2$d Mb +Ignore diff --git a/project/java/translations/values-ru/strings.xml b/project/java/translations/values-ru/strings.xml index 7e4768449..bf262e2e2 100644 --- a/project/java/translations/values-ru/strings.xml +++ b/project/java/translations/values-ru/strings.xml @@ -133,4 +133,8 @@ Крохотный, режим тачпада Обнаружена внешняя мышь, эмуляция мыши выключена +Недостаточно оперативной памяти +Для запуска приложения нужно %1$d Мб оперативной памяти, на этом устройстве есть %2$d Мб +Игнорировать + diff --git a/project/java/translations/values-uk/strings.xml b/project/java/translations/values-uk/strings.xml index b69700683..6451b44f9 100644 --- a/project/java/translations/values-uk/strings.xml +++ b/project/java/translations/values-uk/strings.xml @@ -131,4 +131,9 @@ Крихiтний, режим тачпаду Виявлена зовнiшня миша, емуляція миші вимкнена +Broken OS detected +Your device has broken system libraries, this application will most probably crash. Please install a system update, or flash a custom ROM, or copy file /system/lib/libc.so from another device (experts only!) +Not enough RAM +This app needs %1$d Mb RAM, your device has %2$d Mb +Ignore diff --git a/project/java/translations/values/strings.xml b/project/java/translations/values/strings.xml index bcc71dc40..1fc80518a 100644 --- a/project/java/translations/values/strings.xml +++ b/project/java/translations/values/strings.xml @@ -161,4 +161,8 @@ Hardware mouse detected, disabling mouse emulation + Not enough RAM + This app needs %1$d Mb RAM, your device has %2$d Mb + Ignore +