@@ -2,27 +2,26 @@ module Engineering.OS.Permission where
22
33import Prelude
44
5- import Control.Monad.Aff (Aff , makeAff , nonCanceler )
6- import Control.Monad.Eff (Eff )
7- import Control.Monad.Eff.Exception (Error , error )
85import Control.Monad.Except (runExcept , throwError )
9- import Control.Monad.Loops (allM )
10- import Data.Array (zip )
6+ import Data.Array (zip , foldl )
117import Data.Either (Either (..))
128import Data.Foldable (all )
13- import Data.Foreign.Generic (decodeJSON )
149import Data.Function.Uncurried (Fn3 , runFn3 )
1510import Data.List (fromFoldable )
11+ import Data.Traversable (sequence )
1612import Data.Tuple (Tuple (..))
17- import Presto.Core.Types.App (STORAGE )
13+ import Effect (Effect )
14+ import Effect.Aff (Aff , makeAff , nonCanceler )
15+ import Effect.Exception (Error , error )
16+ import Foreign.Generic (decodeJSON )
1817import Presto.Core.Types.Language.Flow (Flow , checkPermissions , takePermissions )
1918import Presto.Core.Types.Permission (Permission (..), PermissionResponse , PermissionStatus (..))
2019
21- foreign import getPermissionStatus' :: forall e . Fn3 (Error -> EffStorage e Unit ) (String -> EffStorage e Unit ) String (EffStorage e Unit )
22- foreign import requestPermission' :: forall e . Fn3 (Error -> EffStorage e Unit ) (String -> EffStorage e Unit ) String (EffStorage e Unit )
20+ foreign import getPermissionStatus' :: Fn3 (Error -> EffStorage Unit ) (String -> EffStorage Unit ) String (EffStorage Unit )
21+ foreign import requestPermission' :: Fn3 (Error -> EffStorage Unit ) (String -> EffStorage Unit ) String (EffStorage Unit )
2322
24- type EffStorage e = Eff ( storage :: STORAGE | e )
25- type AffStorage e = Aff ( storage :: STORAGE | e )
23+ type EffStorage = Effect
24+ type AffStorage = Aff
2625
2726toAndroidPermission :: Permission -> String
2827toAndroidPermission PermissionSendSms = " android.permission.READ_SMS"
@@ -57,7 +56,7 @@ storagePermissionGranted = do
5756 PermissionGranted -> pure true
5857 _ -> pure false
5958
60- getPermissionStatus :: forall e . Permission -> AffStorage e Boolean
59+ getPermissionStatus :: Permission -> AffStorage Boolean
6160getPermissionStatus permission = do
6261 permissionStr <- makeAff (\callback -> do
6362 runFn3 getPermissionStatus' (Left >>> callback) (Right >>> callback) (toAndroidPermission permission)
@@ -66,14 +65,15 @@ getPermissionStatus permission = do
6665 Right x -> pure x
6766 Left err -> throwError (error (show err))
6867
69- checkIfPermissionsGranted :: forall e . Array Permission -> AffStorage e PermissionStatus
68+ checkIfPermissionsGranted :: Array Permission -> AffStorage PermissionStatus
7069checkIfPermissionsGranted permissions = do
71- check <- allM getPermissionStatus $ fromFoldable permissions
72- pure $ if check
70+ pStatus <- sequence $ getPermissionStatus <$> permissions
71+ let res = foldl (\acc x -> if acc == false then false else x) true pStatus
72+ pure $ if res
7373 then PermissionGranted
7474 else PermissionDeclined
7575
76- requestPermissions :: forall e . Array Permission -> AffStorage e (Array PermissionResponse )
76+ requestPermissions :: Array Permission -> AffStorage (Array PermissionResponse )
7777requestPermissions permissions = do
7878 response <- makeAff (\callback -> do
7979 runFn3 requestPermission' (Left >>> callback) (Right >>> callback) $ show jPermission
0 commit comments