Mise en œuvre de l'haptique

Les fabricants d'appareils sont généralement considérés comme les propriétaires des actifs privés créés pour chaque appareil. En tant que tels, leurs efforts d'ingénierie sont souvent concentré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'opposé, 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 capacités matérielles de certains téléphones ne correspondent pas aux attentes définies par les développeurs d'applications. Donc, si les API haptiques fonctionnent sur certains téléphones Android mais pas sur d'autres, le résultat est un écosystème incohérent. C'est pourquoi la configuration matérielle joue un rôle essentiel pour garantir que les fabricants peuvent implémenter les API haptiques Android sur chaque appareil.

Cette page fournit une liste de contrôle étape par étape pour configurer la conformité du matériel afin d'utiliser au mieux les API haptiques Android.

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

Diagramme de cas d'utilisation de l'haptique pour les développeurs d'applications et les fabricants d'appareils

Figure 1. Renforcement des connaissances entre les fabricants d'appareils et les développeurs

Liste de contrôle de mise en œuvre de l'haptique

  1. Implémenter les constantes

    • Liste des constantes pour implémenter l'haptique.
  2. Mappez les constantes entre HAL et l'API

  3. Évaluer le matériel

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

Nous allons explorer chacune de ces étapes plus en détail ci-dessous.

Étape 1 : Implémenter des constantes

Effectuez ces vérifications pour déterminer si votre appareil répond aux exigences minimales pour mettre en œuvre l'haptique.

Organigramme du processus de mise en œuvre de l'haptique

Figure 2. Mise en œuvre des effets

Organigramme des étapes d'implémentation des primitives

Figure 3. Implémentation de primitives

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

Constantes haptiques Emplacements 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 n'ont aucun élément d'interface utilisateur. Les constantes incluent la notion de niveaux d'énergie à la place, comme EFFECT_CLICK et EFFECT_HEAVY_CLICK , qui sont appelées par createPredefined() .
PRIMITIVE_TICK , PRIMITIVE_CLICK , PRIMITIVE_LOW_TICK> , PRIMITIVE_SLOW_RISE , PRIMITIVE_QUICK_RISE , PRIMITIVE_QUICK_FALL , PRIMITIVE_SPIN , PRIMITIVE_THUD VibrationEffect.Composition classe
Les constantes haptiques dans VibrationEffect.Composition sont autorisées à avoir une intensité évolutive, qui sont appelées par addPrimitive(int primitiveId, float scale, int delay) .

Les vibrations alternatives décrites ci-dessous seront effectuées sur des appareils qui n'implémentent pas les constantes VibrationEffect . Il est recommandé de mettre à jour ces configurations pour qu'elles fonctionnent au mieux sur ces appareils.

  1. EFFECT_CLICK

    Vibration de forme d'onde créée avec VibrationEffect.createWaveform et les minutages configurés dans 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 minutages configurés dans 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 timings (0, 30, 100, 30).

  4. EFFECT_TICK

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

Organigramme des étapes pour tester le retour haptique

Figure 4. Implémentation des constantes de rétroaction

Vérifiez l'état des constantes de rétroaction publiques suivantes.

Constantes haptiques Emplacements 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 class
Les constantes haptiques dans HapticFeedbackConstants assistent les événements d'entrée avec certains éléments de l'interface utilisateur, tels que KEYBOARD_PRESS et KEYBOARD_RELEASE , qui sont appelés par performHapticFeedback() .

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

L'étape 2 présente les mappages recommandés entre les constantes HAL publiques et les constantes 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 secours décrits à l'étape 1 afin de générer des sorties similaires. La cartographie est assistée 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é dans le HAL représente une amplitude haptique différente.
    • Ce modèle est une exigence minimale nécessaire pour mettre en œuvre l'UX haptique de base.
    • Une UX haptique plus avancée nécessite un matériel avancé et un modèle avancé (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 un 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), il est recommandé 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écouvrez combien de formes d'onde haptiques avec une amplitude discrète l'appareil peut définir dans le HAL. Une question spécifique structurée autour de cette notion ressemble à ceci : combien d'effets haptiques à impulsion unique avec des différences d'amplitude perceptibles par l'homme peuvent être définis dans mon téléphone ? La réponse à cette question détermine la cartographie.

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 peut n'avoir que les capacités matérielles pour produire une seule forme d'onde haptique. Les appareils dotés de composants matériels plus avancés produisent une gamme plus large de niveaux d'amplitude discrets et peuvent définir plusieurs formes d'onde haptiques dans le HAL. Le mappage constant HAL-API prend la constante HAL (en utilisant l'amplitude moyenne comme ligne de base), puis organise des effets plus forts ou plus faibles à partir de là.

Diagramme de la plage constante HAL et des amplitudes de rétroaction

Figure 5. Plage constante 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 API d'impulsion en jusqu'à trois groupes discrets de niveaux d'amplitude. La façon dont les constantes d'API sont segmentées est basée sur les principes UX pour accompagner les événements d'entrée. Pour plus d'informations, voir Haptics UX Design .

Modèle discret pour le mappage constant HAL-API

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

Si votre appareil ne prend en charge que deux constantes HAL avec des amplitudes discrètes, envisagez de fusionner les constantes HAL de niveau d'amplitude moyenne et élevée. Un exemple de cette notion dans la pratique serait de mapper EFFECT_CLICK et EFFECT_HEAVY_CLICK sur la même constante HAL, qui serait la constante HAL de niveau d'amplitude moyenne. Si votre appareil ne prend en charge qu'une seule constante HAL avec une amplitude discrète, envisagez de fusionner les trois niveaux en un seul.

Modèle continu

Le modèle continu avec évolutivité d'amplitude peut être appliqué pour définir des constantes HAL. Un facteur d'échelle ( S ) peut être appliqué aux constantes HAL (par exemple, HAL_H0 , HAL_H1 ) pour produire le HAL mis à l'échelle ( HAL_H0 x S ). Dans ce cas, le HAL mis à l'échelle est mappé pour définir les constantes API ( HAL_H0 x S1 = H0S1 = EFFECT_TICK ) comme le montre la figure 7. En utilisant l'évolutivité d'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 d'é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 constante HAL par texture et amplitude

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

Modèle continu pour le mappage constant HAL-API

Figure 8. Mappage constant 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 d'échelle ( S ) peut configurer l'amplitude. Cependant, étant donné que 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 d'échelle (dans le processus de conception du mappage HAL-API).

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

Augmentation de la variation 1

Augmentation de la variation 2

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

Remarque : la figure ci-dessus illustre une instance spécifique de mappage de constantes, les conventions de dénomination sont donc hypothétiques. L'exécution de ce processus est unique pour chaque fabricant d'appareils.

Pour toutes les constantes API évolutives telles que PRIMITIVE_TICK et PRIMITIVE_CLICK dans VibrationEffect.Composition , le niveau d'énergie de la constante API dépend du paramètre float scale lorsque la constante 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 en utilisant différentes constantes HAL. Cette approche est recommandée si vous souhaitez ajouter une variation à la texture .

Étape 3 : évaluer le matériel

L'évaluation du matériel implique la définition de trois effets haptiques, étiquetés Effets 1, 2 et 3 pour cette évaluation spécifique.

Effet 1 : constantes haptiques courtes prédéfinies

La constante VibrationEffect.EFFECT_CLICK est l'effet de base ou le dénominateur commun dans le mappage HAL-API fourni à l'étape 2. Elle est mappée avec l'effet le plus utilisé, HapticFeedbackConstants.KEYBOARD_PRESS . L'évaluation de cet effet permet de déterminer l'état de préparation de votre appareil cible pour l'haptique claire .

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, 20 ms est le seuil maximal recommandé pour définir la durée. 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 de l'effet haptique personnalisé court

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 longs effets personnalisés 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 haptiques riches . Les timings [] et les amplitudes [] sont {500, 500} et {128, 255} , respectivement, ce qui présente une tendance à la hausse de l'amplitude de 50 % à 100 %, avec un taux d'échantillonnage de 500 ms.

Forme d'onde à 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 d'amplitude pour l'effet 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 de l'effet haptique

Figure 12. Évaluation par le sujet de l'effet haptique 1, 2 et 3

Effectuer une évaluation subjective

Pour une vérification rapide de la cohérence, effectuez d'abord une évaluation subjective. Le but de l'évaluation subjective est d'observer l'amplitude des effets haptiques pour déterminer si l'appareil peut générer des haptiques avec des amplitudes perceptibles par l'homme.

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