Android O está rompiendo aplicaciones que se superponen en la parte superior de la barra de estado

Las aplicaciones afectadas incluyen estado, crepúsculo y herramientas geniales, entre otras

El goteo de publicaciones que describen las nuevas funciones orientadas al usuario que se encuentran en Android O está comenzando a disminuir ahora que los usuarios han tenido semanas para probar el software en su dispositivo. Sin embargo, hay muchos, muchos cambios realizados bajo el capó que se están descubriendo lentamente. Publicamos sobre uno de esos cambios el otro día sobre los dispositivos Nexus y Pixel con Android O que adoptan SDCardFS. Pero hoy, nos gustaría discutir un cambio que afectará a los desarrolladores de ciertas aplicaciones, particularmente aquellas que se superponen en la parte superior de la barra de estado . Estas aplicaciones parecen estar rotas en Android O Developer Preview, que a primera vista puede descartar como un simple error, pero profundizando en la documentación de referencia, este puede ser un cambio previsto por parte de Google.


Android O rompe las superposiciones de la barra de estado

Una de mis cosas favoritas sobre Android es lo personalizable que es. Los usuarios que están rooteados o que ejecutan ROM personalizadas pueden crear un tema de las barras de estado de su sistema de forma nativa básicamente sin restricciones, pero si su dispositivo está desrooteado, tiene menos opciones disponibles. Afortunadamente, hay muchas aplicaciones en Google Play Store que le permiten cambiar la apariencia de la barra de estado en un nivel básico. Esto es posible gracias a una combinación inteligente de Windows de superposición del sistema para mostrar una barra de estado personalizada sobre la existente, oyentes de notificaciones para mostrar notificaciones y, opcionalmente, un servicio de accesibilidad para permitir el teñido contextual de la barra de estado personalizada.

"Estado" en Android Nougat

"Barra de estado del material" en Android Nougat

Las dos capturas de pantalla anteriores muestran cómo se vería mi barra de notificaciones al usar una de las muchas aplicaciones de superposición de barra de estado disponibles en Play Store. Estas capturas de pantalla se tomaron en un Huawei Mate 9 sin raíz que ejecuta EMUI 5.0. Para aquellos de ustedes que no están familiarizados con EMUI, la barra de estado no se parece en nada a las capturas de pantalla anteriores. En cambio, se ve así:

Si no le importa el aspecto de su barra de estado de stock, las aplicaciones como Status o Material Status Bar son regalos del cielo. Pero si, o cuando su dispositivo se actualiza a Android O, es posible que estas aplicaciones ya no funcionen. Así es como se ven estas mismas dos aplicaciones en un Google Pixel que ejecuta la Vista previa para desarrolladores de Android O:

"Estado" en Android O

"Barra de estado del material" en Android O

En lugar de que la superposición bloquee la barra de estado original, parece que la superposición se superpone con la barra de estado original, lo que resulta en un gran desastre.

Desafortunadamente, esto hace que aplicaciones como estas sean inútiles. Y no son solo las aplicaciones típicas de creación de temas de la barra de estado las que se ven afectadas por esto: todas las aplicaciones que requieren una superposición que se muestre en la parte superior de la barra de estado se ven afectadas .

Aquí hay una lista de algunas aplicaciones populares que pueden volverse inútiles:

  • Estado (500, 000 - 1, 000, 000 de instalaciones)
  • Barra de estado del material (1, 000, 000 - 5, 000, 000 instalaciones)
  • Cool Tool - Estadísticas del sistema (500, 000 - 1, 000, 000 de instalaciones)
  • Telecine (50, 000 - 100, 000 instalaciones)
  • Barra de estado limpio (100, 000 - 500, 000 instalaciones)
  • Tinycore (100, 000 - 500, 000 instalaciones)

Y una lista de algunas aplicaciones que funcionarán, pero que ya no pueden superponerse en la parte superior de la barra de estado (restringiendo la funcionalidad anterior):

  • Crepúsculo (5, 000, 000 - 10, 000, 000 instalaciones)
  • HeadsUp (100, 000 - 500, 000 instalaciones)
  • Resource Monitor Mini (50, 000 - 100, 000 instalaciones)
  • Network Monitor Mini (1, 000, 000 - 5, 000, 000 de instalaciones)

Hay muchas más aplicaciones en Play Store que usan algún tipo de superposición en la parte superior de la barra de estado, pero ya se puede ver que dicho cambio afectará a muchas aplicaciones que potencialmente usan millones de usuarios. Entonces, ¿qué está pasando aquí?


TYPE_SYSTEM_OVERLAY está en desuso

Con cada nueva iteración de Android, Google introduce y desprecia (designa como obsoleto y para ser eliminado) varias características. Esta vez, la característica que está en el bloque de corte es TYPE_SYSTEM_OVERLAY. Para citar la página de referencia de lo que esta característica ofreció a los desarrolladores:

TYPE_SYSTEM_OVERLAY

Tipo de ventana: ventanas de superposición del sistema, que deben mostrarse encima de todo lo demás. Estas ventanas no deben enfocarse en la entrada, o interferirán con el bloqueo del teclado. En sistemas multiusuario, solo se muestra en la ventana del usuario propietario.

En esencia, este tipo de ventana permite que una aplicación dibuje sobre cualquier elemento de la pantalla, incluida la barra de estado. Sin embargo, comenzando con Android O, este tipo de ventana ha quedado en desuso. Para aplicaciones que no son del sistema, Google recomienda que los desarrolladores usen TYPE_APPLICATION_OVERLAY en su lugar. Para citar la página de referencia de lo que hace este nuevo tipo de ventana:

TYPE_APPLICATION_OVERLAY

Tipo de ventana: las ventanas de superposición de aplicaciones se muestran sobre todas las ventanas de actividad (tipos entre FIRST_APPLICATION_WINDOW y LAST_APPLICATION_WINDOW ) pero debajo de las ventanas críticas del sistema, como la barra de estado o IME.

El sistema puede cambiar la posición, el tamaño o la visibilidad de estas ventanas en cualquier momento para reducir el desorden visual para el usuario y también administrar los recursos.

Requiere el permiso SYSTEM_ALERT_WINDOW .

El sistema ajustará la importancia de los procesos con este tipo de ventana para reducir la posibilidad de que el asesino de poca memoria los mate.

En sistemas multiusuario, solo se muestra en la pantalla del usuario propietario.

Como puede ver, este nuevo tipo de ventana permite a las aplicaciones superponer contenido sobre todas las demás ventanas de actividad, excepto "ventanas críticas del sistema como la barra de estado o IME" (IME se refiere al teclado). Esto está bien para aplicaciones como Facebook Messenger, ya que los chatheads proporcionados por esa aplicación no tienen ningún propósito en la parte superior de la barra de estado, pero esto afecta negativamente a la mayoría de las aplicaciones que mencioné anteriormente.

Además, en este momento no parece haber una solución alternativa para los desarrolladores. Uno podría esperar que, para evitar este problema en Android O, los desarrolladores simplemente creen sus aplicaciones para apuntar al SDK 25 (Android 7.1.1). Sin embargo, como señaló el desarrollador de Status en Reddit, Google ha reemplazado TYPE_SYSTEM_OVERLAY con TYPE_APPLICATION_OVERLAY, y el cambio es independiente de la versión de destino del SDK . Los desarrolladores que usan TYPE_SYSTEM_OVERLAY actualmente tienen que usar TYPE_APPLICATION_OVERLAY para mantener la compatibilidad, por lo tanto, no importa en qué versión de SDK de destino se base una aplicación en particular, ya no puede usar TYPE_SYSTEM_OVERLAY en Android O.


¿Qué se puede hacer con esto?

No está exactamente claro por qué Google ha realizado este cambio, ya que aún no han proporcionado una explicación oficial. Supongo que es un intento de mejorar la seguridad en Android al evitar que usuarios desprevenidos instalen accidentalmente aplicaciones que bloqueen o reemplacen maliciosamente su barra de estado. Desafortunadamente, este cambio atrapa muchas aplicaciones perfectamente legítimas que usan TYPE_SYSTEM_OVERLAY en el fuego cruzado.

Los desarrolladores que utilizan esta función han abierto informes de errores en el Rastreador de problemas de Android (# 260787 y # 36574245) para protestar por el cambio y solicitar una API alternativa, pero un Googler comentó en el rastreador con la siguiente declaración:

Estado: no se solucionará (comportamiento previsto)

Hemos seguido con el producto y el equipo de ingeniería y hemos recibido sugerencias de que los desarrolladores pueden usar las actividades SHOW_WHEN_LOCKED para mostrar cuándo el dispositivo está bloqueado, pero ya no es posible mostrarlo en la pantalla de bloqueo / sobre el tono de notificación

Por ahora, parece que estos desarrolladores no tienen suerte, ya que los desarrolladores han señalado que FLAG_SHOW_WHEN_LOCKED todavía no permite que las ventanas se superpongan en la parte superior de la barra de estado. No está claro qué pueden hacer los desarrolladores de estas aplicaciones, excepto rezar para que Google cambie las cosas o se ponga nervioso.

Dado que esta es solo la primera Vista previa de desarrollador para Android O, todavía es posible que Google cambie de opinión y brinde esta funcionalidad para aplicaciones que no se dirigen a Android O, o para que Google restaure TYPE_SYSTEM_OVERLAY. Pero si las cosas siguen como están actualmente, puedes despedirte de estas aplicaciones . Y eso sería una maldita vergüenza.


¡Gracias a Eli Irvin por probar muchas de estas aplicaciones para mí!