minitruco-android icon indicating copy to clipboard operation
minitruco-android copied to clipboard

Suporte a FireTV e outros dispositivos sem touch

Open chesterbr opened this issue 2 years ago • 3 comments

Esses dias eu fui debugar o Bluetooth, e tentei fazer isso na minha FireTV; percebi que o jogo funciona no geral, mas com dois problemas:

  • Não consegui parear a TV com meu celular (pode ser algo aqui; talvez abra uma issue separada - estava pensando em fazer o pareamento voltar a ser opcional mesmo)
  • Não é possível selecionar/jogar as cartas, ou responder às perguntas de truco/mão de 11 usando o controle remoto

Esse segundo item me surpreendeu, porque o miniTruco original (pré-Android) não exigia touch screen; aparentemente eu deixei essa parte pra trás quando migrei pro Android.

Isso acontece porque os elementos são todos renderizados usando primitivas de Canvas (eu teria feito diferente se tivesse começado em Android / soubesse mais sobre Android quando portei), então tem 2 soluções: mudar o jogo para criar elementos selecionáveis ou responder às teclas como a versão J2ME fazia.

Meu feeling inicial é que o menor impacto seria trocar os diálogos por nativos (como o que pergunta se vai ser cliente ou servidor Bluetooth) e para as cartas colocar botões semi-invisíveis (para que eles mesclem bem com os botões de aumento de aposta, carta aberta/fechada, menu, etc.)

Outra coisa observada é que mesmo em telas que funcionam bem com o controle remoto (ex.: a de título) é muito difícil identificar o elemento selecionado; seria legal que tivesse uma borda em volta ou algo assim.

chesterbr avatar Dec 19 '22 23:12 chesterbr

Alguns desses itens começaram a ser introduzidos em #30 (que ficou difícil de dar merge por conta do bug de congelamento); vale a pena retomar num momento apropriado.

chesterbr avatar Feb 12 '23 21:02 chesterbr

#138 transforma os botões de aumento e carta fechada em elementos da mesa (pra escalar eles junto com tamanhoFonte dos balões e caixa de diálogo), o que dá um adianto aqui

(não mexi no botão Nova Partida porque não precisou; tecnicamente não vai precisar pra essa task também)

chesterbr avatar Jun 15 '23 14:06 chesterbr

Potencialmente os próximos passos seriam:

  • [ ] criar uma propriedade em mesaView que diz qual item tem o foco (botão aumento, botão fechada, botão sim, botão não)
  • [ ] capturar teclas do d-pad
    • [ ] qualquer tecla: se não houver item em foco: se não tiver diálogo, coloca a 1a. carta em foco; senão, coloca o botão da esquerda
    • [ ] quando "enter" do d-pad for pressionado, acionar o item em foco
    • [ ] quando tecla de movimento lateral for pressionada:
      • [ ] se o diálogo estiver aberto, alternar o botão
      • [ ] senão, seguir para o próximo/anterior item (aumento, c1, c2, c3, fechada)
    • [ ] quando a mesa estiver no modo "vez, mas aguardando resposta", não exibir o foco

^ com esses itens, já dá pra jogar. Aí vem o refinamento:

  • [ ] criar uma flag que diz se foi teclado algo (inicialmente false, true quando qualquer tecla for pressionada)
  • uma vez que a flag for true:
    • [ ] na vez do jogador, colocar o foco na primeira carta
    • [ ] ao abrir o diálogo, colocar o foco no primeiro botão

chesterbr avatar Jun 20 '23 03:06 chesterbr