--- rockbox/firmware/target/hosted/android/app/button-application.c 2011-01-26 17:47:30.000000000 -0600 +++ rockbox.mod/firmware/target/hosted/android/app/button-application.c 2011-01-26 17:56:25.000000000 -0600 @@ -39,6 +39,14 @@ return BUTTON_MENU; case KEYCODE_DPAD_CENTER: return BUTTON_DPAD_CENTER; + case KEYCODE_DPAD_UP: + return BUTTON_DPAD_UP|BUTTON_REL; + case KEYCODE_DPAD_DOWN: + return BUTTON_DPAD_DOWN|BUTTON_REL; + case KEYCODE_DPAD_LEFT: + return BUTTON_DPAD_LEFT|BUTTON_REL; + case KEYCODE_DPAD_RIGHT: + return BUTTON_DPAD_RIGHT|BUTTON_REL; default: return BUTTON_NONE; } @@ -63,26 +71,4 @@ default: return 0; } -} - -unsigned dpad_to_button(int keyboard_key) -{ - switch (keyboard_key) - { - /* These buttons only post a single release event. - * doing otherwise will cause action.c to lock up waiting for - * a release (because android sends press/unpress to us too quickly - */ - case KEYCODE_DPAD_UP: - return BUTTON_DPAD_UP|BUTTON_REL; - case KEYCODE_DPAD_DOWN: - return BUTTON_DPAD_DOWN|BUTTON_REL; - case KEYCODE_DPAD_LEFT: - return BUTTON_DPAD_LEFT|BUTTON_REL; - case KEYCODE_DPAD_RIGHT: - return BUTTON_DPAD_RIGHT|BUTTON_REL; - default: - return BUTTON_NONE; - } -} - +} --- rockbox/firmware/target/hosted/android/button-android.c 2011-01-26 08:58:29.000000000 -0600 +++ rockbox.fixes/firmware/target/hosted/android/button-android.c 2011-01-26 16:44:19.000000000 -0600 @@ -69,37 +69,44 @@ unsigned button = 0; - if (!state) + if (state) { - button = multimedia_to_button((int)keycode); - if (!button) - button = dpad_to_button((int)keycode); - if (button) + if ((keycode >= 85) && (keycode <= 90)) + { + button = multimedia_to_button((int)keycode); queue_post(&button_queue, button, 0); - } + button = !button; + return true; + } + + button = key_to_button(keycode); + + if (button == 0) + { + button = !button; + return false; + } - if (!button) - { - button = key_to_button(keycode); + last_btns = button; + button = !button; + return true; } - if (button == BUTTON_NONE) - { - last_btns = button; - return false; - } - if (state) + if (!state) { - last_btns |= button; - } - else - { - last_btns &= (~button); - return false; + button = multimedia_to_button(keycode); + + if (!button) + { + button = key_to_button(keycode); + } + last_btns = !button; + button = !button; + return true; } - - return true; + + return false; } void button_init_device(void) --- rockbox.unmod/android/src/org/rockbox/RockboxFramebuffer.java 2011-01-26 08:58:02.000000000 -0600 +++ rockbox.fixes/android/src/org/rockbox/RockboxFramebuffer.java 2011-01-26 09:03:41.000000000 -0600 @@ -53,6 +53,7 @@ setFocusable(true); setFocusableInTouchMode(true); setClickable(true); + requestFocus(); btm = Bitmap.createBitmap(lcd_width, lcd_height, Bitmap.Config.RGB_565); rect = new Rect(); native_buf = native_fb; --- rockbox/firmware/target/hosted/android/app/android_keyevents.h 2011-01-26 08:58:29.000000000 -0600 +++ rockbox.fixes/firmware/target/hosted/android/app/android_keyevents.h 2011-01-26 16:57:52.000000000 -0600 @@ -1,5 +1,5 @@ /* Ripped from http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob_plain;f=core/java/android/view/KeyEvent.java;hb=HEAD */ -#define KEYCODE_UNKNOWN 0 +#define KEYCODE_NONE 0 #define KEYCODE_SOFT_LEFT 1 #define KEYCODE_SOFT_RIGHT 2 #define KEYCODE_HOME 3