O Android O está quebrando aplicativos que se sobrepõem à barra de status

O Android O descontinua TYPE_SYSTEM_OVERLAY em favor de TYPE_APPLICATION_OVERLAY, resultando em aplicativos que se sobrepõem à quebra da barra de status.

O fluxo de postagens descrevendo novos recursos voltados para o usuário encontrados em AndroidO está começando a desacelerar agora que os usuários tiveram semanas para testar o software em seus dispositivos. No entanto, há muitas, muitas mudanças feitas nos bastidores que estão sendo lentamente descobertas. Postamos sobre uma dessas mudanças outro dia sobre dispositivos Nexus e Pixel rodando Android O adotando SDCardFS. Mas hoje gostaríamos de discutir uma mudança que afetará os desenvolvedores de determinados aplicativos, especialmente aqueles que sobreposição no topo da barra de status. Estas aplicações parecem ser quebrado no Android O Developer Preview, que à primeira vista você pode descartar como um simples bug, mas se aprofundar na documentação de referência, isso pode ser uma mudança pretendida pelo Google.


Android O quebra sobreposições da barra de status

Uma das minhas coisas favoritas no Android é como ele é personalizável. Os usuários que estão enraizados ou executando ROMs personalizados podem definir temas nativos para as barras de status do sistema, basicamente sem restrições, mas se o seu dispositivo não estiver enraizado, você terá menos opções disponíveis. Felizmente, existem muitos aplicativos na Google Play Store que permitem alterar a aparência da barra de status em um nível básico. Isso é possível graças a uma combinação inteligente de janelas de sobreposição do sistema para exibir uma barra de status personalizada sobre a existente, Ouvintes de notificação para exibir notificações e, opcionalmente, um serviço de acessibilidade para permitir a coloração contextual do personalizado Barra de status.

As duas capturas de tela acima mostram como seria minha barra de notificação ao usar um dos muitos aplicativos de sobreposição de barra de status disponíveis na Play Store. Estas capturas de tela foram tiradas em um Huawei Mate 9 sem root executando EMUI 5.0. Para aqueles que não estão familiarizados com a EMUI, a barra de status não se parece em nada com as imagens acima. Em vez disso, é assim:

Se você não se importa com a aparência da barra de status de ações, aplicativos como Status ou Barra de status de materiais são dádivas de Deus. Mas se ou quando o seu dispositivo for atualizado para o Android O, esses aplicativos poderão não funcionar mais. Esta é a aparência desses mesmos dois aplicativos em um Google Pixel executando o Android O Developer Preview:

Em vez da sobreposição bloquear a barra de status original, parece que a sobreposição sobreposições com a barra de status original, o que resulta em uma grande bagunça.

Infelizmente, isso torna aplicativos como esses inúteis. E não são apenas os aplicativos típicos de temas da barra de status que são afetados por isso - todos os aplicativos que exigem que uma sobreposição seja mostrada na parte superior da barra de status são afetados.

Aqui está uma lista de alguns aplicativos populares que podem se tornar inúteis:

  • Status (500.000 - 1.000.000 instalações)
  • Barra de status de materiais (1.000.000 - 5.000.000 instalações)
  • Ferramenta legal - estatísticas do sistema (500.000 - 1.000.000 instalações)
  • Telecine (50.000 - 100.000 instalações)
  • Limpar barra de status (100.000 - 500.000 instalações)
  • Tinycore (100.000 - 500.000 instalações)

E uma lista de alguns aplicativos que funcionarão, mas não poderão mais se sobrepor à barra de status (restringindo a funcionalidade anterior):

  • Crepúsculo (5.000.000 - 10.000.000 instalações)
  • Atenção (100.000 - 500.000 instalações)
  • Monitor de Recursos Mini (50.000 - 100.000 instalações)
  • Monitor de Rede Mini (1.000.000 - 5.000.000 instalações)

Existem muitos outros aplicativos na Play Store que usam algum tipo de sobreposição na barra de status, mas você já pode dizer que tal mudança afetará muitos aplicativos que são usados ​​por potencialmente milhões de Usuários. Então, o que está acontecendo aqui?


TYPE_SYSTEM_OVERLAY está sendo descontinuado

A cada nova iteração do Android, o Google introduz e descontinua (designa como obsoletos e a serem removidos) vários recursos. Desta vez, o recurso que está no bloco de corte é TYPE_SYSTEM_OVERLAY. Para citar o página de referência pelo que esse recurso ofereceu aos desenvolvedores:

TYPE_SYSTEM_OVERLAY

Tipo de janela: janelas de sobreposição do sistema, que precisam ser exibidas acima de todo o resto. Essas janelas não devem receber foco de entrada ou interferirão na proteção do teclado. Em sistemas multiusuário é exibido apenas na janela do usuário proprietário.

Em essência, esse tipo de janela permite que um aplicativo desenhe em cima de qualquer elemento da tela – incluindo a barra de status. No entanto, a partir do Android O, esse tipo de janela foi descontinuado. Para aplicativos que não são do sistema, o Google recomenda que os desenvolvedores usem TYPE_APPLICATION_OVERLAY. Para citar o página de referência para saber o que esse novo tipo de janela faz:

TYPE_APPLICATION_OVERLAY

Tipo de janela: As janelas de sobreposição de aplicativos são exibidas acima de todas as janelas de atividades (tipos entre FIRST_APPLICATION_WINDOW e LAST_APPLICATION_WINDOW), mas abaixo de janelas críticas do sistema, como a barra de status ou o IME.

O sistema pode alterar a posição, o tamanho ou a visibilidade dessas janelas a qualquer momento para reduzir a confusão visual para o usuário e também gerenciar recursos.

O sistema ajustará a importância dos processos com este tipo de janela para reduzir a chance de o assassino com pouca memória eliminá-los.

Em sistemas multiusuário é exibido apenas na tela do usuário proprietário.

Como você pode ver, esse novo tipo de janela permite que os aplicativos sobreponham conteúdo sobre todas as outras janelas de atividades exceto "janelas críticas do sistema, como a barra de status ou IME" (IME refere-se ao teclado). Isso é bom para aplicativos como o Facebook Messenger, já que os chatheads fornecidos por esse aplicativo não têm nenhuma finalidade de ficar no topo da barra de status, mas isso afeta negativamente a maioria dos aplicativos que mencionei anteriormente.

Além disso, não parece haver uma solução alternativa para os desenvolvedores usarem no momento. Seria de se esperar que, para evitar esse problema no Android O, os desenvolvedores simplesmente criassem seus aplicativos voltados para o SDK 25 (Android 7.1.1). No entanto, como salienta o desenvolvedor de Status no Reddit, o Google tem substituído TYPE_SYSTEM_OVERLAY com TYPE_APPLICATION_OVERLAY, e a mudança é independente do SDK de destino versão. Atualmente, os desenvolvedores que usam TYPE_SYSTEM_OVERLAY precisam usar TYPE_APPLICATION_OVERLAY para manter a compatibilidade; portanto, independentemente da versão do SDK de destino em que um determinado aplicativo se baseia, ele pode não use mais TYPE_SYSTEM_OVERLAY no Android O.


O que pode ser feito sobre isso?

Não está exatamente claro por que o Google fez essa mudança, pois ainda não forneceu uma explicação oficial. Meu palpite é que é uma tentativa de melhorar a segurança no Android, evitando que usuários desavisados ​​instalem acidentalmente aplicativos que bloqueiem ou substituam maliciosamente sua barra de status. Infelizmente, essa mudança atinge muitos aplicativos perfeitamente legítimos que usam TYPE_SYSTEM_OVERLAY no fogo cruzado.

Os desenvolvedores que utilizam esse recurso abriram relatórios de bugs no Issue Tracker do Android (#260787 e #36574245) para protestar contra a mudança e pedir uma API alternativa, mas um Googler comentou no rastreador com o declaração seguinte:

Status: não será corrigido (comportamento pretendido)

Entramos em contato com a equipe de produto e engenharia e recebemos sugestões de que os desenvolvedores podem usar atividades SHOW_WHEN_LOCKED para mostrar quando o dispositivo está bloqueado, mas intencionalmente não é mais possível mostrar na tela de bloqueio/na aba de notificações

Por enquanto, parece que esses desenvolvedores estão sem sorte, pois apontaram que FLAG_SHOW_WHEN_LOCKED ainda não permite que as janelas sejam sobrepostas na barra de status. Não está claro o que os desenvolvedores desses aplicativos podem fazer, exceto orar para que o Google mude as coisas ou criar confusão sobre isso.

Como esta é apenas a primeira prévia do desenvolvedor para Android O, ainda é possível que o Google altere sua mentes e fornecer essa funcionalidade para aplicativos que não são direcionados ao Android O ou para o Google restaurar TIPO_SYSTEM_OVERLAY. Mas se as coisas continuarem como estão atualmente, você pode dê um beijo de adeus nesses aplicativos. E isso seria uma pena.


Obrigado a Eli Irvin por testar muitos desses aplicativos para mim!