FrameLayout: replace with AOSPs implementation

There are many Widgets extending FrameLayout and adding custom behaviour
on top. For example NavigationView. This didn't realy work with our
custom implementation
This commit is contained in:
Julian Winkler
2023-11-08 18:13:47 +01:00
parent 6ef1e523cc
commit d025fd3ce3
5 changed files with 357 additions and 321 deletions

View File

@@ -1,213 +0,0 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class android_widget_FrameLayout */
#ifndef _Included_android_widget_FrameLayout
#define _Included_android_widget_FrameLayout
#ifdef __cplusplus
extern "C" {
#endif
#undef android_widget_FrameLayout_NO_ID
#define android_widget_FrameLayout_NO_ID -1L
#undef android_widget_FrameLayout_NOT_FOCUSABLE
#define android_widget_FrameLayout_NOT_FOCUSABLE 0L
#undef android_widget_FrameLayout_FOCUSABLE
#define android_widget_FrameLayout_FOCUSABLE 1L
#undef android_widget_FrameLayout_FOCUSABLE_MASK
#define android_widget_FrameLayout_FOCUSABLE_MASK 1L
#undef android_widget_FrameLayout_FITS_SYSTEM_WINDOWS
#define android_widget_FrameLayout_FITS_SYSTEM_WINDOWS 2L
#undef android_widget_FrameLayout_VISIBLE
#define android_widget_FrameLayout_VISIBLE 0L
#undef android_widget_FrameLayout_INVISIBLE
#define android_widget_FrameLayout_INVISIBLE 4L
#undef android_widget_FrameLayout_GONE
#define android_widget_FrameLayout_GONE 8L
#undef android_widget_FrameLayout_VISIBILITY_MASK
#define android_widget_FrameLayout_VISIBILITY_MASK 12L
#undef android_widget_FrameLayout_ENABLED
#define android_widget_FrameLayout_ENABLED 0L
#undef android_widget_FrameLayout_DISABLED
#define android_widget_FrameLayout_DISABLED 32L
#undef android_widget_FrameLayout_ENABLED_MASK
#define android_widget_FrameLayout_ENABLED_MASK 32L
#undef android_widget_FrameLayout_WILL_NOT_DRAW
#define android_widget_FrameLayout_WILL_NOT_DRAW 128L
#undef android_widget_FrameLayout_DRAW_MASK
#define android_widget_FrameLayout_DRAW_MASK 128L
#undef android_widget_FrameLayout_SCROLLBARS_NONE
#define android_widget_FrameLayout_SCROLLBARS_NONE 0L
#undef android_widget_FrameLayout_SCROLLBARS_HORIZONTAL
#define android_widget_FrameLayout_SCROLLBARS_HORIZONTAL 256L
#undef android_widget_FrameLayout_SCROLLBARS_VERTICAL
#define android_widget_FrameLayout_SCROLLBARS_VERTICAL 512L
#undef android_widget_FrameLayout_SCROLLBARS_MASK
#define android_widget_FrameLayout_SCROLLBARS_MASK 768L
#undef android_widget_FrameLayout_FILTER_TOUCHES_WHEN_OBSCURED
#define android_widget_FrameLayout_FILTER_TOUCHES_WHEN_OBSCURED 1024L
#undef android_widget_FrameLayout_OPTIONAL_FITS_SYSTEM_WINDOWS
#define android_widget_FrameLayout_OPTIONAL_FITS_SYSTEM_WINDOWS 2048L
#undef android_widget_FrameLayout_FADING_EDGE_NONE
#define android_widget_FrameLayout_FADING_EDGE_NONE 0L
#undef android_widget_FrameLayout_FADING_EDGE_HORIZONTAL
#define android_widget_FrameLayout_FADING_EDGE_HORIZONTAL 4096L
#undef android_widget_FrameLayout_FADING_EDGE_VERTICAL
#define android_widget_FrameLayout_FADING_EDGE_VERTICAL 8192L
#undef android_widget_FrameLayout_FADING_EDGE_MASK
#define android_widget_FrameLayout_FADING_EDGE_MASK 12288L
#undef android_widget_FrameLayout_CLICKABLE
#define android_widget_FrameLayout_CLICKABLE 16384L
#undef android_widget_FrameLayout_DRAWING_CACHE_ENABLED
#define android_widget_FrameLayout_DRAWING_CACHE_ENABLED 32768L
#undef android_widget_FrameLayout_SAVE_DISABLED
#define android_widget_FrameLayout_SAVE_DISABLED 65536L
#undef android_widget_FrameLayout_SAVE_DISABLED_MASK
#define android_widget_FrameLayout_SAVE_DISABLED_MASK 65536L
#undef android_widget_FrameLayout_WILL_NOT_CACHE_DRAWING
#define android_widget_FrameLayout_WILL_NOT_CACHE_DRAWING 131072L
#undef android_widget_FrameLayout_FOCUSABLE_IN_TOUCH_MODE
#define android_widget_FrameLayout_FOCUSABLE_IN_TOUCH_MODE 262144L
#undef android_widget_FrameLayout_DRAWING_CACHE_QUALITY_LOW
#define android_widget_FrameLayout_DRAWING_CACHE_QUALITY_LOW 524288L
#undef android_widget_FrameLayout_DRAWING_CACHE_QUALITY_HIGH
#define android_widget_FrameLayout_DRAWING_CACHE_QUALITY_HIGH 1048576L
#undef android_widget_FrameLayout_DRAWING_CACHE_QUALITY_AUTO
#define android_widget_FrameLayout_DRAWING_CACHE_QUALITY_AUTO 0L
#undef android_widget_FrameLayout_DRAWING_CACHE_QUALITY_MASK
#define android_widget_FrameLayout_DRAWING_CACHE_QUALITY_MASK 1572864L
#undef android_widget_FrameLayout_LONG_CLICKABLE
#define android_widget_FrameLayout_LONG_CLICKABLE 2097152L
#undef android_widget_FrameLayout_DUPLICATE_PARENT_STATE
#define android_widget_FrameLayout_DUPLICATE_PARENT_STATE 4194304L
#undef android_widget_FrameLayout_SCROLLBARS_INSIDE_OVERLAY
#define android_widget_FrameLayout_SCROLLBARS_INSIDE_OVERLAY 0L
#undef android_widget_FrameLayout_SCROLLBARS_INSIDE_INSET
#define android_widget_FrameLayout_SCROLLBARS_INSIDE_INSET 16777216L
#undef android_widget_FrameLayout_SCROLLBARS_OUTSIDE_OVERLAY
#define android_widget_FrameLayout_SCROLLBARS_OUTSIDE_OVERLAY 33554432L
#undef android_widget_FrameLayout_SCROLLBARS_OUTSIDE_INSET
#define android_widget_FrameLayout_SCROLLBARS_OUTSIDE_INSET 50331648L
#undef android_widget_FrameLayout_SCROLLBARS_INSET_MASK
#define android_widget_FrameLayout_SCROLLBARS_INSET_MASK 16777216L
#undef android_widget_FrameLayout_SCROLLBARS_OUTSIDE_MASK
#define android_widget_FrameLayout_SCROLLBARS_OUTSIDE_MASK 33554432L
#undef android_widget_FrameLayout_SCROLLBARS_STYLE_MASK
#define android_widget_FrameLayout_SCROLLBARS_STYLE_MASK 50331648L
#undef android_widget_FrameLayout_KEEP_SCREEN_ON
#define android_widget_FrameLayout_KEEP_SCREEN_ON 67108864L
#undef android_widget_FrameLayout_SOUND_EFFECTS_ENABLED
#define android_widget_FrameLayout_SOUND_EFFECTS_ENABLED 134217728L
#undef android_widget_FrameLayout_HAPTIC_FEEDBACK_ENABLED
#define android_widget_FrameLayout_HAPTIC_FEEDBACK_ENABLED 268435456L
#undef android_widget_FrameLayout_PARENT_SAVE_DISABLED
#define android_widget_FrameLayout_PARENT_SAVE_DISABLED 536870912L
#undef android_widget_FrameLayout_PARENT_SAVE_DISABLED_MASK
#define android_widget_FrameLayout_PARENT_SAVE_DISABLED_MASK 536870912L
#undef android_widget_FrameLayout_FOCUSABLES_ALL
#define android_widget_FrameLayout_FOCUSABLES_ALL 0L
#undef android_widget_FrameLayout_FOCUSABLES_TOUCH_MODE
#define android_widget_FrameLayout_FOCUSABLES_TOUCH_MODE 1L
#undef android_widget_FrameLayout_FOCUS_BACKWARD
#define android_widget_FrameLayout_FOCUS_BACKWARD 1L
#undef android_widget_FrameLayout_FOCUS_FORWARD
#define android_widget_FrameLayout_FOCUS_FORWARD 2L
#undef android_widget_FrameLayout_FOCUS_LEFT
#define android_widget_FrameLayout_FOCUS_LEFT 17L
#undef android_widget_FrameLayout_FOCUS_UP
#define android_widget_FrameLayout_FOCUS_UP 33L
#undef android_widget_FrameLayout_FOCUS_RIGHT
#define android_widget_FrameLayout_FOCUS_RIGHT 66L
#undef android_widget_FrameLayout_FOCUS_DOWN
#define android_widget_FrameLayout_FOCUS_DOWN 130L
#undef android_widget_FrameLayout_MEASURED_SIZE_MASK
#define android_widget_FrameLayout_MEASURED_SIZE_MASK 16777215L
#undef android_widget_FrameLayout_MEASURED_STATE_MASK
#define android_widget_FrameLayout_MEASURED_STATE_MASK -16777216L
#undef android_widget_FrameLayout_MEASURED_HEIGHT_STATE_SHIFT
#define android_widget_FrameLayout_MEASURED_HEIGHT_STATE_SHIFT 16L
#undef android_widget_FrameLayout_MEASURED_STATE_TOO_SMALL
#define android_widget_FrameLayout_MEASURED_STATE_TOO_SMALL 16777216L
#undef android_widget_FrameLayout_PFLAG2_DRAG_CAN_ACCEPT
#define android_widget_FrameLayout_PFLAG2_DRAG_CAN_ACCEPT 1L
#undef android_widget_FrameLayout_PFLAG2_DRAG_HOVERED
#define android_widget_FrameLayout_PFLAG2_DRAG_HOVERED 2L
#undef android_widget_FrameLayout_LAYOUT_DIRECTION_LTR
#define android_widget_FrameLayout_LAYOUT_DIRECTION_LTR 0L
#undef android_widget_FrameLayout_LAYOUT_DIRECTION_RTL
#define android_widget_FrameLayout_LAYOUT_DIRECTION_RTL 1L
#undef android_widget_FrameLayout_LAYOUT_DIRECTION_INHERIT
#define android_widget_FrameLayout_LAYOUT_DIRECTION_INHERIT 2L
#undef android_widget_FrameLayout_LAYOUT_DIRECTION_LOCALE
#define android_widget_FrameLayout_LAYOUT_DIRECTION_LOCALE 3L
#undef android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT
#define android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_MASK_SHIFT 2L
#undef android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_MASK
#define android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_MASK 12L
#undef android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL
#define android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_RESOLVED_RTL 16L
#undef android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_RESOLVED
#define android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_RESOLVED 32L
#undef android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK
#define android_widget_FrameLayout_PFLAG2_LAYOUT_DIRECTION_RESOLVED_MASK 48L
#undef android_widget_FrameLayout_STATUS_BAR_HIDDEN
#define android_widget_FrameLayout_STATUS_BAR_HIDDEN 1L
#undef android_widget_FrameLayout_STATUS_BAR_VISIBLE
#define android_widget_FrameLayout_STATUS_BAR_VISIBLE 0L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_FULLSCREEN
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_FULLSCREEN 4L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_HIDE_NAVIGATION
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_HIDE_NAVIGATION 2L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_IMMERSIVE
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_IMMERSIVE 2048L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_IMMERSIVE_STICKY
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_IMMERSIVE_STICKY 4096L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 1024L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 512L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_LAYOUT_STABLE
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_LAYOUT_STABLE 256L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_LOW_PROFILE
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_LOW_PROFILE 1L
#undef android_widget_FrameLayout_SYSTEM_UI_FLAG_VISIBLE
#define android_widget_FrameLayout_SYSTEM_UI_FLAG_VISIBLE 0L
#undef android_widget_FrameLayout_SYSTEM_UI_LAYOUT_FLAGS
#define android_widget_FrameLayout_SYSTEM_UI_LAYOUT_FLAGS 1536L
#undef android_widget_FrameLayout_TEXT_ALIGNMENT_CENTER
#define android_widget_FrameLayout_TEXT_ALIGNMENT_CENTER 4L
#undef android_widget_FrameLayout_TEXT_ALIGNMENT_GRAVITY
#define android_widget_FrameLayout_TEXT_ALIGNMENT_GRAVITY 1L
#undef android_widget_FrameLayout_TEXT_ALIGNMENT_INHERIT
#define android_widget_FrameLayout_TEXT_ALIGNMENT_INHERIT 0L
#undef android_widget_FrameLayout_TEXT_ALIGNMENT_TEXT_END
#define android_widget_FrameLayout_TEXT_ALIGNMENT_TEXT_END 3L
#undef android_widget_FrameLayout_TEXT_ALIGNMENT_TEXT_START
#define android_widget_FrameLayout_TEXT_ALIGNMENT_TEXT_START 2L
#undef android_widget_FrameLayout_TEXT_ALIGNMENT_VIEW_END
#define android_widget_FrameLayout_TEXT_ALIGNMENT_VIEW_END 6L
#undef android_widget_FrameLayout_TEXT_ALIGNMENT_VIEW_START
#define android_widget_FrameLayout_TEXT_ALIGNMENT_VIEW_START 5L
#undef android_widget_FrameLayout_TEXT_DIRECTION_ANY_RTL
#define android_widget_FrameLayout_TEXT_DIRECTION_ANY_RTL 2L
#undef android_widget_FrameLayout_TEXT_DIRECTION_FIRST_STRONG
#define android_widget_FrameLayout_TEXT_DIRECTION_FIRST_STRONG 1L
#undef android_widget_FrameLayout_TEXT_DIRECTION_INHERIT
#define android_widget_FrameLayout_TEXT_DIRECTION_INHERIT 0L
#undef android_widget_FrameLayout_TEXT_DIRECTION_LOCALE
#define android_widget_FrameLayout_TEXT_DIRECTION_LOCALE 5L
#undef android_widget_FrameLayout_TEXT_DIRECTION_LTR
#define android_widget_FrameLayout_TEXT_DIRECTION_LTR 3L
#undef android_widget_FrameLayout_TEXT_DIRECTION_RTL
#define android_widget_FrameLayout_TEXT_DIRECTION_RTL 4L
/*
* Class: android_widget_FrameLayout
* Method: native_constructor
* Signature: (Landroid/content/Context;Landroid/util/AttributeSet;)J
*/
JNIEXPORT jlong JNICALL Java_android_widget_FrameLayout_native_1constructor
(JNIEnv *, jobject, jobject, jobject);
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,84 +0,0 @@
#include <gtk/gtk.h>
#include "../defines.h"
#include "../util.h"
#include "WrapperWidget.h"
#include "../generated_headers/android_widget_FrameLayout.h"
#include "../generated_headers/android_view_ViewGroup.h"
G_DECLARE_FINAL_TYPE (FrameLayoutWidget, frame_layout_widget, FRAME_LAYOUT, WIDGET, GtkWidget)
struct _FrameLayoutWidget
{
GtkWidget parent_instance;
};
struct _FrameLayoutWidgetClass
{
GtkWidgetClass parent_class;
};
G_DEFINE_TYPE(FrameLayoutWidget, frame_layout_widget, GTK_TYPE_WIDGET)
static void frame_layout_widget_init (FrameLayoutWidget *frame_layout)
{
}
static void frame_layout_widget_dispose(GObject *frame_layout)
{
GtkWidget *child;
while((child = gtk_widget_get_first_child(GTK_WIDGET(frame_layout))) != NULL) {
gtk_widget_unparent(child);
}
G_OBJECT_CLASS (frame_layout_widget_parent_class)->dispose (frame_layout);
}
static void frame_layout_widget_class_init(FrameLayoutWidgetClass *class)
{
GObjectClass *object_class = G_OBJECT_CLASS (class);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (class);
object_class->dispose = frame_layout_widget_dispose;
gtk_widget_class_set_layout_manager_type(widget_class, GTK_TYPE_BIN_LAYOUT);
}
GtkWidget * frame_layout_widget_new (void)
{
return g_object_new (frame_layout_widget_get_type(), NULL);
}
void frame_layout_widget_insert_child(FrameLayoutWidget *parent, GtkWidget *child)
{
printf("::::::::::: FrameLayoutWidget: inserting something at the end of the widget list\n");
gtk_widget_insert_before(child, GTK_WIDGET(parent), NULL);
}
void frame_layout_widget_insert_child_at_index(FrameLayoutWidget *parent, GtkWidget *child, int index)
{
printf("::::::::::: FrameLayoutWidget: inserting something at index %d\n", index);
GtkWidget *iter = gtk_widget_get_first_child(GTK_WIDGET(parent));
for(int i = 0; i < index; i++) {
iter = gtk_widget_get_next_sibling(iter);
if(iter == NULL)
break;
}
gtk_widget_insert_before(child, GTK_WIDGET(parent), iter);
}
// ---
JNIEXPORT jlong JNICALL Java_android_widget_FrameLayout_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs)
{
GtkWidget *wrapper = g_object_ref(wrapper_widget_new());
GtkWidget *frame_layout = frame_layout_widget_new();
wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), frame_layout);
wrapper_widget_set_jobject(WRAPPER_WIDGET(wrapper), env, this);
gtk_widget_set_name(GTK_WIDGET(frame_layout), "FrameLayout");
return _INTPTR(frame_layout);
}