You've already forked android_translation_layer
mirror of
https://gitlab.com/android_translation_layer/android_translation_layer.git
synced 2025-10-27 11:48:10 -07:00
View: implement onKeyDown() callback
This commit is contained in:
@@ -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.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.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.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.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");
|
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 getIdName;
|
||||||
jmethodID getAllSuperClasses;
|
jmethodID getAllSuperClasses;
|
||||||
jmethodID dispatchKeyEvent;
|
jmethodID dispatchKeyEvent;
|
||||||
|
jmethodID onKeyDown;
|
||||||
} view;
|
} view;
|
||||||
struct {
|
struct {
|
||||||
jclass class;
|
jclass class;
|
||||||
|
|||||||
@@ -272,6 +272,16 @@ static bool on_click(GtkGestureClick *gesture, int n_press, double x, double y,
|
|||||||
return ret;
|
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_UP 19
|
||||||
#define KEYCODE_DPAD_DOWN 20
|
#define KEYCODE_DPAD_DOWN 20
|
||||||
#define KEYCODE_DPAD_LEFT 21
|
#define KEYCODE_DPAD_LEFT 21
|
||||||
@@ -296,6 +306,26 @@ static int map_key_code(int key_code) {
|
|||||||
return KEYCODE_DEL;
|
return KEYCODE_DEL;
|
||||||
case GDK_KEY_Delete:
|
case GDK_KEY_Delete:
|
||||||
return KEYCODE_FORWARD_DEL;
|
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:
|
default:
|
||||||
return key_code;
|
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");
|
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());
|
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-pressed", G_CALLBACK(on_key_pressed), wrapper);
|
||||||
g_signal_connect(controller, "key-released", G_CALLBACK(on_key_released), 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 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;}
|
public WindowInsets getRootWindowInsets() {return null;}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user