play_core/
lib.rs

1use crossbow_android::{error::*, jni::JavaVM, plugin::*};
2use std::sync::Arc;
3
4pub struct PlayCorePlugin {
5    singleton: Arc<JniSingleton>,
6    vm: Arc<JavaVM>,
7}
8
9impl CrossbowPlugin for PlayCorePlugin {
10    fn from_java_vm(vm: Arc<JavaVM>) -> Result<Self>
11    where
12        Self: Sized,
13    {
14        let singleton = get_jni_singleton(Self::get_plugin_name()).ok_or_else(|| {
15            AndroidError::SingletonNotRegistered(Self::get_plugin_name().to_owned())
16        })?;
17        Ok(Self { singleton, vm })
18    }
19
20    fn get_plugin_name() -> &'static str {
21        "CrossbowPlayCore"
22    }
23
24    fn get_receiver(&self) -> &Receiver<Signal> {
25        self.singleton.get_receiver()
26    }
27}
28
29impl PlayCorePlugin {
30    pub fn check_update(&self) -> Result<()> {
31        let jnienv = self.vm.attach_current_thread_as_daemon()?;
32        self.singleton.call_method(&jnienv, "checkUpdate", &[])?;
33        jnienv.exception_check()?;
34        Ok(())
35    }
36
37    pub fn in_progress_update(&self) -> Result<()> {
38        let jnienv = self.vm.attach_current_thread_as_daemon()?;
39        self.singleton
40            .call_method(&jnienv, "inProgressUpdate", &[])?;
41        jnienv.exception_check()?;
42        Ok(())
43    }
44}