on master help sign in
Add onNewIntent callback for android
52b2a91Ali Abrar
jsaddle-clib/cbits/include/jsaddle.h+1
@@ -16,6 +16,7 @@ typedef struct app_callbacks {
16 void (* mainActivity_onStop) ();
16 void (* mainActivity_onStop) ();
17 void (* mainActivity_onDestroy) ();
17 void (* mainActivity_onDestroy) ();
18 void (* mainActivity_onRestart) ();
18 void (* mainActivity_onRestart) ();
19+ void (* mainActivity_onNewIntent) (char *, char *);
19 void (* firebaseInstanceIdService_sendRegistrationToServer) (char *);
20 void (* firebaseInstanceIdService_sendRegistrationToServer) (char *);
20} app_callbacks;
21} app_callbacks;
21
22
jsaddle-clib/src-ghc/Language/Javascript/JSaddle/CLib.hs+16−3
@@ -18,9 +18,9 @@ import Data.ByteString.Lazy (ByteString, toStrict, fromStrict)
18import Data.Default (def, Default)
18import Data.Default (def, Default)
19import Data.Monoid ((<>))
19import Data.Monoid ((<>))
20import Data.Text (Text)
20import Data.Text (Text)
21−import qualified Data.Text as T
21+import qualified Data.Text.Encoding as T
22
22
23−import Foreign.C.String (CString, newCString, peekCString)
23+import Foreign.C.String (CString, newCString)
24import Foreign.Ptr (FunPtr, Ptr)
24import Foreign.Ptr (FunPtr, Ptr)
25import Foreign.Storable (poke)
25import Foreign.Storable (poke)
26import Foreign.Marshal.Utils (new)
26import Foreign.Marshal.Utils (new)
@@ -40,6 +40,9 @@ foreign import ccall safe "wrapper"
40foreign import ccall safe "wrapper"
40foreign import ccall safe "wrapper"
41 wrapMessageCallback :: (CString -> IO ()) -> IO (FunPtr (CString -> IO ()))
41 wrapMessageCallback :: (CString -> IO ()) -> IO (FunPtr (CString -> IO ()))
42
42
43+foreign import ccall safe "wrapper"
44+ wrapMessageCallback2 :: (CString -> CString -> IO ()) -> IO (FunPtr (CString -> CString -> IO ()))
45+
43jsaddleInit :: JSM () -> FunPtr (CString -> IO ()) -> IO (Ptr NativeCallbacks)
46jsaddleInit :: JSM () -> FunPtr (CString -> IO ()) -> IO (Ptr NativeCallbacks)
44jsaddleInit jsm evaluateJavascriptAsyncPtr = do
47jsaddleInit jsm evaluateJavascriptAsyncPtr = do
45 let evaluateJavascriptAsync = mkCallback evaluateJavascriptAsyncPtr
48 let evaluateJavascriptAsync = mkCallback evaluateJavascriptAsyncPtr
@@ -69,6 +72,7 @@ data AppConfig = AppConfig
69 , _appConfig_mainActivityOnStop :: IO ()
72 , _appConfig_mainActivityOnStop :: IO ()
70 , _appConfig_mainActivityOnDestroy :: IO ()
73 , _appConfig_mainActivityOnDestroy :: IO ()
71 , _appConfig_mainActivityOnRestart :: IO ()
74 , _appConfig_mainActivityOnRestart :: IO ()
75+ , _appConfig_mainActivityOnNewIntent :: (Text -> Text -> IO ())
72 , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
76 , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
73 }
77 }
74
78
@@ -81,6 +85,7 @@ instance Default AppConfig where
81 , _appConfig_mainActivityOnStop = return ()
85 , _appConfig_mainActivityOnStop = return ()
82 , _appConfig_mainActivityOnDestroy = return ()
86 , _appConfig_mainActivityOnDestroy = return ()
83 , _appConfig_mainActivityOnRestart = return ()
87 , _appConfig_mainActivityOnRestart = return ()
88+ , _appConfig_mainActivityOnNewIntent = \_ _ -> return ()
84 , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer = \_ -> return ()
89 , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer = \_ -> return ()
85 }
90 }
86
91
@@ -93,8 +98,12 @@ appConfigToAppCallbacks c = do
93 stop <- wrapStartCallback $ _appConfig_mainActivityOnStop c
98 stop <- wrapStartCallback $ _appConfig_mainActivityOnStop c
94 destroy <- wrapStartCallback $ _appConfig_mainActivityOnDestroy c
99 destroy <- wrapStartCallback $ _appConfig_mainActivityOnDestroy c
95 restart <- wrapStartCallback $ _appConfig_mainActivityOnRestart c
100 restart <- wrapStartCallback $ _appConfig_mainActivityOnRestart c
101+ newIntent <- wrapMessageCallback2 $ \intentAction intentData -> do
102+ intentAction' <- fromUtf8CString intentAction
103+ intentData' <- fromUtf8CString intentData
104+ _appConfig_mainActivityOnNewIntent c intentAction' intentData'
96 firebaseRegPtr <- wrapMessageCallback $ \token -> do
105 firebaseRegPtr <- wrapMessageCallback $ \token -> do
97− token' <- T.pack <$> peekCString token
106+ token' <- fromUtf8CString token
98 _appConfig_firebaseInstanceIdServiceSendRegistrationToServer c token'
107 _appConfig_firebaseInstanceIdServiceSendRegistrationToServer c token'
99 return $ AppCallbacks
108 return $ AppCallbacks
100 { _appCallbacks_mainActivity_onCreate = create
109 { _appCallbacks_mainActivity_onCreate = create
@@ -104,9 +113,13 @@ appConfigToAppCallbacks c = do
104 , _appCallbacks_mainActivity_onStop = stop
113 , _appCallbacks_mainActivity_onStop = stop
105 , _appCallbacks_mainActivity_onDestroy = destroy
114 , _appCallbacks_mainActivity_onDestroy = destroy
106 , _appCallbacks_mainActivity_onRestart = restart
115 , _appCallbacks_mainActivity_onRestart = restart
116+ , _appCallbacks_mainActivity_onNewIntent = newIntent
107 , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer = firebaseRegPtr
117 , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer = firebaseRegPtr
108 }
118 }
109
119
120+fromUtf8CString :: CString -> IO Text
121+fromUtf8CString = fmap T.decodeUtf8 . packCString
122+
110pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
123pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
111pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
124pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
112
125
jsaddle-clib/src/Language/Javascript/JSaddle/CLib/Internal.hsc+3
@@ -35,6 +35,7 @@ data AppCallbacks = AppCallbacks
35 , _appCallbacks_mainActivity_onStop :: !(FunPtr (IO ()))
35 , _appCallbacks_mainActivity_onStop :: !(FunPtr (IO ()))
36 , _appCallbacks_mainActivity_onDestroy :: !(FunPtr (IO ()))
36 , _appCallbacks_mainActivity_onDestroy :: !(FunPtr (IO ()))
37 , _appCallbacks_mainActivity_onRestart :: !(FunPtr (IO ()))
37 , _appCallbacks_mainActivity_onRestart :: !(FunPtr (IO ()))
38+ , _appCallbacks_mainActivity_onNewIntent :: !(FunPtr (CString -> CString -> IO ()))
38 , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer :: !(FunPtr (CString -> IO ()))
39 , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer :: !(FunPtr (CString -> IO ()))
39 }
40 }
40
41
@@ -49,6 +50,7 @@ instance Storable AppCallbacks where
49 #{poke app_callbacks, mainActivity_onStop} p $ _appCallbacks_mainActivity_onStop nc
50 #{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_onDestroy} p $ _appCallbacks_mainActivity_onDestroy nc
51 #{poke app_callbacks, mainActivity_onRestart} p $ _appCallbacks_mainActivity_onRestart nc
52 #{poke app_callbacks, mainActivity_onRestart} p $ _appCallbacks_mainActivity_onRestart nc
53+ #{poke app_callbacks, mainActivity_onNewIntent} p $ _appCallbacks_mainActivity_onNewIntent nc
52 #{poke app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p $ _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer nc
54 #{poke app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p $ _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer nc
53 peek p = AppCallbacks
55 peek p = AppCallbacks
54 <$> #{peek app_callbacks, mainActivity_onCreate} p
56 <$> #{peek app_callbacks, mainActivity_onCreate} p
@@ -58,4 +60,5 @@ instance Storable AppCallbacks where
58 <*> #{peek app_callbacks, mainActivity_onStop} p
60 <*> #{peek app_callbacks, mainActivity_onStop} p
59 <*> #{peek app_callbacks, mainActivity_onDestroy} p
61 <*> #{peek app_callbacks, mainActivity_onDestroy} p
60 <*> #{peek app_callbacks, mainActivity_onRestart} p
62 <*> #{peek app_callbacks, mainActivity_onRestart} p
63+ <*> #{peek app_callbacks, mainActivity_onNewIntent} p
61 <*> #{peek app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p
64 <*> #{peek app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p