Zaimplementuj interfejs systemu

Android Automotive udostępnia nowy interfejs użytkownika systemu opracowany specjalnie dla pojazdów. Większość komponentów interfejsu systemu jest ściśle powiązana z usługami ramowymi. Interfejs systemu odnosi się do dowolnego elementu wyświetlanego 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 SystemUI), który został dostosowany specjalnie do pojazdów.

Co to jest interfejs użytkownika systemu?

Komponenty charakterystyczne dla interfejsu użytkownika systemu motoryzacyjnego obejmują:

Składnik Opis
Interfejs blokady ekranu Ekran, za pomocą którego użytkownicy są uwierzytelniani do określonego konta 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 aspektów do nawigacji do różnych aplikacji, przełączania panelu powiadomień i zapewniania kontroli pojazdu (takich jak HVAC). Różni się to od implementacji interfejsu użytkownika systemu Android, która zapewnia przyciski Wstecz, Strona główna i stos aplikacji.
Pasek stanu Pasek systemowy umieszczony wzdłuż ekranu i służący jako pasek nawigacyjny. Pasek stanu zapewnia również funkcje wspierające:
  • Ikony łączności. W tym połączenie Bluetooth, Wi-Fi i Hotspot/Mobile.
  • Rozwijany panel powiadomień. Na przykład przesuń palcem w dół z górnej części 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łącznika Ekran, za pomocą którego użytkownik może wybrać innego użytkownika.
Interfejs głośności Okno dialogowe wyświetlane, gdy kierowca używa fizycznych przycisków głośności do zmiany głośności na urządzeniu.

Jak działa interfejs użytkownika systemu?

System UI to aplikacja na Androida, która działa, gdy urządzenie jest włączone. Aplikacja jest uruchamiana poprzez odbicie przez SystemServer . Poniżej wymieniono najważniejsze punkty wejścia dla widocznych dla użytkownika aspektów interfejsu systemu. Użyj tych składników, aby dostosować interfejs użytkownika systemu Android do funkcji specyficznych dla branży motoryzacyjnej.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

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

Dostosowywanie interfejsu systemu

Nakładki

Chociaż możesz zmodyfikować kod źródłowy systemu Android, aby dostosować interfejs użytkownika systemu, utrudnia to i komplikuje stosowanie przyszłych aktualizacji systemu Android. Zamiast tego system Android obsługuje korzystanie z katalogu nakładki, który umożliwia zastępowanie plików zasobów bez modyfikowania kodu źródłowego. W systemie kompilacji Android system nakładek w kontrolowany sposób zastępuje pliki. Wszystkie zmodyfikowane pliki są wyraźnie identyfikowane bez 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 systemie Android 10 lub nowszym PRODUCT_PACKAGE_OVERLAYS jest ustawiony na:

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

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

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

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 SystemUI, 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 dostosowywania znajdują się poniżej.

Interfejs użytkownika systemu samochodowego może mieć 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 niezastrzeżony, 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

Te układy muszą zawierać com.android.systemui.car.systembar.CarSystemBarView na najwyższym poziomie, który może zawierać wszelkie 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 skonfigurowane dla danego użytkownika.

Pasek stanu

Rozważ pasek stanu jako pasek nawigacyjny z dodatkową funkcjonalnością. W przeciwieństwie do paska nawigacyjnego, pasek stanu nie ma flagi, aby go wyłączyć. 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 ikonę równomiernie ze współczynnikiem skali zamiast określania określonego rozmiaru. 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 obejmuje również panel powiadomień, przełącznik użytkowników, powiadomienia heads up (HUN) i blokadę klawiszy. Różne ich układy są zawarte w super_status_bar.xml .

Zmiany w kodzie źródłowym UI systemu

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

Alarm. Zmiany wprowadzone w kodzie źródłowym Androida będą trudne do zaktualizowania w późniejszych wersjach Androida. Zdecydowanie zaleca się rozszerzenie kodu interfejsu użytkownika systemu Automotive System zamiast bezpośredniej modyfikacji kodu. W ten sposób można uaktualnić bazowy kod źródłowy interfejsu użytkownika systemu Automotive System przy minimalnych konfliktach scalania, ponieważ wszystkie dostosowania są implementowane za pomocą znanych powierzchni interfejsu API.

Większość aspektów interfejsu 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 , aby wskazywał na 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 lockscreen.

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

Poniższy materiał opisuje, jak dostosować doświadczenie przełączania użytkowników.

Termin Opis
Ochrona klawiatury Okno dialogowe pełnoekranowe, aby zapobiec przypadkowej interakcji z aplikacją na pierwszym planie. Chroni prywatność każdego użytkownika, gdy skonfigurowanych jest wielu użytkowników.
Okno dialogowe ładowania Ekran ładowania wyświetlany podczas przełączania mię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żytkowników Przełącznik użytkownika wyświetlany podczas przełączania ekranów z QuickSettings.

Dostosuj przełączanie użytkowników

Keyguard i bramkarz

W systemie Android Automotive OS ekran blokady klawiatury z selektorem użytkownika jest wyświetlany tylko wtedy, gdy użytkownik kliknie przycisk Anuluj na ekranie blokady. Ekran blokady klawiatury pokazano poniżej.

Ekran blokady klawiatury

Rysunek 1. Ekran blokady klawiatury

Ekran blokady z bramkarzem jest wyświetlany, gdy użytkownik wybrał rodzaj prywatności, za pomocą którego ma odblokować urządzenie, jak pokazano poniżej.

Ekran blokady

Rysunek 2. Ekran blokady.

Gdy blokada jest ustawiona na ręczne włączanie lub wyłączanie zasilania, należy skorzystać z następującej instrukcji:

adb shell input keyevent 26

Selektor użytkowników

Ekran wyboru użytkownika jest wyświetlany po ponownym uruchomieniu urządzenia zintegrowanego z paskiem stanu interfejsu systemu samochodu i mapami. Aby dowiedzieć się więcej, zobacz FullscreenUserSwitcher .

Ekran ładowania

Rysunek 3. Ekran ładowania

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

Ekran ładowania

Ekran ładowania jest wyświetlany po przełączeniu użytkownika, niezależnie od punktu wejścia. Na przykład za pomocą selektora użytkownika lub ekranu ustawień. Ekran ładowania jest integralną częścią interfejsu systemu framework i mapuje do publicznej klasy o nazwie CarUserSwitchingDialog . Zobacz rysunek 3 powyżej jako przykład.

Motyw można dostosować za pomocą Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog .

Aby skonfigurować użytkownika systemu Android, początkowy przepływ kreatora konfiguracji umożliwia kierowcy skonfigurowanie własnej nazwy użytkownika. Jeśli sterownik następnie powiąże użytkownika Androida z kontem Google, nazwa użytkownika zostanie wybrana z tego konta. Jeśli jednak sterownik określi nazwę, na przykład DriverB, a następnie skojarzy tę nazwę użytkownika ze swoim kontem Google z nazwiskiem Maddy, pierwotnie przypisana nazwa (DriverB) nie zostanie zmieniona, ponieważ została ona 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 przy użyciu motywu o nazwie NoActionBar.Fullscreen . (Jest to oryginalny interfejs użytkownika systemu, zaktualizowany dla interfejsu użytkownika samochodu). Aby uzyskać więcej informacji, zobacz Dostosowywanie .

Chociaż producenci OEM mogą zapewnić punkty wejścia interfejsu użytkownika do przełączania użytkowników, wyniki mogą czasami być niepożądane. Jeśli tak się stanie:

  1. Producent OEM tworzy i wyświetla niestandardowy ekran ładowania (lub okno dialogowe).
    • Specyficznie dla UX, OEM uruchamia niestandardowy ekran ładowania, gdy użytkownik wybierze sposób przełączenia, który może zostać ukryty po zakończeniu przełączania użytkownika.
    • 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 framework 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ę dla pierwszego użytkownika

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