crossbow_android/
crossbow.rs1use crate::{
2 error::*, get_java_vm, permission::on_request_permission_result, plugin::CrossbowPlugin,
3 utils::jstring_to_string,
4};
5use jni::{
6 objects::{JObject, JString},
7 sys::{jboolean, JNI_TRUE},
8 JNIEnv,
9};
10use std::sync::Arc;
11
12pub struct CrossbowInstance {
13 pub vm: Arc<jni::JavaVM>,
14}
15
16impl CrossbowInstance {
17 pub fn new() -> Self {
18 let (_, vm) = get_java_vm().unwrap();
19 Self { vm: Arc::from(vm) }
20 }
21
22 pub fn get_plugin<T>(&self) -> Result<T>
23 where
24 T: CrossbowPlugin,
25 {
26 T::from_java_vm(self.vm.clone())
27 }
28
29 pub(crate) fn crossbow_on_initialize(
30 env: JNIEnv,
31 activity: JObject,
32 crossbow_instance: JObject,
33 _asset_manager: JObject,
34 ) -> Result<()> {
35 println!("CrossbowLib_initialize: {:?}", activity);
36
37 env.call_method(crossbow_instance, "onRenderInit", "()V", &[])?;
38 env.exception_check()?;
39
40 Ok(())
41 }
42
43 pub(crate) fn crossbow_on_back_pressed(_env: JNIEnv) -> Result<()> {
44 println!("CrossbowLib_onBackPressed");
45 Ok(())
46 }
47
48 pub(crate) fn crossbow_on_destroy(_env: JNIEnv) -> Result<()> {
49 println!("CrossbowLib_onDestroy");
50 Ok(())
51 }
52
53 pub(crate) fn crossbow_on_focus_in(_env: JNIEnv) -> Result<()> {
54 println!("CrossbowLib_focus_in");
55 Ok(())
56 }
57
58 pub(crate) fn crossbow_on_focus_out(_env: JNIEnv) -> Result<()> {
59 println!("CrossbowLib_focus_out");
60 Ok(())
61 }
62
63 pub(crate) fn on_request_permission_result(
64 env: JNIEnv,
65 permission: JString,
66 result: jboolean,
67 ) -> Result<()> {
68 let permission = jstring_to_string(&env, permission)?;
69 on_request_permission_result(permission, result == JNI_TRUE)?;
70 Ok(())
71 }
72}