Android O razbija aplikacije koje se prekrivaju na vrhu statusne trake

Android O zastario je TYPE_SYSTEM_OVERLAY u korist TYPE_APPLICATION_OVERLAY, što je rezultiralo kvarom aplikacija koje se prekrivaju na vrhu statusne trake.

Mnoštvo postova koji ocrtavaju nove značajke namijenjene korisnicima pronađene u Android O počinje usporavati sada kada su korisnici imali tjedne da testiraju softver na svojim uređajima. Međutim, postoje mnoge, mnoge promjene napravljene ispod haube koje se polako otkrivaju. Upravo smo neki dan objavili jednu takvu promjenu u vezi s Nexus i Pixel uređajima koji koriste Android O usvajanje SDCardFS. Ali danas bismo željeli razgovarati o promjeni koja će utjecati na programere određenih aplikacija, posebno onih koje sloj na vrhu statusne trake. Čini se da su ove aplikacije pokvaren u Android O Developer Previewu, što biste na prvi pogled mogli odbaciti kao jednostavnu pogrešku, ali dublje u referentnu dokumentaciju, ovo bi moglo biti namjeravanu promjenu od Googlea.


Android O razbija slojeve statusne trake

Jedna od mojih najdražih stvari o Androidu je koliko je prilagodljiv. Korisnici koji su rootani ili koriste prilagođene ROM-ove mogu izvorno tematizirati statusne trake svog sustava bez ikakvih ograničenja, ali ako vaš uređaj nije rootan, imate manje dostupnih opcija. Srećom, postoji mnogo aplikacija u trgovini Google Play koje vam omogućuju promjenu izgleda statusne trake na osnovnoj razini. To je moguće zahvaljujući pametnoj kombinaciji System Overlay Windows za prikaz prilagođene statusne trake preko postojeće, Slušatelji obavijesti za prikaz obavijesti i opcionalno usluga pristupačnosti koja omogućuje kontekstualno nijansiranje prilagođenog statusna traka.

Dvije gornje snimke zaslona pokazuju kako bi moja traka s obavijestima izgledala kada bih koristila jednu od mnogih aplikacija za preklapanje trake statusa dostupnih u Trgovini Play. Ove snimke zaslona snimljene su na nerutoiranom Huawei Mate 9 s EMUI 5.0. Za one od vas koji nisu upoznati s EMUI, statusna traka nimalo ne sliči gornjim snimkama zaslona. Umjesto toga, izgleda ovako:

Ako vam ne smeta izgled vaše trake statusa zaliha, aplikacije kao što su Status ili Traka statusa materijala su božji darovi. Ali ako, ili kada se vaš uređaj ažurira na Android O, ove aplikacije možda više neće raditi. Evo kako te iste dvije aplikacije izgledaju na Google Pixelu koji pokreće Android O Developer Preview:

Umjesto da preklapanje blokira izvornu statusnu traku, izgleda kao preklapanje preklapanja s originalnom statusnom trakom što rezultira velikim neredom.

Nažalost, ovo učinkovito čini aplikacije poput ovih beskorisnima. Ovo ne utječe samo na vaše tipične aplikacije za tematiziranje trake statusa - zahvaćene su sve aplikacije koje zahtijevaju prikaz sloja na vrhu statusne trake.

Evo popisa nekih popularnih aplikacija koje bi mogle biti beskorisne:

  • Status (500.000 - 1.000.000 instaliranja)
  • Traka statusa materijala (1.000.000 - 5.000.000 instaliranja)
  • Cool Alat - Statistika sustava (500.000 - 1.000.000 instaliranja)
  • Telekino (50.000 - 100.000 instaliranja)
  • Očistite statusnu traku (100.000 - 500.000 instaliranja)
  • Tinycore (100.000 - 500.000 instaliranja)

I popis nekih aplikacija koje će raditi, ali se više ne mogu prekrivati ​​na vrhu statusne trake (ograničavajući prethodne funkcije):

  • Sumrak (5.000.000 - 10.000.000 instaliranja)
  • Glavu gore (100.000 - 500.000 instaliranja)
  • Resource Monitor Mini (50.000 - 100.000 instaliranja)
  • Mini monitor mreže (1.000.000 - 5.000.000 instaliranja)

Postoji mnogo više aplikacija u Trgovini Play koje koriste neku vrstu preklapanja na vrhu statusne trake, ali već možete reći da će takva promjena utjecati na mnoge aplikacije koje koriste potencijalno milijuni korisnika. Dakle, što se ovdje događa?


TYPE_SYSTEM_OVERLAY se obustavlja

Sa svakom novom iteracijom Androida, Google uvodi i ukida (označava ih kao zastarjele i treba ih ukloniti) različite značajke. Ovaj put, značajka koja je na bloku za rezanje je TYPE_SYSTEM_OVERLAY. Da citiram referentna stranica za ono što je ova značajka ponudila programerima:

TYPE_SYSTEM_OVERLAY

Vrsta prozora: sistemski preklapajući prozori, koji moraju biti prikazani povrh svega ostalog. Ovi prozori ne smiju zauzimati fokus unosa ili će ometati blokadu tipkovnice. U višekorisničkim sustavima prikazuje se samo na prozoru vlasnika korisnika.

U biti, ova vrsta prozora omogućuje aplikaciji crtanje povrh bilo kojeg elementa na zaslonu - uključujući statusnu traku. Međutim, počevši od Androida O, ova vrsta prozora je zastarjela. Za nesistemske aplikacije, Google preporučuje da programeri umjesto njih koriste TYPE_APPLICATION_OVERLAY. Da citiram referentna stranica za ono što ova nova vrsta prozora radi:

TYPE_APPLICATION_OVERLAY

Vrsta prozora: prozori preklapanja aplikacije prikazuju se iznad svih prozora aktivnosti (vrste između FIRST_APPLICATION_WINDOW i LAST_APPLICATION_WINDOW), ali ispod kritičnih prozora sustava poput statusne trake ili IME-a.

Sustav može promijeniti položaj, veličinu ili vidljivost ovih prozora u bilo kojem trenutku kako bi korisniku smanjio vizualni nered i upravljao resursima.

Sustav će prilagoditi važnost procesa s ovom vrstom prozora kako bi smanjio mogućnost da ih ubojica s malo memorije ubije.

U višekorisničkim sustavima prikazuje se samo na zaslonu vlasnika korisnika.

Kao što vidite, ova nova vrsta prozora omogućuje aplikacijama prekrivanje sadržaja povrh svih ostalih prozora aktivnosti osim "kritični sistemski prozori poput statusne trake ili IME" (IME se odnosi na tipkovnicu). To je u redu za aplikacije poput Facebook Messengera, budući da glave za razgovor koje pruža ta aplikacija nemaju svrhu sjediti na vrhu statusne trake, ali to negativno utječe na većinu aplikacija koje sam ranije spomenuo.

Nadalje, čini se da u ovom trenutku ne postoji zaobilazno rješenje za razvojne programere. Moglo bi se očekivati ​​da, kako bi izbjegli ovaj problem na Androidu O, programeri jednostavno izgrade svoje aplikacije tako da ciljaju SDK 25 (Android 7.1.1). Međutim, kako je istaknuo programer Statusa na Redditu, Google ima zamijenio TYPE_SYSTEM_OVERLAY s TYPE_APPLICATION_OVERLAY, a promjena je neovisno o ciljnom SDK-u verzija. Razvojni programeri koji koriste TYPE_SYSTEM_OVERLAY trenutno moraju koristiti TYPE_APPLICATION_OVERLAY da bi održali kompatibilnost, stoga, bez obzira na kojoj se ciljanoj verziji SDK-a temelji određena aplikacija, ona može više ne koristite TYPE_SYSTEM_OVERLAY na Android O.


Što se može učiniti po tom pitanju?

Nije baš jasno zašto je Google napravio ovu promjenu, jer još uvijek nisu dali službeno objašnjenje. Pretpostavljam da je to pokušaj poboljšanja sigurnosti na Androidu sprječavanjem korisnika koji ništa ne sumnjaju da slučajno instaliraju aplikacije koje zlonamjerno blokiraju ili zamjenjuju njihovu statusnu traku. Nažalost, ova promjena hvata mnoge savršeno legitimne aplikacije koje koriste TYPE_SYSTEM_OVERLAY u unakrsnoj vatri.

Programeri koji koriste ovu značajku otvorili su izvješća o pogreškama na Androidovom Issue Trackeru (#260787 i #36574245) protestirati zbog promjene i zatražiti alternativni API, ali zaposlenik Googlea komentirao je praćenje s sljedeća izjava:

Status: Neće se popraviti (Predviđeno ponašanje)

Nastavili smo s proizvodnim i inženjerskim timom i dobili sugestiju da programeri mogu koristiti SHOW_WHEN_LOCKED aktivnosti za prikaži kada je uređaj zaključan, ali namjerno više nije moguće prikazati preko zaključanog zaslona/preko sjene obavijesti

Za sada se čini da ovi programeri nemaju sreće, budući da su programeri istaknuli da FLAG_SHOW_WHEN_LOCKED još uvijek ne dopušta preklapanje prozora na vrhu statusne trake. Nije jasno što programeri ovih aplikacija mogu učiniti osim moliti se da Google promijeni stvari ili dizati pakao oko toga.

Budući da je ovo samo prvi Developer Preview za Android O, još uvijek je moguće da ih Google promijeni umove i pružiti ovu funkciju za aplikacije koje ne ciljaju na Android O ili za vraćanje Googleu TYPE_SYSTEM_OVERLAY. Ali ako stvari ostanu onakve kakve su trenutno, možete pozdrav ovim aplikacijama. A to bi bila prokleta šteta.


Hvala Eli Irvinu što je testirao mnoge od ovih aplikacija za mene!