crossbow_android/
crossbow.rs

1use 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}