Zaimplementuj interfejs systemu

Android Automotive udostępnia nowy interfejs systemowy opracowany specjalnie dla pojazdów. Większość komponentów interfejsu użytkownika systemu jest ściśle powiązana z usługami frameworkowymi. Interfejs systemu oznacza dowolny element wyświetlany na ekranie, który nie jest częścią aplikacji. Interfejs użytkownika systemu samochodowego (w pakiecie elementów CarSystemUI) jest rozszerzeniem interfejsu użytkownika systemu Android (w pakiecie interfejsu systemu), który został dostosowany specjalnie dla pojazdów.

Co to jest interfejs systemu?

Komponenty specyficzne dla interfejsu użytkownika systemu samochodowego obejmują:

Część Opis
Interfejs ekranu blokady Ekran, za pomocą którego użytkownicy są uwierzytelniani na konkretnym koncie użytkownika.
Pasek nawigacyjny Pasek systemowy, który można umieścić po lewej, dolnej lub prawej stronie ekranu i który może zawierać przyciski aspektowe umożliwiające nawigację do różnych aplikacji, przełączanie panelu powiadomień i zapewnianie elementów sterujących pojazdem (takich jak HVAC). Różni się to od implementacji interfejsu użytkownika systemu Android, która udostępnia przyciski Wstecz, Strona główna i stos aplikacji.
Pasek stanu Pasek systemowy umieszczony wzdłuż ekranu i pełniący funkcję paska nawigacyjnego. Pasek stanu udostępnia także funkcje umożliwiające:
  • Ikony łączności. Obejmuje Bluetooth, Wi-Fi i połączenie Hotspot/mobilne.
  • Rozwijany panel powiadomień. Na przykład przesunięcie palcem w dół od góry ekranu.
  • Powiadomienia heads-up (HUN).
Interfejs systemu Odnosi się do dowolnego elementu wyświetlanego na ekranie, który nie jest częścią aplikacji.
Interfejs użytkownika przełączającego Ekran, za pomocą którego użytkownik może wybrać innego użytkownika.
Interfejs głośności Okno dialogowe wyświetlane, gdy sterownik używa fizycznych przycisków głośności do zmiany głośności urządzenia.

Jak działa interfejs systemu?

Systemowy interfejs użytkownika to aplikacja na Androida, która działa po włączeniu urządzenia. Aplikacja jest uruchamiana poprzez odbicie przez serwer systemowy . Poniżej wymieniono najważniejsze punkty wejścia dla widocznych dla użytkownika aspektów interfejsu użytkownika systemu. Użyj tych komponentów, aby dostosować interfejs użytkownika systemu Android pod kątem funkcji specyficznych dla branży motoryzacyjnej.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI jest rozszerzeniem pakietu System UI, co oznacza, że ​​klasy i zasoby w pakiecie System UI mogą być używane i zastępowane przez pakiet CarSystemUI.

Dostosuj interfejs użytkownika systemu

Nakładki

Chociaż możesz modyfikować kod źródłowy Androida, aby dostosować interfejs użytkownika systemu, utrudnia to i komplikuje stosowanie przyszłych aktualizacji Androida. Zamiast tego system Android obsługuje korzystanie z katalogu nakładek, który umożliwia zastępowanie plików zasobów bez modyfikowania kodu źródłowego. W systemie kompilacji Androida system nakładek zastępuje pliki w kontrolowany sposób. Wszystkie zmodyfikowane pliki są wyraźnie identyfikowane bez konieczności przechodzenia przez całe drzewo kodu źródłowego AOSP.

Pliki nakładek muszą być umieszczone w katalogu PRODUCT_PACKAGE_OVERLAYS i muszą mieć dokładnie te same podfoldery, co oryginalna struktura główna AOSP. W przypadku Androida 10 lub nowszego PRODUCT_PACKAGE_OVERLAYS jest ustawiony na:

PRODUCT_PACKAGE_OVERLAYS := packages/services/Car/car_product/overlay

Interfejs użytkownika systemu samochodowego korzysta z zasobów z pakietów System UI i CarSystemUI, co oznacza, że ​​zasoby z każdej lokalizacji można zastąpić nakładkami, aby wpłynąć na wygląd i działanie interfejsu użytkownika systemu samochodowego.

Aby zastąpić plik, odtwórz strukturę katalogów zastępowanego pliku w określonym katalogu /overlay , a następnie umieść zamiennik w tym katalogu. Na przykład, aby zastąpić:

frameworks/base/packages/CarSystemUI/res/layout/super_status_bar.xml

Dodaj zastępczy plik super_status_bar.xml znajdujący się w:

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Aby zastąpić frameworks/base/packages/SystemUI/res/values/config.xml (w System UI, a nie CarSystemUI), dodaj zastępczy plik config.xml do:

packages/services/Car/car_product/overlay/frameworks/base/packages/SystemUI/res/layout/

Lub

packages/services/Car/car_product/overlay/frameworks/base/packages/CarSystemUI/res/layout/

Opisy dwóch głównych punktów wejścia w dostosowywanie znajdują się poniżej.

Interfejs użytkownika systemu samochodowego może zawierać trzy paski nawigacyjne po lewej, u dołu i po prawej stronie ekranu. Widoczność każdego paska systemowego jest przełączana w następujących konfiguracjach:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Każdy pasek ma stan udostępniony i nieobsługiwany, który można dostosować, nakładając odpowiednie pliki układu:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (układ dolnego paska nawigacyjnego)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

Układy te muszą zawierać na najwyższym poziomie com.android.systemui.car.systembar.CarSystemBarView , który może zawierać inne niezbędne widoki. Przyciski wewnątrz pasków nawigacyjnych można dołączyć za pomocą com.android.systemui.car.systembar.CarSystemBarButton .

Widoki te są zawyżone w CarSystemBar#createSystemBar , jeśli urządzenie jest prawidłowo udostępnione dla danego użytkownika.

Pasek stanu

Potraktuj pasek stanu jako pasek nawigacyjny z dodatkową funkcjonalnością. W przeciwieństwie do paska nawigacji, pasek stanu nie ma flagi umożliwiającej jego wyłączenie. Możesz modyfikować pasek stanu za pomocą:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Te układy muszą zawierać com.android.systemui.statusbar.car.CarNavigationBarView na najwyższym poziomie. Pasek stanu zawiera ikony stanu. Aby zmienić rozmiar ikony, przeskaluj ją równomiernie za pomocą współczynnika skali, zamiast określać konkretny rozmiar. Na przykład w pliku nakładki /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml dodaj następujące wymiary, aby podwoić rozmiar ikon:

<resources>
    <!-- The amount by which to scale up the status bar icons.-->
    <item name="status_bar_icon_scale_factor" format="float" type="dimen">2</item>
</resources>

Pasek stanu znajduje się w specjalnej warstwie okien, która zawiera również panel powiadomień, przełącznik użytkowników, powiadomienia przezierne (HUN) i klawiaturę. Różne układy tych elementów znajdują się w super_status_bar.xml .

Zmiany kodu źródłowego interfejsu użytkownika systemu

Nakładki mogą nie zapewniać elastyczności potrzebnej do wystarczającego dostosowania zachowania interfejsu użytkownika systemu.

Alarm. Zmiany wprowadzone w kodzie źródłowym Androida są trudne do zaktualizowania w późniejszych wersjach Androida. Zdecydowanie zalecamy rozszerzenie kodu interfejsu użytkownika systemu samochodowego zamiast bezpośredniego modyfikowania kodu. W ten sposób podstawowy kod źródłowy interfejsu użytkownika systemu samochodowego można zaktualizować przy minimalnych konfliktach scalania, ponieważ wszystkie dostosowania są implementowane za pośrednictwem znanych interfejsów API.

Większość aspektów interfejsu użytkownika systemu można dostosować za pomocą tych dwóch punktów wejścia:

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Na przykład, jeśli utworzysz klasę o nazwie com.android.systemui.statusbar.car.custom.CustomCarStatusBar , która rozszerza CarStatusBar , zaktualizuj config_statusBarComponent tak, aby wskazywał ten nowy komponent. Rozszerzenie tej klasy umożliwia dostosowanie większości elementów związanych z paskiem systemowym i logiką powiadomień.

Podobnie możesz utworzyć CustomCarSystemUIFactory i umieścić go w config_systemUIFactoryComponent . Użyj tej klasy, aby zaktualizować funkcjonalność VolumeUI i ekranu blokady.

Dostosuj przełączanie i odblokowywanie użytkowników

Poniższy materiał opisuje, jak dostosować sposób przełączania użytkowników.

Termin Opis
Klucznik Okno pełnoekranowe, aby zapobiec przypadkowej interakcji z aplikacją na pierwszym planie. Chroni prywatność każdego użytkownika, gdy skonfigurowanych jest wielu użytkowników.
Ładowanie okna dialogowego Ekran ładowania wyświetlany podczas przełączania pomiędzy użytkownikami.
Ekran blokady, bramkarz Ekran wymagający od osoby wprowadzenia kodu PIN, wzoru lub hasła.
Użytkownik Użytkownik Androida.
Selektor użytkowników Ekran wyboru użytkownika wyświetlany po uruchomieniu urządzenia.
Przełącznik użytkownika Przełącznik użytkownika wyświetlany podczas przełączania ekranów z Szybkich ustawień.

Dostosuj przełączanie użytkowników

Klucznik i bramkarz

W systemie operacyjnym Android Automotive ekran Keyguard z selektorem użytkowników jest wyświetlany tylko wtedy, gdy użytkownik kliknie przycisk Anuluj na ekranie blokady. Poniżej pokazano ekran blokady klawiatury.

Ekran blokady klawiatury

Rysunek 1. Ekran klawiatury

Gdy użytkownik wybierze typ prywatności umożliwiający odblokowanie urządzenia, zostanie wyświetlony ekran blokady z wykidajło, jak pokazano poniżej.

Ekran blokady

Rysunek 2. Ekran blokady.

Gdy blokada jest ustawiona na ręczne włączanie i wyłączanie zasilania, postępuj zgodnie z poniższą instrukcją:

adb shell input keyevent 26

Selektor użytkowników

Ekran wyboru użytkownika jest wyświetlany po ponownym uruchomieniu urządzenia stanowiącego integralną część paska stanu interfejsu systemowego samochodu i aplikacji Mapy. Aby dowiedzieć się więcej, zobacz FullscreenUserSwitcher .

Ekran ładowania

Rysunek 3. Ekran wyboru użytkownika

Układ tego ekranu można dostosować w car_fullscreen_user_switcher.xml .

Ekran ładowania

Ekran ładowania jest wyświetlany przy każdej zmianie użytkownika, niezależnie od punktu wejścia. Na przykład poprzez selektor użytkownika lub ekran Ustawienia. Ekran ładowania jest integralną częścią interfejsu użytkownika systemu i jest mapowany do klasy publicznej o nazwie CarUserSwitchingDialog . Przykład można znaleźć na rysunku 3 powyżej.

Motyw można dostosować za pomocą Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog .

Aby skonfigurować użytkownika systemu Android, początkowy kreator konfiguracji umożliwia kierowcy skonfigurowanie własnej nazwy użytkownika. Jeśli następnie sterownik powiąże użytkownika Androida z kontem Google, nazwa użytkownika zostanie wybrana z tego konta. Jeśli jednak kierowca określi nazwę, na przykład KierowcaB, a następnie powiąże tę nazwę użytkownika ze swoim kontem Google z imieniem Maddy, pierwotnie przypisana nazwa (DriverB) nie ulegnie zmianie, ponieważ nazwa ta została jawnie ustawiona. Kierowca może zmienić nazwę tylko w menu Ustawienia.

Układ można dostosować w car_user_switching_dialog.xml .

Producenci OEM mogą ukryć pasek stanu i nawigacji, korzystając z motywu o nazwie NoActionBar.Fullscreen . (To jest oryginalny interfejs użytkownika systemu, zaktualizowany do interfejsu referencyjnego samochodu.) Aby uzyskać więcej informacji, zobacz Dostosowywanie .

Chociaż producenci OEM mogą udostępniać punkty wejścia do interfejsu użytkownika w celu zmiany użytkownika, wyniki mogą czasami być niepożądane. Jeżeli to nastąpi:

  1. Producent OEM tworzy i wyświetla niestandardowy ekran ładowania (lub okno dialogowe).
    • W przypadku UX producent OEM uruchamia niestandardowy ekran ładowania, gdy użytkownik wybiera sposób przełączenia, który można ukryć po zakończeniu przełączenia użytkownika.
    • Producent OEM musi ustawić okno priorytetu zgodnie ze swoimi preferencjami. Na przykład typ okna o wyższym priorytecie. Priorytet nie może przekraczać priorytetu Keyguard.
  2. Producent OEM ustawia config_customUserSwitchUi=true w podstawowej strukturze config.xml zgodnie z opisem w config_customuserswitchui . W rezultacie platforma nie wyświetla CarUserSwitchingDialog .

Dostosuj ekran blokady

Ekran blokady jest integralną częścią interfejsu użytkownika systemu, który może zostać dostosowany przez producenta OEM. Aby dostosować przepływ, zacznij od frameworks/base/packages/CarSystemUI/ .

Dostosuj konfigurację pierwszego użytkownika

Kreator instalacji przeprowadza pierwszą konfigurację użytkownika. To również można dostosować. Aby utworzyć użytkownika, możesz użyć interfejsów API UserManager . W niektórych przypadkach można to zaimplementować w tle, usprawniając w ten sposób proces Kreatora instalacji.