51 lines
1.7 KiB
Rust
51 lines
1.7 KiB
Rust
// Copyright 2025 The AccessKit Authors. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0 (found in
|
|
// the LICENSE-APACHE file).
|
|
|
|
use accesskit::{ActionHandler, ActivationHandler, DeactivationHandler, TreeUpdate};
|
|
use accesskit_android::{
|
|
jni::{objects::JObject, JavaVM},
|
|
InjectingAdapter,
|
|
};
|
|
use winit::{
|
|
event::WindowEvent, event_loop::ActiveEventLoop, platform::android::ActiveEventLoopExtAndroid,
|
|
window::Window,
|
|
};
|
|
|
|
pub struct Adapter {
|
|
adapter: InjectingAdapter,
|
|
}
|
|
|
|
impl Adapter {
|
|
pub fn new(
|
|
event_loop: &ActiveEventLoop,
|
|
_window: &Window,
|
|
activation_handler: impl 'static + ActivationHandler + Send,
|
|
action_handler: impl 'static + ActionHandler + Send,
|
|
_deactivation_handler: impl 'static + DeactivationHandler,
|
|
) -> Self {
|
|
let app = event_loop.android_app();
|
|
let vm = unsafe { JavaVM::from_raw(app.vm_as_ptr() as *mut _) }.unwrap();
|
|
let mut env = vm.get_env().unwrap();
|
|
let activity = unsafe { JObject::from_raw(app.activity_as_ptr() as *mut _) };
|
|
let view = env
|
|
.get_field(
|
|
&activity,
|
|
"mSurfaceView",
|
|
"Lcom/google/androidgamesdk/GameActivity$InputEnabledSurfaceView;",
|
|
)
|
|
.unwrap()
|
|
.l()
|
|
.unwrap();
|
|
let adapter =
|
|
InjectingAdapter::new(&mut env, &view, activation_handler, action_handler).unwrap();
|
|
Self { adapter }
|
|
}
|
|
|
|
pub fn update_if_active(&mut self, updater: impl FnOnce() -> TreeUpdate) {
|
|
self.adapter.update_if_active(updater);
|
|
}
|
|
|
|
pub fn process_event(&mut self, _window: &Window, _event: &WindowEvent) {}
|
|
}
|