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
split handle_cache out of util.c
This commit is contained in:
@@ -141,6 +141,7 @@ libtranslationlayer_so = shared_library('translation_layer_main', [
|
|||||||
'src/api-impl-jni/sensors/android_hardware_SensorManager.c',
|
'src/api-impl-jni/sensors/android_hardware_SensorManager.c',
|
||||||
'src/api-impl-jni/text/android_text_Layout.c',
|
'src/api-impl-jni/text/android_text_Layout.c',
|
||||||
'src/api-impl-jni/util.c',
|
'src/api-impl-jni/util.c',
|
||||||
|
'src/api-impl-jni/handle_cache.c',
|
||||||
'src/api-impl-jni/views/AndroidLayout.c',
|
'src/api-impl-jni/views/AndroidLayout.c',
|
||||||
'src/api-impl-jni/views/android_view_View.c',
|
'src/api-impl-jni/views/android_view_View.c',
|
||||||
'src/api-impl-jni/views/android_view_ViewGroup.c',
|
'src/api-impl-jni/views/android_view_ViewGroup.c',
|
||||||
|
|||||||
137
src/api-impl-jni/handle_cache.c
Normal file
137
src/api-impl-jni/handle_cache.c
Normal file
@@ -0,0 +1,137 @@
|
|||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
struct handle_cache handle_cache = {0};
|
||||||
|
|
||||||
|
void set_up_handle_cache(JNIEnv *env)
|
||||||
|
{
|
||||||
|
handle_cache.activity.class = _REF((*env)->FindClass(env, "android/app/Activity"));
|
||||||
|
if((*env)->ExceptionCheck(env))
|
||||||
|
(*env)->ExceptionDescribe(env);
|
||||||
|
handle_cache.activity.onCreate = _METHOD(handle_cache.activity.class, "onCreate", "(Landroid/os/Bundle;)V");
|
||||||
|
handle_cache.activity.onPostCreate = _METHOD(handle_cache.activity.class, "onPostCreate", "(Landroid/os/Bundle;)V");
|
||||||
|
handle_cache.activity.onStart = _METHOD(handle_cache.activity.class, "onStart", "()V");
|
||||||
|
handle_cache.activity.onWindowFocusChanged = _METHOD(handle_cache.activity.class, "onWindowFocusChanged", "(Z)V");
|
||||||
|
handle_cache.activity.onResume = _METHOD(handle_cache.activity.class, "onResume", "()V");
|
||||||
|
handle_cache.activity.onPostResume = _METHOD(handle_cache.activity.class, "onPostResume", "()V");
|
||||||
|
handle_cache.activity.onDestroy = _METHOD(handle_cache.activity.class, "onDestroy", "()V");
|
||||||
|
handle_cache.activity.onStop = _METHOD(handle_cache.activity.class, "onStop", "()V");
|
||||||
|
handle_cache.activity.onPause = _METHOD(handle_cache.activity.class, "onPause", "()V");
|
||||||
|
handle_cache.activity.onBackPressed = _METHOD(handle_cache.activity.class, "onBackPressed", "()V");
|
||||||
|
|
||||||
|
handle_cache.attribute_set.class = _REF((*env)->FindClass(env, "android/util/AttributeSet"));
|
||||||
|
if((*env)->ExceptionCheck(env))
|
||||||
|
(*env)->ExceptionDescribe(env);
|
||||||
|
handle_cache.attribute_set.getAttributeValue_string = _METHOD(handle_cache.attribute_set.class, "getAttributeValue", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
|
||||||
|
handle_cache.attribute_set.getAttributeValue_int = _METHOD(handle_cache.attribute_set.class, "getAttributeIntValue", "(Ljava/lang/String;Ljava/lang/String;I)I");
|
||||||
|
|
||||||
|
handle_cache.array_list.class = _REF((*env)->FindClass(env, "java/util/ArrayList"));
|
||||||
|
handle_cache.array_list.add = _METHOD(handle_cache.array_list.class, "add", "(Ljava/lang/Object;)Z");
|
||||||
|
handle_cache.array_list.remove = _METHOD(handle_cache.array_list.class, "remove", "(Ljava/lang/Object;)Z");
|
||||||
|
handle_cache.array_list.get = _METHOD(handle_cache.array_list.class, "get", "(I)Ljava/lang/Object;");
|
||||||
|
handle_cache.array_list.size = _METHOD(handle_cache.array_list.class, "size", "()I");
|
||||||
|
handle_cache.array_list.clear = _METHOD(handle_cache.array_list.class, "clear", "()V");
|
||||||
|
|
||||||
|
handle_cache.paint.class = _REF((*env)->FindClass(env, "android/graphics/Paint"));
|
||||||
|
handle_cache.paint.getColor = _METHOD(handle_cache.paint.class, "getColor", "()I");
|
||||||
|
|
||||||
|
handle_cache.motion_event.class = _REF((*env)->FindClass(env, "android/view/MotionEvent"));
|
||||||
|
handle_cache.motion_event.constructor = _METHOD(handle_cache.motion_event.class, "<init>", "(IIJ[I[F)V");
|
||||||
|
handle_cache.motion_event.constructor_single = _METHOD(handle_cache.motion_event.class, "<init>", "(IIJFFFF)V");
|
||||||
|
|
||||||
|
handle_cache.sensor_event.class = _REF((*env)->FindClass(env, "android/hardware/SensorEvent"));
|
||||||
|
handle_cache.sensor_event.constructor = _METHOD(handle_cache.sensor_event.class, "<init>", "([FLandroid/hardware/Sensor;)V");
|
||||||
|
|
||||||
|
handle_cache.audio_track_periodic_listener.class = _REF((*env)->FindClass(env, "android/media/AudioTrack$OnPlaybackPositionUpdateListener"));
|
||||||
|
handle_cache.audio_track_periodic_listener.onPeriodicNotification = _METHOD(handle_cache.audio_track_periodic_listener.class, "onPeriodicNotification", "(Landroid/media/AudioTrack;)V");
|
||||||
|
|
||||||
|
handle_cache.input_queue_callback.class = _REF((*env)->FindClass(env, "android/view/InputQueue$Callback"));
|
||||||
|
handle_cache.input_queue_callback.onInputQueueCreated = _METHOD(handle_cache.input_queue_callback.class, "onInputQueueCreated", "(Landroid/view/InputQueue;)V");
|
||||||
|
|
||||||
|
handle_cache.surface_view.class = _REF((*env)->FindClass(env, "android/view/SurfaceView"));
|
||||||
|
handle_cache.surface_view.surfaceCreated = _METHOD(handle_cache.surface_view.class, "surfaceCreated", "()V");
|
||||||
|
handle_cache.surface_view.surfaceChanged = _METHOD(handle_cache.surface_view.class, "surfaceChanged", "(III)V");
|
||||||
|
|
||||||
|
handle_cache.view.class = _REF((*env)->FindClass(env, "android/view/View"));
|
||||||
|
if((*env)->ExceptionCheck(env))
|
||||||
|
(*env)->ExceptionDescribe(env);
|
||||||
|
handle_cache.view.setLayoutParams = _METHOD(handle_cache.view.class, "setLayoutParams", "(Landroid/view/ViewGroup$LayoutParams;)V");
|
||||||
|
if((*env)->ExceptionCheck(env))
|
||||||
|
(*env)->ExceptionDescribe(env);
|
||||||
|
handle_cache.view.onDraw = _METHOD(handle_cache.view.class, "onDraw", "(Landroid/graphics/Canvas;)V");
|
||||||
|
handle_cache.view.dispatchDraw = _METHOD(handle_cache.view.class, "dispatchDraw", "(Landroid/graphics/Canvas;)V");
|
||||||
|
handle_cache.view.draw = _METHOD(handle_cache.view.class, "draw", "(Landroid/graphics/Canvas;)V");
|
||||||
|
handle_cache.view.onMeasure = _METHOD(handle_cache.view.class, "onMeasure", "(II)V");
|
||||||
|
handle_cache.view.onLayout = _METHOD(handle_cache.view.class, "onLayout", "(ZIIII)V");
|
||||||
|
handle_cache.view.getMeasuredWidth = _METHOD(handle_cache.view.class, "getMeasuredWidth", "()I");
|
||||||
|
handle_cache.view.getMeasuredHeight = _METHOD(handle_cache.view.class, "getMeasuredHeight", "()I");
|
||||||
|
handle_cache.view.getSuggestedMinimumWidth = _METHOD(handle_cache.view.class, "getSuggestedMinimumWidth", "()I");
|
||||||
|
handle_cache.view.getSuggestedMinimumHeight = _METHOD(handle_cache.view.class, "getSuggestedMinimumHeight", "()I");
|
||||||
|
handle_cache.view.setMeasuredDimension = _METHOD(handle_cache.view.class, "setMeasuredDimension", "(II)V");
|
||||||
|
handle_cache.view.onGenericMotionEvent = _METHOD(handle_cache.view.class, "onGenericMotionEvent", "(Landroid/view/MotionEvent;)Z");
|
||||||
|
handle_cache.view.computeScroll = _METHOD(handle_cache.view.class, "computeScroll", "()V");
|
||||||
|
handle_cache.view.getScrollX = _METHOD(handle_cache.view.class, "getScrollX", "()I");
|
||||||
|
handle_cache.view.getScrollY = _METHOD(handle_cache.view.class, "getScrollY", "()I");
|
||||||
|
handle_cache.view.performClick = _METHOD(handle_cache.view.class, "performClick", "()Z");
|
||||||
|
handle_cache.view.onTouchEvent = _METHOD(handle_cache.view.class, "onTouchEvent", "(Landroid/view/MotionEvent;)Z");
|
||||||
|
handle_cache.view.onTouchEventInternal = _METHOD(handle_cache.view.class, "onTouchEventInternal", "(Landroid/view/MotionEvent;Z)Z");
|
||||||
|
handle_cache.view.dispatchTouchEvent = _METHOD(handle_cache.view.class, "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z");
|
||||||
|
handle_cache.view.onInterceptTouchEvent = _METHOD(handle_cache.view.class, "onInterceptTouchEvent", "(Landroid/view/MotionEvent;)Z");
|
||||||
|
handle_cache.view.layoutInternal = _METHOD(handle_cache.view.class, "layoutInternal", "(II)V");
|
||||||
|
handle_cache.view.measure = _METHOD(handle_cache.view.class, "measure", "(II)V");
|
||||||
|
handle_cache.view.performLongClick = _METHOD(handle_cache.view.class, "performLongClick", "(FF)Z");
|
||||||
|
handle_cache.view.getId = _METHOD(handle_cache.view.class, "getId", "()I");
|
||||||
|
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.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.view_group.class = _REF((*env)->FindClass(env, "android/view/ViewGroup"));
|
||||||
|
handle_cache.view_group.dispatchTouchEvent = _METHOD(handle_cache.view_group.class, "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z");
|
||||||
|
|
||||||
|
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.context.class = _REF((*env)->FindClass(env, "android/content/Context"));
|
||||||
|
if((*env)->ExceptionCheck(env))
|
||||||
|
(*env)->ExceptionDescribe(env);
|
||||||
|
handle_cache.context.get_package_name = _METHOD(handle_cache.context.class, "getPackageName", "()Ljava/lang/String;");
|
||||||
|
if((*env)->ExceptionCheck(env))
|
||||||
|
(*env)->ExceptionDescribe(env);
|
||||||
|
handle_cache.context.sendBroadcast = _METHOD(handle_cache.context.class, "sendBroadcast", "(Landroid/content/Intent;)V");
|
||||||
|
handle_cache.context.startActivity = _METHOD(handle_cache.context.class, "startActivity", "(Landroid/content/Intent;)V");
|
||||||
|
handle_cache.context.startService = _METHOD(handle_cache.context.class, "startService", "(Landroid/content/Intent;)Landroid/content/ComponentName;");
|
||||||
|
|
||||||
|
handle_cache.application.class = _REF((*env)->FindClass(env, "android/app/Application"));
|
||||||
|
handle_cache.application.get_app_icon_path = _METHOD(handle_cache.application.class, "get_app_icon_path", "()Ljava/lang/String;");
|
||||||
|
handle_cache.application.get_app_icon_paintable = _METHOD(handle_cache.application.class, "get_app_icon_paintable", "()J");
|
||||||
|
|
||||||
|
handle_cache.looper.class = _REF((*env)->FindClass(env, "android/os/Looper"));
|
||||||
|
handle_cache.looper.loop = _STATIC_METHOD(handle_cache.looper.class, "loop", "()V");
|
||||||
|
handle_cache.looper.prepareMainLooper = _STATIC_METHOD(handle_cache.looper.class, "prepareMainLooper", "()V");
|
||||||
|
|
||||||
|
handle_cache.key_event.class = _REF((*env)->FindClass(env, "android/view/KeyEvent"));
|
||||||
|
handle_cache.key_event.constructor = _METHOD(handle_cache.key_event.class, "<init>", "(II)V");
|
||||||
|
|
||||||
|
handle_cache.drawable.class = _REF((*env)->FindClass(env, "android/graphics/drawable/Drawable"));
|
||||||
|
handle_cache.drawable.draw = _METHOD(handle_cache.drawable.class, "draw", "(Landroid/graphics/Canvas;)V");
|
||||||
|
handle_cache.drawable.setBounds = _METHOD(handle_cache.drawable.class, "setBounds", "(IIII)V");
|
||||||
|
|
||||||
|
handle_cache.intent.class = _REF((*env)->FindClass(env, "android/content/Intent"));
|
||||||
|
handle_cache.intent.constructor = _METHOD(handle_cache.intent.class, "<init>", "()V");
|
||||||
|
handle_cache.intent.putExtraCharSequence = _METHOD(handle_cache.intent.class, "putExtra", "(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;");
|
||||||
|
handle_cache.intent.putExtraByteArray = _METHOD(handle_cache.intent.class, "putExtra", "(Ljava/lang/String;[B)Landroid/content/Intent;");
|
||||||
|
handle_cache.intent.getDataString = _METHOD(handle_cache.intent.class, "getDataString", "()Ljava/lang/String;");
|
||||||
|
handle_cache.intent.setClassName = _METHOD(handle_cache.intent.class, "setClassName", "(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;");
|
||||||
|
|
||||||
|
handle_cache.instrumentation.class = _REF((*env)->FindClass(env, "android/app/Instrumentation"));
|
||||||
|
|
||||||
|
handle_cache.webview.class = _REF((*env)->FindClass(env, "android/webkit/WebView"));
|
||||||
|
handle_cache.webview.internalGetAssetManager = _METHOD(handle_cache.webview.class, "internalGetAssetManager", "()Landroid/content/res/AssetManager;");
|
||||||
|
handle_cache.webview.internalLoadChanged = _METHOD(handle_cache.webview.class, "internalLoadChanged", "(ILjava/lang/String;)V");
|
||||||
|
|
||||||
|
handle_cache.canvas.class = _REF((*env)->FindClass(env, "android/graphics/Canvas"));
|
||||||
|
handle_cache.canvas.drawText = _METHOD(handle_cache.canvas.class, "drawText", "(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V");
|
||||||
|
|
||||||
|
handle_cache.uri.class = _REF((*env)->FindClass(env, "android/net/Uri"));
|
||||||
|
handle_cache.uri.parse = _STATIC_METHOD(handle_cache.uri.class, "parse", "(Ljava/lang/String;)Landroid/net/Uri;");
|
||||||
|
}
|
||||||
151
src/api-impl-jni/handle_cache.h
Normal file
151
src/api-impl-jni/handle_cache.h
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
#include <jni.h>
|
||||||
|
|
||||||
|
struct handle_cache {
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID onCreate;
|
||||||
|
jmethodID onPostCreate;
|
||||||
|
jmethodID onStart;
|
||||||
|
jmethodID onResume;
|
||||||
|
jmethodID onPostResume;
|
||||||
|
jmethodID onWindowFocusChanged;
|
||||||
|
jmethodID onDestroy;
|
||||||
|
jmethodID onStop;
|
||||||
|
jmethodID onPause;
|
||||||
|
jmethodID onBackPressed;
|
||||||
|
} activity;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID getAttributeValue_string;
|
||||||
|
jmethodID getAttributeValue_int;
|
||||||
|
} attribute_set;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID add;
|
||||||
|
jmethodID remove;
|
||||||
|
jmethodID get;
|
||||||
|
jmethodID size;
|
||||||
|
jmethodID clear;
|
||||||
|
} array_list;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID getColor;
|
||||||
|
} paint;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID constructor;
|
||||||
|
jmethodID constructor_single;
|
||||||
|
} motion_event;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID constructor;
|
||||||
|
} sensor_event;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID onPeriodicNotification;
|
||||||
|
} audio_track_periodic_listener;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID onInputQueueCreated;
|
||||||
|
} input_queue_callback;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID surfaceCreated;
|
||||||
|
jmethodID surfaceChanged;
|
||||||
|
} surface_view;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID setLayoutParams;
|
||||||
|
jmethodID onDraw;
|
||||||
|
jmethodID dispatchDraw;
|
||||||
|
jmethodID draw;
|
||||||
|
jmethodID onMeasure;
|
||||||
|
jmethodID onLayout;
|
||||||
|
jmethodID getMeasuredWidth;
|
||||||
|
jmethodID getMeasuredHeight;
|
||||||
|
jmethodID getSuggestedMinimumWidth;
|
||||||
|
jmethodID getSuggestedMinimumHeight;
|
||||||
|
jmethodID setMeasuredDimension;
|
||||||
|
jmethodID onGenericMotionEvent;
|
||||||
|
jmethodID computeScroll;
|
||||||
|
jmethodID getScrollX;
|
||||||
|
jmethodID getScrollY;
|
||||||
|
jmethodID performClick;
|
||||||
|
jmethodID onTouchEvent;
|
||||||
|
jmethodID onTouchEventInternal;
|
||||||
|
jmethodID dispatchTouchEvent;
|
||||||
|
jmethodID onInterceptTouchEvent;
|
||||||
|
jmethodID layoutInternal;
|
||||||
|
jmethodID measure;
|
||||||
|
jmethodID performLongClick;
|
||||||
|
jmethodID getId;
|
||||||
|
jmethodID getIdName;
|
||||||
|
jmethodID getAllSuperClasses;
|
||||||
|
jmethodID dispatchKeyEvent;
|
||||||
|
jmethodID onKeyDown;
|
||||||
|
} view;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID dispatchTouchEvent;
|
||||||
|
} view_group;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID extractFromAPK;
|
||||||
|
} asset_manager;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID get_package_name;
|
||||||
|
jmethodID sendBroadcast;
|
||||||
|
jmethodID startActivity;
|
||||||
|
jmethodID startService;
|
||||||
|
} context;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID get_app_icon_path;
|
||||||
|
jmethodID get_app_icon_paintable;
|
||||||
|
} application;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID loop;
|
||||||
|
jmethodID prepareMainLooper;
|
||||||
|
} looper;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID constructor;
|
||||||
|
} key_event;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID draw;
|
||||||
|
jmethodID setBounds;
|
||||||
|
} drawable;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID constructor;
|
||||||
|
jmethodID putExtraCharSequence;
|
||||||
|
jmethodID putExtraByteArray;
|
||||||
|
jmethodID getDataString;
|
||||||
|
jmethodID setClassName;
|
||||||
|
} intent;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID internalGetAssetManager;
|
||||||
|
jmethodID internalLoadChanged;
|
||||||
|
} webview;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID onCreate;
|
||||||
|
jmethodID start;
|
||||||
|
} instrumentation;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID drawText;
|
||||||
|
} canvas;
|
||||||
|
struct {
|
||||||
|
jclass class;
|
||||||
|
jmethodID parse;
|
||||||
|
} uri;
|
||||||
|
};
|
||||||
|
|
||||||
|
extern struct handle_cache handle_cache;
|
||||||
|
|
||||||
|
void set_up_handle_cache(JNIEnv *env);
|
||||||
@@ -7,8 +7,6 @@
|
|||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "src/api-impl-jni/defines.h"
|
#include "src/api-impl-jni/defines.h"
|
||||||
|
|
||||||
struct handle_cache handle_cache = {0};
|
|
||||||
|
|
||||||
const char * attribute_set_get_string(JNIEnv *env, jobject attrs, char *attribute, char *schema)
|
const char * attribute_set_get_string(JNIEnv *env, jobject attrs, char *attribute, char *schema)
|
||||||
{
|
{
|
||||||
if (!attrs)
|
if (!attrs)
|
||||||
@@ -61,142 +59,6 @@ void _gdb_force_java_stack_trace(void)
|
|||||||
(*env)->ExceptionClear(env);
|
(*env)->ExceptionClear(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_up_handle_cache(JNIEnv *env)
|
|
||||||
{
|
|
||||||
(*env)->GetJavaVM(env, &jvm);
|
|
||||||
|
|
||||||
handle_cache.activity.class = _REF((*env)->FindClass(env, "android/app/Activity"));
|
|
||||||
if((*env)->ExceptionCheck(env))
|
|
||||||
(*env)->ExceptionDescribe(env);
|
|
||||||
handle_cache.activity.onCreate = _METHOD(handle_cache.activity.class, "onCreate", "(Landroid/os/Bundle;)V");
|
|
||||||
handle_cache.activity.onPostCreate = _METHOD(handle_cache.activity.class, "onPostCreate", "(Landroid/os/Bundle;)V");
|
|
||||||
handle_cache.activity.onStart = _METHOD(handle_cache.activity.class, "onStart", "()V");
|
|
||||||
handle_cache.activity.onWindowFocusChanged = _METHOD(handle_cache.activity.class, "onWindowFocusChanged", "(Z)V");
|
|
||||||
handle_cache.activity.onResume = _METHOD(handle_cache.activity.class, "onResume", "()V");
|
|
||||||
handle_cache.activity.onPostResume = _METHOD(handle_cache.activity.class, "onPostResume", "()V");
|
|
||||||
handle_cache.activity.onDestroy = _METHOD(handle_cache.activity.class, "onDestroy", "()V");
|
|
||||||
handle_cache.activity.onStop = _METHOD(handle_cache.activity.class, "onStop", "()V");
|
|
||||||
handle_cache.activity.onPause = _METHOD(handle_cache.activity.class, "onPause", "()V");
|
|
||||||
handle_cache.activity.onBackPressed = _METHOD(handle_cache.activity.class, "onBackPressed", "()V");
|
|
||||||
|
|
||||||
handle_cache.attribute_set.class = _REF((*env)->FindClass(env, "android/util/AttributeSet"));
|
|
||||||
if((*env)->ExceptionCheck(env))
|
|
||||||
(*env)->ExceptionDescribe(env);
|
|
||||||
handle_cache.attribute_set.getAttributeValue_string = _METHOD(handle_cache.attribute_set.class, "getAttributeValue", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
|
|
||||||
handle_cache.attribute_set.getAttributeValue_int = _METHOD(handle_cache.attribute_set.class, "getAttributeIntValue", "(Ljava/lang/String;Ljava/lang/String;I)I");
|
|
||||||
|
|
||||||
handle_cache.array_list.class = _REF((*env)->FindClass(env, "java/util/ArrayList"));
|
|
||||||
handle_cache.array_list.add = _METHOD(handle_cache.array_list.class, "add", "(Ljava/lang/Object;)Z");
|
|
||||||
handle_cache.array_list.remove = _METHOD(handle_cache.array_list.class, "remove", "(Ljava/lang/Object;)Z");
|
|
||||||
handle_cache.array_list.get = _METHOD(handle_cache.array_list.class, "get", "(I)Ljava/lang/Object;");
|
|
||||||
handle_cache.array_list.size = _METHOD(handle_cache.array_list.class, "size", "()I");
|
|
||||||
handle_cache.array_list.clear = _METHOD(handle_cache.array_list.class, "clear", "()V");
|
|
||||||
|
|
||||||
handle_cache.paint.class = _REF((*env)->FindClass(env, "android/graphics/Paint"));
|
|
||||||
handle_cache.paint.getColor = _METHOD(handle_cache.paint.class, "getColor", "()I");
|
|
||||||
|
|
||||||
handle_cache.motion_event.class = _REF((*env)->FindClass(env, "android/view/MotionEvent"));
|
|
||||||
handle_cache.motion_event.constructor = _METHOD(handle_cache.motion_event.class, "<init>", "(IIJ[I[F)V");
|
|
||||||
handle_cache.motion_event.constructor_single = _METHOD(handle_cache.motion_event.class, "<init>", "(IIJFFFF)V");
|
|
||||||
|
|
||||||
handle_cache.sensor_event.class = _REF((*env)->FindClass(env, "android/hardware/SensorEvent"));
|
|
||||||
handle_cache.sensor_event.constructor = _METHOD(handle_cache.sensor_event.class, "<init>", "([FLandroid/hardware/Sensor;)V");
|
|
||||||
|
|
||||||
handle_cache.audio_track_periodic_listener.class = _REF((*env)->FindClass(env, "android/media/AudioTrack$OnPlaybackPositionUpdateListener"));
|
|
||||||
handle_cache.audio_track_periodic_listener.onPeriodicNotification = _METHOD(handle_cache.audio_track_periodic_listener.class, "onPeriodicNotification", "(Landroid/media/AudioTrack;)V");
|
|
||||||
|
|
||||||
handle_cache.input_queue_callback.class = _REF((*env)->FindClass(env, "android/view/InputQueue$Callback"));
|
|
||||||
handle_cache.input_queue_callback.onInputQueueCreated = _METHOD(handle_cache.input_queue_callback.class, "onInputQueueCreated", "(Landroid/view/InputQueue;)V");
|
|
||||||
|
|
||||||
handle_cache.surface_view.class = _REF((*env)->FindClass(env, "android/view/SurfaceView"));
|
|
||||||
handle_cache.surface_view.surfaceCreated = _METHOD(handle_cache.surface_view.class, "surfaceCreated", "()V");
|
|
||||||
handle_cache.surface_view.surfaceChanged = _METHOD(handle_cache.surface_view.class, "surfaceChanged", "(III)V");
|
|
||||||
|
|
||||||
handle_cache.view.class = _REF((*env)->FindClass(env, "android/view/View"));
|
|
||||||
if((*env)->ExceptionCheck(env))
|
|
||||||
(*env)->ExceptionDescribe(env);
|
|
||||||
handle_cache.view.setLayoutParams = _METHOD(handle_cache.view.class, "setLayoutParams", "(Landroid/view/ViewGroup$LayoutParams;)V");
|
|
||||||
if((*env)->ExceptionCheck(env))
|
|
||||||
(*env)->ExceptionDescribe(env);
|
|
||||||
handle_cache.view.onDraw = _METHOD(handle_cache.view.class, "onDraw", "(Landroid/graphics/Canvas;)V");
|
|
||||||
handle_cache.view.dispatchDraw = _METHOD(handle_cache.view.class, "dispatchDraw", "(Landroid/graphics/Canvas;)V");
|
|
||||||
handle_cache.view.draw = _METHOD(handle_cache.view.class, "draw", "(Landroid/graphics/Canvas;)V");
|
|
||||||
handle_cache.view.onMeasure = _METHOD(handle_cache.view.class, "onMeasure", "(II)V");
|
|
||||||
handle_cache.view.onLayout = _METHOD(handle_cache.view.class, "onLayout", "(ZIIII)V");
|
|
||||||
handle_cache.view.getMeasuredWidth = _METHOD(handle_cache.view.class, "getMeasuredWidth", "()I");
|
|
||||||
handle_cache.view.getMeasuredHeight = _METHOD(handle_cache.view.class, "getMeasuredHeight", "()I");
|
|
||||||
handle_cache.view.getSuggestedMinimumWidth = _METHOD(handle_cache.view.class, "getSuggestedMinimumWidth", "()I");
|
|
||||||
handle_cache.view.getSuggestedMinimumHeight = _METHOD(handle_cache.view.class, "getSuggestedMinimumHeight", "()I");
|
|
||||||
handle_cache.view.setMeasuredDimension = _METHOD(handle_cache.view.class, "setMeasuredDimension", "(II)V");
|
|
||||||
handle_cache.view.onGenericMotionEvent = _METHOD(handle_cache.view.class, "onGenericMotionEvent", "(Landroid/view/MotionEvent;)Z");
|
|
||||||
handle_cache.view.computeScroll = _METHOD(handle_cache.view.class, "computeScroll", "()V");
|
|
||||||
handle_cache.view.getScrollX = _METHOD(handle_cache.view.class, "getScrollX", "()I");
|
|
||||||
handle_cache.view.getScrollY = _METHOD(handle_cache.view.class, "getScrollY", "()I");
|
|
||||||
handle_cache.view.performClick = _METHOD(handle_cache.view.class, "performClick", "()Z");
|
|
||||||
handle_cache.view.onTouchEvent = _METHOD(handle_cache.view.class, "onTouchEvent", "(Landroid/view/MotionEvent;)Z");
|
|
||||||
handle_cache.view.onTouchEventInternal = _METHOD(handle_cache.view.class, "onTouchEventInternal", "(Landroid/view/MotionEvent;Z)Z");
|
|
||||||
handle_cache.view.dispatchTouchEvent = _METHOD(handle_cache.view.class, "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z");
|
|
||||||
handle_cache.view.onInterceptTouchEvent = _METHOD(handle_cache.view.class, "onInterceptTouchEvent", "(Landroid/view/MotionEvent;)Z");
|
|
||||||
handle_cache.view.layoutInternal = _METHOD(handle_cache.view.class, "layoutInternal", "(II)V");
|
|
||||||
handle_cache.view.measure = _METHOD(handle_cache.view.class, "measure", "(II)V");
|
|
||||||
handle_cache.view.performLongClick = _METHOD(handle_cache.view.class, "performLongClick", "(FF)Z");
|
|
||||||
handle_cache.view.getId = _METHOD(handle_cache.view.class, "getId", "()I");
|
|
||||||
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.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.view_group.class = _REF((*env)->FindClass(env, "android/view/ViewGroup"));
|
|
||||||
handle_cache.view_group.dispatchTouchEvent = _METHOD(handle_cache.view_group.class, "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z");
|
|
||||||
|
|
||||||
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.context.class = _REF((*env)->FindClass(env, "android/content/Context"));
|
|
||||||
if((*env)->ExceptionCheck(env))
|
|
||||||
(*env)->ExceptionDescribe(env);
|
|
||||||
handle_cache.context.get_package_name = _METHOD(handle_cache.context.class, "getPackageName", "()Ljava/lang/String;");
|
|
||||||
if((*env)->ExceptionCheck(env))
|
|
||||||
(*env)->ExceptionDescribe(env);
|
|
||||||
handle_cache.context.sendBroadcast = _METHOD(handle_cache.context.class, "sendBroadcast", "(Landroid/content/Intent;)V");
|
|
||||||
handle_cache.context.startActivity = _METHOD(handle_cache.context.class, "startActivity", "(Landroid/content/Intent;)V");
|
|
||||||
handle_cache.context.startService = _METHOD(handle_cache.context.class, "startService", "(Landroid/content/Intent;)Landroid/content/ComponentName;");
|
|
||||||
|
|
||||||
handle_cache.application.class = _REF((*env)->FindClass(env, "android/app/Application"));
|
|
||||||
handle_cache.application.get_app_icon_path = _METHOD(handle_cache.application.class, "get_app_icon_path", "()Ljava/lang/String;");
|
|
||||||
handle_cache.application.get_app_icon_paintable = _METHOD(handle_cache.application.class, "get_app_icon_paintable", "()J");
|
|
||||||
|
|
||||||
handle_cache.looper.class = _REF((*env)->FindClass(env, "android/os/Looper"));
|
|
||||||
handle_cache.looper.loop = _STATIC_METHOD(handle_cache.looper.class, "loop", "()V");
|
|
||||||
handle_cache.looper.prepareMainLooper = _STATIC_METHOD(handle_cache.looper.class, "prepareMainLooper", "()V");
|
|
||||||
|
|
||||||
handle_cache.key_event.class = _REF((*env)->FindClass(env, "android/view/KeyEvent"));
|
|
||||||
handle_cache.key_event.constructor = _METHOD(handle_cache.key_event.class, "<init>", "(II)V");
|
|
||||||
|
|
||||||
handle_cache.drawable.class = _REF((*env)->FindClass(env, "android/graphics/drawable/Drawable"));
|
|
||||||
handle_cache.drawable.draw = _METHOD(handle_cache.drawable.class, "draw", "(Landroid/graphics/Canvas;)V");
|
|
||||||
handle_cache.drawable.setBounds = _METHOD(handle_cache.drawable.class, "setBounds", "(IIII)V");
|
|
||||||
|
|
||||||
handle_cache.intent.class = _REF((*env)->FindClass(env, "android/content/Intent"));
|
|
||||||
handle_cache.intent.constructor = _METHOD(handle_cache.intent.class, "<init>", "()V");
|
|
||||||
handle_cache.intent.putExtraCharSequence = _METHOD(handle_cache.intent.class, "putExtra", "(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;");
|
|
||||||
handle_cache.intent.putExtraByteArray = _METHOD(handle_cache.intent.class, "putExtra", "(Ljava/lang/String;[B)Landroid/content/Intent;");
|
|
||||||
handle_cache.intent.getDataString = _METHOD(handle_cache.intent.class, "getDataString", "()Ljava/lang/String;");
|
|
||||||
handle_cache.intent.setClassName = _METHOD(handle_cache.intent.class, "setClassName", "(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;");
|
|
||||||
|
|
||||||
handle_cache.instrumentation.class = _REF((*env)->FindClass(env, "android/app/Instrumentation"));
|
|
||||||
|
|
||||||
handle_cache.webview.class = _REF((*env)->FindClass(env, "android/webkit/WebView"));
|
|
||||||
handle_cache.webview.internalGetAssetManager = _METHOD(handle_cache.webview.class, "internalGetAssetManager", "()Landroid/content/res/AssetManager;");
|
|
||||||
handle_cache.webview.internalLoadChanged = _METHOD(handle_cache.webview.class, "internalLoadChanged", "(ILjava/lang/String;)V");
|
|
||||||
|
|
||||||
handle_cache.canvas.class = _REF((*env)->FindClass(env, "android/graphics/Canvas"));
|
|
||||||
handle_cache.canvas.drawText = _METHOD(handle_cache.canvas.class, "drawText", "(Ljava/lang/CharSequence;IIFFLandroid/graphics/Paint;)V");
|
|
||||||
|
|
||||||
handle_cache.uri.class = _REF((*env)->FindClass(env, "android/net/Uri"));
|
|
||||||
handle_cache.uri.parse = _STATIC_METHOD(handle_cache.uri.class, "parse", "(Ljava/lang/String;)Landroid/net/Uri;");
|
|
||||||
}
|
|
||||||
|
|
||||||
void extract_from_apk(const char *path, const char *target) {
|
void extract_from_apk(const char *path, const char *target) {
|
||||||
JNIEnv *env = get_jni_env();
|
JNIEnv *env = get_jni_env();
|
||||||
(*env)->CallStaticVoidMethod(env, handle_cache.asset_manager.class, handle_cache.asset_manager.extractFromAPK, _JSTRING(path), _JSTRING(target));
|
(*env)->CallStaticVoidMethod(env, handle_cache.asset_manager.class, handle_cache.asset_manager.extractFromAPK, _JSTRING(path), _JSTRING(target));
|
||||||
|
|||||||
@@ -6,160 +6,14 @@
|
|||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
|
#include "handle_cache.h"
|
||||||
|
|
||||||
struct handle_cache {
|
extern JavaVM *jvm;
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID onCreate;
|
|
||||||
jmethodID onPostCreate;
|
|
||||||
jmethodID onStart;
|
|
||||||
jmethodID onResume;
|
|
||||||
jmethodID onPostResume;
|
|
||||||
jmethodID onWindowFocusChanged;
|
|
||||||
jmethodID onDestroy;
|
|
||||||
jmethodID onStop;
|
|
||||||
jmethodID onPause;
|
|
||||||
jmethodID onBackPressed;
|
|
||||||
} activity;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID getAttributeValue_string;
|
|
||||||
jmethodID getAttributeValue_int;
|
|
||||||
} attribute_set;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID add;
|
|
||||||
jmethodID remove;
|
|
||||||
jmethodID get;
|
|
||||||
jmethodID size;
|
|
||||||
jmethodID clear;
|
|
||||||
} array_list;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID getColor;
|
|
||||||
} paint;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID constructor;
|
|
||||||
jmethodID constructor_single;
|
|
||||||
} motion_event;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID constructor;
|
|
||||||
} sensor_event;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID onPeriodicNotification;
|
|
||||||
} audio_track_periodic_listener;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID onInputQueueCreated;
|
|
||||||
} input_queue_callback;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID surfaceCreated;
|
|
||||||
jmethodID surfaceChanged;
|
|
||||||
} surface_view;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID setLayoutParams;
|
|
||||||
jmethodID onDraw;
|
|
||||||
jmethodID dispatchDraw;
|
|
||||||
jmethodID draw;
|
|
||||||
jmethodID onMeasure;
|
|
||||||
jmethodID onLayout;
|
|
||||||
jmethodID getMeasuredWidth;
|
|
||||||
jmethodID getMeasuredHeight;
|
|
||||||
jmethodID getSuggestedMinimumWidth;
|
|
||||||
jmethodID getSuggestedMinimumHeight;
|
|
||||||
jmethodID setMeasuredDimension;
|
|
||||||
jmethodID onGenericMotionEvent;
|
|
||||||
jmethodID computeScroll;
|
|
||||||
jmethodID getScrollX;
|
|
||||||
jmethodID getScrollY;
|
|
||||||
jmethodID performClick;
|
|
||||||
jmethodID onTouchEvent;
|
|
||||||
jmethodID onTouchEventInternal;
|
|
||||||
jmethodID dispatchTouchEvent;
|
|
||||||
jmethodID onInterceptTouchEvent;
|
|
||||||
jmethodID layoutInternal;
|
|
||||||
jmethodID measure;
|
|
||||||
jmethodID performLongClick;
|
|
||||||
jmethodID getId;
|
|
||||||
jmethodID getIdName;
|
|
||||||
jmethodID getAllSuperClasses;
|
|
||||||
jmethodID dispatchKeyEvent;
|
|
||||||
jmethodID onKeyDown;
|
|
||||||
} view;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID dispatchTouchEvent;
|
|
||||||
} view_group;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID extractFromAPK;
|
|
||||||
} asset_manager;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID get_package_name;
|
|
||||||
jmethodID sendBroadcast;
|
|
||||||
jmethodID startActivity;
|
|
||||||
jmethodID startService;
|
|
||||||
} context;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID get_app_icon_path;
|
|
||||||
jmethodID get_app_icon_paintable;
|
|
||||||
} application;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID loop;
|
|
||||||
jmethodID prepareMainLooper;
|
|
||||||
} looper;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID constructor;
|
|
||||||
} key_event;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID draw;
|
|
||||||
jmethodID setBounds;
|
|
||||||
} drawable;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID constructor;
|
|
||||||
jmethodID putExtraCharSequence;
|
|
||||||
jmethodID putExtraByteArray;
|
|
||||||
jmethodID getDataString;
|
|
||||||
jmethodID setClassName;
|
|
||||||
} intent;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID internalGetAssetManager;
|
|
||||||
jmethodID internalLoadChanged;
|
|
||||||
} webview;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID onCreate;
|
|
||||||
jmethodID start;
|
|
||||||
} instrumentation;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID drawText;
|
|
||||||
} canvas;
|
|
||||||
struct {
|
|
||||||
jclass class;
|
|
||||||
jmethodID parse;
|
|
||||||
} uri;
|
|
||||||
};
|
|
||||||
|
|
||||||
extern struct handle_cache handle_cache;
|
|
||||||
|
|
||||||
JNIEnv * get_jni_env(void);
|
JNIEnv * get_jni_env(void);
|
||||||
|
|
||||||
const char * attribute_set_get_string(JNIEnv *env, jobject attrs, char *attribute, char *schema);
|
const char * attribute_set_get_string(JNIEnv *env, jobject attrs, char *attribute, char *schema);
|
||||||
int attribute_set_get_int(JNIEnv *env, jobject attrs, char *attribute, char *schema, int default_value);
|
int attribute_set_get_int(JNIEnv *env, jobject attrs, char *attribute, char *schema, int default_value);
|
||||||
void set_up_handle_cache(JNIEnv *env);
|
|
||||||
void extract_from_apk(const char *path, const char *target);
|
void extract_from_apk(const char *path, const char *target);
|
||||||
char *get_app_data_dir();
|
char *get_app_data_dir();
|
||||||
|
|
||||||
|
|||||||
@@ -456,6 +456,7 @@ static void open(GtkApplication *app, GFile **files, gint nfiles, const gchar *h
|
|||||||
// some apps need the apk path since they directly read their apk
|
// some apps need the apk path since they directly read their apk
|
||||||
apk_path = strdup(apk_classpath);
|
apk_path = strdup(apk_classpath);
|
||||||
|
|
||||||
|
(*env)->GetJavaVM(env, &jvm);
|
||||||
set_up_handle_cache(env);
|
set_up_handle_cache(env);
|
||||||
|
|
||||||
/* -- misc -- */
|
/* -- misc -- */
|
||||||
|
|||||||
Reference in New Issue
Block a user