Long-press do botão 0 na webOS LG: atalho oculto para devs

Long-press do botão 0 na webOS LG: atalho oculto para devs

O atalho que 90% dos usuários de Smart TV ignoram — e que devs deveriam entender

Quando eu vi essa dica no Catracalivre.com.br, a primeira coisa que pensei não foi “que legal”, mas sim: isso é um padrão de UX que se repete em todo sistema operacional decente. Atalhos para reduzir atrito entre o usuário e a função mais usada. A diferença é que, na webOS da LG, esse padrão foi empurrado para o controle remoto de uma forma que pouca gente explora.

Manter o botão 0 pressionado por três segundos em uma TV LG compatível com webOS abre o Quick Access — um menu onde você associa os números de 1 a 8 a aplicativos, canais ou entradas HDMI. Depois, basta segurar o número escolhido e pronto: você cai direto no destino. Sem passar pela home, sem scrollar barra de apps, sem esperar a animação de boot terminar.

Para o usuário comum, é conveniência. Para quem desenvolve (ou usa) sistemas o dia inteiro, é uma amostra de como design de affordance pode economizar dezenas de horas por ano quando bem aplicado.

O que realmente acontece quando você segura o “0”

Do ponto de vista técnico, o evento não é um simples “keypress”. É um long-press detection implementado em camada de firmware, geralmente usando um temporizador entre 2,5 e 3 segundos para distinguir o gesto de um toque acidental. Quando o threshold é atingido, o sistema dispara uma intent interna que abre o menu de configuração dos atalhos.

Na prática, isso significa três coisas importantes:

  • O 0 não é um destino — é a porta de entrada para gerenciar os atalhos. Quem espera cair num app específico se frustra.
  • Os números 1 a 8 são os slots configuráveis. Limite de oito atalhos é escolha de design, não limitação técnica do hardware.
  • O 9 costuma ficar reservado como fallback do sistema ou, em algumas versões, como “voltar ao canal anterior” (last channel).

Se você já trabalhou com eventos de teclado em qualquer framework, reconhece o padrão: distinguir keydown, keyup e a duração entre eles é o mesmo problema que você resolve em um debounce com threshold. A LG só implementou isso em firmware, sem expor a API para apps de terceiros.

Por que isso interessa para quem trabalha com tech

A webOS não é um sistema operacional de TV como qualquer outro. Ela é uma plataforma web — os apps rodam em um engine baseado em Chromium, e o framework oficial de desenvolvimento é o Enact, um superset do React feito pela própria LG para TVs. Se você já manja de React, dá para portar uma aplicação web para webOS com fricção mínima.

Quando você entende como o controle remoto mapeia intenções do usuário — long-press para configuração, double-tap para alternar função, directional pad para navegação —, fica muito mais fácil projetar interfaces remotas-first que respeitam o contexto da sala de estar. Nada de tooltips que dependem de hover, nada de drag-and-drop, nada de atalhos de teclado que exigem duas mãos.

E, na minha experiência construindo interfaces para dispositivos não-tradicionais, o maior erro que devs cometem é tratar a TV como um monitor gigante. Ela não é. É um dispositivo de 10-foot UX, onde cada clique no controle remoto custa cerca de 1,5 segundo de atrito. Multiplique isso por vinte interações em uma noite de Netflix e você tem meia hora desperdiçada só em navegação.

webOS vs outras plataformas de Smart TV: como cada uma resolve isso

Plataforma Fabricante Recurso equivalente Como ativa
webOS LG Quick Access Long-press no botão 0
Tizen Samsung Atalhos na barra lateral Configuração manual via menu
Android TV / Google TV Sony, TCL, Philips Watchlist + Google Assistant Voz ou “Instalar apps”
tvOS Apple App Library por voz Siri no controle
Roku OS Roku, AOC Canais salvos Long-press no botão de estrela (*)

Repare que a abordagem da LG é a única que não exige navegação por menus para configurar — você já entra direto no gerenciador pelo próprio botão. Roku fica perto (long-press no * salva canal), mas depende de você lembrar qual estrela usar. Apple entrega fluidez via Siri, mas trava quem não fala inglês nativo ou tem sotaque carregado.

Na Prática: configurando seus atalhos em 60 segundos

  1. Com a TV ligada, mantenha o botão 0 pressionado por cerca de três segundos até o menu “Acesso Rápido” aparecer.
  2. Escolha um número de 1 a 8 que ainda não esteja associado a nada.
  3. Selecione o destino: app (Netflix, YouTube, Plex), canal aberto ou entrada HDMI.
  4. Confirme. Pronto — o atalho já está ativo.
  5. Para usar, basta segurar o número correspondente por meio segundo.

Dica que aprendi testando em casa: deixe o slot 1 para o app que você abre todo dia (no meu caso, o Plex rodando um servidor local). Slots 2 e 3 vão para HDMI 1 e HDMI 2 (notebook e Raspberry Pi). O resto eu deixei livre para experimentos.

Implementando long-press detection em um app webOS

Se você for construir um app para webOS — eu já fiz isso para um cliente que queria uma dashboard de métricas na TV da recepção —, vai precisar replicar esse comportamento internamente. A lógica básica é detectar se uma tecla ficou pressionada além de um threshold. Em JavaScript puro, sem Enact:

// Detecção de long-press para o botão "0" do controle remoto webOS
const LONG_PRESS_THRESHOLD_MS = 2500;
const activeTimers = new Map();

function handleKeyDown(event) {
  const keyCode = event.keyCode;
  // Em webOS, o "0" do controle remoto dispara keyCode 48
  if (keyCode === 48 && !activeTimers.has(keyCode)) {
    const timerId = setTimeout(() => {
      console.log('Long-press detectado no botão 0');
      openQuickAccessMenu();
    }, LONG_PRESS_THRESHOLD_MS);
    activeTimers.set(keyCode, timerId);
  }
}

function handleKeyUp(event) {
  const keyCode = event.keyCode;
  if (activeTimers.has(keyCode)) {
    clearTimeout(activeTimers.get(keyCode));
    activeTimers.delete(keyCode);
    // Se soltar antes do threshold, trata como tap normal
    if (Date.now() - pressStartTime < LONG_PRESS_THRESHOLD_MS) {
      console.log('Tap normal no botão 0');
    }
  }
}

let pressStartTime = Date.now();
document.addEventListener('keydown', (e) => {
  pressStartTime = Date.now();
  handleKeyDown(e);
});
document.addEventListener('keyup', handleKeyUp);

O segredo aqui é armazenar timers em um Map em vez de variáveis soltas, porque o controle remoto pode disparar múltiplos keydown seguidos (especialmente em modelos mais antigos). Se você esquecer o clearTimeout no keyup, vai acabar abrindo menus fantasma — e aí o usuário vai achar que a TV está possuída.

Erros comuns que eu já vi (e cometi)

1. Confundir long-press com pressionar rápido. Toques curtos em slots já configurados abrem o destino; só segurar por mais tempo abre o menu de edição. Se você quer reconfigurar, precisa segurar por três segundos. Tem gente que reclama que “não funciona” e, na verdade, está soltando rápido demais.

2. Esperar que o slot funcione com a TV desligada. O Quick Access só funciona em TVs com o sistema operacional inicializado. Em standby de hardware, o controle remoto não passa pelo mesmo pipeline de eventos.

3. Misturar perfis de usuário. Em TVs com múltiplos perfis (recurso que apareceu na webOS 6.0+), os atalhos são por perfil. Se você configurou tudo no seu perfil e alguém entrou com outro login, vai parecer que sumiu.

4. Não considerar a versão do webOS. Modelos anteriores a 2019 usam o botão 0 como atalho para legendas (closed captions). Se a sua TV é mais antiga, pode ser que essa dica simplesmente não se aplique — teste primeiro.

5. Encher os oito slots por enchê-los. Curadoria é mais importante que quantidade. Se você associa entradas que não usa, o atalho vira ruído e você acaba voltando à navegação manual. Mantenha três ou quatro slots estratégicos e deixa o resto vazio.

FAQ — Perguntas que devs realmente fazem

Esse recurso funciona em todas as TVs LG?
Não. Apenas em modelos com webOS a partir da versão 4.0 (lançada em 2018). TVs mais antigas rodavam NetCast, que tem arquitetura completamente diferente. Para descobrir a sua versão: Configurações > Geral > Sobre esta TV > Versão do webOS.

Posso programar atalhos via API ou linha de comando?
Não diretamente. A configuração é gerenciada pelo firmware e exposta apenas pela interface gráfica. Para automação residencial, dá para simular o long-press via integração com Home Assistant usando o componente webostv, enviando o evento de tecla via LG ThinQ.

Os atalhos sobrevivem a factory reset?
Não. Reset de fábrica apaga todas as associações, e você precisa reconfigurar do zero. Backup de configurações de Smart TV ainda é um problema em aberto no mercado inteiro, não só na LG.

Funciona com apps de terceiros não-oficiais (modo dev)?
Sim, mas você precisa habilitar o Developer Mode da webOS e instalar o app via SSH. Os atalhos do Quick Access reconhecem o app instalado, independente da origem.

Por que limitar a 8 atalhos?
Decisão de UX, não técnica. O controle remoto tem 10 teclas numéricas (0–9), mas o 0 virou gerenciador e o 9 ficou reservado. Sobram oito slots — alinhado com a regra de Miller sobre capacidade de memória de trabalho. Mais que oito, e o usuário não lembra qual número é qual app.

Vale a pena configurar?

Se você usa a TV todos os dias — e como dev, provavelmente usa para screencast, pair programming ou aquela sessão de fundo com lo-fi enquanto compila —, sim. Sessenta segundos de configuração para economizar, realisticamente, uns quinze minutos por semana de navegação. Em um ano, são quase treze horas recuperadas. É o tipo de ROI que faria qualquer product manager sorrir.

E mais: entender esse padrão de long-press oculto abre mentalidade para outros fabricantes. A partir de agora, você vai olhar para cada controle remoto com olhos de dev: qual gesto está escondido? qual affordance a fabricante escolheu privilegiar? É um exercício barato de design literacy que vale para qualquer produto físico.

Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.

Y

Yuri Sousa

Front-End Developer / Designer

Desenvolvedor apaixonado por criar experiências digitais acessíveis e visualmente perfeitas. Escrevo sobre desenvolvimento web, design e tecnologia.