Implementar retorno tátil

Os fabricantes de dispositivos geralmente são considerados os proprietários dos recursos privados criados para cada dispositivo. Por isso, os esforços de engenharia geralmente são focados em uma base por dispositivo. Pouco ou nenhum esforço é feito para a consistência de outros dispositivos no ecossistema.

Em contraste direto, os desenvolvedores se esforçam para criar apps que funcionem em todos os smartphones Android no ecossistema, independentemente das especificações técnicas de cada dispositivo. Essa diferença na abordagem pode causar um problema de fragmentação. Por exemplo, os recursos de hardware de alguns smartphones não correspondem às expectativas definidas pelos desenvolvedores do app. Portanto, se as APIs de retorno tátil funcionarem em alguns smartphones Android, mas não em outros, o resultado será um ecossistema inconsistente. É por isso que a configuração de hardware desempenha um papel fundamental para garantir que os fabricantes possam implementar APIs de retorno tátil do Android em todos os dispositivos.

Esta página fornece uma lista de verificação detalhada para configurar a conformidade de hardware para o melhor uso das APIs táteis do Android.

A figura abaixo ilustra a criação de conhecimento comum entre fabricantes de dispositivos e desenvolvedores, que é uma etapa essencial para criar um ecossistema coerente.

Diagrama de casos de uso de haptics para desenvolvedores de apps e fabricantes de dispositivos

Figura 1. Criar conhecimento entre fabricantes de dispositivos e desenvolvedores

Lista de verificação para implementação de haptics

  1. Implementar constantes

    • Lista de constantes para implementar o retorno tátil.
  2. Mapear constantes entre HAL e API

  3. Avaliar o hardware

    • Instruções sobre como segmentar efeitos hápticos. Use estas instruções para realizar verificações rápidas no hardware.

Vamos explorar cada uma dessas etapas com mais detalhes abaixo.

Etapa 1: implementar constantes

Realize essas verificações para determinar se o dispositivo atende aos requisitos mínimos para implementar a resposta tátil.

Fluxograma do processo de implementação de haptics

Figura 2. Implementar efeitos

Fluxograma das etapas para implementar primitivos

Figura 3. Implementação de primitivos

Verifique o status de implementação das constantes táteis a seguir.

Constantes táteis Locais e resumos
EFFECT_TICK, EFFECT_CLICK, EFFECT_HEAVY_CLICK, EFFECT_DOUBLE_CLICK Classe VibrationEffect
As constantes táteis em VibrationEffect não incluem nenhuma noção de eventos de entrada e não têm elementos de interface. As constantes incluem a noção de níveis de energia, como EFFECT_CLICK e EFFECT_HEAVY_CLICK, que são chamados por createPredefined().
PRIMITIVE_TICK, PRIMITIVE_CLICK, PRIMITIVE_LOW_TICK>, PRIMITIVE_SLOW_RISE, PRIMITIVE_QUICK_RISE, PRIMITIVE_QUICK_FALL, PRIMITIVE_SPIN, PRIMITIVE_THUD Classe VibrationEffect.Composition
As constantes táteis em VibrationEffect.Composition podem ter intensidade escalonável, que são chamadas por addPrimitive(int primitiveId, float scale, int delay).

As vibrações alternativas descritas abaixo são realizadas em dispositivos que não implementam as constantes VibrationEffect. Recomendamos atualizar essas configurações para ter um melhor desempenho nesses dispositivos.

  1. EFFECT_CLICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_virtualKeyVibePattern.

  2. EFFECT_HEAVY_CLICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_longPressVibePattern.

  3. EFFECT_DOUBLE_CLICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos (0, 30, 100, 30).

  4. EFFECT_TICK

    Vibração de forma de onda criada com VibrationEffect.createWaveform e os tempos configurados em frameworks/base/core/res/res/values/config.xml##config_clockTickVibePattern.

Fluxograma de etapas para testar o retorno tátil

Figura 4. Implementar constantes de feedback

Verifique o status das seguintes constantes de feedback público.

Constantes de retorno tátil Locais e resumos
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
As constantes hápticas em HapticFeedbackConstants auxiliam os eventos de entrada com determinados elementos da IU, como KEYBOARD_PRESS e KEYBOARD_RELEASE, que são chamados por performHapticFeedback().

Etapa 2: mapear constantes entre HAL e API

A etapa 2 apresenta mapeamentos recomendados entre constantes públicas do HAL e constantes da API. Se o hardware avaliado na etapa 1 não implementar as constantes HAL, use a etapa 2 para atualizar os padrões de substituição descritos na etapa 1 e gerar saídas semelhantes. O mapeamento é auxiliado por dois modelos padrão diferentes.

  • Modelo discreto (simples)

    • A amplitude é a variável principal desse modelo. Cada entidade na HAL representa uma amplitude tátil diferente.
    • Esse modelo é um requisito mínimo necessário para implementar a UX táctil básica.
    • Uma UX háptica mais avançada requer hardware e um modelo avançados (modelo contínuo).
  • Modelo contínuo (avançado)

    • Textura e amplitude são as principais variáveis desse modelo. Cada entidade no HAL representa diferentes texturas táteis. A amplitude de cada entidade HAL é controlada pelo fator de escalonamento (S).
    • Esse modelo requer hardware avançado. Se os OEMs quiserem usar uma UX háptica avançada com VibrationEffect.Composition (para o melhor uso das APIs hápticas mais recentes), é recomendável implementar o hardware usando esse modelo.

Modelo discreto

É recomendável mapear todas as constantes públicas fornecidas na API com constantes da HAL adequadas. Para iniciar esse processo, descubra quantas formas de onda táteis com amplitude discreta o dispositivo pode definir no HAL. Uma pergunta específica estruturada em torno dessa noção é mais ou menos assim: Quantos efeitos hápticos de impulso único com diferenças de amplitude perceptíveis pelo ser humano podem ser definidos no meu smartphone? A resposta a essa pergunta determina o mapeamento.

A definição de constantes da HAL é um processo dependente de hardware. Por exemplo, um smartphone básico pode ter apenas os recursos de hardware para produzir uma única forma de onda háptica. Dispositivos com componentes de hardware mais avançados produzem uma gama mais ampla de níveis de amplitude discretos e podem definir várias formas de onda táteis na HAL. O mapeamento de constantes da API HAL usa a constante HAL (usando a amplitude média como referência) e organiza efeitos mais fortes ou mais fracos a partir daí.

Diagrama do intervalo constante e das amplitudes de feedback da HAL

Figura 5. Faixa constante de HAL por amplitude

Quando o número de constantes da HAL com amplitude discreta é definido, é hora de mapear as constantes HAL e de API pelo número de constantes da HAL. Esse processo de mapeamento pode segmentar uma única constante da API de impulso em até três grupos discretos de níveis de amplitude. A forma como as constantes da API são segmentadas é baseada em princípios de UX para acompanhar eventos de entrada. Para mais informações, consulte Design de UX de haptics.

Modelo discreto para mapeamento de constantes da API HAL

Figura 6. Mapeamento de constante HAL-API: modelo discreto

Se o dispositivo oferecer suporte apenas a duas constantes HAL com amplitudes discretas, considere mesclar as constantes HAL de nível de amplitude Média e Alta. Um exemplo dessa noção na prática seria mapear EFFECT_CLICK e EFFECT_HEAVY_CLICK para a mesma constante HAL, que seria a constante HAL do nível de amplitude média. Se o dispositivo oferecer suporte apenas a uma constante HAL com amplitude discreta, considere mesclar os três níveis em um.

Modelo contínuo

O modelo contínuo com escalonamento de amplitude pode ser aplicado para definir constantes HAL. Um fator de escala (S) pode ser aplicado às constantes da HAL (por exemplo, HAL_H0, HAL_H1) para produzir a HAL dimensionada (HAL_H0 x S). Nesse caso, a HAL dimensionada é mapeada para definir constantes da API (HAL_H0 x S1 = H0S1 = EFFECT_TICK), conforme mostrado na Figura 7. Ao usar a escalabilidade de amplitude do modelo contínuo, um dispositivo pode armazenar um pequeno número de constantes HAL com texturas distintas e adicionar variações de amplitude ajustando o fator de escala (S). Os fabricantes de dispositivos podem definir o número de constantes HAL com base no número de texturas táteis diferentes que querem oferecer.

Faixa constante do HAL por textura e amplitude

Figura 7. Faixa de constante HAL por textura (HAL_H0) e escala de amplitude (S)

Modelo contínuo para mapeamento de constantes da API HAL

Figura 8. Mapeamento de constante de API HAL: modelo contínuo

No modelo contínuo, diferentes constantes HAL representam diferentes texturas hápticas em vez de diferentes amplitudes. O fator de escala (S) pode configurar a amplitude. No entanto, como a percepção da textura (por exemplo, nitidez) está relacionada à percepção da duração e da amplitude, é recomendável combinar a textura e o fator de escala (no processo de design do mapeamento HAL-API).

A Figura 7 ilustra o mapeamento constante aumentando a variação de um HAL para muitas constantes de API com escalonamento de amplitude.

Variável crescente 1

Variar crescente 2

Figura 9. Como aumentar a variação com a escalonabilidade de amplitude

Para todas as constantes de API escalonáveis, como PRIMITIVE_TICK e PRIMITIVE_CLICK em VibrationEffect.Composition, o nível de energia da constante da API depende do parâmetro float scale quando a constante da API é declarada por addPrimitive(int primitiveID, float scale, int delay). PRIMITIVE_TICK e PRIMITIVE_CLICK podem ser projetados com uma distinção clara usando diferentes constantes do HAL. Essa abordagem é recomendada se você quiser adicionar variação à textura.

Etapa 3: avaliar o hardware

A avaliação de hardware envolve a definição de três efeitos hápticos, rotulados como Efeitos 1, 2 e 3 para essa avaliação específica.

Efeito 1: constantes táteis curtas predefinidas

A constante VibrationEffect.EFFECT_CLICK é o efeito de referência ou denominador comum no mapeamento da API HAL fornecido na etapa 2. Ele é mapeado com o efeito mais usado, HapticFeedbackConstants.KEYBOARD_PRESS. A avaliação desse efeito ajuda a determinar a prontidão do dispositivo de destino para retorno tátil claro.

Efeito 2: efeito tátil personalizado e curto

A constante VibrationEffect.createOneShot(20,255) é para efeitos táteis personalizados. Para impulsos personalizados curtos, 20 ms é o limite máximo recomendado para definir a duração. Um único impulso maior que 20 ms não é recomendado porque é percebido como uma vibração barulhenta.

Forma de onda de um efeito tátil personalizado curto

Figura 10. Efeito tátil personalizado curto

Efeito 3: efeito tátil personalizado longo com variação de amplitude

A constante VibrationEffect.createWaveform(timings[], amplitudes[], int repeat) é para efeitos personalizados longos com variação de amplitude. A capacidade de produzir amplitudes variadas para efeitos hápticos personalizados é um dos indicadores para avaliar os recursos do dispositivo para háptica avançada. Os timings [] e amplitudes [] recomendados são {500, 500} e {128, 255}, respectivamente, o que apresenta uma tendência crescente de amplitude de 50% a 100%, com uma taxa de amostragem de 500 ms.

Forma de onda de efeito tátil com variação de amplitude

Figura 11. Efeito tátil longo personalizado com variação de amplitude

Para verificar os recursos de hardware do controle de amplitude do Efeito 3, use o método Vibrator.hasAmplitudeControl(). O resultado precisa ser true para executar VibrationEffect.createWaveform com amplitude variável conforme o esperado.

Fluxograma da avaliação subjetiva do efeito háptico

Figura 12. Avaliação do sujeito do efeito tátil 1, 2 e 3

Fazer uma avaliação subjetiva

Para uma verificação rápida de coerência, primeiro faça uma avaliação subjetiva. O objetivo da avaliação subjetiva é observar a amplitude dos efeitos hápticos para determinar se o dispositivo pode gerar háptica com amplitudes perceptíveis pelo ser humano.

Uma pergunta específica estruturada com base nessa noção tem esta aparência: o dispositivo pode produzir efeitos táteis perceptíveis para os usuários conforme esperado? Responder a essa pergunta ajuda a evitar hápticas com falhas, incluindo hápticas imperceptíveis que os usuários não conseguem sentir ou hápticas indesejadas em que os formatos de onda não produzem padrões como pretendido.

Fazer uma avaliação avançada

É altamente recomendável realizar avaliações de qualidade avançadas. As avaliações de qualidade avançadas caracterizam atributos quantificáveis de efeitos hápticos para implementar háptica de qualidade. Ao terminar, os fabricantes de dispositivos poderão diagnosticar o status atual da resposta tátil, o que significa que eles podem definir metas para melhorar a qualidade geral. Consulte Avaliação de hardware.