mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-04-28 12:17:57 +03:00
View: implement onKeyDown() callback
This commit is contained in:
parent
2374d44b0f
commit
161904c8a8
4 changed files with 44 additions and 2 deletions
|
@ -141,6 +141,7 @@ void set_up_handle_cache(JNIEnv *env)
|
|||
handle_cache.view.getIdName = _METHOD(handle_cache.view.class, "getIdName", "()Ljava/lang/String;");
|
||||
handle_cache.view.getAllSuperClasses = _METHOD(handle_cache.view.class, "getAllSuperClasses", "()Ljava/lang/String;");
|
||||
handle_cache.view.dispatchKeyEvent = _METHOD(handle_cache.view.class, "dispatchKeyEvent", "(Landroid/view/KeyEvent;)Z");
|
||||
handle_cache.view.onKeyDown = _METHOD(handle_cache.view.class, "onKeyDown", "(ILandroid/view/KeyEvent;)Z");
|
||||
|
||||
handle_cache.asset_manager.class = _REF((*env)->FindClass(env, "android/content/res/AssetManager"));
|
||||
handle_cache.asset_manager.extractFromAPK = _STATIC_METHOD(handle_cache.asset_manager.class, "extractFromAPK", "(Ljava/lang/String;Ljava/lang/String;)V");
|
||||
|
|
|
@ -86,6 +86,7 @@ struct handle_cache {
|
|||
jmethodID getIdName;
|
||||
jmethodID getAllSuperClasses;
|
||||
jmethodID dispatchKeyEvent;
|
||||
jmethodID onKeyDown;
|
||||
} view;
|
||||
struct {
|
||||
jclass class;
|
||||
|
|
|
@ -272,6 +272,16 @@ static bool on_click(GtkGestureClick *gesture, int n_press, double x, double y,
|
|||
return ret;
|
||||
}
|
||||
|
||||
#define KEYCODE_0 7
|
||||
#define KEYCODE_1 8
|
||||
#define KEYCODE_2 9
|
||||
#define KEYCODE_3 10
|
||||
#define KEYCODE_4 11
|
||||
#define KEYCODE_5 12
|
||||
#define KEYCODE_6 13
|
||||
#define KEYCODE_7 14
|
||||
#define KEYCODE_8 15
|
||||
#define KEYCODE_9 16
|
||||
#define KEYCODE_DPAD_UP 19
|
||||
#define KEYCODE_DPAD_DOWN 20
|
||||
#define KEYCODE_DPAD_LEFT 21
|
||||
|
@ -296,6 +306,26 @@ static int map_key_code(int key_code) {
|
|||
return KEYCODE_DEL;
|
||||
case GDK_KEY_Delete:
|
||||
return KEYCODE_FORWARD_DEL;
|
||||
case GDK_KEY_0:
|
||||
return KEYCODE_0;
|
||||
case GDK_KEY_1:
|
||||
return KEYCODE_1;
|
||||
case GDK_KEY_2:
|
||||
return KEYCODE_2;
|
||||
case GDK_KEY_3:
|
||||
return KEYCODE_3;
|
||||
case GDK_KEY_4:
|
||||
return KEYCODE_4;
|
||||
case GDK_KEY_5:
|
||||
return KEYCODE_5;
|
||||
case GDK_KEY_6:
|
||||
return KEYCODE_6;
|
||||
case GDK_KEY_7:
|
||||
return KEYCODE_7;
|
||||
case GDK_KEY_8:
|
||||
return KEYCODE_8;
|
||||
case GDK_KEY_9:
|
||||
return KEYCODE_9;
|
||||
default:
|
||||
return key_code;
|
||||
}
|
||||
|
@ -367,7 +397,8 @@ void wrapper_widget_set_jobject(WrapperWidget *wrapper, JNIEnv *env, jobject job
|
|||
}
|
||||
|
||||
jmethodID dispatch_key_event_method = _METHOD(_CLASS(jobj), "dispatchKeyEvent", "(Landroid/view/KeyEvent;)Z");
|
||||
if (dispatch_key_event_method != handle_cache.view.dispatchKeyEvent) {
|
||||
jmethodID on_key_down_method = _METHOD(_CLASS(jobj), "onKeyDown", "(ILandroid/view/KeyEvent;)Z");
|
||||
if (dispatch_key_event_method != handle_cache.view.dispatchKeyEvent || on_key_down_method != handle_cache.view.onKeyDown) {
|
||||
GtkEventController *controller = GTK_EVENT_CONTROLLER(gtk_event_controller_key_new());
|
||||
g_signal_connect(controller, "key-pressed", G_CALLBACK(on_key_pressed), wrapper);
|
||||
g_signal_connect(controller, "key-released", G_CALLBACK(on_key_released), wrapper);
|
||||
|
|
|
@ -2108,7 +2108,16 @@ public class View implements Drawable.Callback {
|
|||
|
||||
public boolean requestRectangleOnScreen(Rect rectangle) {return false;}
|
||||
|
||||
public boolean dispatchKeyEvent(KeyEvent event) {return false;}
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean dispatchKeyEvent(KeyEvent event) {
|
||||
if (event.getAction() == KeyEvent.ACTION_DOWN)
|
||||
return onKeyDown(event.getKeyCode(), event);
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
public WindowInsets getRootWindowInsets() {return null;}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue