O Ice Unverse é um dos leakers do mundo Samsung mais populares da internet. E ele compartilhou no seu perfil do Twitter uma imagem peculiar: a foto de uma paisagem que, ao ser configurada como fundo de tela, faz com que os smartphones da Samsung e alguns modelos do Google Pixel travem por completo.
Aparentemente, o problema está no espaço de cores utilizado pela foto e uma falha do Android 10. Nesse post, explicamos o que acontece com este fundo de tela e como solucionar o problema.
Não… não é sRGB
https://twitter.com/abdalla_moneer1/status/1266945755400540166
Como padrão, o Android 10 usa o espaço de cores sRGB (padrão RGB, criado pela HP e Microsoft) para reprodução de imagens compatíveis com esse formato de espaçamento. O problema é que essa imagem que trava os dispositivos usa o espaço de cores RGB, e RGB não é a mesma coisa que sRGB, já que tem mais cores.
Quando configuramos a imagem como fundo de tela, o sistema operacional invoca a função “doColorManagement” do “ColorManagementProxy”. A função comprova se o dispositivo suporta esse espaço de cores.
O que acontece quando a imagem é RGB? Normalmente, o sistema operacional a converte para sRGB, mas o Android 10 não faz isso. Por isso, um Google Pixel 3 XL com Android 10 para quando essa imagem vira o fundo de tela. O mesmo não acontece com um Google Pixel 4 XL com o beta do Android 11, que consegue converter o espaço de cores.
Aqui, o perfil de cores Google Skia tem um papel importante. Ele usa cores pré-multiplicados, com cores que se multiplicam pelo canal alfa (que define opacidade). Porém, a maioria dos formatos de arquivos gráficos assumem alfas pós-multiplicados (um valor de cor e uma opacidade separada dessa cor).
Por isso, é preciso converter corretamente entre os dois formatos na hora de ler e escrever nesses sistemas. O problema é que o Android processa a imagem sem convertê-la, o que faz com que o SystemUI entre em uma sequência de falhas, deixando o dispositivo inutilizável.
it's make sense, since 'Google Skia' have premultiplied alpha channels (first image) and the android java file process the image directly without converting the color to premultiplied color value(second image), the android crashed because it's try to access an out of bounds index pic.twitter.com/vN6LVlOd6g
— Sopan (@moreahsenyum) May 31, 2020
Essa falha certamente vai se reproduzir em outras imagens que usam o mesmo perfil de cor. A solução para o problema? Pouco pode ser feito no sistema operacional, mas no caso do arquivo existe uma solução simples: a conversão do perfil de cor.
Basta abrir um programa de edição de imagens e converter o perfil para sRGB. Então, exporte a imagem como um arquivo .JPEG ou .PNG, e pronto: podemos usar a imagem sem maiores problemas.
A Samsung já foi notificada sobre a falha no meio de maio, e o problema já estaria resolvido nos seus smartphones. A maioria dos usuários afetados usa dispositivos da marca sul-coreana, de modo que é uma questão de esperar para que a atualização pertinente seja liberada.