diff --git a/project/java/Audio.java b/project/java/Audio.java index ae343f393..f5701a0c0 100644 --- a/project/java/Audio.java +++ b/project/java/Audio.java @@ -33,7 +33,6 @@ import android.media.AudioTrack; import android.media.AudioManager; import android.media.AudioFormat; import java.io.*; -import java.nio.ByteBuffer; import android.util.Log; import java.lang.Thread; diff --git a/project/java/DataDownloader.java b/project/java/DataDownloader.java index 5565b53d0..462da44f6 100644 --- a/project/java/DataDownloader.java +++ b/project/java/DataDownloader.java @@ -471,7 +471,7 @@ class DataDownloader extends Thread try { CheckedInputStream check = new CheckedInputStream( new FileInputStream(path), new CRC32() ); - while( check.read(buf, 0, buf.length) > 0 ) {}; + while( check.read(buf, 0, buf.length) >= 0 ) {}; check.close(); if( check.getChecksum().getValue() != entry.getCrc() ) { @@ -525,19 +525,26 @@ class DataDownloader extends Thread } try { + long count = 0, ret = 0; CheckedInputStream check = new CheckedInputStream( new FileInputStream(path), new CRC32() ); - while( check.read(buf, 0, buf.length) > 0 ) {}; + while( ret >= 0 ) + { + count += ret; + ret = check.read(buf, 0, buf.length); + } check.close(); - if( check.getChecksum().getValue() != entry.getCrc() ) + if( check.getChecksum().getValue() != entry.getCrc() || count != entry.getSize() ) { File ff = new File(path); ff.delete(); + System.out.println("Saving file '" + path + "' - CRC check failed, ZIP: " + + String.format("%x", entry.getCrc()) + " actual file: " + String.format("%x", check.getChecksum().getValue()) + + " file size in ZIP: " + entry.getSize() + " actual size " + count ); throw new Exception(); } } catch( Exception e ) { Status.setText( res.getString(R.string.error_write, path) ); - System.out.println("Saving file '" + path + "' - CRC check failed"); return false; } System.out.println("Saving file '" + path + "' done"); diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index 09e4d0e1f..16e43e69c 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -70,6 +70,7 @@ public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + instance = this; // fullscreen mode requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, @@ -697,5 +698,5 @@ public class MainActivity extends Activity { private InputMethodManager _inputManager = null; public LinkedList textInput = new LinkedList (); - + public static MainActivity instance = null; } diff --git a/project/java/Settings.java b/project/java/Settings.java index a2c40f789..16b1f8869 100644 --- a/project/java/Settings.java +++ b/project/java/Settings.java @@ -2553,6 +2553,7 @@ class Settings int leftClickTimeout, int rightClickTimeout, int relativeMovement, int relativeMovementSpeed, int relativeMovementAccel, int showMouseCursor); + public static native void nativeSetExternalMouseDetected(); private static native void nativeSetJoystickUsed(); private static native void nativeSetMultitouchUsed(); private static native void nativeSetTouchscreenKeyboardUsed(); diff --git a/project/java/Video.java b/project/java/Video.java index 3427acd24..c7b7c4711 100644 --- a/project/java/Video.java +++ b/project/java/Video.java @@ -45,6 +45,7 @@ import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.content.res.Resources; import android.content.res.AssetManager; +import android.widget.Toast; import android.widget.TextView; import java.lang.Thread; @@ -87,6 +88,8 @@ class Mouse abstract class DifferentTouchInput { + public static boolean ExternalMouseDetected = true; + public static DifferentTouchInput getInstance() { boolean multiTouchAvailable1 = false; @@ -223,8 +226,8 @@ abstract class DifferentTouchInput if( touchEvents[id].down ) action = Mouse.SDL_FINGER_MOVE; else - action = Mouse.SDL_FINGER_DOWN; - touchEvents[id].down = true; + action = Mouse.SDL_FINGER_HOVER; //action = Mouse.SDL_FINGER_DOWN; + //touchEvents[id].down = true; touchEvents[id].x = (int)event.getX(ii); touchEvents[id].y = (int)event.getY(ii); touchEvents[id].pressure = (int)(event.getPressure(ii) * 1000.0); @@ -247,6 +250,12 @@ abstract class DifferentTouchInput touchEvents[0].size = 0; DemoGLSurfaceView.nativeMouse( touchEvents[0].x, touchEvents[0].y, action, 0, touchEvents[0].pressure, touchEvents[0].size ); } + if( action == Mouse.SDL_FINGER_HOVER && !ExternalMouseDetected ) + { + ExternalMouseDetected = true; + Settings.nativeSetExternalMouseDetected(); + Toast.makeText(MainActivity.instance, R.string.hardware_mouse_detected, Toast.LENGTH_SHORT).show(); + } } } } @@ -325,6 +334,7 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer } Settings.Apply(context); + DifferentTouchInput.ExternalMouseDetected = false; accelerometer = new AccelerometerReader(context); // Tweak video thread priority, if user selected big audio buffer if(Globals.AudioBufferConfig >= 2) @@ -400,7 +410,7 @@ class DemoRenderer extends GLSurfaceView_SDL.Renderer int width = bmp.getBitmap().getWidth(); int height = bmp.getBitmap().getHeight(); ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4 * width * height); - byteBuffer.order(ByteOrder.BIG_ENDIAN); + //byteBuffer.order(ByteOrder.BIG_ENDIAN); bmp.getBitmap().copyPixelsToBuffer(byteBuffer); byteBuffer.position(0); diff --git a/project/java/translations/values-ru/strings.xml b/project/java/translations/values-ru/strings.xml index bf40c1ce1..0f2be1552 100644 --- a/project/java/translations/values-ru/strings.xml +++ b/project/java/translations/values-ru/strings.xml @@ -131,4 +131,6 @@ Размер изображения кнопок Маленький, режим тачпада Крохотный, режим тачпада +Обнаружена внешняя мышь, эмуляция мыши выключена + diff --git a/project/java/translations/values-uk/strings.xml b/project/java/translations/values-uk/strings.xml index dda1ca37a..20c995c90 100644 --- a/project/java/translations/values-uk/strings.xml +++ b/project/java/translations/values-uk/strings.xml @@ -129,4 +129,6 @@ Розмір зображення кнопок Маленький, режим тачпаду Крихiтний, режим тачпаду +Виявлена зовнiшня миша, емуляція миші вимкнена + diff --git a/project/java/translations/values/strings.xml b/project/java/translations/values/strings.xml index 6e64b53a0..24f7f6723 100644 --- a/project/java/translations/values/strings.xml +++ b/project/java/translations/values/strings.xml @@ -159,4 +159,6 @@ 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!) + Hardware mouse detected, disabling mouse emulation + diff --git a/project/jni/application/ballfield/AndroidAppSettings.cfg b/project/jni/application/ballfield/AndroidAppSettings.cfg index 5137cc29d..9d1621e62 100644 --- a/project/jni/application/ballfield/AndroidAppSettings.cfg +++ b/project/jni/application/ballfield/AndroidAppSettings.cfg @@ -22,7 +22,7 @@ AppNeedsArrowKeys=n AppNeedsTextInput=y AppUsesJoystick=n AppHandlesJoystickSensitivity=n -AppUsesMultitouch=n +AppUsesMultitouch=y NonBlockingSwapBuffers=n RedefinedKeys="SPACE RETURN NO_REMAP NO_REMAP SPACE ESCAPE" AppTouchscreenKeyboardKeysAmount=0 diff --git a/project/jni/application/fheroes2/AndroidAppSettings.cfg b/project/jni/application/fheroes2/AndroidAppSettings.cfg index 0eb787216..d63431bfe 100644 --- a/project/jni/application/fheroes2/AndroidAppSettings.cfg +++ b/project/jni/application/fheroes2/AndroidAppSettings.cfg @@ -32,9 +32,9 @@ StartupMenuButtonTimeout=3000 HiddenMenuOptions='KeyboardConfigMainMenu ScreenKeyboardThemeConfig ScreenKeyboardTransparencyConfig' FirstStartMenuOptions='' MultiABI=n -AppVersionCode=272018 -AppVersionName="2720.18" -ResetSdlConfigForThisVersion=y +AppVersionCode=273918 +AppVersionName="2739.18" +ResetSdlConfigForThisVersion=n 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 -DWITH_AI=simple -DWITH_NET' diff --git a/project/jni/application/grafx2/AndroidAppSettings.cfg b/project/jni/application/grafx2/AndroidAppSettings.cfg index 707a446a0..fdc73baf9 100644 --- a/project/jni/application/grafx2/AndroidAppSettings.cfg +++ b/project/jni/application/grafx2/AndroidAppSettings.cfg @@ -6,12 +6,18 @@ AppFullName=com.grafx2 ScreenOrientation=h InhibitSuspend=y AppDataDownloadUrl="!Data|data.zip" +VideoDepthBpp=16 +NeedDepthBuffer=n +NeedStencilBuffer=n +NeedGles2=n +SwVideoMode=y SdlVideoResize=y SdlVideoResizeKeepAspect=n -NeedDepthBuffer=n -SwVideoMode=y +CompatibilityHacks=n AppUsesMouse=y AppNeedsTwoButtonMouse=y +ShowMouseCursor=y +ForceRelativeMouseMode=n AppNeedsArrowKeys=n AppNeedsTextInput=n AppUsesJoystick=n @@ -24,9 +30,11 @@ AppTouchscreenKeyboardKeysAmountAutoFire=0 RedefinedKeysScreenKb="SPACE TAB PLUS MINUS RETURN ESCAPE DELETE" StartupMenuButtonTimeout=3000 HiddenMenuOptions='OptionalDownloadConfig' +FirstStartMenuOptions='' MultiABI=n -AppVersionCode=23178101 -AppVersionName="2.3.1781.01" +AppVersionCode=23178102 +AppVersionName="2.3.1781.02" +ResetSdlConfigForThisVersion=y CompiledLibraries="jpeg png sdl_image sdl_ttf lua" CustomBuildScript=n AppCflags='-DVIRT_KEY -D__ENABLE_LUA__ -std=c99' diff --git a/project/jni/application/milkytracker/AndroidAppSettings.cfg b/project/jni/application/milkytracker/AndroidAppSettings.cfg index 8d2212624..6fa0a8920 100644 --- a/project/jni/application/milkytracker/AndroidAppSettings.cfg +++ b/project/jni/application/milkytracker/AndroidAppSettings.cfg @@ -30,14 +30,15 @@ AppTouchscreenKeyboardKeysAmountAutoFire=0 RedefinedKeysScreenKb="SPACE TAB PLUS MINUS RETURN ESCAPE DELETE" StartupMenuButtonTimeout=3000 HiddenMenuOptions='OptionalDownloadConfig' -FirstStartMenuOptions='new Settings.CalibrateTouchscreenMenu(), new Settings.DisplaySizeConfig(true)' +FirstStartMenuOptions='' MultiABI=n -AppVersionCode=0908503 -AppVersionName="0.90.85.03" -CompiledLibraries="jpeg png" +AppVersionCode=0908504 +AppVersionName="0.90.85.04" +ResetSdlConfigForThisVersion=y +CompiledLibraries="jpeg png zzip" CustomBuildScript=y AppCflags='' AppLdflags='' AppSubdirsBuild='' -AppCmdline='milkytracker -fullscreen' +AppCmdline='milkytracker -fullscreen -nonstdkb -nosplash' ReadmeText='^You may press "Home" now - the data will be downloaded in background' diff --git a/project/jni/application/milkytracker/AndroidBuild.sh b/project/jni/application/milkytracker/AndroidBuild.sh index 7388f51ab..b8d8cafc9 100755 --- a/project/jni/application/milkytracker/AndroidBuild.sh +++ b/project/jni/application/milkytracker/AndroidBuild.sh @@ -11,7 +11,7 @@ if [ \! -f milkytracker-0.90.85/configure ] ; then fi if [ \! -f milkytracker-0.90.85/Makefile ] ; then - ../setEnvironment.sh sh -c "cd milkytracker-0.90.85 && ZZIP_CFLAGS='-I$LOCAL_PATH/../../zzip/include' ZZIP_LIBS='-L$LOCAL_PATH/../../../obj/local/armeabi -lzzip' ./configure --host=arm-linux-androideabi " + ../setEnvironment.sh sh -c "cd milkytracker-0.90.85 && ZZIP_CFLAGS='-I$LOCAL_PATH/../../zzip/include' ZZIP_LIBS='-L$LOCAL_PATH/../../../obj/local/armeabi -lzzip' LIBS=-lgnustl_static ./configure --host=arm-linux-androideabi" fi make -C milkytracker-0.90.85 && mv -f milkytracker-0.90.85/src/tracker/milkytracker libapplication.so diff --git a/project/jni/application/src b/project/jni/application/src index 4de17cd97..104f796a6 120000 --- a/project/jni/application/src +++ b/project/jni/application/src @@ -1 +1 @@ -alienblaster \ No newline at end of file +ballfield \ No newline at end of file diff --git a/project/jni/application/teeworlds/AndroidAppSettings.cfg b/project/jni/application/teeworlds/AndroidAppSettings.cfg index 839318293..b99cb96f4 100644 --- a/project/jni/application/teeworlds/AndroidAppSettings.cfg +++ b/project/jni/application/teeworlds/AndroidAppSettings.cfg @@ -16,6 +16,7 @@ SdlVideoResizeKeepAspect=n CompatibilityHacks=n AppUsesMouse=y AppNeedsTwoButtonMouse=y +ShowMouseCursor=n ForceRelativeMouseMode=y AppNeedsArrowKeys=y AppNeedsTextInput=y @@ -33,6 +34,7 @@ FirstStartMenuOptions='' MultiABI=y AppVersionCode=5207 AppVersionName="0.5.2.07" +ResetSdlConfigForThisVersion=n CompiledLibraries="sdl_image freetype" CustomBuildScript=n AppCflags='-O3' diff --git a/project/jni/application/teeworlds/src/engine/client/ec_gfx.cpp b/project/jni/application/teeworlds/src/engine/client/ec_gfx.cpp index eb60402b1..c3cdd1ab0 100644 --- a/project/jni/application/teeworlds/src/engine/client/ec_gfx.cpp +++ b/project/jni/application/teeworlds/src/engine/client/ec_gfx.cpp @@ -14,6 +14,7 @@ #include #else #ifdef ANDROID + #define GL_GLEXT_PROTOTYPES #include #include #else diff --git a/project/jni/sdl-1.3/src/video/android/SDL_androidinput.c b/project/jni/sdl-1.3/src/video/android/SDL_androidinput.c index 1770a34f1..1e94ed0da 100644 --- a/project/jni/sdl-1.3/src/video/android/SDL_androidinput.c +++ b/project/jni/sdl-1.3/src/video/android/SDL_androidinput.c @@ -844,7 +844,7 @@ static int getClickTimeout(int v) // Mwahaha overkill! JNIEXPORT void JNICALL -JAVA_EXPORT_NAME(Settings_nativeSetMouseUsed) ( JNIEnv* env, jobject thiz, +JAVA_EXPORT_NAME(Settings_nativeSetMouseUsed) (JNIEnv* env, jobject thiz, jint RightClickMethod, jint ShowScreenUnderFinger, jint LeftClickMethod, jint MoveMouseWithJoystick, jint ClickMouseWithDpad, jint MaxForce, jint MaxRadius, @@ -876,7 +876,20 @@ JAVA_EXPORT_NAME(Settings_nativeSetMouseUsed) ( JNIEnv* env, jobject thiz, } JNIEXPORT void JNICALL -JAVA_EXPORT_NAME(Settings_nativeSetJoystickUsed) ( JNIEnv* env, jobject thiz) +JAVA_EXPORT_NAME(Settings_nativeSetExternalMouseDetected) (JNIEnv* env, jobject thiz) +{ + if( !isMouseUsed ) + return; + + leftClickMethod = LEFT_CLICK_NORMAL; + SDL_ANDROID_ShowScreenUnderFinger = 0; + leftClickTimeout = 0; + relativeMovement = 0; + SDL_ANDROID_ShowMouseCursor = 0; +} + +JNIEXPORT void JNICALL +JAVA_EXPORT_NAME(Settings_nativeSetJoystickUsed) (JNIEnv* env, jobject thiz) { SDL_ANDROID_isJoystickUsed = 1; }