tauri_plugin_android_battery_optimization/
lib.rs1use serde::{Deserialize, Serialize};
2use tauri::{
3 plugin::{Builder, PluginHandle, TauriPlugin},
4 Manager, Runtime,
5};
6
7mod commands;
8mod error;
9
10pub use commands::*;
11pub use error::Error;
12
13#[derive(Debug, Clone, Deserialize, Serialize)]
15#[serde(rename_all = "camelCase")]
16pub struct BatteryStatus {
17 pub is_optimized: bool,
20 pub is_ignoring_optimizations: bool,
23}
24
25pub struct AndroidBatteryOptimization<R: Runtime>(PluginHandle<R>);
26
27impl<R: Runtime> AndroidBatteryOptimization<R> {
28 #[cfg(target_os = "android")]
30 pub fn check_status(&self) -> Result<BatteryStatus, Error> {
31 self.0
32 .run_mobile_plugin("checkBatteryOptimizationStatus", ())
33 .map_err(|e| Error::PluginInvoke(e.to_string()))
34 }
35
36 #[cfg(target_os = "android")]
38 pub fn request_exemption(&self) -> Result<(), Error> {
39 self.0
40 .run_mobile_plugin("requestBatteryOptimizationExemption", ())
41 .map_err(|e| Error::PluginInvoke(e.to_string()))
42 }
43
44 #[cfg(target_os = "android")]
46 pub fn open_settings(&self) -> Result<(), Error> {
47 self.0
48 .run_mobile_plugin("openBatterySettings", ())
49 .map_err(|e| Error::PluginInvoke(e.to_string()))
50 }
51}
52
53pub fn init<R: Runtime>() -> TauriPlugin<R> {
55 Builder::new("android-battery-optimization")
56 .invoke_handler(tauri::generate_handler![
57 commands::check_battery_optimization_status,
58 commands::request_battery_optimization_exemption,
59 commands::open_battery_settings
60 ])
61 .setup(|app, api| {
62 #[cfg(target_os = "android")]
63 {
64 let handle = api.register_android_plugin(
65 "com.plugin.android_battery_optimization",
66 "BatteryOptimizationPlugin",
67 )?;
68 app.manage(AndroidBatteryOptimization(handle));
69 }
70 let _ = (app, api);
71 Ok(())
72 })
73 .build()
74}