egui/crates/eframe/src/native
Pandicon 93d2144294
Save state on suspend on Android and iOS (#5601)
<!--
Please read the "Making a PR" section of
[`CONTRIBUTING.md`](https://github.com/emilk/egui/blob/master/CONTRIBUTING.md)
before opening a Pull Request!

* Keep your PR:s small and focused.
* The PR title is what ends up in the changelog, so make it descriptive!
* If applicable, add a screenshot or gif.
* If it is a non-trivial addition, consider adding a demo for it to
`egui_demo_lib`, or a new example.
* Do NOT open PR:s from your `master` branch, as that makes it hard for
maintainers to test and add commits to your PR.
* Remember to run `cargo fmt` and `cargo clippy`.
* Open the PR as a draft until you have self-reviewed it and run
`./scripts/check.sh`.
* When you have addressed a PR comment, mark it as resolved.

Please be patient! I will review your PR, but my time is limited!
-->

This pull request fixes a subset of #5492 by saving the application
state when the `suspended` event is received on Android. This way, even
if the user exits the app and closes it manually right after changing
some state, it will be saved since `suspended` gets fired when the app
is exited. It does not fix the `on_exit` function not being fired - this
seems to be a winit bug (the `exiting` function in the winit application
handler trait is not called on exit). Once it gets fixed, it may be
possible to remove logic introduced by this PR (however, I am not sure
how it would handle the app being killed by the system when in the
background, that would have to be tested).

I've tested the logic by:
* Leaving from the app to the home screen, then killing it from the
"recent apps" menu
 * Leaving from the app to the "recent apps" menu and killing it
 * Restarting the device while the app was running

In all of these instances, the state was saved (the last one being a
pleasant surprise). It was tested on the repository mentioned in #5492
with my forked repository as the source for eframe (I unfortunately am
not able to test it in a larger project of mine due to dependence on
"3rd party" egui libraries (like egui_notify) which do not compile along
with the master branch of eframe (different versions of egui), but I
believe it should work in the same manner in all scenarios). Tests were
conducted on a Galaxy Tab S8 running Android 14, One UI 6.1.1.

CI passed on my fork.

* [x] I have followed the instructions in the PR template
2025-01-27 08:14:49 +01:00
..
app_icon.rs Use `profiling` crate to support more profiler backends (#5150) 2024-12-16 09:15:54 +01:00
epi_integration.rs Use `profiling` crate to support more profiler backends (#5150) 2024-12-16 09:15:54 +01:00
event_loop_context.rs Update MSRV to Rust 1.79 (#5421) 2024-12-01 18:58:35 +01:00
file_storage.rs Remove references to glium (#5626) 2025-01-22 15:28:23 +01:00
glow_integration.rs Save state on suspend on Android and iOS (#5601) 2025-01-27 08:14:49 +01:00
mod.rs Upgrade winit to 0.30.2 (#4849) 2024-07-31 09:43:16 +02:00
run.rs Save state on suspend on Android and iOS (#5601) 2025-01-27 08:14:49 +01:00
wgpu_integration.rs Save state on suspend on Android and iOS (#5601) 2025-01-27 08:14:49 +01:00
winit_integration.rs Save state on suspend on Android and iOS (#5601) 2025-01-27 08:14:49 +01:00