diff --git a/meson.build b/meson.build index 3d1cbaf1..22587d4d 100644 --- a/meson.build +++ b/meson.build @@ -69,6 +69,7 @@ libtranslationlayer_so = shared_library('translation_layer_main', [ 'src/api-impl-jni/audio/android_media_AudioTrack.c', 'src/api-impl-jni/audio/android_media_SoundPool.c', 'src/api-impl-jni/widgets/android_widget_Button.c', + 'src/api-impl-jni/widgets/android_widget_EditText.c', 'src/api-impl-jni/widgets/android_widget_ImageButton.c', 'src/api-impl-jni/widgets/android_widget_RelativeLayout.c', 'src/api-impl-jni/widgets/android_widget_ScrollView.c', diff --git a/src/api-impl-jni/generated_headers/android_widget_EditText.h b/src/api-impl-jni/generated_headers/android_widget_EditText.h new file mode 100644 index 00000000..b1cad909 --- /dev/null +++ b/src/api-impl-jni/generated_headers/android_widget_EditText.h @@ -0,0 +1,221 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include +/* Header for class android_widget_EditText */ + +#ifndef _Included_android_widget_EditText +#define _Included_android_widget_EditText +#ifdef __cplusplus +extern "C" { +#endif +#undef android_widget_EditText_NO_ID +#define android_widget_EditText_NO_ID -1L +#undef android_widget_EditText_NOT_FOCUSABLE +#define android_widget_EditText_NOT_FOCUSABLE 0L +#undef android_widget_EditText_FOCUSABLE +#define android_widget_EditText_FOCUSABLE 1L +#undef android_widget_EditText_FOCUSABLE_MASK +#define android_widget_EditText_FOCUSABLE_MASK 1L +#undef android_widget_EditText_FITS_SYSTEM_WINDOWS +#define android_widget_EditText_FITS_SYSTEM_WINDOWS 2L +#undef android_widget_EditText_VISIBLE +#define android_widget_EditText_VISIBLE 0L +#undef android_widget_EditText_INVISIBLE +#define android_widget_EditText_INVISIBLE 4L +#undef android_widget_EditText_GONE +#define android_widget_EditText_GONE 8L +#undef android_widget_EditText_VISIBILITY_MASK +#define android_widget_EditText_VISIBILITY_MASK 12L +#undef android_widget_EditText_ENABLED +#define android_widget_EditText_ENABLED 0L +#undef android_widget_EditText_DISABLED +#define android_widget_EditText_DISABLED 32L +#undef android_widget_EditText_ENABLED_MASK +#define android_widget_EditText_ENABLED_MASK 32L +#undef android_widget_EditText_WILL_NOT_DRAW +#define android_widget_EditText_WILL_NOT_DRAW 128L +#undef android_widget_EditText_DRAW_MASK +#define android_widget_EditText_DRAW_MASK 128L +#undef android_widget_EditText_SCROLLBARS_NONE +#define android_widget_EditText_SCROLLBARS_NONE 0L +#undef android_widget_EditText_SCROLLBARS_HORIZONTAL +#define android_widget_EditText_SCROLLBARS_HORIZONTAL 256L +#undef android_widget_EditText_SCROLLBARS_VERTICAL +#define android_widget_EditText_SCROLLBARS_VERTICAL 512L +#undef android_widget_EditText_SCROLLBARS_MASK +#define android_widget_EditText_SCROLLBARS_MASK 768L +#undef android_widget_EditText_FILTER_TOUCHES_WHEN_OBSCURED +#define android_widget_EditText_FILTER_TOUCHES_WHEN_OBSCURED 1024L +#undef android_widget_EditText_OPTIONAL_FITS_SYSTEM_WINDOWS +#define android_widget_EditText_OPTIONAL_FITS_SYSTEM_WINDOWS 2048L +#undef android_widget_EditText_FADING_EDGE_NONE +#define android_widget_EditText_FADING_EDGE_NONE 0L +#undef android_widget_EditText_FADING_EDGE_HORIZONTAL +#define android_widget_EditText_FADING_EDGE_HORIZONTAL 4096L +#undef android_widget_EditText_FADING_EDGE_VERTICAL +#define android_widget_EditText_FADING_EDGE_VERTICAL 8192L +#undef android_widget_EditText_FADING_EDGE_MASK +#define android_widget_EditText_FADING_EDGE_MASK 12288L +#undef android_widget_EditText_CLICKABLE +#define android_widget_EditText_CLICKABLE 16384L +#undef android_widget_EditText_DRAWING_CACHE_ENABLED +#define android_widget_EditText_DRAWING_CACHE_ENABLED 32768L +#undef android_widget_EditText_SAVE_DISABLED +#define android_widget_EditText_SAVE_DISABLED 65536L +#undef android_widget_EditText_SAVE_DISABLED_MASK +#define android_widget_EditText_SAVE_DISABLED_MASK 65536L +#undef android_widget_EditText_WILL_NOT_CACHE_DRAWING +#define android_widget_EditText_WILL_NOT_CACHE_DRAWING 131072L +#undef android_widget_EditText_FOCUSABLE_IN_TOUCH_MODE +#define android_widget_EditText_FOCUSABLE_IN_TOUCH_MODE 262144L +#undef android_widget_EditText_DRAWING_CACHE_QUALITY_LOW +#define android_widget_EditText_DRAWING_CACHE_QUALITY_LOW 524288L +#undef android_widget_EditText_DRAWING_CACHE_QUALITY_HIGH +#define android_widget_EditText_DRAWING_CACHE_QUALITY_HIGH 1048576L +#undef android_widget_EditText_DRAWING_CACHE_QUALITY_AUTO +#define android_widget_EditText_DRAWING_CACHE_QUALITY_AUTO 0L +#undef android_widget_EditText_DRAWING_CACHE_QUALITY_MASK +#define android_widget_EditText_DRAWING_CACHE_QUALITY_MASK 1572864L +#undef android_widget_EditText_LONG_CLICKABLE +#define android_widget_EditText_LONG_CLICKABLE 2097152L +#undef android_widget_EditText_DUPLICATE_PARENT_STATE +#define android_widget_EditText_DUPLICATE_PARENT_STATE 4194304L +#undef android_widget_EditText_SCROLLBARS_INSIDE_OVERLAY +#define android_widget_EditText_SCROLLBARS_INSIDE_OVERLAY 0L +#undef android_widget_EditText_SCROLLBARS_INSIDE_INSET +#define android_widget_EditText_SCROLLBARS_INSIDE_INSET 16777216L +#undef android_widget_EditText_SCROLLBARS_OUTSIDE_OVERLAY +#define android_widget_EditText_SCROLLBARS_OUTSIDE_OVERLAY 33554432L +#undef android_widget_EditText_SCROLLBARS_OUTSIDE_INSET +#define android_widget_EditText_SCROLLBARS_OUTSIDE_INSET 50331648L +#undef android_widget_EditText_SCROLLBARS_INSET_MASK +#define android_widget_EditText_SCROLLBARS_INSET_MASK 16777216L +#undef android_widget_EditText_SCROLLBARS_OUTSIDE_MASK +#define android_widget_EditText_SCROLLBARS_OUTSIDE_MASK 33554432L +#undef android_widget_EditText_SCROLLBARS_STYLE_MASK +#define android_widget_EditText_SCROLLBARS_STYLE_MASK 50331648L +#undef android_widget_EditText_KEEP_SCREEN_ON +#define android_widget_EditText_KEEP_SCREEN_ON 67108864L +#undef android_widget_EditText_SOUND_EFFECTS_ENABLED +#define android_widget_EditText_SOUND_EFFECTS_ENABLED 134217728L +#undef android_widget_EditText_HAPTIC_FEEDBACK_ENABLED +#define android_widget_EditText_HAPTIC_FEEDBACK_ENABLED 268435456L +#undef android_widget_EditText_PARENT_SAVE_DISABLED +#define android_widget_EditText_PARENT_SAVE_DISABLED 536870912L +#undef android_widget_EditText_PARENT_SAVE_DISABLED_MASK +#define android_widget_EditText_PARENT_SAVE_DISABLED_MASK 536870912L +#undef android_widget_EditText_FOCUSABLES_ALL +#define android_widget_EditText_FOCUSABLES_ALL 0L +#undef android_widget_EditText_FOCUSABLES_TOUCH_MODE +#define android_widget_EditText_FOCUSABLES_TOUCH_MODE 1L +#undef android_widget_EditText_FOCUS_BACKWARD +#define android_widget_EditText_FOCUS_BACKWARD 1L +#undef android_widget_EditText_FOCUS_FORWARD +#define android_widget_EditText_FOCUS_FORWARD 2L +#undef android_widget_EditText_FOCUS_LEFT +#define android_widget_EditText_FOCUS_LEFT 17L +#undef android_widget_EditText_FOCUS_UP +#define android_widget_EditText_FOCUS_UP 33L +#undef android_widget_EditText_FOCUS_RIGHT +#define android_widget_EditText_FOCUS_RIGHT 66L +#undef android_widget_EditText_FOCUS_DOWN +#define android_widget_EditText_FOCUS_DOWN 130L +#undef android_widget_EditText_MEASURED_SIZE_MASK +#define android_widget_EditText_MEASURED_SIZE_MASK 16777215L +#undef android_widget_EditText_MEASURED_STATE_MASK +#define android_widget_EditText_MEASURED_STATE_MASK -16777216L +#undef android_widget_EditText_MEASURED_HEIGHT_STATE_SHIFT +#define android_widget_EditText_MEASURED_HEIGHT_STATE_SHIFT 16L +#undef android_widget_EditText_MEASURED_STATE_TOO_SMALL +#define android_widget_EditText_MEASURED_STATE_TOO_SMALL 16777216L +#undef android_widget_EditText_PFLAG2_DRAG_CAN_ACCEPT +#define android_widget_EditText_PFLAG2_DRAG_CAN_ACCEPT 1L +#undef android_widget_EditText_PFLAG2_DRAG_HOVERED +#define android_widget_EditText_PFLAG2_DRAG_HOVERED 2L +#undef android_widget_EditText_LAYOUT_DIRECTION_LTR +#define android_widget_EditText_LAYOUT_DIRECTION_LTR 0L +#undef android_widget_EditText_LAYOUT_DIRECTION_RTL +#define android_widget_EditText_LAYOUT_DIRECTION_RTL 1L +#undef android_widget_EditText_LAYOUT_DIRECTION_INHERIT +#define android_widget_EditText_LAYOUT_DIRECTION_INHERIT 2L +#undef android_widget_EditText_LAYOUT_DIRECTION_LOCALE +#define android_widget_EditText_LAYOUT_DIRECTION_LOCALE 3L +#undef android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT +#define android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT 2L +#undef android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_MASK +#define android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_MASK 12L +#undef android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL +#define android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL 16L +#undef android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_RESOLVED +#define android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_RESOLVED 32L +#undef android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK +#define android_widget_EditText_PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK 48L +#undef android_widget_EditText_STATUS_BAR_HIDDEN +#define android_widget_EditText_STATUS_BAR_HIDDEN 1L +#undef android_widget_EditText_STATUS_BAR_VISIBLE +#define android_widget_EditText_STATUS_BAR_VISIBLE 0L +#undef android_widget_EditText_SYSTEM_UI_FLAG_FULLSCREEN +#define android_widget_EditText_SYSTEM_UI_FLAG_FULLSCREEN 4L +#undef android_widget_EditText_SYSTEM_UI_FLAG_HIDE_NAVIGATION +#define android_widget_EditText_SYSTEM_UI_FLAG_HIDE_NAVIGATION 2L +#undef android_widget_EditText_SYSTEM_UI_FLAG_IMMERSIVE +#define android_widget_EditText_SYSTEM_UI_FLAG_IMMERSIVE 2048L +#undef android_widget_EditText_SYSTEM_UI_FLAG_IMMERSIVE_STICKY +#define android_widget_EditText_SYSTEM_UI_FLAG_IMMERSIVE_STICKY 4096L +#undef android_widget_EditText_SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN +#define android_widget_EditText_SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 1024L +#undef android_widget_EditText_SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION +#define android_widget_EditText_SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 512L +#undef android_widget_EditText_SYSTEM_UI_FLAG_LAYOUT_STABLE +#define android_widget_EditText_SYSTEM_UI_FLAG_LAYOUT_STABLE 256L +#undef android_widget_EditText_SYSTEM_UI_FLAG_LOW_PROFILE +#define android_widget_EditText_SYSTEM_UI_FLAG_LOW_PROFILE 1L +#undef android_widget_EditText_SYSTEM_UI_FLAG_VISIBLE +#define android_widget_EditText_SYSTEM_UI_FLAG_VISIBLE 0L +#undef android_widget_EditText_SYSTEM_UI_LAYOUT_FLAGS +#define android_widget_EditText_SYSTEM_UI_LAYOUT_FLAGS 1536L +#undef android_widget_EditText_TEXT_ALIGNMENT_CENTER +#define android_widget_EditText_TEXT_ALIGNMENT_CENTER 4L +#undef android_widget_EditText_TEXT_ALIGNMENT_GRAVITY +#define android_widget_EditText_TEXT_ALIGNMENT_GRAVITY 1L +#undef android_widget_EditText_TEXT_ALIGNMENT_INHERIT +#define android_widget_EditText_TEXT_ALIGNMENT_INHERIT 0L +#undef android_widget_EditText_TEXT_ALIGNMENT_TEXT_END +#define android_widget_EditText_TEXT_ALIGNMENT_TEXT_END 3L +#undef android_widget_EditText_TEXT_ALIGNMENT_TEXT_START +#define android_widget_EditText_TEXT_ALIGNMENT_TEXT_START 2L +#undef android_widget_EditText_TEXT_ALIGNMENT_VIEW_END +#define android_widget_EditText_TEXT_ALIGNMENT_VIEW_END 6L +#undef android_widget_EditText_TEXT_ALIGNMENT_VIEW_START +#define android_widget_EditText_TEXT_ALIGNMENT_VIEW_START 5L +#undef android_widget_EditText_TEXT_DIRECTION_ANY_RTL +#define android_widget_EditText_TEXT_DIRECTION_ANY_RTL 2L +#undef android_widget_EditText_TEXT_DIRECTION_FIRST_STRONG +#define android_widget_EditText_TEXT_DIRECTION_FIRST_STRONG 1L +#undef android_widget_EditText_TEXT_DIRECTION_INHERIT +#define android_widget_EditText_TEXT_DIRECTION_INHERIT 0L +#undef android_widget_EditText_TEXT_DIRECTION_LOCALE +#define android_widget_EditText_TEXT_DIRECTION_LOCALE 5L +#undef android_widget_EditText_TEXT_DIRECTION_LTR +#define android_widget_EditText_TEXT_DIRECTION_LTR 3L +#undef android_widget_EditText_TEXT_DIRECTION_RTL +#define android_widget_EditText_TEXT_DIRECTION_RTL 4L +/* + * Class: android_widget_EditText + * Method: native_constructor + * Signature: (Landroid/content/Context;Landroid/util/AttributeSet;)J + */ +JNIEXPORT jlong JNICALL Java_android_widget_EditText_native_1constructor + (JNIEnv *, jobject, jobject, jobject); + +/* + * Class: android_widget_EditText + * Method: native_getText + * Signature: (J)Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_android_widget_EditText_native_1getText + (JNIEnv *, jobject, jlong); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/api-impl-jni/widgets/android_widget_EditText.c b/src/api-impl-jni/widgets/android_widget_EditText.c new file mode 100644 index 00000000..03c021fd --- /dev/null +++ b/src/api-impl-jni/widgets/android_widget_EditText.c @@ -0,0 +1,23 @@ +#include + +#include "../defines.h" +#include "../util.h" + +#include "WrapperWidget.h" + +#include "../generated_headers/android_widget_EditText.h" + +JNIEXPORT jlong JNICALL Java_android_widget_EditText_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs) +{ + GtkWidget *wrapper = g_object_ref(wrapper_widget_new()); + GtkWidget *entry = gtk_entry_new(); + wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), entry); + return _INTPTR(entry); +} + +JNIEXPORT jstring JNICALL Java_android_widget_EditText_native_1getText(JNIEnv *env, jobject this, jlong widget_ptr) +{ + GtkEntry *entry = GTK_ENTRY(_PTR(widget_ptr)); + const char *text = gtk_entry_buffer_get_text(gtk_entry_get_buffer(entry)); + return _JSTRING(text); +} diff --git a/src/api-impl/android/text/Editable.java b/src/api-impl/android/text/Editable.java new file mode 100644 index 00000000..c4f4f8ad --- /dev/null +++ b/src/api-impl/android/text/Editable.java @@ -0,0 +1,5 @@ +package android.text; + +public interface Editable extends CharSequence { + +} diff --git a/src/api-impl/android/widget/EditText.java b/src/api-impl/android/widget/EditText.java index abbe13a9..8438c8b4 100644 --- a/src/api-impl/android/widget/EditText.java +++ b/src/api-impl/android/widget/EditText.java @@ -1,8 +1,8 @@ package android.widget; import android.content.Context; +import android.text.Editable; import android.util.AttributeSet; -import android.view.View; public class EditText extends TextView { public EditText(Context context) { @@ -12,4 +12,50 @@ public class EditText extends TextView { public EditText(Context context, AttributeSet attrs) { super(context, attrs); } + + @Override + protected native long native_constructor(Context context, AttributeSet attrs); + protected native String native_getText(long widget); + + public Editable getText() { + return new FIXME_Editable(native_getText(widget)); + } + + public Editable getEditableText() { + return new FIXME_Editable(native_getText(widget)); + } + + @Override + public void setText(CharSequence text) {} + @Override + public void setTextSize(float size) {} + + private class FIXME_Editable implements Editable { + private String string; + + public FIXME_Editable(String string) { + this.string = string; + } + + @Override + public int length() { + return string.length(); + } + + @Override + public char charAt(int index) { + return string.charAt(index); + } + + @Override + public CharSequence subSequence(int start, int end) { + return string.subSequence(start, end); + } + + @Override + public String toString() { + return string; + } + + } } diff --git a/src/api-impl/android/widget/TextView.java b/src/api-impl/android/widget/TextView.java index dcddede2..9d848340 100644 --- a/src/api-impl/android/widget/TextView.java +++ b/src/api-impl/android/widget/TextView.java @@ -34,7 +34,7 @@ public class TextView extends View { @Override protected native long native_constructor(Context context, AttributeSet attrs); - public final void setText(CharSequence text) { + public void setText(CharSequence text) { if (text == null) { native_setText("NULL"); return; diff --git a/src/api-impl/meson.build b/src/api-impl/meson.build index aec21703..6f5c36a8 100644 --- a/src/api-impl/meson.build +++ b/src/api-impl/meson.build @@ -187,6 +187,7 @@ hax_jar = jar('hax', [ 'android/telephony/PhoneStateListener.java', 'android/telephony/TelephonyManager.java', 'android/text/ClipboardManager.java', + 'android/text/Editable.java', 'android/text/GetChars.java', 'android/text/Html.java', 'android/text/InputFilter.java',