Implementacja interfejsu systemu

Android Automotive udostępnia nowy interfejs systemowy opracowany specjalnie na potrzeby pojazdów. Większość komponentów interfejsu użytkownika jest ściśle powiązana z usługami frameworka. UI systemu to dowolny element wyświetlany na ekranie, który nie jest częścią aplikacji. UI systemu Automotive (w pakiecie CarSystemUI) to rozszerzenie interfejsu systemu Android (w pakiecie SystemUI), które zostało dostosowane specjalnie do pojazdów.

Czym jest interfejs systemu?

Komponenty specyficzne dla interfejsu Automotive System:

Komponent Opis
Interfejs ekranu blokady Ekran, na którym użytkownicy są uwierzytelniani na konkretnym koncie użytkownika.
Pasek nawigacyjny pasek systemowy, który może znajdować się po lewej, prawej lub na dole ekranu i może zawierać przyciski elementów do nawigacji do różnych aplikacji, przełączać panel powiadomień oraz zapewniać sterowanie pojazdem (np. HVAC); Różni się to od implementacji interfejsu systemu Androida, która zawiera przyciski Wstecz, Ekran główny i stos aplikacji.
Pasek stanu Systemowy pasek umieszczony na ekranie, który pełni funkcję paska nawigacyjnego. Pasek stanu umożliwia też:
  • Ikony łączności Dotyczy to Bluetootha, Wi-Fi i połączenia z hotspotem/siecią komórkową.
  • Panel powiadomień w drodze w dół. Na przykład przesuwając palcem z góry ekranu w dół.
  • Powiadomienia typu heads-up (HUN).
Interfejs systemu Odnosi się do dowolnego elementu wyświetlanego na ekranie, który nie jest częścią aplikacji.
Interfejs przełącznika użytkownika Ekran, na którym użytkownik może wybrać innego użytkownika.
Interfejs Volume Okno wyświetlane, gdy kierowca używa fizycznych przycisków głośności, aby zmienić głośność na urządzeniu.

Jak działa interfejs systemowy?

Interfejs systemu to aplikacja na Androida, która działa, gdy urządzenie jest włączone. Aplikacja jest uruchamiana przez SystemServer za pomocą funkcji odbicia lustrzanego. Poniżej znajdziesz najważniejsze punkty wejścia do widocznych dla użytkownika elementów interfejsu systemu. Używaj tych komponentów, aby dostosować interfejs systemu Androida do potrzeb samochodów.

  • 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

Możesz zmodyfikować kod źródłowy Androida, aby dostosować interfejs systemu, ale utrudni to i skomplikuje stosowanie przyszłych aktualizacji Androida. Zamiast tego Android umożliwia używanie katalogu nakładki, 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 oznaczone bez konieczności przeglądania całego drzewa kodu źródłowego AOSP.

Pliki nakładki muszą znajdować się w katalogu PRODUCT_PACKAGE_OVERLAYS i mieć dokładnie te same podfoldery co oryginalna struktura główna AOSP. W przypadku Androida w wersji 10 lub nowszej wartość PRODUCT_PACKAGE_OVERLAYS ma wartość:

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

System multimedialny Automotive System UI 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ływać na wygląd i działanie systemu multimedialnego Automotive System UI.

Aby zastąpić plik, skopiuj strukturę katalogu zastępowanego pliku w wybranym katalogu /overlay, a następnie dodaj do niego plik zastępczy. Na przykład, aby zastąpić:

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

Dodaj plik super_status_bar.xml, który znajduje się w folderze:

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, nie CarSystemUI), dodaj 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/

Poniżej opisujemy 2 główne punkty wejścia do tworzenia niestandardowych wersji.

Interfejs systemu samochodowego może mieć 3 paski nawigacyjne po lewej, dole i prawej stronie ekranu. Widoczność każdego paska systemu można włączać i wyłączać za pomocą tych konfiguracji:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

Każda poprzeczka ma stan „zarezerwowany” i „niezarezerwowany”, 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ć element com.android.systemui.car.systembar.CarSystemBarView na najwyższym poziomie, który może zawierać dowolne inne widoki. Przyciski na pasku nawigacyjnym można dodać za pomocą elementu com.android.systemui.car.systembar.CarSystemBarButton.

Te wyświetlenia są zawyżane w , jeśli urządzenie jest prawidłowo skonfigurowane dla danego użytkownika.CarSystemBar#createSystemBar

Pasek postępu

Pasek stanu można traktować jako pasek nawigacji z dodatkowymi funkcjami. W odróżnieniu od paska nawigacyjnego pasek stanu nie ma flagi umożliwiającej jego wyłączenie. Pasek stanu możesz modyfikować za pomocą:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

Te układy muszą zawierać element com.android.systemui.statusbar.car.CarNavigationBarViewna najwyższym poziomie. Pasek stanu zawiera ikony stanu. Aby zmienić rozmiar ikony, skaluj ją równomiernie za pomocą współczynnika skalowania zamiast podawania konkretnego rozmiaru. Na przykład w pliku /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml z nakładką dodaj te 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 okna, która obejmuje także panel powiadomień, przełącznik użytkownika, powiadomienia typu heads-up (HUN) oraz ekran blokady. Różne układy tych elementów są dostępne w pliku super_status_bar.xml.

Zmiany w kodzie źródłowym interfejsu systemu

Nakładki mogą nie zapewniać elastyczności potrzebnej do odpowiedniego dostosowania działania interfejsu systemu.

Alert. Zmiany wprowadzone w kodzie źródłowym Androida są trudne do aktualizacji w późniejszych wersjach Androida. Zdecydowanie zalecamy rozszerzanie kodu interfejsu Automotive System UI zamiast bezpośredniej modyfikacji kodu. Dzięki temu podstawowy kod źródłowy interfejsu użytkownika Automotive System można uaktualnić z minimalną liczbą konfliktów podczas scalania, ponieważ wszystkie dostosowywanie są implementowane za pomocą znanych interfejsów API.

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

  • config_statusBarComponent
  • config_systemUIFactoryComponent

Jeśli np. utworzysz klasę o nazwie com.android.systemui.statusbar.car.custom.CustomCarStatusBar, która rozszerza klasę CarStatusBar, zaktualizuj element config_statusBarComponent, aby wskazywał na ten nowy komponent. Rozszerzenie tej klasy umożliwia dostosowywanie 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.

Dostosowywanie przełączania i odblokowywania użytkowników

Z tego materiału dowiesz się, jak dostosować przełączanie kont.

Termin Opis
Blokada klawiszy Okno dialogowe na pełnym ekranie, aby zapobiec przypadkowemu interakcji z aplikacją na pierwszym planie. Chroni prywatność każdego użytkownika, gdy skonfigurowanych jest wielu użytkowników.
Wczytuję okno Ekran wczytywania wyświetlany podczas przełączania się między użytkownikami.
Ekran blokady, bouncer Ekran wymagający wpisania 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ń.

Dostosowywanie przełączania użytkowników

Keyguard i bouncer

W systemie operacyjnym Android Automotive ekran Keyguard z wybierakiem użytkowników wyświetla się tylko, gdy użytkownik kliknie przycisk Anuluj na ekranie blokady. Poniżej widać ekran Keyguard.

Ekran blokady klawiszy

Rysunek 1. Ekran blokady klawiszy

Gdy użytkownik wybierze typ ochrony prywatności, który ma służyć do odblokowywania urządzenia, wyświetli się ekran blokady z bouncerem, jak pokazano poniżej.

Ekran blokady

Rysunek 2. Ekran blokady.

Jeśli blokada jest ustawiona tak, aby ręcznie włączać i wyłączać zasilanie, postępuj zgodnie z tymi instrukcjami:

adb shell input keyevent 26

Selektor użytkowników

Wyświetla się on, gdy urządzenie, które jest integralną częścią paska stanu interfejsu użytkownika systemu, i Mapy są ponownie uruchamiane. Więcej informacji znajdziesz w artykule FullscreenUserSwitcher.

Wczytuję ekran

Rysunek 3. Ekran wyboru użytkownika

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

Wczytuję ekran

Ekran wczytywania wyświetla się zawsze, gdy użytkownik przełączy się na inny profil, niezależnie od punktu wejścia. na przykład za pomocą selektora użytkowników lub ekranu Ustawienia. Ekran wczytywania jest integralną częścią interfejsu systemu framework i odpowiada klasie publicznej o nazwie CarUserSwitchingDialog. Przykład znajdziesz na rysunku 3 powyżej.

Motyw można dostosować za pomocą Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog.

Aby skonfigurować konto użytkownika Androida, w ramach początkowego procesu konfiguracji kierowca może ustawić swoją nazwę użytkownika. Jeśli kierowca powiąże użytkownika Androida z kontem Google, z tego konta zostanie wybrana nazwa użytkownika. Jeśli jednak kierowca podaje nazwę, np. KierowcaB, a potem skojarzy ją z kontem Google o nazwie Maddy, pierwotnie przypisana nazwa (KierowcaB) nie zostanie zmieniona, ponieważ została ustawiona w sposób jawny. Kierowca może zmienić nazwę tylko w menu Ustawienia.

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

Producenci OEM mogą ukryć pasek stanu i pasek nawigacji, używając motywu o nazwie NoActionBar.Fullscreen. (To oryginalny interfejs systemu, zaktualizowany pod kątem interfejsu referencyjnego samochodu). Więcej informacji znajdziesz w artykule o personalizacji.

Producenci OEM mogą udostępniać punkty wejścia w interfejsie, które umożliwiają przełączanie użytkowników, ale czasami może to przynieść niepożądane skutki. W takim przypadku:

  1. Producent OEM tworzy i wyświetla niestandardowy ekran wczytywania (lub okno dialogowe).
    • W przypadku interfejsu OEM uruchamia niestandardowy ekran wczytywania, gdy użytkownik wybierze sposób przełączenia, który można ukryć po zakończeniu przełączania.
    • Producent OEM musi ustawić okno priorytetowe 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 ramach podstawowej config.xml zgodnie z opisem w dokumentacji config_customuserswitchui. W rezultacie framework nie wyświetla CarUserSwitchingDialog.

Dostosowywanie ekranu blokady

Ekran blokady jest integralną częścią interfejsu systemu, który może być dostosowywany przez producenta OEM. Aby dostosować proces, zacznij od frameworks/base/packages/CarSystemUI/.

Dostosowywanie konfiguracji dla nowego użytkownika

Kreator konfiguracji przeprowadza konfigurację pierwszego użytkownika. Tę funkcję też można dostosować. Aby utworzyć użytkownika, możesz użyć interfejsów UserManager API. W niektórych przypadkach można to zrobić w tle, co usprawnia działanie kreatora konfiguracji.