on master help sign in
Merge remote-tracking branch 'obsidian/aa-clib-appcallbacks'
16fedc5Hamish Mackenzie
jsaddle-clib/cbits/include/jsaddle.h+7
@@ -9,6 +9,13 @@ typedef struct native_callbacks {
9} native_callbacks;
9} native_callbacks;
10
10
11typedef struct app_callbacks {
11typedef struct app_callbacks {
12+ void (* mainActivity_onCreate) ();
13+ void (* mainActivity_onStart) ();
14+ void (* mainActivity_onResume) ();
15+ void (* mainActivity_onPause) ();
16+ void (* mainActivity_onStop) ();
17+ void (* mainActivity_onDestroy) ();
18+ void (* mainActivity_onRestart) ();
12 void (* firebaseInstanceIdService_sendRegistrationToServer) (char *);
19 void (* firebaseInstanceIdService_sendRegistrationToServer) (char *);
13} app_callbacks;
20} app_callbacks;
14
21
jsaddle-clib/src-ghc/Language/Javascript/JSaddle/CLib.hs+39−6
@@ -62,17 +62,50 @@ jsaddleInit jsm evaluateJavascriptAsyncPtr = do
62 }
62 }
63
63
64data AppConfig = AppConfig
64data AppConfig = AppConfig
65+ { _appConfig_mainActivityOnCreate :: IO ()
66+ , _appConfig_mainActivityOnStart :: IO ()
67+ , _appConfig_mainActivityOnResume :: IO ()
68+ , _appConfig_mainActivityOnPause :: IO ()
69+ , _appConfig_mainActivityOnStop :: IO ()
70+ , _appConfig_mainActivityOnDestroy :: IO ()
71+ , _appConfig_mainActivityOnRestart :: IO ()
65− { _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
72+ , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
66 }
73 }
67
74
68instance Default AppConfig where
75instance Default AppConfig where
69− def = AppConfig (\_ -> return ())
76+ def = AppConfig
77+ { _appConfig_mainActivityOnCreate = return ()
78+ , _appConfig_mainActivityOnStart = return ()
79+ , _appConfig_mainActivityOnResume = return ()
80+ , _appConfig_mainActivityOnPause = return ()
81+ , _appConfig_mainActivityOnStop = return ()
82+ , _appConfig_mainActivityOnDestroy = return ()
83+ , _appConfig_mainActivityOnRestart = return ()
84+ , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer = \_ -> return ()
85+ }
70
86
71appConfigToAppCallbacks :: AppConfig -> IO AppCallbacks
87appConfigToAppCallbacks :: AppConfig -> IO AppCallbacks
72−appConfigToAppCallbacks (AppConfig firebaseReg) = do
88+appConfigToAppCallbacks c = do
89+ create <- wrapStartCallback $ _appConfig_mainActivityOnCreate c
90+ start <- wrapStartCallback $ _appConfig_mainActivityOnStart c
91+ resume <- wrapStartCallback $ _appConfig_mainActivityOnResume c
92+ pause <- wrapStartCallback $ _appConfig_mainActivityOnPause c
93+ stop <- wrapStartCallback $ _appConfig_mainActivityOnStop c
94+ destroy <- wrapStartCallback $ _appConfig_mainActivityOnDestroy c
95+ restart <- wrapStartCallback $ _appConfig_mainActivityOnRestart c
73− firebaseRegPtr <- wrapMessageCallback $ \token ->
96+ firebaseRegPtr <- wrapMessageCallback $ \token -> do
74− firebaseReg =<< (T.pack <$> peekCString token)
97+ token' <- T.pack <$> peekCString token
98+ _appConfig_firebaseInstanceIdServiceSendRegistrationToServer c token'
75− return $ AppCallbacks firebaseRegPtr
99+ return $ AppCallbacks
100+ { _appCallbacks_mainActivity_onCreate = create
101+ , _appCallbacks_mainActivity_onStart = start
102+ , _appCallbacks_mainActivity_onResume = resume
103+ , _appCallbacks_mainActivity_onPause = pause
104+ , _appCallbacks_mainActivity_onStop = stop
105+ , _appCallbacks_mainActivity_onDestroy = destroy
106+ , _appCallbacks_mainActivity_onRestart = restart
107+ , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer = firebaseRegPtr
108+ }
76
109
77pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
110pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
78pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
111pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
jsaddle-clib/src/Language/Javascript/JSaddle/CLib/Internal.hsc+23−2
@@ -28,13 +28,34 @@ instance Storable NativeCallbacks where
28 <*> #{peek native_callbacks, jsaddleHtmlData} p
28 <*> #{peek native_callbacks, jsaddleHtmlData} p
29
29
30data AppCallbacks = AppCallbacks
30data AppCallbacks = AppCallbacks
31+ { _appCallbacks_mainActivity_onCreate :: !(FunPtr (IO ()))
32+ , _appCallbacks_mainActivity_onStart :: !(FunPtr (IO ()))
33+ , _appCallbacks_mainActivity_onResume :: !(FunPtr (IO ()))
34+ , _appCallbacks_mainActivity_onPause :: !(FunPtr (IO ()))
35+ , _appCallbacks_mainActivity_onStop :: !(FunPtr (IO ()))
36+ , _appCallbacks_mainActivity_onDestroy :: !(FunPtr (IO ()))
37+ , _appCallbacks_mainActivity_onRestart :: !(FunPtr (IO ()))
31− { _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer :: !(FunPtr (CString -> IO ()))
38+ , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer :: !(FunPtr (CString -> IO ()))
32 }
39 }
33
40
34instance Storable AppCallbacks where
41instance Storable AppCallbacks where
35 sizeOf _ = #{size app_callbacks}
42 sizeOf _ = #{size app_callbacks}
36 alignment _ = #{alignment app_callbacks}
43 alignment _ = #{alignment app_callbacks}
37 poke p nc = do
44 poke p nc = do
45+ #{poke app_callbacks, mainActivity_onCreate} p $ _appCallbacks_mainActivity_onCreate nc
46+ #{poke app_callbacks, mainActivity_onStart} p $ _appCallbacks_mainActivity_onStart nc
47+ #{poke app_callbacks, mainActivity_onResume} p $ _appCallbacks_mainActivity_onResume nc
48+ #{poke app_callbacks, mainActivity_onPause} p $ _appCallbacks_mainActivity_onPause nc
49+ #{poke app_callbacks, mainActivity_onStop} p $ _appCallbacks_mainActivity_onStop nc
50+ #{poke app_callbacks, mainActivity_onDestroy} p $ _appCallbacks_mainActivity_onDestroy nc
51+ #{poke app_callbacks, mainActivity_onRestart} p $ _appCallbacks_mainActivity_onRestart nc
38 #{poke app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p $ _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer nc
52 #{poke app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p $ _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer nc
39 peek p = AppCallbacks
53 peek p = AppCallbacks
54+ <$> #{peek app_callbacks, mainActivity_onCreate} p
55+ <*> #{peek app_callbacks, mainActivity_onStart} p
56+ <*> #{peek app_callbacks, mainActivity_onResume} p
57+ <*> #{peek app_callbacks, mainActivity_onPause} p
58+ <*> #{peek app_callbacks, mainActivity_onStop} p
59+ <*> #{peek app_callbacks, mainActivity_onDestroy} p
60+ <*> #{peek app_callbacks, mainActivity_onRestart} p
40− <$> #{peek app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p
61+ <*> #{peek app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p