]> git.tdb.fi Git - libs/core.git/blob - source/core/android/mainthread.h
Deal with the activity being recreated during process lifetime
[libs/core.git] / source / core / android / mainthread.h
1 #ifndef MSP_CORE_ANDROID_MAINTHREAD_H_
2 #define MSP_CORE_ANDROID_MAINTHREAD_H_
3
4 #include <android/native_activity.h>
5 #include <sigc++/signal.h>
6 #include "mutex.h"
7 #include "thread.h"
8
9 namespace Msp {
10 namespace Android {
11
12 class MainThread: public Thread
13 {
14 public:
15         sigc::signal<void, ANativeWindow *> signal_native_window_created;
16         sigc::signal<void, ANativeWindow *> signal_native_window_resized;
17         sigc::signal<void, ANativeWindow *> signal_native_window_destroyed;
18         sigc::signal<void, AInputQueue *> signal_input_queue_created;
19         sigc::signal<void, AInputQueue *> signal_input_queue_destroyed;
20
21 private:
22         ANativeActivity *activity;
23         bool starting_up;
24         Mutex startup_mutex;
25
26 public:
27         MainThread(ANativeActivity *);
28
29         void attach_to_activity(ANativeActivity *);
30         bool is_starting_up() const { return starting_up; }
31         void wait_for_app_created();
32         void resume_startup();
33
34 private:
35         virtual void main();
36
37         static void app_created(void *);
38         static void activity_destroyed(ANativeActivity *);
39         static void native_window_created(ANativeActivity *, ANativeWindow *);
40         static void native_window_resized(ANativeActivity *, ANativeWindow *);
41         static void native_window_destroyed(ANativeActivity *, ANativeWindow *);
42         static void input_queue_created(ANativeActivity *, AInputQueue *);
43         static void input_queue_destroyed(ANativeActivity *, AInputQueue *);
44 };
45
46 } // namespace Android
47 } // namespace Msp
48
49 #endif