@@ -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
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 ()))
43+foreign import ccall safe "wrapper"
44+ wrapMessageCallback2 :: (CString -> CString -> IO ()) -> IO (FunPtr (CString -> CString -> IO ()))
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 ()
@@ -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 ()
@@ -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
120+fromUtf8CString :: CString -> IO Text
121+fromUtf8CString = fmap T.decodeUtf8 . packCString
110pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
123pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
111pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
124pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg