on master help sign in
Add onNewIntent callback for android
commit52b2a91e52cbcf664b7f5ba1815791dc9b607dee authorAli Abrar <aliabrar@gmail.com> dateTue 30 May 2017, 17:23 (9 years ago) parent5c695f9
3 files changed+20−3
jsaddle-clib/cbits/include/jsaddle.h+1 jsaddle-clib/src-ghc/Language/Javascript/JSaddle/CLib.hs+16−3 jsaddle-clib/src/Language/Javascript/JSaddle/CLib/Internal.hsc+3
jsaddle-clib/cbits/include/jsaddle.h+1
@@ -16,6 +16,7 @@ typedef struct app_callbacks {
1616 void (* mainActivity_onStop) ();
1717 void (* mainActivity_onDestroy) ();
1818 void (* mainActivity_onRestart) ();
19+ void (* mainActivity_onNewIntent) (char *, char *);
1920 void (* firebaseInstanceIdService_sendRegistrationToServer) (char *);
2021} app_callbacks;
2122
jsaddle-clib/src-ghc/Language/Javascript/JSaddle/CLib.hs+16−3
@@ -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
jsaddle-clib/src/Language/Javascript/JSaddle/CLib/Internal.hsc+3
@@ -35,6 +35,7 @@ data AppCallbacks = AppCallbacks
3535 , _appCallbacks_mainActivity_onStop :: !(FunPtr (IO ()))
3636 , _appCallbacks_mainActivity_onDestroy :: !(FunPtr (IO ()))
3737 , _appCallbacks_mainActivity_onRestart :: !(FunPtr (IO ()))
38+ , _appCallbacks_mainActivity_onNewIntent :: !(FunPtr (CString -> CString -> IO ()))
3839 , _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer :: !(FunPtr (CString -> IO ()))
3940 }
4041
@@ -49,6 +50,7 @@ instance Storable AppCallbacks where
4950 #{poke app_callbacks, mainActivity_onStop} p $ _appCallbacks_mainActivity_onStop nc
5051 #{poke app_callbacks, mainActivity_onDestroy} p $ _appCallbacks_mainActivity_onDestroy nc
5152 #{poke app_callbacks, mainActivity_onRestart} p $ _appCallbacks_mainActivity_onRestart nc
53+ #{poke app_callbacks, mainActivity_onNewIntent} p $ _appCallbacks_mainActivity_onNewIntent nc
5254 #{poke app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p $ _appCallbacks_firebaseInstanceIdService_sendRegistrationToServer nc
5355 peek p = AppCallbacks
5456 <$> #{peek app_callbacks, mainActivity_onCreate} p
@@ -58,4 +60,5 @@ instance Storable AppCallbacks where
5860 <*> #{peek app_callbacks, mainActivity_onStop} p
5961 <*> #{peek app_callbacks, mainActivity_onDestroy} p
6062 <*> #{peek app_callbacks, mainActivity_onRestart} p
63+ <*> #{peek app_callbacks, mainActivity_onNewIntent} p
6164 <*> #{peek app_callbacks, firebaseInstanceIdService_sendRegistrationToServer} p