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
api-impl: implement accelerometer support, no backend yet
currently x,y,z values are hardcoded and can only be changed with gdb
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
/* DO NOT EDIT THIS FILE - it is machine generated */
|
||||
#include <jni.h>
|
||||
/* Header for class android_hardware_SensorManager */
|
||||
|
||||
#ifndef _Included_android_hardware_SensorManager
|
||||
#define _Included_android_hardware_SensorManager
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
/*
|
||||
* Class: android_hardware_SensorManager
|
||||
* Method: register_accelerometer_listener_native
|
||||
* Signature: (Landroid/hardware/SensorEventListener;Landroid/hardware/Sensor;)V
|
||||
*/
|
||||
JNIEXPORT void JNICALL Java_android_hardware_SensorManager_register_1accelerometer_1listener_1native
|
||||
(JNIEnv *, jobject, jobject, jobject);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
40
src/api-impl-jni/sensors/android_hardware_SensorManager.c
Normal file
40
src/api-impl-jni/sensors/android_hardware_SensorManager.c
Normal file
@@ -0,0 +1,40 @@
|
||||
#include <libportal/portal.h>
|
||||
|
||||
#include "../defines.h"
|
||||
#include "../util.h"
|
||||
#include "../generated_headers/android_hardware_SensorManager.h"
|
||||
|
||||
/* FIXME */
|
||||
float x = 0;
|
||||
float y = 2;
|
||||
float z = 0;
|
||||
|
||||
struct accel_callback_data { JavaVM *jvm; jobject listener; jclass listener_class; jobject sensor; };
|
||||
gboolean on_accel_data(struct accel_callback_data *d)
|
||||
{
|
||||
JNIEnv *env;
|
||||
(*d->jvm)->GetEnv(d->jvm, (void**)&env, JNI_VERSION_1_6);
|
||||
|
||||
jfloatArray values = (*env)->NewFloatArray(env, 3);
|
||||
(*env)->SetFloatArrayRegion(env, values, 0, 3, (jfloat[]){x, y, z});
|
||||
|
||||
jobject sensor_event = (*env)->NewObject(env, handle_cache.sensor_event.class, handle_cache.sensor_event.constructor, values, d->sensor);
|
||||
|
||||
(*env)->CallVoidMethod(env, d->listener, _METHOD(d->listener_class, "onSensorChanged", "(Landroid/hardware/SensorEvent;)V"), sensor_event);
|
||||
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_android_hardware_SensorManager_register_1accelerometer_1listener_1native(JNIEnv *env , jobject this, jobject listener, jobject sensor)
|
||||
{
|
||||
JavaVM *jvm;
|
||||
(*env)->GetJavaVM(env, &jvm);
|
||||
|
||||
struct accel_callback_data *callback_data = malloc(sizeof(struct accel_callback_data));
|
||||
callback_data->jvm = jvm;
|
||||
callback_data->listener = _REF(listener);
|
||||
callback_data->listener_class = _REF(_CLASS(callback_data->listener));
|
||||
callback_data->sensor = _REF(sensor);
|
||||
|
||||
g_timeout_add(10, G_SOURCE_FUNC(on_accel_data), callback_data);
|
||||
}
|
||||
@@ -85,6 +85,9 @@ void set_up_handle_cache(JNIEnv *env)
|
||||
handle_cache.motion_event.class = _REF((*env)->FindClass(env, "android/view/MotionEvent"));
|
||||
handle_cache.motion_event.constructor = _METHOD(handle_cache.motion_event.class, "<init>", "(IIFFJFF)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.canvas.class = _REF((*env)->FindClass(env, "android/graphics/Canvas"));
|
||||
handle_cache.canvas.constructor = _METHOD(handle_cache.canvas.class, "<init>", "(JJ)V");
|
||||
|
||||
|
||||
@@ -37,6 +37,10 @@ struct handle_cache {
|
||||
jclass class;
|
||||
jmethodID constructor;
|
||||
} motion_event;
|
||||
struct {
|
||||
jclass class;
|
||||
jmethodID constructor;
|
||||
} sensor_event;
|
||||
struct {
|
||||
jclass class;
|
||||
jmethodID constructor;
|
||||
|
||||
Reference in New Issue
Block a user