mirror of
https://github.com/rust-mobile/android-activity.git
synced 2026-07-11 09:08:53 +00:00
72 lines
2.6 KiB
Rust
72 lines
2.6 KiB
Rust
use native_activity::{PollEvent, MainEvent};
|
|
use log::info;
|
|
|
|
#[no_mangle]
|
|
extern "C" fn android_main() {
|
|
android_logger::init_once(
|
|
android_logger::Config::default().with_min_level(log::Level::Info)
|
|
);
|
|
|
|
let mut quit = false;
|
|
let mut redraw_pending = true;
|
|
let mut render_state: Option<()> = Default::default();
|
|
|
|
let app = native_activity::android_app();
|
|
while !quit {
|
|
app.poll_events(Some(std::time::Duration::from_millis(500)) /* timeout */, |event| {
|
|
match event {
|
|
PollEvent::Wake => { info!("Early wake up"); },
|
|
PollEvent::Timeout => {
|
|
info!("Timed out");
|
|
// Real app would probably rely on vblank sync via graphics API...
|
|
redraw_pending = true;
|
|
},
|
|
PollEvent::Main(main_event) => {
|
|
info!("Main event: {:?}", main_event);
|
|
match main_event {
|
|
MainEvent::SaveState { saver, .. } => {
|
|
saver.store("foo://bar".as_bytes());
|
|
},
|
|
MainEvent::Pause => {},
|
|
MainEvent::Resume { loader, .. } => {
|
|
if let Some(state) = loader.load() {
|
|
if let Ok(uri) = String::from_utf8(state) {
|
|
info!("Resumed with saved state = {uri:#?}");
|
|
}
|
|
}
|
|
},
|
|
MainEvent::InitWindow { .. } => {
|
|
render_state = Some(());
|
|
redraw_pending = true;
|
|
},
|
|
MainEvent::TerminateWindow { .. } => {
|
|
render_state = None;
|
|
}
|
|
MainEvent::WindowResized { .. } => { redraw_pending = true; },
|
|
MainEvent::RedrawNeeded { ..} => { redraw_pending = true; },
|
|
MainEvent::LowMemory => {},
|
|
|
|
MainEvent::Destroy => { quit = true },
|
|
_ => { /* ... */}
|
|
}
|
|
},
|
|
_ => {}
|
|
}
|
|
|
|
if redraw_pending {
|
|
if let Some(_rs) = render_state {
|
|
redraw_pending = false;
|
|
|
|
// Handle input
|
|
app.input_events(|event| {
|
|
info!("Input Event: {event:?}");
|
|
|
|
});
|
|
|
|
info!("Render...");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|