implement EditText.setOnEditorActionListener()

This makes the NewPipe search work again
This commit is contained in:
Julian Winkler
2023-11-08 18:00:31 +01:00
parent 1aa1ee64c1
commit bcfb384ba4
6 changed files with 51 additions and 0 deletions

View File

@@ -49,3 +49,31 @@ JNIEXPORT void JNICALL Java_android_widget_EditText_native_1addTextChangedListen
g_signal_connect(GTK_EDITABLE(entry), "changed", G_CALLBACK(changed_cb), callback_data);
}
#define IME_ACTION_SEARCH 3
#define KEYCODE_ENTER 66
static void on_activate(GtkEntry *entry, struct changed_callback_data *d)
{
JNIEnv *env = get_jni_env();
jobject key_event = (*env)->NewObject(env, handle_cache.key_event.class, handle_cache.key_event.constructor, IME_ACTION_SEARCH, KEYCODE_ENTER);
(*env)->CallBooleanMethod(env, d->listener, d->listener_method, d->this, 0, key_event);
if((*env)->ExceptionCheck(env))
(*env)->ExceptionDescribe(env);
}
JNIEXPORT void JNICALL Java_android_widget_EditText_native_1setOnEditorActionListener(JNIEnv *env, jobject this, jlong widget_ptr, jobject listener)
{
GtkEntry *entry = GTK_ENTRY(_PTR(widget_ptr));
if (!listener)
return;
struct changed_callback_data *callback_data = malloc(sizeof(struct changed_callback_data));
callback_data->this = _REF(this);
callback_data->listener = _REF(listener);
callback_data->listener_method = _METHOD(_CLASS(listener), "onEditorAction", "(Landroid/widget/TextView;ILandroid/view/KeyEvent;)Z");
g_signal_connect(entry, "activate", G_CALLBACK(on_activate), callback_data);
}