@@ -86,7 +86,11 @@ impl AndroidAppWaker {
86
86
}
87
87
88
88
impl AndroidApp {
89
- pub ( crate ) fn new ( native_activity : NativeActivityGlue , jvm : CloneJavaVM ) -> Self {
89
+ pub ( crate ) fn new (
90
+ native_activity : NativeActivityGlue ,
91
+ jvm : CloneJavaVM ,
92
+ main_looper_ptr : * mut ndk_sys:: ALooper
93
+ ) -> Self {
90
94
let mut env = jvm. get_env ( ) . unwrap ( ) ; // We attach to the thread before creating the AndroidApp
91
95
92
96
let key_map_binding = match KeyCharacterMapBinding :: new ( & mut env) {
@@ -103,6 +107,9 @@ impl AndroidApp {
103
107
looper : Looper {
104
108
ptr : ptr:: null_mut ( ) ,
105
109
} ,
110
+ main_looper : Looper {
111
+ ptr : main_looper_ptr,
112
+ } ,
106
113
key_map_binding : Arc :: new ( key_map_binding) ,
107
114
key_maps : Mutex :: new ( HashMap :: new ( ) ) ,
108
115
input_receiver : Mutex :: new ( None ) ,
@@ -147,6 +154,9 @@ pub(crate) struct AndroidAppInner {
147
154
pub ( crate ) native_activity : NativeActivityGlue ,
148
155
looper : Looper ,
149
156
157
+ /// Looper associated with the activy's main thread, sometimes called the UI thread.
158
+ main_looper : Looper ,
159
+
150
160
/// Shared JNI bindings for the `KeyCharacterMap` class
151
161
key_map_binding : Arc < KeyCharacterMapBinding > ,
152
162
@@ -179,6 +189,10 @@ impl AndroidAppInner {
179
189
self . looper . ptr
180
190
}
181
191
192
+ pub fn main_looper ( & self ) -> * mut ndk_sys:: ALooper {
193
+ self . main_looper . ptr
194
+ }
195
+
182
196
pub fn native_window ( & self ) -> Option < NativeWindow > {
183
197
self . native_activity . mutex . lock ( ) . unwrap ( ) . window . clone ( )
184
198
}
0 commit comments