O Google adicionou uma API que permite que lançadores de terceiros, como o Nova Launcher, mostrem animações de transição mais fluidas. Apenas os telefones Pixel o possuem agora.
No passado, os aplicativos de inicialização de terceiros geralmente forneciam uma experiência superior ao inicializador de ações encontrado na maioria dos telefones Android. Porém, com a reformulação da tela de aplicativos recente e a introdução de gestos no Android 9 Pie, lançadores de terceiros foram colocados em desvantagem à medida que essas novas experiências foram integradas ao estoque aplicativo iniciador. Com o tempo, o Google tentou fazer com que a experiência do iniciador de terceiros não fosse tão terrível ao usar gestos, e eles começaram a ter sucesso nisso recentemente.
Se você usou uma versão beta recente do Nova Launcher em um telefone Google Pixel nos últimos meses, deve ter notado as animações fluidas ao usar a navegação por gestos. Infelizmente, você não verá essas mesmas animações ao usar o Nova Launcher em qualquer outro dispositivo, pelo menos por enquanto. Para entender por que primeiro precisamos explicar brevemente o que separa lançadores de terceiros, como o Nova Launcher, de lançadores de ações, como o Pixel Launcher do Google.
O Google introduziu pela primeira vez a navegação por gestos no Android 9 Torta. Para tornar os gestos o mais fluidos possível, o Google precisava fazer com que as transições de aplicativos parecessem perfeitas. Eles também queriam permitir que os usuários acessassem toda a lista de aplicativos na tela de aplicativos recentes. Para fazer ambas as coisas, o Google decidiu mover o código que lida com a tela de aplicativos recentes do Android. SystemUI para Launcher3, o aplicativo inicializador de código aberto do Android do qual a maioria dos lançadores de estoque OEM são bifurcados. Assim, o Passo rápido nasceu e, devido à sua natureza privilegiada, o Android só permite que o aplicativo inicializador pré-instalado seja definido como o provedor de aplicativos recentes. Isso pode ser substituído pelo acesso root se o inicializador de terceiros for compatível, mas para a maioria dos usuários, isso significa que um aplicativo inicializador de terceiros sempre dependerá do inicializador de ações para lidar com gestos e a tela de aplicativos recentes. O resultado, como a maioria de vocês provavelmente já percebeu, pode ser um pouco complicado, com transições que não parecem fluidas e perfeitas. A menos que você use um telefone Google Pixel, claro.
Na maioria dos telefones Google Pixel, existe uma API que iniciadores de terceiros podem usar para fazer com que a transição de um aplicativo de volta para a tela inicial pareça muito mais nativa. Alguns aplicativos de inicialização de terceiros, como Lançador Niágara e o mencionado Nova Launcher estão aproveitando esta API, embora este último apenas a inclua em seu compilações v7 em desenvolvimento. Quando essa API é usada, o aplicativo inicializador de terceiros recebe uma intenção e um retorno de chamada do QuickStep sempre que o usuário executa um gesto de deslizar para voltar para casa. O iniciador de terceiros pode então sugerir ao sistema de gestos como animar a janela à medida que ela é minimizada em um ícone de aplicativo.
Aqui está um exemplo de como isso fica no Niagara Launcher, cortesia do desenvolvedor do launcher 8 bits:
E aqui está uma comparação que mostra a aparência da animação em um Telefone ASUS ROG 5 e Google Pixel 4, ambos executando o Nova Launcher v7.0.25 (a versão beta mais recente no momento da publicação) e o Android 11:
\r\n https://www.youtube.com/watch? v=equ-8yDw_Do\r\n
Agora você deve estar se perguntando: esta API é exclusiva para telefones Google Pixel? A resposta é não, não é. A API faz parte do Launcher3/QuickStep e pode ser encontrado no AOSP, o que significa que está aberto a qualquer aplicativo inicializador OEM. Enquanto a API estava comprometido com o Launcher3 internamente em 21 de julho de 2020, parece que foi mesclado no branch master AOSP com o lançamento do Android R QPR1 em dezembro.
Kevin Barry, desenvolvedor do Nova Launcher e um dos primeiros a identificar essa API, nos disse que suspeita que parte do A razão pela qual os OEMs não estão usando esta API em seus forks do Launcher3 é que ela chegou um pouco tarde no lançamento do Android 11 ciclo. É preciso muito esforço para mesclar grandes mudanças no AOSP, e a atualização do Android R QPR1 definitivamente continha muitas delas. Nos últimos anos, chamaríamos essas quedas de código de "versão de manutenção", mas o Google realmente não faz mais isso após a resistência dos OEMs (ou pelo menos foi o que ouvi). É por isso que o LineageOS, a popular ROM personalizada do Android, chama seu lançamento mais recente de "Lineage OS 18.1" em vez de "LineageOS 18" para significar que a ROM é baseada na base de código mais recente do Android 11, em vez da versão inicial do Android 11.
Também é importante notar que esta API só está acessível em telefones Google Pixel após o Queda de recursos de pixel em dezembro, que coincide com o lançamento público do Android R QPR1. E apesar do Pixel 2 receber seu atualização final em dezembro, essa atualização não incluiu a base de código Android R QPR1, e é por isso que os proprietários do Pixel 2 que executam o Nova Launcher v7 não têm a mesma experiência que outros Pixels. (Os proprietários do Pixel 2 podem fazer o sideload de uma versão mais recente do Pixel Launcher que possui a API de um dispositivo Pixel mais recente, mas relatórios de usuários indicam a animação ainda apresenta erros, mesmo que funcione de vez em quando. Como lembrete, o Pixel Launcher é construído sobre o Launcher3, assim como a maioria dos lançadores de ações, mas também inclui alguns recursos exclusivos do Pixel.)
Então, o que será necessário para que esta API seja adicionada a outros dispositivos Android? Infelizmente, não há uma resposta fácil para isso, porque não sabemos exatamente como cada OEM desenvolve seu aplicativo inicializador. Dado como O Google controla firmemente a navegação por gestos em tela cheia, suspeitamos que a maioria dos OEMs não modifica muito o código relacionado a gestos e/ou QuickStep. A menos que um OEM se esforce para reverter o commit, quebrar o código ou se recusar a atualizar Launcher3, então deveremos ver esta API sendo adicionada aos lançadores OEM sempre que eles se basearem no topo do por vir Andróide 12 liberar. Na verdade, um OEM com quem conversamos, a ASUS, nos disse que planeja trazer essa API em sua atualização do Android 12. Não sabemos se o Google comunicou essa mudança aos OEMs, mas esperamos que mais OEMs tomem conhecimento dessa mudança e decidem incorporar a API em seus forks do Launcher3 para melhorar a experiência de uso de terceiros lançadores.
O trabalho não terminará aí, no entanto. Mesmo depois de incluir esta API, ainda há mais trabalho a ser feito para alcançar a paridade entre lançadores de terceiros e lançadores OEM. Por exemplo, alguns dispositivos OEM piscam quando o usuário toca na tela antes que uma animação apareça na tela inicial. Às vezes, o aplicativo inicializador do sistema aparece em vez do aplicativo inicializador de terceiros selecionado (isso já aconteceu comigo algumas vezes). Uma animação de transição aprimorada é boa, mas ninguém quer lidar com bugs no aplicativo inicializador ou na tela de aplicativos recentes, portanto, o código de gestos ainda precisa de alguma limpeza e/ou padronização.
Obrigado a Kevin Barry e Peter Huber pela ajuda neste artigo!