From ec136b0bc8f44952a4ecbacce6d0bfd260f31948 Mon Sep 17 00:00:00 2001 From: pelya Date: Mon, 28 Jan 2013 19:27:32 +0200 Subject: [PATCH] Some preliminary Ouya support --- project/AndroidManifestTemplate.xml | 1 + project/java/Globals.java | 1 + project/java/MainActivity.java | 13 +++++++++++++ project/java/Settings.java | 4 ++-- .../application/openarena/AndroidAppSettings.cfg | 4 ++-- project/jni/application/openarena/engine | 2 +- .../sdl-1.2/src/video/android/SDL_androidinput.c | 4 ++-- .../sdl-1.2/src/video/android/SDL_androidinput.h | 2 +- project/jni/sdl-1.2/src/video/android/keymap.c | 4 ++-- project/res/drawable/ouya_icon.png | 1 + 10 files changed, 26 insertions(+), 10 deletions(-) create mode 120000 project/res/drawable/ouya_icon.png diff --git a/project/AndroidManifestTemplate.xml b/project/AndroidManifestTemplate.xml index e276a013b..a071fd060 100644 --- a/project/AndroidManifestTemplate.xml +++ b/project/AndroidManifestTemplate.xml @@ -20,6 +20,7 @@ + diff --git a/project/java/Globals.java b/project/java/Globals.java index 000566fe0..53b0c1b44 100644 --- a/project/java/Globals.java +++ b/project/java/Globals.java @@ -112,4 +112,5 @@ class Globals public static boolean VideoLinearFilter = true; public static boolean MultiThreadedVideo = false; public static boolean BrokenLibCMessageShown = false; + public static boolean IsOuya = false; // Ouya game console has no Back key, so we need to map some game controller key to Back key } diff --git a/project/java/MainActivity.java b/project/java/MainActivity.java index 90b26f20e..84d9e1e74 100644 --- a/project/java/MainActivity.java +++ b/project/java/MainActivity.java @@ -60,6 +60,7 @@ import java.io.FileInputStream; import java.util.zip.*; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import java.util.Set; import android.text.SpannedString; import java.io.BufferedReader; import java.io.BufferedInputStream; @@ -92,6 +93,18 @@ public class MainActivity extends Activity getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + if( getIntent().getCategories() != null ) + { + for( String cat: getIntent().getCategories() ) + { + System.out.println("libSDL: getIntent().getCategories(): " + cat); + if( cat.equals("ouya.intent.category.GAME") ) { + System.out.println("libSDL: Ouya game console detected"); + Globals.IsOuya = true; + } + } + } + System.out.println("libSDL: Creating startup screen"); _layout = new LinearLayout(this); _layout.setOrientation(LinearLayout.VERTICAL); diff --git a/project/java/Settings.java b/project/java/Settings.java index 11e30a543..bddf16f40 100644 --- a/project/java/Settings.java +++ b/project/java/Settings.java @@ -170,7 +170,7 @@ class Settings return; } System.out.println("libSDL: Settings.Load(): enter"); - nativeInitKeymap(); + nativeInitKeymap(Globals.IsOuya ? 1 : 0); for( int i = 0; i < SDL_Keys.JAVA_KEYCODE_LAST; i++ ) { int sdlKey = nativeGetKeymapKey(i); @@ -2812,7 +2812,7 @@ class Settings private static native void nativeSetVideoForceSoftwareMode(); private static native void nativeSetupScreenKeyboard(int size, int drawsize, int theme, int nbuttonsAutoFire, int transparency); private static native void nativeSetupScreenKeyboardButtons(byte[] img); - private static native void nativeInitKeymap(); + private static native void nativeInitKeymap(int isOuya); private static native int nativeGetKeymapKey(int key); private static native void nativeSetKeymapKey(int javakey, int key); private static native int nativeGetKeymapKeyScreenKb(int keynum); diff --git a/project/jni/application/openarena/AndroidAppSettings.cfg b/project/jni/application/openarena/AndroidAppSettings.cfg index 0fe687d67..dc33c5ddb 100644 --- a/project/jni/application/openarena/AndroidAppSettings.cfg +++ b/project/jni/application/openarena/AndroidAppSettings.cfg @@ -37,8 +37,8 @@ HiddenMenuOptions='OptionalDownloadConfig DisplaySizeConfig' FirstStartMenuOptions='' MultiABI=y AppMinimumRAM=300 -AppVersionCode=08818 -AppVersionName="0.8.8.18" +AppVersionCode=08819 +AppVersionName="0.8.8.19" ResetSdlConfigForThisVersion=y DeleteFilesOnUpgrade="libsdl-DownloadFinished-10.flag" CompiledLibraries="sdl_mixer sdl_image freetype curl vorbis ogg" diff --git a/project/jni/application/openarena/engine b/project/jni/application/openarena/engine index 172b75045..9c71de1a5 160000 --- a/project/jni/application/openarena/engine +++ b/project/jni/application/openarena/engine @@ -1 +1 @@ -Subproject commit 172b7504554c14e1fa8c6f21230e2393fd3abfc6 +Subproject commit 9c71de1a513e00c60299943f3b5dd58bb225b794 diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidinput.c b/project/jni/sdl-1.2/src/video/android/SDL_androidinput.c index 0b8d4851d..d169540de 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidinput.c +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidinput.c @@ -2194,7 +2194,7 @@ JAVA_EXPORT_NAME(Settings_nativeSetTouchscreenCalibration) (JNIEnv* env, jobject } JNIEXPORT void JNICALL -JAVA_EXPORT_NAME(Settings_nativeInitKeymap) ( JNIEnv* env, jobject thiz ) +JAVA_EXPORT_NAME(Settings_nativeInitKeymap) ( JNIEnv* env, jobject thiz, jint isOuya ) { - SDL_android_init_keymap(SDL_android_keymap); + SDL_android_init_keymap(SDL_android_keymap, isOuya); } diff --git a/project/jni/sdl-1.2/src/video/android/SDL_androidinput.h b/project/jni/sdl-1.2/src/video/android/SDL_androidinput.h index 59caac53a..96b33d0cd 100644 --- a/project/jni/sdl-1.2/src/video/android/SDL_androidinput.h +++ b/project/jni/sdl-1.2/src/video/android/SDL_androidinput.h @@ -200,7 +200,7 @@ extern void SDL_ANDROID_MainThreadPushJoystickAxis(int joy, int axis, int value) extern void SDL_ANDROID_MainThreadPushJoystickButton(int joy, int button, int pressed); extern void SDL_ANDROID_MainThreadPushJoystickBall(int joy, int ball, int x, int y); extern void SDL_ANDROID_MainThreadPushText( int ascii, int unicode ); -extern void SDL_android_init_keymap(SDLKey *SDL_android_keymap); +extern void SDL_android_init_keymap(SDLKey *SDL_android_keymap, int isOuya); extern void SDL_ANDROID_MainThreadPushMouseWheel( int x, int y ); // SDL 1.3 only extern void SDL_ANDROID_MainThreadPushAppActive(int active); #endif diff --git a/project/jni/sdl-1.2/src/video/android/keymap.c b/project/jni/sdl-1.2/src/video/android/keymap.c index b21bf9d42..0ab147eef 100644 --- a/project/jni/sdl-1.2/src/video/android/keymap.c +++ b/project/jni/sdl-1.2/src/video/android/keymap.c @@ -4,7 +4,7 @@ #include "SDL_androidinput.h" #include "SDL_screenkeyboard.h" -void SDL_android_init_keymap(SDLKey *SDL_android_keymap) +void SDL_android_init_keymap(SDLKey *SDL_android_keymap, int isOuya) { int i; SDLKey * keymap = SDL_android_keymap; @@ -131,7 +131,7 @@ void SDL_android_init_keymap(SDLKey *SDL_android_keymap) keymap[KEYCODE_PICTSYMBOLS] = SDL_KEY(LSHIFT); keymap[KEYCODE_SWITCH_CHARSET] = SDL_KEY(LSHIFT); keymap[KEYCODE_BUTTON_A] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_2)); - keymap[KEYCODE_BUTTON_B] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_3)); + keymap[KEYCODE_BUTTON_B] = isOuya ? SDL_KEY(ESCAPE) : SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_3)); keymap[KEYCODE_BUTTON_C] = SDL_KEY(C); keymap[KEYCODE_BUTTON_X] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_0)); keymap[KEYCODE_BUTTON_Y] = SDL_KEY(SDL_KEY_VAL(SDL_ANDROID_SCREENKB_KEYCODE_1)); diff --git a/project/res/drawable/ouya_icon.png b/project/res/drawable/ouya_icon.png new file mode 120000 index 000000000..12585c964 --- /dev/null +++ b/project/res/drawable/ouya_icon.png @@ -0,0 +1 @@ +icon.png \ No newline at end of file