Contribuição open source · Java · Android TV · Google TV

simbasjungles/free-my-tv

Tela inicial rápida e sem anúncios para TVs com Google TV, LG e Samsung, com os aplicativos do usuário, sugestões em alta, clima e um botão que desfaz tudo.

  • 9 PRs incorporados
  • 9 commits no projeto
  • +36 linhas adicionadas
  • 2,8k estrelas no GitHub

Ver cada PR Repositório no GitHub

O projeto

O Free My TV troca a tela inicial da TV, cheia de anúncios e linhas patrocinadas, por uma prateleira com os aplicativos que o usuário realmente usa, sugestões de filmes e séries em alta apenas desses aplicativos, previsão do tempo, preços de criptomoedas e um visual claro de dia e escuro à noite, que acompanha o pôr do sol da cidade. Há versões para Google TV, LG e Samsung.

A instalação leva cerca de dez minutos a partir do computador, guiada por um assistente de código (Claude Code) ou feita à mão, sem root e sem apagar nada: os aplicativos do fabricante são desligados em vez de desinstalados, e um botão nas configurações devolve a tela original.

Como cada PR foi feito

  • Um problema por PR

    Cada PR resolve uma coisa só, com a menor mudança possível. Isso simplifica a revisão, reduz o risco de efeito colateral e permite desfazer uma mudança sem levar outras junto.

  • O problema vira teste

    As correções chegam com testes automatizados que cobrem o caso que falhava, para o problema não voltar sem que ninguém perceba.

  • Os critérios do próprio projeto

    Formatação, análise estática e a suíte completa de testes rodam na integração contínua do projeto, e a mudança só entra depois da revisão do mantenedor.

  • Escrito para quem revisa

    A descrição de cada PR explica o problema, a mudança e como ela foi testada, para o mantenedor decidir com segurança.

Cada PR, em linguagem de negócio

Clique em um PR para ver o problema, o que foi feito e o valor entregue. O link no fim de cada um leva à discussão técnica completa no GitHub.

  1. #147mergeado em 21/10/2026 Setas do controle alternam o aplicativo do botão como indicado na tela A dica na tela de atalhos do controle prometia ajuste pelas setas, mas elas não tinham efeito; agora as setas esquerda e direita alternam o app configurado.
    O problema
    A tela de mapeamento dos botões do controle remoto exibe uma instrução no rodapé informando que a tecla central ou as setas laterais alteram a função atribuída. No entanto, o tratador de eventos do teclado encaminhava os pressionamentos das setas apenas para a tela geral de configurações, ignorando a tela de botões. O método responsável por circular pelos aplicativos instalados já estava implementado no código, mas nunca recebia os comandos enviados pelas teclas de seta.
    O que foi feito
    O tratamento das teclas direcionais passou a aceitar também a tela de mapeamento do controle remoto, avançando ou retrocedendo a lista de aplicativos instalados a cada clique nas setas. A tecla central continua abrindo a listagem completa para seleção direta, e o ajuste não dispara chamadas desnecessárias de atualização do clima.
    Valor entregue
    O usuário ganha a praticidade de reconfigurar atalhos do controle remoto diretamente pelas setas direcionais, cumprindo exatamente a orientação exibida na interface.
  2. #145mergeado em 21/10/2026 Editor da prateleira não reserva vagas para aplicativos desinstalados Aplicativos desinstalados da TV continuavam ocupando vagas invisíveis no editor da prateleira; agora o ajuste ignora pacotes que não estão mais no sistema.
    O problema
    As configurações do aplicativo permitem escolher até oito atalhos favoritos para exibir na prateleira da tela inicial. Quando um aplicativo colocado nessa lista era posteriormente desinstalado da televisão, seu identificador continuava gravado na ordem da prateleira sem exibir uma linha correspondente no editor. Esse item invisível contava para o limite máximo de oito posições, impedindo o usuário de adicionar novos aplicativos e provocando pulos vazios ao reordenar a lista com as setas do controle.
    O que foi feito
    O editor passou a filtrar a lista salva no momento da abertura, mantendo apenas os aplicativos que continuam instalados no aparelho e que possuem ação de inicialização válida. A gravação no armazenamento ocorre apenas quando o usuário faz alterações reais no editor, e o comportamento ao reordenar atalhos na tela principal permaneceu inalterado.
    Valor entregue
    A prateleira reflete fielmente os aplicativos utilizáveis na televisão, garantindo que todas as oito vagas possam ser preenchidas mesmo após a desinstalação de itens antigos.
  3. #141mergeado em 21/10/2026 Desinstalação em TVs Samsung funciona sem exigir pacote compilado O script de remoção para o sistema Tizen exigia um pacote assinado na pasta antes de desinstalar o app; agora ele lê o identificador direto do manifesto.
    O problema
    O utilitário de instalação e remoção para televisores Samsung conecta ao aparelho pela rede e executa comandos de gerenciamento de pacotes. Para remover o aplicativo, o script precisava apenas do identificador do pacote, mas exigia a presença de um arquivo de instalação assinado na mesma pasta para ler esse dado do manifesto interno. Quem clonava o repositório apenas para desinstalar o aplicativo de um aparelho de teste era obrigado a gerar certificados e compilar um pacote completo antes de conseguir removê-lo.
    O que foi feito
    A opção de desinstalação passou a extrair o identificador diretamente do arquivo de manifesto presente no código-fonte, dispensando qualquer pacote compilado prévio. O script só valida o arquivo compactado e a assinatura digital quando o comando solicitado é realmente uma instalação. A comunicação com a TV e a confirmação de retorno do sistema mantiveram o mesmo protocolo.
    Valor entregue
    A remoção do aplicativo em televisores Samsung fica imediata e pode ser executada direto do repositório limpo, sem etapas desnecessárias de compilação ou certificados.
  4. #138mergeado em 21/10/2026 Navegação na tela inicial alcança o topo mesmo com a prateleira vazia Ao retirar todos os aplicativos da prateleira na tela inicial, apertar a seta para cima fazia o foco sumir; agora a navegação sobe direto para as recomendações ou para o topo.
    O problema
    A tela inicial do aplicativo organiza os favoritos em uma prateleira personalizável e exibe linhas de recomendações logo acima. Quando o usuário removia todos os atalhos dessa prateleira, a rotina de movimentação rápida ignorava a linha vazia e caía no controle antigo da interface, que tentava selecionar elementos desativados do layout anterior. Com isso, o indicador de foco desaparecia da tela, o usuário não conseguia alcançar as recomendações pelo controle remoto e apertar a tecla central acionava atalhos invisíveis.
    O que foi feito
    O controle de navegação passou a tratar a prateleira vazia diretamente na rotina atual, calculando a distância até os cartões de conteúdo a partir do centro da tela. Quando não há recomendações disponíveis, o foco sobe direto para a barra de abas no topo da tela, no mesmo comportamento já adotado na versão para navegadores. A navegação com atalhos preenchidos e os comandos para descer ou abrir as gavetas não foram alterados.
    Valor entregue
    A tela inicial permanece navegável e previsível em qualquer configuração da prateleira, sem perda de foco ou ativação acidental de botões ocultos.
  5. #63mergeado em 20/10/2026 Compilação lê o código-fonte como UTF-8 em qualquer computador A compilação do app não dizia ao compilador Java qual codificação de texto usar e, no JDK 17, dependia da configuração do computador; o PR propõe fixar UTF-8 sem mudar nada nos demais ambientes.
    O problema
    Para instalar o Free My TV, o usuário compila o app no próprio computador com o script de compilação do projeto. O código-fonte tem acentos e texto em russo (18 arquivos com caracteres fora do ASCII), e o script ainda grava o nome da cidade escolhida num arquivo de configuração. O compilador Java era chamado sem informar a codificação e usava a do sistema: uma página de código do Windows ou, no Linux sem localidade UTF-8, ASCII. No JDK 17, a versão mínima exigida, o texto acentuado era lido errado e o russo tinha bytes que essas codificações não representam.
    O que foi feito
    O PR propõe acrescentar a opção de codificação UTF-8 ao comando do compilador, na linha que já existe. No JDK 18 ou mais novo, no macOS e no Linux com UTF-8 nada muda, e o roteiro de instalação no Windows e os scripts de compilação em Python do projeto já fazem o mesmo.
    Valor entregue
    O aplicativo compilado passa a ter os textos corretos mesmo em computadores com configuração regional diferente, sem exigir ajustes do usuário.
  6. #61mergeado em 20/10/2026 App retirado da prateleira volta a aparecer na lista de todos os apps Um aplicativo conhecido tirado da prateleira da tela inicial sumia também da lista completa e só voltava pelo editor; o PR propõe listá-lo ali enquanto estiver fora da prateleira.
    O problema
    A tela inicial tem uma prateleira com os aplicativos preferidos, que o usuário pode editar, e uma lista com todos os demais. A lista pulava sempre os aplicativos de uma relação fixa do projeto (Netflix, YouTube, Prime Video e outros), o que fazia sentido quando a prateleira era sempre formada por eles. Depois que a prateleira passou a ser uma lista do próprio usuário, um desses aplicativos retirado dela, instalado depois de a lista ser salva ou além dos oito lugares ficava fora da prateleira e da lista, e o editor era o único caminho de volta.
    O que foi feito
    O PR propõe pular um aplicativo da relação fixa apenas enquanto ele estiver na prateleira do usuário, como a versão web do projeto já faz. Quem está na prateleira continua fora da lista, os aplicativos de TV ao vivo, o próprio Free My TV e os escondidos continuam omitidos, e a assinatura da função e o único ponto que a chama não mudam.
    Valor entregue
    Nenhum aplicativo instalado fica inalcançável a partir da tela inicial: tirar o Netflix da prateleira o coloca na lista completa, e devolvê-lo à prateleira o tira de lá.
  7. #59mergeado em 20/10/2026 Configurações em russo ganham a linha e a busca de cidade traduzidas Na TV em russo, tudo nas configurações estava traduzido menos a cidade, que seguia em inglês; o PR propõe acrescentar à tradução as sete frases que faltavam.
    O problema
    As configurações do Free My TV acompanham o idioma da TV, e o russo foi acrescentado antes de a busca de cidade existir. Por isso a linha da cidade, a janela que o OK abre com título, dica e botões de buscar e cancelar, e as mensagens de busca em andamento, de cidade não encontrada e de falha apareciam em inglês numa tela toda em russo, porque a tradução não tinha essas sete frases. Ao contrário do PR irmão sobre a busca, este corrige os textos da tela, não os nomes que a busca devolve.
    O que foi feito
    O PR propõe incluir na tradução em russo as sete frases que faltavam, no mesmo ponto em que a tradução em alemão já as tem. Cada frase em inglês foi conferida caractere por caractere com a usada nas configurações, inclusive reticências, apóstrofo e o espaço final, e nenhum outro idioma muda. Com isso, todas as frases das configurações passam a ter tradução para o russo.
    Valor entregue
    Quem fala russo vê a tela de configurações inteira no seu idioma, inclusive a etapa em que escolhe a cidade do clima.
  8. #56mergeado em 20/10/2026 TV atualizada do Android 11 para o 12 recupera a tela de descanso Depois da atualização do Android, a verificação de inicialização não notava que a tela de descanso do app tinha sido trocada e dava tudo por certo; o PR propõe comparar o nome exato do componente e restaurá-la.
    O problema
    O Free My TV vira a tela inicial e a tela de descanso da TV e, a cada inicialização, confere se o Android manteve essas escolhas, corrigindo e avisando quando algo mudou. Uma TV que sai do Android 11 e vai para o 12 ou mais novo fica configurada com a tela de descanso usada no Android 11, um componente que está desligado do Android 12 em diante. A conferência perguntava se o texto da configuração continha o nome da tela de descanso do app, e o nome antigo contém o novo como pedaço, então a configuração era dada por correta e o aviso dizia que o Free My TV continuava ativo.
    O que foi feito
    O PR propõe tratar a configuração como uma lista de nomes separados por vírgula e procurar o nome exato da tela de descanso do app entre eles. Uma configuração que já tem o nome certo, sozinho ou numa lista, passa como antes; a não definida continua sendo corrigida; e o caminho do Android 10 para o 11, que já funcionava, não muda. São duas linhas, e só a verificação de inicialização é tocada.
    Valor entregue
    Quem atualiza a TV para o Android 12 ou mais novo recupera a tela de descanso do app sem reinstalar nada, e o aviso de inicialização deixa de dizer que está tudo certo quando não está.
  9. #54mergeado em 20/10/2026 Busca de cidade devolve nomes em alemão e russo nas TVs nesses idiomas Na TV em alemão ou russo, a busca de cidade nas configurações respondia com nomes em português; o PR propõe pedir os nomes no idioma da TV, e Viena e Moscou passam a aparecer quando buscadas em alemão e em russo.
    O problema
    O Free My TV mostra o clima e o horário do pôr do sol da cidade escolhida pelo usuário, e as configurações têm uma busca para encontrá-la. Essa busca foi escrita quando o app só falava português, inglês e espanhol e, para qualquer outro idioma, pedia ao serviço de geolocalização os nomes em português. Com a TV em alemão, a lista trazia Munique, Baviera, Alemanha e o cartão do clima guardava Munique; buscar Wien não trazia Viena, e em russo a busca por Москва não devolvia nada.
    O que foi feito
    O PR propõe enviar o idioma que a TV já está usando, o mesmo valor que o app manda ao serviço de filmes e séries para escolher as imagens. Esse idioma é sempre português, inglês, espanhol, alemão ou russo: os três primeiros enviam exatamente o que enviavam antes, e um idioma acrescentado depois passa a valer sem nova mudança. A conferência foi feita no serviço de geolocalização em alemão e em russo, com Viena e Moscou entre os primeiros resultados. Este PR muda o idioma dos resultados da busca; os textos da tela são assunto de outro PR.
    Valor entregue
    Quem usa a TV em alemão ou russo escolhe a cidade pelo nome que conhece e vê o clima com esse mesmo nome, em vez de uma tradução em português.

Números atualizados em 21/10/2026.

O mesmo cuidado no seu sistema

Os mesmos hábitos destes PRs valem para backends que movimentam dinheiro: reproduzir o problema antes de corrigir, provar a correção com teste e não deixar dado sensível escapar.

Falar com o Vinícius Início