@@ -18,9 +18,9 @@ import Data.ByteString.Lazy (ByteString, toStrict, fromStrict)
1818import Data.Default (def, Default)
1919import Data.Monoid ((<>))
2020import Data.Text (Text)
21−import qualified Data.Text as T
21+import qualified Data.Text.Encoding as T
2222
23−import Foreign.C.String (CString, newCString, peekCString)
23+import Foreign.C.String (CString, newCString)
2424import Foreign.Ptr (FunPtr, Ptr)
2525import Foreign.Storable (poke)
2626import Foreign.Marshal.Utils (new)
@@ -40,6 +40,9 @@ foreign import ccall safe "wrapper"
4040foreign import ccall safe "wrapper"
4141 wrapMessageCallback :: (CString -> IO ()) -> IO (FunPtr (CString -> IO ()))
4242
43+foreign import ccall safe "wrapper"
44+ wrapMessageCallback2 :: (CString -> CString -> IO ()) -> IO (FunPtr (CString -> CString -> IO ()))
45+
4346jsaddleInit :: JSM () -> FunPtr (CString -> IO ()) -> IO (Ptr NativeCallbacks)
4447jsaddleInit jsm evaluateJavascriptAsyncPtr = do
4548 let evaluateJavascriptAsync = mkCallback evaluateJavascriptAsyncPtr
@@ -69,6 +72,7 @@ data AppConfig = AppConfig
6972 , _appConfig_mainActivityOnStop :: IO ()
7073 , _appConfig_mainActivityOnDestroy :: IO ()
7174 , _appConfig_mainActivityOnRestart :: IO ()
75+ , _appConfig_mainActivityOnNewIntent :: (Text -> Text -> IO ())
7276 , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
7377 }
7478
@@ -81,6 +85,7 @@ instance Default AppConfig where
8185 , _appConfig_mainActivityOnStop = return ()
8286 , _appConfig_mainActivityOnDestroy = return ()
8387 , _appConfig_mainActivityOnRestart = return ()
88+ , _appConfig_mainActivityOnNewIntent = \_ _ -> return ()
8489 , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer = \_ -> return ()
8590 }
8691
@@ -93,8 +98,12 @@ appConfigToAppCallbacks c = do
9398 stop <- wrapStartCallback $ _appConfig_mainActivityOnStop c
9499 destroy <- wrapStartCallback $ _appConfig_mainActivityOnDestroy c
95100 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'
96105 firebaseRegPtr <- wrapMessageCallback $ \token -> do
97− token' <- T.pack <$> peekCString token
106+ token' <- fromUtf8CString token
98107 _appConfig_firebaseInstanceIdServiceSendRegistrationToServer c token'
99108 return $ AppCallbacks
100109 { _appCallbacks_mainActivity_onCreate = create
@@ -104,9 +113,13 @@ appConfigToAppCallbacks c = do
104113 , _appCallbacks_mainActivity_onStop = stop
105114 , _appCallbacks_mainActivity_onDestroy = destroy
106115 , _appCallbacks_mainActivity_onRestart = restart
116+ , _appCallbacks_mainActivity_onNewIntent = newIntent
107117 , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer = firebaseRegPtr
108118 }
109119
120+fromUtf8CString :: CString -> IO Text
121+fromUtf8CString = fmap T.decodeUtf8 . packCString
122+
110123pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
111124pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
112125