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
AlertDialog: handle buttons
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
|
||||||
#include "../defines.h"
|
#include "../defines.h"
|
||||||
|
#include "../util.h"
|
||||||
#include "../generated_headers/android_app_AlertDialog.h"
|
#include "../generated_headers/android_app_AlertDialog.h"
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_android_app_AlertDialog_nativeSetMessage(JNIEnv *env, jobject this, jlong ptr, jstring message)
|
JNIEXPORT void JNICALL Java_android_app_AlertDialog_nativeSetMessage(JNIEnv *env, jobject this, jlong ptr, jstring message)
|
||||||
@@ -15,12 +16,25 @@ JNIEXPORT void JNICALL Java_android_app_AlertDialog_nativeSetMessage(JNIEnv *env
|
|||||||
(*env)->ReleaseStringUTFChars(env, message, nativeMessage);
|
(*env)->ReleaseStringUTFChars(env, message, nativeMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_android_app_AlertDialog_nativeSetButton(JNIEnv *env, jobject this, jlong ptr, jint id, jstring text) {
|
static void button_clicked_cb(GtkWidget *button, gpointer user_data) {
|
||||||
|
JNIEnv *env = get_jni_env();
|
||||||
|
jobject listener = user_data;
|
||||||
|
jobject this = g_object_get_data(G_OBJECT(button), "this_dialog");
|
||||||
|
jint which = _INTPTR(g_object_get_data(G_OBJECT(button), "which"));
|
||||||
|
jmethodID on_click_method = _METHOD(_CLASS(listener), "onClick", "(Landroid/content/DialogInterface;I)V");
|
||||||
|
(*env)->CallVoidMethod(env, listener, on_click_method, this, which);
|
||||||
|
if ((*env)->ExceptionCheck(env))
|
||||||
|
(*env)->ExceptionDescribe(env);
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL Java_android_app_AlertDialog_nativeSetButton(JNIEnv *env, jobject this, jlong ptr, jint id, jstring text, jobject listener) {
|
||||||
GtkWindow *dialog = GTK_WINDOW(_PTR(ptr));
|
GtkWindow *dialog = GTK_WINDOW(_PTR(ptr));
|
||||||
GtkWidget *content_area = gtk_window_get_child(dialog);
|
GtkWidget *content_area = gtk_window_get_child(dialog);
|
||||||
const char* nativeText = (*env)->GetStringUTFChars(env, text, NULL);
|
const char* nativeText = (*env)->GetStringUTFChars(env, text, NULL);
|
||||||
GtkWidget *button = gtk_button_new_with_label(nativeText);
|
GtkWidget *button = gtk_button_new_with_label(nativeText);
|
||||||
g_signal_connect_swapped(button, "clicked", G_CALLBACK(gtk_window_destroy), dialog);
|
g_object_set_data(G_OBJECT(button), "which", _PTR(id));
|
||||||
|
g_object_set_data(G_OBJECT(button), "this_dialog", _REF(this));
|
||||||
|
g_signal_connect(button, "clicked", G_CALLBACK(button_clicked_cb), _REF(listener));
|
||||||
gtk_box_append(GTK_BOX(content_area), button);
|
gtk_box_append(GTK_BOX(content_area), button);
|
||||||
(*env)->ReleaseStringUTFChars(env, text, nativeText);
|
(*env)->ReleaseStringUTFChars(env, text, nativeText);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,10 +18,10 @@ JNIEXPORT void JNICALL Java_android_app_AlertDialog_nativeSetMessage
|
|||||||
/*
|
/*
|
||||||
* Class: android_app_AlertDialog
|
* Class: android_app_AlertDialog
|
||||||
* Method: nativeSetButton
|
* Method: nativeSetButton
|
||||||
* Signature: (JILjava/lang/String;)V
|
* Signature: (JILjava/lang/String;Landroid/content/DialogInterface/OnClickListener;)V
|
||||||
*/
|
*/
|
||||||
JNIEXPORT void JNICALL Java_android_app_AlertDialog_nativeSetButton
|
JNIEXPORT void JNICALL Java_android_app_AlertDialog_nativeSetButton
|
||||||
(JNIEnv *, jobject, jlong, jint, jstring);
|
(JNIEnv *, jobject, jlong, jint, jstring, jobject);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: android_app_AlertDialog
|
* Class: android_app_AlertDialog
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import android.view.View;
|
|||||||
public class AlertDialog extends Dialog implements DialogInterface {
|
public class AlertDialog extends Dialog implements DialogInterface {
|
||||||
|
|
||||||
private native void nativeSetMessage(long ptr, String message);
|
private native void nativeSetMessage(long ptr, String message);
|
||||||
private native void nativeSetButton(long ptr, int whichButton, String text);
|
private native void nativeSetButton(long ptr, int whichButton, String text, OnClickListener listener);
|
||||||
private native void nativeSetItems(long ptr, String[] items, DialogInterface.OnClickListener listener);
|
private native void nativeSetItems(long ptr, String[] items, DialogInterface.OnClickListener listener);
|
||||||
|
|
||||||
public AlertDialog(Context context) {
|
public AlertDialog(Context context) {
|
||||||
@@ -24,7 +24,7 @@ public class AlertDialog extends Dialog implements DialogInterface {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void setButton(int whichButton, CharSequence text, OnClickListener listener) {
|
public void setButton(int whichButton, CharSequence text, OnClickListener listener) {
|
||||||
nativeSetButton(nativePtr, whichButton, String.valueOf(text));
|
nativeSetButton(nativePtr, whichButton, String.valueOf(text), listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Builder {
|
public static class Builder {
|
||||||
|
|||||||
Reference in New Issue
Block a user