Duas correções importantes lançadas uma logo após a outra esta semana, sobre dois temas bem distintos. A primeira diz respeito aos pacotes de ícones integrados, que haviam deixado de ser aplicados corretamente — um bug particularmente incômodo que passou despercebido durante várias versões. A segunda diz respeito ao contador de passos da página esquerda, que podia perder os primeiros passos do dia.
1.0.8 — pacotes de ícones restaurados
O sintoma
Nas últimas versões, selecionar um dos pacotes de ícones integrados ao Sola (Pixelarticons, Lucide, Fluent Emoji, Bootstrap, Feather, Heroicons) não funcionava como esperado: em vez de exibir os ícones do pacote escolhido, todos os ícones do dock e da gaveta mostravam o próprio ícone do Sola. Já os pacotes de ícones de terceiros instalados pela Play Store funcionavam normalmente.
A causa
O culpado era o resource shrinker do Android — uma ferramenta que, ao compilar a versão release, remove do arquivo APK todos os recursos gráficos que considera não utilizados. Útil para reduzir o tamanho final do app, mas frágil: se o app carrega um recurso dinamicamente (por exemplo, via seu nome como uma string, como iconpack_google_chrome), o shrinker não consegue saber que ele está sendo usado. Ele o remove, silenciosamente.
Foi exatamente isso que aconteceu com os 558 ícones que compõem os pacotes integrados ao Sola. Carregados dinamicamente pelo nome no momento em que o usuário seleciona um pacote, eles eram invisíveis para o shrinker no momento do build.
A correção
A solução é um arquivo res/raw/keep.xml que informa explicitamente ao shrinker que todos os recursos cujo nome começa com iconpack_ devem ser mantidos, aconteça o que acontecer:
O seletor de pacotes também foi retrabalhado nesse processo: um toque em um pacote agora dá uma prévia ao vivo (o dock e a tela inicial se atualizam instantaneamente), e um botão flutuante "Aplicar" aparece para confirmar a escolha. Não é mais necessário sair do menu para ver o resultado. O dock, a tela inicial e a gaveta permanecem perfeitamente sincronizados após qualquer troca de pacote.
Três séries de testes automatizados foram adicionadas para garantir que um bug semelhante não passe despercebido novamente: um teste unitário que verifica se os 558 drawables são resolvíveis corretamente, um teste que verifica se o pacote selecionado se propaga corretamente por todos os componentes, e um teste que simula o ciclo A → B → padrão sem vazamento de state.
1.0.9 — contador de passos mais robusto
O sintoma
O contador de passos exibido na página esquerda (dashboard) podia mostrar 0 ao abrir e só começar a contar a partir daquele momento. Na prática: caminhar 3.000 passos pela manhã sem ter aberto a página esquerda podia fazer com que esses passos não aparecessem até o primeiro evento captado após a abertura.
A causa
A lógica do contador estava embutida diretamente no composable da página esquerda. Resultado: o sensor de passos só ficava escutando eventos enquanto essa página estava visível. Assim que você deslizava para a tela inicial ou para a gaveta, o contador parava de escutar.
No Android, o sensor de hardware de passos (TYPE_STEP_COUNTER) é cumulativo desde a última reinicialização do celular. Ele não perde nenhum passo — o hardware conta 24 horas por dia. Mas se nenhum app estiver escutando ativamente seus eventos, o valor exibido nunca é atualizado. Além disso, a linha de referência (baseline) que permite calcular os passos do dia atual só era definida no primeiro evento recebido — ou seja, na primeira abertura da página esquerda.
A correção
A lógica foi extraída para um componente singleton — um StepCounterManager — que vive independentemente da página esquerda. Ele é ativado assim que a permissão Activity Recognition é concedida, e permanece ativo enquanto o app está carregado em memória (o que é quase permanente para um launcher padrão). Resultado: o sensor escuta os eventos de passos continuamente, a baseline é definida no primeiro passo do dia (bem mais cedo), e o valor exibido está sempre atualizado no momento em que você abre a página.
De bônus, o último valor conhecido agora é persistido entre sessões. Chega de 0 transitório na tela: ao reabrir a página esquerda, o valor do último evento é restaurado imediatamente, e o valor real é gravado assim que o sensor emite um novo evento.
Nota sobre Androids muito restritivos
Em celulares com política agressiva de gerenciamento de memória (alguns Xiaomi, Huawei, OnePlus chineses), o processo do Sola pode ser encerrado mesmo sendo o launcher padrão. Nesse caso raro, ainda é possível que a baseline do dia seja recalculada na primeira reinicialização — perdendo os passos feitos nesse meio-tempo. Uma solução baseada no Health Connect (que mantém um histórico 24/7 independentemente do Sola) está sendo avaliada para uma versão futura: ela eliminará completamente esse caso extremo, mas exige trâmites administrativos junto ao Google Play que serão tratados mais adiante.
Como obter essas atualizações
As duas versões estão sendo lançadas gradualmente pela Play Store. Devem estar disponíveis para todos em 24 a 48 horas. Também é possível forçar a verificação pelo próprio app Play Store, na seção "Gerenciar apps e dispositivo".
Abrir na Google Play