# Overview

A feedback theme defines the kind of feedback that events (as
described in the [Event naming spec][]) will trigger.

The feedback daemon is responsible to select an appropriate feedback
theme for a given device.

# Definitions

- Feedback: A feedback is something that notifies the user that
  s.th. happened (e.g. a played sound, the vibration of a haptic
  motor or led blinking).

- Feedback theme: A feedback theme is a set of feedbacks grouped by
  profiles. Each feedback is mapped to a single event.

- Feedback Profile: A feedback profile groups feedbacks by
  "noisiness". The currently defined profiles names are
  *full*, *quiet* and *silent*. With *full* being the noisiest
  profile.

- Event: What the user should be notified about. The event
  names are built according to the [Event naming spec][].

# Implementation

When an application triggers feedback for an event in the feedback
daemon the daemon selects the provided feedback like this:

1. feedbacks from a nosier profiles like the currently selected are
   ignored

2. All other feedbacks for this event are selected and run to provide
   feedback to the user

With the above a feedback theme in YAML format could look like:

```yaml
full:
    - event-name: phone-incoming-call
      type: Sound
      effect: phone-incoing-call
    - event-name: message-new-sms
    ...
quiet:
    - event-name: phone-incoming-call
      type: Vibra
      duration: 0.5s
    - event-name: message-new-sms
    ...
silent:
    - event-name: phone-incoming-call
      type: Led
      location: Front
      Color: Green
      Interval: 0.2s
    - event-name: message-new-sms
    ...
```

At the time of writing the theme format is daemon dependent. E.g. feedbackd
uses a format [similar to the above in JSON](./data/default.json).


# Recommendations

- The silent theme should not produce any audible feedback. This includes
  the buzzing of haptic motors.
- The quiet theme should not play any sounds. Haptic motors and LEDs can
  be used.
- The full feedback theme can use any available feedback mechanisms

[Event naming spec]: ./Event-naming-spec-0.0.0.md
