Current section

Files

Jump to
dala lib dala platform permissions.ex
Raw

lib/dala/platform/permissions.ex

defmodule Dala.Platform.Permissions do
@compile {:nowarn_undefined, [:Nx]}
@moduledoc """
Request OS-level permissions from the user.
The permission dialog is shown asynchronously. The result arrives as:
handle_info({:permission, capability, :granted | :denied}, socket)
Capabilities that require this:
- `:camera`
- `:microphone`
- `:photo_library`
- `:location`
- `:notifications`
- `:bluetooth`
- `:wifi`
Capabilities that need *no* permission: haptics, clipboard, share sheet, file picker.
"""
@type capability ::
:camera | :microphone | :photo_library | :location | :notifications | :bluetooth | :wifi
@doc """
Request an OS permission from the user.
The system dialog is shown asynchronously. The result arrives in
`handle_info/2`:
def handle_info({:permission, :camera, :granted}, socket), do: ...
def handle_info({:permission, :camera, :denied}, socket), do: ...
Safe to call if the permission is already granted — the result still arrives
via `handle_info` with the current status.
Capabilities that do not require permission (haptics, clipboard, share sheet,
file picker) will raise `FunctionClauseError` — do not call `request/2` for them.
"""
@spec request(Dala.Ui.Socket.t(), capability()) :: Dala.Ui.Socket.t()
def request(socket, capability)
when capability in [
:camera,
:microphone,
:photo_library,
:location,
:notifications,
:bluetooth,
:wifi
] do
Dala.Platform.Native.request_permission(capability)
socket
end
end