@@ -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+
4346foreign import ccall safe "wrapper"
4447 wrapSyncCallback :: (CString -> IO CString) -> IO (FunPtr (CString -> IO CString))
4548
@@ -78,6 +81,7 @@ data AppConfig = AppConfig
7881 , _appConfig_mainActivityOnStop :: IO ()
7982 , _appConfig_mainActivityOnDestroy :: IO ()
8083 , _appConfig_mainActivityOnRestart :: IO ()
84+ , _appConfig_mainActivityOnNewIntent :: (Text -> Text -> IO ())
8185 , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer :: Text -> IO ()
8286 }
8387
@@ -90,6 +94,7 @@ instance Default AppConfig where
9094 , _appConfig_mainActivityOnStop = return ()
9195 , _appConfig_mainActivityOnDestroy = return ()
9296 , _appConfig_mainActivityOnRestart = return ()
97+ , _appConfig_mainActivityOnNewIntent = \_ _ -> return ()
9398 , _appConfig_firebaseInstanceIdServiceSendRegistrationToServer = \_ -> return ()
9499 }
95100
@@ -102,8 +107,12 @@ appConfigToAppCallbacks c = do
102107 stop <- wrapStartCallback $ _appConfig_mainActivityOnStop c
103108 destroy <- wrapStartCallback $ _appConfig_mainActivityOnDestroy c
104109 restart <- wrapStartCallback $ _appConfig_mainActivityOnRestart c
110+ newIntent <- wrapMessageCallback2 $ \intentAction intentData -> do
111+ intentAction' <- fromUtf8CString intentAction
112+ intentData' <- fromUtf8CString intentData
113+ _appConfig_mainActivityOnNewIntent c intentAction' intentData'
105114 firebaseRegPtr <- wrapMessageCallback $ \token -> do
106− token' <- T.pack <$> peekCString token
115+ token' <- fromUtf8CString token
107116 _appConfig_firebaseInstanceIdServiceSendRegistrationToServer c token'
108117 return $ AppCallbacks
109118 { _appCallbacks_mainActivity_onCreate = create
@@ -113,9 +122,13 @@ appConfigToAppCallbacks c = do
113122 , _appCallbacks_mainActivity_onStop = stop
114123 , _appCallbacks_mainActivity_onDestroy = destroy
115124 , _appCallbacks_mainActivity_onRestart = restart
125+ , _appCallbacks_mainActivity_onNewIntent = newIntent
116126 , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer = firebaseRegPtr
117127 }
118128
129+fromUtf8CString :: CString -> IO Text
130+fromUtf8CString = fmap T.decodeUtf8 . packCString
131+
119132pokeAppConfig :: Ptr AppCallbacks -> AppConfig -> IO ()
120133pokeAppConfig ptr cfg = poke ptr =<< appConfigToAppCallbacks cfg
121134