Implémenter le retour haptique

Les fabricants d'appareils sont généralement considérés comme propriétaires des éléments privés créés pour chaque appareil. Par conséquent, leurs efforts d'ingénierie sont souvent axés sur une base par appareil. Peu ou pas d'efforts sont consacrés à la cohérence des autres appareils de l'écosystème.

À l'inverse, les développeurs s'efforcent de créer des applications qui fonctionnent sur tous les téléphones Android de l'écosystème, quelles que soient les spécifications techniques de chaque appareil. Cette différence d'approche peut entraîner un problème de fragmentation. Par exemple, les fonctionnalités matérielles de certains téléphones ne correspondent pas aux attentes des développeurs d'applications. Ainsi, si les API haptiques fonctionnent sur certains téléphones Android, mais pas sur d'autres, l'écosystème est incohérent. C'est pourquoi la configuration matérielle joue un rôle essentiel pour que les fabricants puissent implémenter les API haptiques Android sur tous les appareils.

Cette page fournit une checklist détaillée pour configurer la conformité matérielle afin d'optimiser l'utilisation des API haptiques Android.

La figure ci-dessous illustre la création de connaissances communes entre les fabricants d'appareils et les développeurs, une étape essentielle pour créer un écosystème cohérent.

Schéma des cas d'utilisation de la haptique pour les développeurs d'applications et les fabricants d'appareils

Figure 1 : Développer les connaissances entre les fabricants et les développeurs d'appareils

Checklist d'implémentation de la haptique

  1. Implémenter des constantes

    • Liste des constantes à implémenter pour la haptique.
  2. Mappage des constantes entre HAL et l'API

  3. Évaluer le matériel

    • Instructions concernant les effets haptiques cibles. Suivez ces instructions pour effectuer des vérifications rapides sur votre matériel.

Nous reviendrons plus en détail sur chacune de ces étapes ci-dessous.

Étape 1: Implémentez des constantes

Effectuez ces vérifications pour déterminer si votre appareil remplit les conditions minimales requises pour implémenter la haptique.

Organigramme du processus d'implémentation de la haptique

Figure 2. Implémenter des effets

Organigramme des étapes d'implémentation des primitives

Figure 3. Implémenter des primitives

Vérifiez l'état d'implémentation des constantes haptiques suivantes.

Constantes haptiques Lieux et résumés
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK Classe VibrationEffect
Les constantes haptiques dans VibrationEffect n'incluent aucune notion d'événements d'entrée et ne comportent aucun élément d'interface utilisateur. Les constantes incluent plutôt la notion de niveaux d'énergie, tels que EFFECT_CLICK et EFFECT_HEAVY_CLICK, qui sont appelés par createPredefined().
PRIMITIVE_TICK, PRIMITIVE_CLICK, PRIMITIVE_LOW_TICK>, PRIMITIVE_SLOW_RISE, PRIMITIVE_QUICK_RISE, PRIMITIVE_QUICK_FALL, PRIMITIVE_SPIN, PRIMITIVE_THUD Classe VibrationEffect.Composition
Les constantes haptiques dans VibrationEffect.Composition sont autorisées à avoir une intensité évolutive, qui est appelée par addPrimitive(int primitiveId, float scale, int delay).

Les vibrations alternatives décrites ci-dessous sont effectuées sur les appareils qui n'implémentent pas les constantes VibrationEffect. Nous vous recommandons de mettre à jour ces configurations pour optimiser les performances sur ces appareils.

  1. EFFECT_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les délais configurés sur frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  2. EFFECT_HEAVY_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les délais configurés sur frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

  3. EFFECT_DOUBLE_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les temps (0, 30, 100, 30).

  4. EFFECT_TICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les délais configurés sur frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Organigramme des étapes à suivre pour tester le retour haptique

Figure 4. Implémenter des constantes de retour

Vérifiez l'état des constantes de commentaires publics suivantes.

Constantes haptiques Lieux et résumés
CLOCK_TICK, CONTEXT_CLICK, KEYBOARD_PRESS, KEYBOARD_RELEASE, KEYBOARD_TAP, LONG_PRESS, TEXT_HANDLE_MOVE, VIRTUAL_KEY, VIRTUAL_KEY_RELEASE, CONFIRM, REJECT, GESTURE_START, GESTURE_END Classe HapticFeedbackConstants
Les constantes haptiques dans HapticFeedbackConstants aident les événements d'entrée avec certains éléments d'interface utilisateur, tels que KEYBOARD_PRESS etKEYBOARD_RELEASE, qui sont appelés parperformHapticFeedback().

Étape 2: Mapper les constantes entre HAL et l'API

L'étape 2 présente les mappages recommandés entre les constantes HAL publiques et les constantes de l'API. Si le matériel évalué à l'étape 1 n'implémente pas les constantes HAL, l'étape 2 doit être utilisée pour mettre à jour les modèles de remplacement décrits à l'étape 1 afin de générer des résultats similaires. Le mappage est assisté par deux modèles par défaut différents.

  • Modèle discret (simple)

    • L'amplitude est la variable clé de ce modèle. Chaque entité du HAL représente une amplitude haptique différente.
    • Ce modèle est une exigence minimale requise pour implémenter l'expérience haptique de base.
    • Une expérience haptique plus avancée nécessite du matériel et un modèle avancés (modèle continu).
  • Modèle continu (avancé)

    • La texture et l'amplitude sont les variables clés de ce modèle. Chaque entité du HAL représente différentes textures haptiques. L'amplitude de chaque entité HAL est contrôlée par le facteur d'échelle (S).
    • Ce modèle nécessite du matériel avancé. Si les OEM souhaitent utiliser une expérience utilisateur haptique avancée avec VibrationEffect.Composition (pour une utilisation optimale des dernières API haptiques), nous recommandons d'implémenter leur matériel à l'aide de ce modèle.

Modèle discret

Il est recommandé de mapper toutes les constantes publiques fournies dans l'API avec les constantes HAL appropriées. Pour commencer ce processus, déterminez le nombre de formes d'onde haptique à amplitude discrète que l'appareil peut définir dans le HAL. Une question spécifique structurée autour de cette notion se présente comme suit: Combien d'effets haptiques à impulsion unique avec des différences d'amplitude perceptibles par l'homme peuvent être définis sur mon téléphone ? La réponse à cette question détermine la mise en correspondance.

La définition des constantes HAL est un processus dépendant du matériel. Par exemple, un téléphone d'entrée de gamme ne peut disposer que des fonctionnalités matérielles permettant de produire une seule forme d'onde haptique. Les appareils dotés de composants matériels plus avancés produisent une plage plus large de niveaux d'amplitude discrets et peuvent définir plusieurs formes d'onde haptique dans le HAL. Le mappage des constantes HAL-API prend la constante HAL (en utilisant l'amplitude moyenne comme référence), puis organise les effets plus forts ou plus faibles à partir de là.

Schéma de la plage constante et des amplitudes de rétroaction des HAL

Figure 5. Plage de constantes HAL par amplitude

Lorsque le nombre de constantes HAL avec une amplitude discrète est défini, il est temps de mapper les constantes HAL et API par le nombre de constantes HAL. Ce processus de mappage peut segmenter une seule constante d'API d'impulsion en trois groupes distincts de niveaux d'amplitude. La segmentation des constantes de l'API est basée sur les principes d'expérience utilisateur pour les événements d'entrée associés. Pour en savoir plus, consultez la section Conception UX haptique.

Modèle discret pour la mise en correspondance des constantes HAL-API

Figure 6. Mappage des constantes HAL-API: modèle discret

Si votre appareil n'est compatible qu'avec deux constantes HAL avec des amplitudes discrètes, envisagez de fusionner les constantes HAL de niveau d'amplitude moyen et élevé. Un exemple de cette notion en pratique consiste à mapper EFFECT_CLICK et EFFECT_HEAVY_CLICK sur la même constante HAL, qui serait la constante HAL de niveau d'amplitude moyen. Si votre appareil n'est compatible qu'avec une constante HAL avec une amplitude discrète, envisagez de fusionner les trois niveaux en un.

Modèle continu

Le modèle continu avec évolutivité de l'amplitude peut être appliqué pour définir des constantes HAL. Un facteur de mise à l'échelle (S) peut être appliqué aux constantes HAL (par exemple, HAL_H0, HAL_H1) pour générer la HAL mise à l'échelle (HAL_H0 x S). Dans ce cas, la HAL mise à l'échelle est mappée pour définir les constantes de l'API (HAL_H0 x S1 = H0S1 = EFFECT_TICK), comme illustré à la figure 7. En utilisant la scalabilité de l'amplitude du modèle continu, un appareil peut stocker un petit nombre de constantes HAL avec des textures distinctives et ajouter des variations d'amplitude en ajustant le facteur de mise à l'échelle (S). Les fabricants d'appareils peuvent définir le nombre de constantes HAL en fonction du nombre de textures haptiques différentes qu'ils souhaitent fournir.

Plage de constantes HAL par texture et amplitude

Figure 7. Plage de constantes HAL par texture (HAL_H0) et échelle d'amplitude (S)

Modèle continu pour le mappage constant de l'API HAL

Figure 8. Mappage des constantes HAL-API: modèle continu

Dans le modèle continu, différentes constantes HAL représentent différentes textures haptiques plutôt que différentes amplitudes. Le facteur de mise à l'échelle (S) peut configurer l'amplitude. Toutefois, comme la perception de la texture (par exemple, la netteté) est liée à la perception de la durée et de l'amplitude, il est recommandé de combiner la texture et le facteur de mise à l'échelle (dans le processus de conception de la mise en correspondance HAL-API).

La figure 7 illustre le mappage de constantes en augmentant la variation d'un HAL à de nombreuses constantes d'API avec une évolutivité d'amplitude.

Augmentation de la variante 1

Augmentation de la variation 2

Figure 9. Augmenter la variation avec évolutivité de l'amplitude

Pour toutes les constantes d'API évolutives telles que PRIMITIVE_TICK et PRIMITIVE_CLICK dans VibrationEffect.Composition, le niveau d'énergie de la constante d'API dépend du paramètre float scale lorsque la constante d'API est déclarée via addPrimitive(int primitiveID, float scale, int delay). PRIMITIVE_TICK et PRIMITIVE_CLICK peuvent être conçus avec une distinction claire à l'aide de constantes HAL différentes. Cette approche est recommandée si vous souhaitez ajouter de la variation à la texture.

Étape 3: Évaluez le matériel

L'évaluation matérielle implique de définir trois effets haptiques, nommés Effets 1, 2 et 3 pour cette évaluation spécifique.

Effet 1: constantes haptiques courtes prédéfinies

La constante VibrationEffect.EFFECT_CLICK correspond à l'effet de référence ou au dénominateur commun dans le mappage HAL-API fourni à l'étape 2. Il est mappé avec l'effet le plus utilisé, HapticFeedbackConstants.KEYBOARD_PRESS. L'évaluation de cet effet permet de déterminer si votre appareil cible est prêt à des retours haptiques clairs.

Effet 2: effet haptique personnalisé court

La constante VibrationEffect.createOneShot(20,255) est destinée aux effets haptiques personnalisés. Pour les impulsions personnalisées courtes et uniques, le seuil maximal recommandé pour définir la durée est de 20 ms. Une seule impulsion de plus de 20 ms n'est pas recommandée, car elle est perçue comme une vibration bourdonnante.

Forme d'onde d'un court effet haptique personnalisé

Figure 10. Effet haptique personnalisé court

Effet 3: Effet haptique personnalisé long avec variation d'amplitude

La constante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) est destinée aux effets personnalisés longs avec variation d'amplitude. La capacité à produire des amplitudes variables pour les effets haptiques personnalisés est l'un des indicateurs permettant d'évaluer les capacités de l'appareil pour les effets haptiques riches. Les valeurs timings [] et amplitudes [] recommandées sont respectivement {500, 500} et {128, 255}, qui présentent une tendance à l'augmentation de l'amplitude de 50% à 100%, avec un taux d'échantillonnage de 500 ms.

Forme d'onde de l'effet haptique avec variation d'amplitude

Figure 11 : Effet haptique personnalisé long avec variation d'amplitude

Pour vérifier les capacités matérielles du contrôle de l'amplitude pour Effect 3, utilisez la méthode Vibrator.hasAmplitudeControl(). Le résultat doit être true pour exécuter VibrationEffect.createWaveform avec une amplitude variable comme prévu.

Organigramme de l'évaluation subjective des effets haptiques

Figure 12. Évaluation du sujet des effets haptiques 1, 2 et 3

Effectuer une évaluation subjective

Pour effectuer un contrôle rapide de la cohérence, effectuez d'abord une évaluation subjective. L'objectif de l'évaluation subjective est d'observer l'amplitude des effets haptiques afin de déterminer si l'appareil peut générer des signaux haptiques avec des amplitudes perceptibles par l'humain.

Une question spécifique structurée autour de cette notion se présente comme suit: L'appareil peut-il produire des effets haptiques perceptibles pour les utilisateurs comme prévu ? Répondre à cette question vous permet d'éviter les échecs haptiques, y compris les haptiques imperceptibles que les utilisateurs ne peuvent pas ressentir ou les haptiques involontaires où les formes d'ondes ne produisent pas de motifs comme prévu.

Effectuer une évaluation avancée

Nous vous recommandons vivement d'effectuer des évaluations de qualité avancées. Les évaluations de qualité avancées caractérisent les attributs quantifiables des effets haptiques pour implémenter des effets haptiques de qualité. Une fois terminé, les fabricants d'appareils doivent pouvoir diagnostiquer l'état actuel de la technologie haptique, ce qui leur permet de définir des objectifs pour améliorer la qualité globale. Consultez la section Évaluation du matériel.