diff --git a/src/changelog/unreleased.md b/src/changelog/unreleased.md index 49f2dc9c1..5a8a60626 100644 --- a/src/changelog/unreleased.md +++ b/src/changelog/unreleased.md @@ -43,6 +43,7 @@ changelog entry. ### Added - On Web, implement `Error` for `platform::web::CustomCursorError`. +- On Android, add `{Active,}EventLoopExtAndroid::android_app()` to access the app used to create the loop. ### Fixed diff --git a/src/platform/android.rs b/src/platform/android.rs index 748126a01..b75667b5a 100644 --- a/src/platform/android.rs +++ b/src/platform/android.rs @@ -76,12 +76,22 @@ use crate::window::{Window, WindowAttributes}; use self::activity::{AndroidApp, ConfigurationRef, Rect}; /// Additional methods on [`EventLoop`] that are specific to Android. -pub trait EventLoopExtAndroid {} +pub trait EventLoopExtAndroid { + /// Get the [`AndroidApp`] which was used to create this event loop. + fn android_app(&self) -> &AndroidApp; +} -impl EventLoopExtAndroid for EventLoop {} +impl EventLoopExtAndroid for EventLoop { + fn android_app(&self) -> &AndroidApp { + &self.event_loop.android_app + } +} /// Additional methods on [`ActiveEventLoop`] that are specific to Android. -pub trait ActiveEventLoopExtAndroid {} +pub trait ActiveEventLoopExtAndroid { + /// Get the [`AndroidApp`] which was used to create this event loop. + fn android_app(&self) -> &AndroidApp; +} /// Additional methods on [`Window`] that are specific to Android. pub trait WindowExtAndroid { @@ -100,7 +110,11 @@ impl WindowExtAndroid for Window { } } -impl ActiveEventLoopExtAndroid for ActiveEventLoop {} +impl ActiveEventLoopExtAndroid for ActiveEventLoop { + fn android_app(&self) -> &AndroidApp { + &self.p.app + } +} /// Additional methods on [`WindowAttributes`] that are specific to Android. pub trait WindowAttributesExtAndroid {} @@ -108,9 +122,9 @@ pub trait WindowAttributesExtAndroid {} impl WindowAttributesExtAndroid for WindowAttributes {} pub trait EventLoopBuilderExtAndroid { - /// Associates the `AndroidApp` that was passed to `android_main()` with the event loop + /// Associates the [`AndroidApp`] that was passed to `android_main()` with the event loop /// - /// This must be called on Android since the `AndroidApp` is not global state. + /// This must be called on Android since the [`AndroidApp`] is not global state. fn with_android_app(&mut self, app: AndroidApp) -> &mut Self; /// Calling this will mark the volume keys to be manually handled by the application @@ -147,7 +161,7 @@ impl EventLoopBuilderExtAndroid for EventLoopBuilder { /// depending on the `android_activity` crate, and instead consume the API that /// is re-exported by Winit. /// -/// For compatibility applications should then import the `AndroidApp` type for +/// For compatibility applications should then import the [`AndroidApp`] type for /// their `android_main(app: AndroidApp)` function like: /// ```rust /// #[cfg(target_os = "android")] diff --git a/src/platform_impl/android/mod.rs b/src/platform_impl/android/mod.rs index e279b5bdb..9b12eaaa1 100644 --- a/src/platform_impl/android/mod.rs +++ b/src/platform_impl/android/mod.rs @@ -132,7 +132,7 @@ impl RedrawRequester { pub struct KeyEventExtra {} pub struct EventLoop { - android_app: AndroidApp, + pub(crate) android_app: AndroidApp, window_target: event_loop::ActiveEventLoop, redraw_flag: SharedFlag, user_events_sender: mpsc::Sender, @@ -646,7 +646,7 @@ impl EventLoopProxy { } pub struct ActiveEventLoop { - app: AndroidApp, + pub(crate) app: AndroidApp, control_flow: Cell, exit: Cell, redraw_requester: RedrawRequester,