diff options
-rw-r--r-- | apps/keymaps/keymap-android.c | 46 | ||||
-rw-r--r-- | apps/root_menu.c | 8 | ||||
-rw-r--r-- | firmware/target/hosted/android/app/button-application.c | 46 | ||||
-rw-r--r-- | firmware/target/hosted/android/app/button-target.h | 2 | ||||
-rw-r--r-- | firmware/target/hosted/android/button-android.c | 28 |
5 files changed, 75 insertions, 55 deletions
diff --git a/apps/keymaps/keymap-android.c b/apps/keymaps/keymap-android.c index cbc20c3e67..939adb8d0a 100644 --- a/apps/keymaps/keymap-android.c +++ b/apps/keymaps/keymap-android.c | |||
@@ -38,15 +38,14 @@ | |||
38 | */ | 38 | */ |
39 | 39 | ||
40 | static const struct button_mapping button_context_standard[] = { | 40 | static const struct button_mapping button_context_standard[] = { |
41 | { ACTION_STD_PREV, BUTTON_DPAD_UP, BUTTON_NONE }, | 41 | { ACTION_STD_PREV, BUTTON_DPAD_UP|BUTTON_REL, BUTTON_NONE }, |
42 | { ACTION_STD_PREVREPEAT, BUTTON_DPAD_UP|BUTTON_REPEAT, BUTTON_NONE }, | 42 | { ACTION_STD_NEXT, BUTTON_DPAD_DOWN|BUTTON_REL, BUTTON_NONE }, |
43 | { ACTION_STD_NEXT, BUTTON_DPAD_DOWN, BUTTON_NONE }, | ||
44 | { ACTION_STD_NEXTREPEAT, BUTTON_DPAD_DOWN|BUTTON_REPEAT, BUTTON_NONE }, | ||
45 | 43 | ||
46 | { ACTION_STD_OK, BUTTON_DPAD_CENTER|BUTTON_REL, BUTTON_DPAD_CENTER }, | 44 | { ACTION_STD_OK, BUTTON_DPAD_CENTER, BUTTON_NONE }, |
47 | { ACTION_STD_OK, BUTTON_DPAD_RIGHT|BUTTON_REL, BUTTON_DPAD_RIGHT }, | 45 | { ACTION_STD_OK, BUTTON_DPAD_RIGHT|BUTTON_REL, BUTTON_NONE }, |
48 | { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, | 46 | { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, |
49 | { ACTION_STD_CANCEL, BUTTON_DPAD_LEFT|BUTTON_REL, BUTTON_DPAD_LEFT }, | 47 | { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REPEAT, BUTTON_BACK }, |
48 | { ACTION_STD_CANCEL, BUTTON_DPAD_LEFT|BUTTON_REL, BUTTON_NONE }, | ||
50 | 49 | ||
51 | { ACTION_STD_CONTEXT, BUTTON_MENU, BUTTON_NONE }, | 50 | { ACTION_STD_CONTEXT, BUTTON_MENU, BUTTON_NONE }, |
52 | 51 | ||
@@ -78,12 +77,10 @@ static const struct button_mapping button_context_listtree_scroll_without_combo[ | |||
78 | }; | 77 | }; |
79 | 78 | ||
80 | static const struct button_mapping button_context_settings[] = { | 79 | static const struct button_mapping button_context_settings[] = { |
81 | { ACTION_SETTINGS_INC, BUTTON_DPAD_RIGHT, BUTTON_NONE }, | 80 | { ACTION_SETTINGS_INC, BUTTON_DPAD_RIGHT|BUTTON_REL, BUTTON_NONE }, |
82 | { ACTION_SETTINGS_INCREPEAT, BUTTON_DPAD_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | 81 | { ACTION_SETTINGS_DEC, BUTTON_DPAD_LEFT|BUTTON_REL, BUTTON_NONE }, |
83 | { ACTION_SETTINGS_DEC, BUTTON_DPAD_LEFT, BUTTON_NONE }, | 82 | { ACTION_STD_OK, BUTTON_DPAD_CENTER, BUTTON_NONE }, |
84 | { ACTION_SETTINGS_DECREPEAT, BUTTON_DPAD_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | 83 | { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, |
85 | { ACTION_STD_OK, BUTTON_DPAD_CENTER, BUTTON_NONE }, | ||
86 | { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, | ||
87 | 84 | ||
88 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | 85 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) |
89 | }; /* button_context_settings */ | 86 | }; /* button_context_settings */ |
@@ -124,24 +121,13 @@ static const struct button_mapping button_context_quickscreen[] = { | |||
124 | 121 | ||
125 | static const struct button_mapping button_context_pitchscreen[] = { | 122 | static const struct button_mapping button_context_pitchscreen[] = { |
126 | 123 | ||
127 | { ACTION_PS_INC_SMALL, BUTTON_DPAD_RIGHT, BUTTON_NONE }, | 124 | { ACTION_PS_INC_SMALL, BUTTON_DPAD_RIGHT|BUTTON_REL, BUTTON_NONE }, |
128 | { ACTION_PS_INC_BIG, BUTTON_DPAD_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | 125 | { ACTION_PS_DEC_SMALL, BUTTON_DPAD_LEFT|BUTTON_REL, BUTTON_NONE }, |
129 | { ACTION_PS_DEC_SMALL, BUTTON_DPAD_LEFT, BUTTON_NONE }, | 126 | { ACTION_PS_EXIT, BUTTON_BACK, BUTTON_NONE }, |
130 | { ACTION_PS_DEC_BIG, BUTTON_DPAD_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
131 | { ACTION_PS_EXIT, BUTTON_BACK, BUTTON_NONE }, | ||
132 | 127 | ||
133 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | 128 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) |
134 | }; /* button_context_pitchcreen */ | 129 | }; /* button_context_pitchcreen */ |
135 | 130 | ||
136 | static const struct button_mapping button_context_keyboard[] = { | ||
137 | { ACTION_KBD_PAGE_FLIP, BUTTON_MENU, BUTTON_NONE }, | ||
138 | { ACTION_KBD_CURSOR_LEFT, BUTTON_DPAD_LEFT, BUTTON_NONE }, | ||
139 | { ACTION_KBD_CURSOR_LEFT, BUTTON_DPAD_LEFT|BUTTON_REPEAT, BUTTON_NONE }, | ||
140 | { ACTION_KBD_CURSOR_RIGHT, BUTTON_DPAD_RIGHT, BUTTON_NONE }, | ||
141 | { ACTION_KBD_CURSOR_RIGHT, BUTTON_DPAD_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, | ||
142 | |||
143 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) | ||
144 | }; /* button_context_keyboard */ | ||
145 | 131 | ||
146 | static const struct button_mapping button_context_radio[] = { | 132 | static const struct button_mapping button_context_radio[] = { |
147 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) | 133 | LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) |
@@ -181,8 +167,6 @@ const struct button_mapping* target_get_context_mapping(int context) | |||
181 | case CONTEXT_SETTINGS_TIME: | 167 | case CONTEXT_SETTINGS_TIME: |
182 | return button_context_time; | 168 | return button_context_time; |
183 | 169 | ||
184 | case CONTEXT_YESNOSCREEN: | ||
185 | return button_context_yesno; | ||
186 | case CONTEXT_FM: | 170 | case CONTEXT_FM: |
187 | return button_context_radio; | 171 | return button_context_radio; |
188 | case CONTEXT_BOOKMARKSCREEN: | 172 | case CONTEXT_BOOKMARKSCREEN: |
@@ -191,8 +175,6 @@ const struct button_mapping* target_get_context_mapping(int context) | |||
191 | return button_context_quickscreen; | 175 | return button_context_quickscreen; |
192 | case CONTEXT_PITCHSCREEN: | 176 | case CONTEXT_PITCHSCREEN: |
193 | return button_context_pitchscreen; | 177 | return button_context_pitchscreen; |
194 | case CONTEXT_KEYBOARD: | ||
195 | return button_context_keyboard; | ||
196 | } | 178 | } |
197 | return button_context_standard; | 179 | return button_context_standard; |
198 | } | 180 | } |
diff --git a/apps/root_menu.c b/apps/root_menu.c index 5a8d40f0b6..a65ceb51b9 100644 --- a/apps/root_menu.c +++ b/apps/root_menu.c | |||
@@ -639,7 +639,15 @@ void root_menu(void) | |||
639 | case GO_TO_ROOT: | 639 | case GO_TO_ROOT: |
640 | if (last_screen != GO_TO_ROOT) | 640 | if (last_screen != GO_TO_ROOT) |
641 | selected = get_selection(last_screen); | 641 | selected = get_selection(last_screen); |
642 | #if (CONFIG_PLATFORM&PLATFORM_ANDROID) | ||
643 | /* When we are in the main menu we want the hardware BACK | ||
644 | * button to be handled by Android instead of rockbox */ | ||
645 | android_ignore_back_button(true); | ||
646 | #endif | ||
642 | next_screen = do_menu(&root_menu_, &selected, NULL, false); | 647 | next_screen = do_menu(&root_menu_, &selected, NULL, false); |
648 | #if (CONFIG_PLATFORM&PLATFORM_ANDROID) | ||
649 | android_ignore_back_button(false); | ||
650 | #endif | ||
643 | if (next_screen != GO_TO_PREVIOUS) | 651 | if (next_screen != GO_TO_PREVIOUS) |
644 | last_screen = GO_TO_ROOT; | 652 | last_screen = GO_TO_ROOT; |
645 | break; | 653 | break; |
diff --git a/firmware/target/hosted/android/app/button-application.c b/firmware/target/hosted/android/app/button-application.c index a7d75ef172..1586183f6f 100644 --- a/firmware/target/hosted/android/app/button-application.c +++ b/firmware/target/hosted/android/app/button-application.c | |||
@@ -23,26 +23,24 @@ | |||
23 | #include "button.h" | 23 | #include "button.h" |
24 | #include "android_keyevents.h" | 24 | #include "android_keyevents.h" |
25 | 25 | ||
26 | static bool ignore_back_button = false; | ||
27 | void android_ignore_back_button(bool yes) | ||
28 | { | ||
29 | ignore_back_button = yes; | ||
30 | } | ||
31 | |||
26 | int key_to_button(int keyboard_key) | 32 | int key_to_button(int keyboard_key) |
27 | { | 33 | { |
28 | switch (keyboard_key) | 34 | switch (keyboard_key) |
29 | { | 35 | { |
30 | default: | ||
31 | return BUTTON_NONE; | ||
32 | case KEYCODE_BACK: | 36 | case KEYCODE_BACK: |
33 | return BUTTON_BACK; | 37 | return ignore_back_button ? BUTTON_NONE : BUTTON_BACK; |
34 | case KEYCODE_DPAD_UP: | ||
35 | return BUTTON_DPAD_UP; | ||
36 | case KEYCODE_DPAD_DOWN: | ||
37 | return BUTTON_DPAD_DOWN; | ||
38 | case KEYCODE_DPAD_LEFT: | ||
39 | return BUTTON_DPAD_LEFT; | ||
40 | case KEYCODE_DPAD_RIGHT: | ||
41 | return BUTTON_DPAD_RIGHT; | ||
42 | case KEYCODE_DPAD_CENTER: | ||
43 | return BUTTON_DPAD_CENTER; | ||
44 | case KEYCODE_MENU: | 38 | case KEYCODE_MENU: |
45 | return BUTTON_MENU; | 39 | return BUTTON_MENU; |
40 | case KEYCODE_DPAD_CENTER: | ||
41 | return BUTTON_DPAD_CENTER; | ||
42 | default: | ||
43 | return BUTTON_NONE; | ||
46 | } | 44 | } |
47 | } | 45 | } |
48 | 46 | ||
@@ -66,3 +64,25 @@ unsigned multimedia_to_button(int keyboard_key) | |||
66 | return 0; | 64 | return 0; |
67 | } | 65 | } |
68 | } | 66 | } |
67 | |||
68 | unsigned dpad_to_button(int keyboard_key) | ||
69 | { | ||
70 | switch (keyboard_key) | ||
71 | { | ||
72 | /* These buttons only post a single release event. | ||
73 | * doing otherwise will cause action.c to lock up waiting for | ||
74 | * a release (because android sends press/unpress to us too quickly | ||
75 | */ | ||
76 | case KEYCODE_DPAD_UP: | ||
77 | return BUTTON_DPAD_UP|BUTTON_REL; | ||
78 | case KEYCODE_DPAD_DOWN: | ||
79 | return BUTTON_DPAD_DOWN|BUTTON_REL; | ||
80 | case KEYCODE_DPAD_LEFT: | ||
81 | return BUTTON_DPAD_LEFT|BUTTON_REL; | ||
82 | case KEYCODE_DPAD_RIGHT: | ||
83 | return BUTTON_DPAD_RIGHT|BUTTON_REL; | ||
84 | default: | ||
85 | return BUTTON_NONE; | ||
86 | } | ||
87 | } | ||
88 | |||
diff --git a/firmware/target/hosted/android/app/button-target.h b/firmware/target/hosted/android/app/button-target.h index ca306d4fef..6106b612f9 100644 --- a/firmware/target/hosted/android/app/button-target.h +++ b/firmware/target/hosted/android/app/button-target.h | |||
@@ -29,6 +29,8 @@ | |||
29 | void button_init_device(void); | 29 | void button_init_device(void); |
30 | int button_read_device(int *data); | 30 | int button_read_device(int *data); |
31 | unsigned multimedia_to_button(int keyboard_key); | 31 | unsigned multimedia_to_button(int keyboard_key); |
32 | unsigned dpad_to_button(int keyboard_key); | ||
33 | void android_ignore_back_button(bool yes); | ||
32 | 34 | ||
33 | /* Main unit's buttons */ | 35 | /* Main unit's buttons */ |
34 | #define BUTTON_MENU 0x00000001 | 36 | #define BUTTON_MENU 0x00000001 |
diff --git a/firmware/target/hosted/android/button-android.c b/firmware/target/hosted/android/button-android.c index 9bf15c25a2..26b6b1380e 100644 --- a/firmware/target/hosted/android/button-android.c +++ b/firmware/target/hosted/android/button-android.c | |||
@@ -71,30 +71,40 @@ Java_org_rockbox_RockboxFramebuffer_buttonHandler(JNIEnv*env, jobject this, | |||
71 | unsigned button = 0; | 71 | unsigned button = 0; |
72 | 72 | ||
73 | if (!state) | 73 | if (!state) |
74 | { | ||
74 | button = multimedia_to_button((int)keycode); | 75 | button = multimedia_to_button((int)keycode); |
75 | 76 | if (!button) | |
76 | if (button) | 77 | button = dpad_to_button((int)keycode); |
77 | { /* multimeida buttons are handled differently */ | 78 | if (button) |
78 | queue_post(&button_queue, button, 0); | 79 | queue_post(&button_queue, button, 0); |
79 | return true; | ||
80 | } | 80 | } |
81 | 81 | ||
82 | button = key_to_button(keycode); | 82 | if (!button) |
83 | { | ||
84 | button = key_to_button(keycode); | ||
85 | } | ||
83 | 86 | ||
84 | if (button == BUTTON_NONE) | 87 | if (button == BUTTON_NONE) |
88 | { | ||
89 | last_btns = button; | ||
85 | return false; | 90 | return false; |
91 | } | ||
86 | 92 | ||
87 | if (state) | 93 | if (state) |
88 | { | 94 | { |
89 | last_btns |= button; | 95 | last_btns |= button; |
90 | last_button_tick = current_tick; | ||
91 | } | 96 | } |
97 | else | ||
98 | { | ||
99 | last_btns &= (~button); | ||
100 | return false; | ||
101 | } | ||
102 | |||
92 | return true; | 103 | return true; |
93 | } | 104 | } |
94 | 105 | ||
95 | void button_init_device(void) | 106 | void button_init_device(void) |
96 | { | 107 | { |
97 | last_button_tick = 0; | ||
98 | } | 108 | } |
99 | 109 | ||
100 | int button_read_device(int *data) | 110 | int button_read_device(int *data) |
@@ -110,7 +120,5 @@ int button_read_device(int *data) | |||
110 | if (last_touch_state == STATE_DOWN) | 120 | if (last_touch_state == STATE_DOWN) |
111 | btn |= touch; | 121 | btn |= touch; |
112 | 122 | ||
113 | if (TIME_AFTER(current_tick, last_button_tick+5)) | ||
114 | last_btns = 0; | ||
115 | return btn; | 123 | return btn; |
116 | } | 124 | } |