Packages
mob
0.7.0
0.7.20
0.7.19
0.7.18
0.7.17
0.7.16
0.7.15
0.7.14
0.7.13
0.7.12
0.7.11
0.7.10
0.7.9
0.7.8
0.7.7
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.26
0.6.25
0.6.24
0.6.23
0.6.22
0.6.21
0.6.20
0.6.19
0.6.18
0.6.17
0.6.16
0.6.15
0.6.14
0.6.13
0.6.12
0.6.11
0.6.10
0.6.9
0.6.8
0.6.7
0.6.6
0.6.5
0.6.2
0.6.1
0.6.0
0.5.18
0.5.17
0.5.16
0.5.15
0.5.14
0.5.11
0.5.10
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.0
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
BEAM-on-device mobile framework for Elixir
Current section
Files
Jump to
Current section
Files
lib/mob/haptic.ex
defmodule Mob.Haptic do
@moduledoc """
Haptic feedback. No permission required on either platform.
## Usage
# In a handle_event or handle_info:
def handle_event("purchase", _params, socket) do
Mob.Haptic.trigger(socket, :success)
{:noreply, socket}
end
## Feedback types
| Type | Feel |
|------------|-----------------------------------|
| `:light` | Brief, light tap |
| `:medium` | Standard tap |
| `:heavy` | Strong tap |
| `:success` | Success pattern (double tap) |
| `:error` | Error pattern (triple tap) |
| `:warning` | Warning pattern (irregular taps) |
iOS uses `UIImpactFeedbackGenerator` / `UINotificationFeedbackGenerator`.
Android uses `View.performHapticFeedback` with `HapticFeedbackConstants`.
"""
@types [:light, :medium, :heavy, :success, :error, :warning]
@doc """
Fire a haptic feedback pulse. Returns the socket unchanged so it can be
used inline without disrupting the handle_event return value.
Mob.Haptic.trigger(socket, :light)
"""
@spec trigger(Mob.Socket.t(), atom()) :: Mob.Socket.t()
def trigger(socket, type) when type in @types do
:mob_nif.haptic(type)
socket
end
end