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}