Android O psuje aplikacje nakładające się na pasek stanu

Android O wycofuje TYPE_SYSTEM_OVERLAY na rzecz TYPE_APPLICATION_OVERLAY, co powoduje, że aplikacje nakładają się na pasek stanu.

Strumień postów opisujących nowe funkcje dostępne dla użytkowników znalezione w Android O zaczyna zwalniać teraz, gdy użytkownicy mieli tygodnie na przetestowanie oprogramowania na swoich urządzeniach. Jednakże istnieje wiele, wiele zmian wprowadzonych pod maską, które powoli są odkrywane. Niedawno pisaliśmy o jednej takiej zmianie dotyczącej urządzeń Nexus i Pixel z systemem Android O przyjęcie SDCardFS. Ale dzisiaj chcielibyśmy omówić zmianę, która wpłynie na twórców niektórych aplikacji, szczególnie tych, które nakładka na górze paska stanu. Wydaje się, że te aplikacje są uszkodzony w wersji zapoznawczej Androida O dla programistów, który na pierwszy rzut oka możesz odrzucić jako zwykły błąd, ale zagłębiając się w dokumentację referencyjną, może tak być zamierzoną zmianę przez Google'a.


Android O łamie nakładki paska stanu

Jedną z moich ulubionych rzeczy w Androidzie jest możliwość jego dostosowywania. Użytkownicy zrootowani lub korzystający z niestandardowych pamięci ROM mogą natywnie motywować paski stanu systemu, zasadniczo bez żadnych ograniczeń, ale jeśli Twoje urządzenie nie jest zrootowane, dostępnych jest mniej opcji. Na szczęście w sklepie Google Play dostępnych jest wiele aplikacji, które pozwalają na podstawową zmianę wyglądu paska stanu. Jest to możliwe dzięki sprytnemu połączeniu okien nakładki systemowej, które wyświetlają niestandardowy pasek stanu na istniejącym, Odbiorniki powiadomień do wyświetlania powiadomień i opcjonalnie usługa ułatwień dostępu umożliwiająca kontekstowe dostosowanie niestandardowego pasek stanu.

Dwa powyższe zrzuty ekranu pokazują, jak wyglądałby mój pasek powiadomień podczas korzystania z jednej z wielu aplikacji nakładających pasek stanu dostępnych w Sklepie Play. Te zrzuty ekranu zostały wykonane na nierootowanym Huawei Mate 9 z systemem EMUI 5.0. Dla tych z Was, którzy nie są zaznajomieni z EMUI, pasek stanu w niczym nie przypomina powyższych zrzutów ekranu. Zamiast tego wygląda to tak:

Jeśli nie przeszkadza Ci wygląd paska stanu zapasów, to aplikacje takie jak Status Lub Pasek stanu materiału są darem niebios. Jeśli jednak lub kiedy Twoje urządzenie zostanie zaktualizowane do systemu Android O, te aplikacje mogą przestać działać. Oto jak te same dwie aplikacje wyglądają na Google Pixel z wersją Android O Developer Preview:

Zamiast nakładki blokującej oryginalny pasek stanu, wygląda ona jak nakładka nakłada się z oryginalnym paskiem stanu, co powoduje ogromny bałagan.

Niestety, powoduje to, że takie aplikacje stają się bezużyteczne. Dotyczy to nie tylko typowych aplikacji z motywem paska stanu — dotyczy to wszystkich aplikacji, które wymagają wyświetlania nakładki na pasku stanu.

Oto lista niektórych popularnych aplikacji, które mogą stać się bezużyteczne:

  • Status (500 000–1 000 000 instalacji)
  • Pasek stanu materiału (1 000 000–5 000 000 instalacji)
  • Fajne narzędzie – statystyki systemowe (500 000–1 000 000 instalacji)
  • Telecine (50 000–100 000 instalacji)
  • Wyczyść pasek stanu (100 000–500 000 instalacji)
  • Małycore (100 000–500 000 instalacji)

Oraz lista niektórych aplikacji, które będą działać, ale nie mogą już nakładać się na pasek stanu (ograniczając poprzednią funkcjonalność):

  • Zmierzch (5 000 000–10 000 000 instalacji)
  • Heads-up (100 000–500 000 instalacji)
  • Monitor zasobów Mini (50 000–100 000 instalacji)
  • Minimonitor sieciowy (1 000 000–5 000 000 instalacji)

W Sklepie Play jest o wiele więcej aplikacji, które korzystają z jakiejś nakładki na pasku stanu, ale... już teraz widać, że taka zmiana będzie miała wpływ na wiele aplikacji, z których korzystają potencjalnie miliony użytkowników użytkownicy. Więc co tu się dzieje?


TYPE_SYSTEM_OVERLAY jest przestarzały

Z każdą nową wersją Androida Google zarówno wprowadza, jak i wycofuje (oznacza jako przestarzałe i przeznaczone do usunięcia) różne funkcje. Tym razem funkcja znajdująca się na bloku do krojenia to TYPE_SYSTEM_OVERLAY. Cytując strona referencyjna co ta funkcja oferowała programistom:

TYPE_SYSTEM_OVERLAY

Typ okna: okna nakładane na system, które muszą być wyświetlane na wierzchu wszystkiego innego. Okna te nie mogą skupiać się na wprowadzaniu danych, w przeciwnym razie będą zakłócać działanie klawiatury. W systemach z wieloma użytkownikami wyświetla się tylko w oknie użytkownika będącego właścicielem.

Zasadniczo ten typ okna pozwala aplikacji rysować na dowolnym elemencie ekranu – łącznie z paskiem stanu. Jednak począwszy od Androida O ten typ okna stał się przestarzały. W przypadku aplikacji niesystemowych Google zaleca programistom użycie zamiast tego TYPE_APPLICATION_OVERLAY. Cytując strona referencyjna do czego służy ten nowy typ okna:

TYPE_APPLICATION_OVERLAY

Typ okna: Okna nakładki aplikacji są wyświetlane nad wszystkimi oknami aktywności (typy pomiędzy FIRST_APPLICATION_WINDOW I LAST_APPLICATION_WINDOW), ale poniżej krytycznych okien systemowych, takich jak pasek stanu lub edytor IME.

System może w dowolnym momencie zmienić położenie, rozmiar lub widoczność tych okien, aby zmniejszyć bałagan wizualny dla użytkownika, a także zarządzać zasobami.

System dostosuje ważność procesów z tym typem okna, aby zmniejszyć ryzyko ich zabicia przez zabójcę małej pamięci.

W systemach z wieloma użytkownikami wyświetla się tylko na ekranie użytkownika będącego właścicielem.

Jak widać, ten nowy typ okna umożliwia aplikacjom nakładanie zawartości na wszystkie inne okna aktywności z wyjątkiem „krytyczne okna systemowe, takie jak pasek stanu lub edytor IME” (IME odnosi się do klawiatury). Jest to dobre w przypadku aplikacji takich jak Facebook Messenger, ponieważ chatheady dostarczane przez tę aplikację nie mają żadnego celu umieszczania się na pasku stanu, ale ma to negatywny wpływ na większość aplikacji, o których wspomniałem wcześniej.

Co więcej, obecnie nie wydaje się, aby istniało obejście tego problemu dla programistów. Można się spodziewać, że aby uniknąć tego problemu na Androidzie O, programiści po prostu budują swoje aplikacje pod SDK 25 (Android 7.1.1). Jak jednak zauważył twórca Statusu na Reddicie, Google ma zastąpiony TYPE_SYSTEM_OVERLAY z TYPE_APPLICATION_OVERLAY, a zmiana jest niezależny od docelowego pakietu SDK wersja. Programiści używający TYPE_SYSTEM_OVERLAY muszą obecnie używać TYPE_APPLICATION_OVERLAY, aby zachować kompatybilność, dlatego niezależnie od docelowej wersji SDK, na której oparta jest dana aplikacja, może nie używaj już TYPE_SYSTEM_OVERLAY na Androidzie O.


Co można zrobić na ten temat?

Nie jest do końca jasne, dlaczego Google wprowadziło tę zmianę, ponieważ nie przedstawiło jeszcze oficjalnego wyjaśnienia. Domyślam się, że jest to próba poprawy bezpieczeństwa systemu Android poprzez uniemożliwienie niczego niepodejrzewającym użytkownikom przypadkowego zainstalowania aplikacji, które złośliwie blokują lub zamieniają pasek stanu. Niestety, ta zmiana powoduje konflikt między wieloma całkowicie legalnymi aplikacjami korzystającymi z TYPE_SYSTEM_OVERLAY.

Programiści korzystający z tej funkcji otworzyli raporty o błędach w narzędziu do śledzenia problemów systemu Android (#260787 I #36574245), aby zaprotestować przeciwko zmianie i poprosić o alternatywny interfejs API, ale pracownik Google skomentował moduł śledzący za pomocą następujące oświadczenie:

Stan: nie zostanie naprawiony (zamierzone zachowanie)

Skontaktowaliśmy się z zespołem ds. produktu i inżynierami i otrzymaliśmy sugestię, że programiści mogą wykorzystać działania SHOW_WHEN_LOCKED do pokazuj, kiedy urządzenie jest zablokowane, ale celowo nie jest już możliwe wyświetlanie na ekranie blokady / w obszarze powiadomień

Na razie wygląda na to, że programiści ci nie mają szczęścia, ponieważ programiści wskazali, że FLAG_SHOW_WHEN_LOCKED nadal nie pozwala na nakładanie okien na pasek stanu. Nie jest jasne, co twórcy tych aplikacji mogą zrobić poza modleniem się do Google, aby coś zmieniło lub wzniecać z tego powodu piekło.

Ponieważ jest to dopiero pierwsza wersja deweloperska Androida O, Google nadal może zmieniać swoje wersje umysły i udostępnij tę funkcję aplikacjom, które nie są przeznaczone dla Androida O, lub aby Google mógł je przywrócić TYPE_SYSTEM_OVERLAY. Jeśli jednak wszystko pozostanie tak, jak jest obecnie, możesz to zrobić pocałuj te aplikacje na pożegnanie. A to byłby cholerny wstyd.


Dziękuję Eli Irvinowi za przetestowanie dla mnie wielu z tych aplikacji!