رابط کاربری سیستم را پیاده سازی کنید

Android Automotive یک رابط کاربری سیستم جدید را ارائه می دهد که به طور خاص برای وسایل نقلیه توسعه یافته است. بیشتر مؤلفه‌های رابط کاربری سیستم با سرویس‌های فریمورک همراه هستند. رابط کاربری سیستم به هر عنصر نمایش داده شده روی صفحه اشاره می کند که بخشی از یک برنامه نیست. رابط کاربری Automotive System (در بسته عنصر CarSystemUI) توسعه‌ای از رابط کاربری سیستم اندروید (در بسته سیستم UI) است که به طور خاص برای وسایل نقلیه سفارشی شده است.

System UI چیست؟

مولفه‌های مخصوص رابط کاربری Automotive System عبارتند از:

جزء توضیحات
رابط کاربری صفحه قفل صفحه ای که از طریق آن کاربران به یک حساب کاربری خاص احراز هویت می شوند.
نوار ناوبری نوار سیستمی که می‌تواند در سمت چپ، پایین یا راست صفحه قرار گیرد و می‌تواند شامل دکمه‌های جنبه‌ای برای پیمایش به برنامه‌های مختلف، تغییر دادن پنل اعلان‌ها و ارائه کنترل‌های خودرو (مانند HVAC) باشد. این با اجرای رابط کاربری سیستم Android که دکمه‌های Back، Home و app-stack را ارائه می‌کند، متفاوت است.
نوار وضعیت نوار سیستم در امتداد صفحه قرار دارد و به عنوان نوار ناوبری عمل می کند. نوار وضعیت همچنین عملکردهایی را برای پشتیبانی ارائه می دهد:
  • نمادهای اتصال از جمله بلوتوث، Wi-Fi و اتصال Hotspot/Mobile.
  • پانل اعلان کشویی. به عنوان مثال، کشیدن انگشت از بالای صفحه به پایین.
  • اعلان‌های سر بالا (HUN).
رابط کاربری سیستم به هر عنصر نمایش داده شده روی صفحه که بخشی از یک برنامه نیست اشاره دارد.
رابط کاربر سوئیچر صفحه ای که از طریق آن کاربر می تواند کاربر دیگری را انتخاب کند.
رابط کاربری حجم زمانی که درایور از دکمه های فیزیکی صدا برای تغییر میزان صدا در دستگاه استفاده می کند، دیالوگ نمایش داده می شود.

سیستم UI چگونه کار می کند؟

System UI یک برنامه اندروید است که با روشن شدن دستگاه اجرا می شود. برنامه از طریق بازتاب توسط SystemServer شروع می شود. مرتبط ترین نقاط ورودی برای جنبه های قابل مشاهده توسط کاربر سیستم UI در زیر فهرست شده است. از این مؤلفه‌ها برای سفارشی کردن رابط کاربری سیستم Android برای قابلیت‌های خاص خودرو استفاده کنید.

  • config_statusBarComponent
  • config_systemUIFactoryComponent

CarSystemUI یک برنامه افزودنی از بسته System UI است، به این معنی که کلاس ها و منابع در بسته System UI می توانند توسط بسته CarSystemUI استفاده و لغو شوند.

رابط کاربری سیستم را سفارشی کنید

روکش ها

در حالی که می‌توانید کد منبع اندروید را برای سفارشی‌سازی رابط کاربری سیستم تغییر دهید، انجام این کار اعمال به‌روزرسانی‌های آینده اندروید را دشوارتر و پیچیده‌تر می‌کند. در عوض، اندروید از استفاده از دایرکتوری همپوشانی پشتیبانی می‌کند، که به شما امکان می‌دهد فایل‌های منبع را بدون تغییر کد منبع جایگزین کنید. در سیستم ساخت آندروید، سیستم همپوشانی فایل‌ها را به صورت کنترل‌شده لغو می‌کند. تمام فایل های اصلاح شده بدون عبور از کل درخت کد منبع AOSP به وضوح شناسایی می شوند.

فایل های همپوشانی باید در پوشه PRODUCT_PACKAGE_OVERLAYS قرار گیرند و باید دقیقاً همان زیرپوشه های ساختار اصلی AOSP را داشته باشند. برای Android 10 یا بالاتر، PRODUCT_PACKAGE_OVERLAYS روی:

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

رابط کاربری Automotive System از منابع System UI و بسته‌های CarSystemUI استفاده می‌کند، به این معنی که منابع هر مکان را می‌توان با همپوشانی‌ها لغو کرد تا بر ظاهر و ظاهر رابط کاربری Automotive System تأثیر بگذارد.

برای جایگزینی یک فایل، ساختار دایرکتوری فایل در حال جایگزینی را در پوشه /overlay که مشخص کرده‌اید تکرار کنید و سپس جایگزین را در آن دایرکتوری قرار دهید. به عنوان مثال، برای جایگزینی:

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

فایل جایگزین super_status_bar.xml را اضافه کنید که در:

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

برای جایگزینی frameworks/base/packages/SystemUI/res/values/config.xml ، (در System UI، نه CarSystemUI)، فایل جایگزین config.xml را اضافه کنید:

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

یا

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

توضیحات دو نقطه ورودی اصلی سفارشی سازی در زیر ارائه شده است.

رابط کاربری Automotive System می تواند دارای سه نوار ناوبری در سمت چپ، پایین و راست صفحه باشد. قابلیت مشاهده هر نوار سیستم با تنظیمات زیر تغییر می کند:

  • config_enableLeftSystemBar
  • config_enableBottomSystemBar
  • config_enableRightSystemBar

هر نوار دارای یک حالت تدارکاتی و غیرمجاز است که می‌توان با همپوشانی فایل‌های طرح‌بندی مربوطه، آن را سفارشی کرد:

  • car_left_system_bar.xml
  • car_left_system_bar_unprovisioned.xml
  • car_system_bar.xml (طرح بندی نوار پیمایش پایین)
  • car_system_bar_unprovisioned.xml
  • car_right_system_bar.xml
  • car_right_system_bar_unprovisioned.xml

این طرح‌بندی‌ها باید حاوی com.android.systemui.car.systembar.CarSystemBarView در سطح بالا باشند، که می‌تواند شامل هر نمای ضروری دیگری باشد. دکمه‌های داخل نوارهای پیمایش را می‌توان با استفاده از com.android.systemui.car.systembar.CarSystemBarButton گنجاند.

این نماها در CarSystemBar#createSystemBar ، در صورتی که دستگاه به درستی برای یک کاربر خاص تهیه شده باشد، اضافه می‌شوند.

نوار وضعیت

نوار وضعیت را به عنوان یک نوار ناوبری با عملکرد اضافی در نظر بگیرید. برخلاف نوار ناوبری، نوار وضعیت پرچمی برای غیرفعال کردن آن ندارد. شما می توانید نوار وضعیت را با موارد زیر تغییر دهید:

  • car_top_navigation_bar.xml
  • car_top_navigation_bar_unprovisioned.xml

این طرح‌بندی‌ها باید حاوی com.android.systemui.statusbar.car.CarNavigationBarView در سطح بالا باشند. نوار وضعیت شامل نمادهای وضعیت است. برای تغییر اندازه یک نماد، به جای تعیین اندازه خاص، نماد را با یک ضریب مقیاس یکنواخت مقیاس کنید. برای مثال، در یک فایل همپوشانی /overlay/frameworks/base/packages/CarSystemUI/res/values/dimens.xml ، ابعاد زیر را اضافه کنید تا اندازه نمادها دو برابر شود:

<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>

نوار وضعیت در یک لایه پنجره ویژه قرار دارد که شامل پانل اعلان‌ها، تعویض‌کننده کاربر، اعلان‌های هد آپ (HUN) و محافظ صفحه کلید است. طرح‌بندی‌های مختلف این موارد در super_status_bar.xml گنجانده شده است.

کد منبع رابط کاربری سیستم تغییر می کند

هم‌پوشانی‌ها ممکن است انعطاف‌پذیری لازم برای سفارشی‌سازی کافی رفتار رابط کاربری سیستم را فراهم نکنند.

هشدار. تغییرات ایجاد شده در کد منبع اندروید در نسخه های بعدی اندروید به سختی به روز می شوند. ما قویاً توصیه می کنیم به جای تغییر مستقیم کد، کد رابط کاربری Automotive System را گسترش دهید. به این ترتیب، کد منبع رابط کاربری Automotive System زیربنایی را می توان با حداقل تضادهای ادغام ارتقا داد، زیرا همه سفارشی سازی ها از طریق سطوح شناخته شده API پیاده سازی می شوند.

بیشتر جنبه های رابط کاربری سیستم را می توان از طریق این دو نقطه ورودی سفارشی کرد:

  • config_statusBarComponent
  • config_systemUIFactoryComponent

به عنوان مثال، اگر کلاسی به نام com.android.systemui.statusbar.car.custom.CustomCarStatusBar ایجاد می کنید که CarStatusBar گسترش می دهد، config_statusBarComponent را به روز کنید تا به این مؤلفه جدید اشاره کند. گسترش این کلاس، سفارشی سازی اکثر عناصر مربوط به نوار سیستم و منطق اعلان ها را امکان پذیر می کند.

به همین ترتیب، می توانید CustomCarSystemUIFactory ایجاد کرده و آن را در config_systemUIFactoryComponent قرار دهید. از این کلاس برای به روز رسانی عملکرد VolumeUI و صفحه قفل استفاده کنید.

تغییر و باز کردن قفل کاربر را سفارشی کنید

مطالب زیر نحوه سفارشی کردن تجربه تعویض کاربر را شرح می دهد.

مدت توضیحات
کیگارد گفتگوی تمام صفحه برای جلوگیری از تعامل تصادفی با برنامه پیش زمینه. هنگامی که چندین کاربر راه اندازی شده اند، از حریم خصوصی هر کاربر محافظت می کند.
در حال بارگیری گفتگو صفحه بارگیری هنگام جابجایی بین کاربران نمایش داده می شود.
صفحه قفل، جسور صفحه‌ای که از شخص می‌خواهد پین، الگو یا رمز عبور وارد کند.
کاربر کاربر اندروید.
انتخابگر کاربر صفحه انتخابگر کاربر هنگام بوت شدن دستگاه نمایش داده می شود.
تعویض کننده کاربر هنگام تعویض صفحه از QuickSettings، تعویضگر کاربر نمایش داده می شود.

تغییر کاربری را سفارشی کنید

کیگارد و جسور

در سیستم‌عامل Android Automotive، صفحه کلید با انتخابگر کاربر تنها زمانی نمایش داده می‌شود که کاربر روی دکمه لغو روی صفحه قفل کلیک کند. صفحه کلید در زیر نشان داده شده است.

صفحه کلید

شکل 1. صفحه کلید

همانطور که در زیر نشان داده شده است، هنگامی که کاربر یک نوع حریم خصوصی را برای باز کردن قفل دستگاه انتخاب کرده است، یک صفحه قفل با یک پرکننده نمایش داده می شود.

صفحه قفل

شکل 2. صفحه قفل.

هنگامی که قفل تنظیم شده است که به صورت دستی برق را روشن یا خاموش کند، از دستورالعمل زیر استفاده کنید:

adb shell input keyevent 26

انتخابگر کاربر

هنگامی که دستگاهی که در نوار وضعیت رابط کاربری سیستم خودرو و Maps راه اندازی مجدد می شود، صفحه انتخابگر کاربر نمایش داده می شود. برای کسب اطلاعات بیشتر، FullscreenUserSwitcher را ببینید.

در حال بارگذاری صفحه نمایش

شکل 3. صفحه انتخابگر کاربر

طرح بندی این صفحه را می توان در car_fullscreen_user_switcher.xml سفارشی کرد.

در حال بارگذاری صفحه نمایش

صفحه بارگیری هر زمان که کاربر تغییر می کند، بدون توجه به نقطه ورود، نمایش داده می شود. به عنوان مثال، از طریق انتخابگر کاربر یا صفحه تنظیمات. صفحه بارگیری یکپارچه با چارچوب System UI است و به کلاس عمومی با عنوان CarUserSwitchingDialog نقشه می‌دهد. برای مثال به شکل 3 بالا مراجعه کنید.

طرح زمینه را می توان با Theme_DeviceDefault_Light_Dialog_Alert_UserSwitchingDialog سفارشی کرد.

برای راه‌اندازی کاربر اندروید، جریان اولیه Setup Wizard به راننده امکان می‌دهد یک نام کاربری برای خود تنظیم کند. اگر درایور کاربر اندروید را با یک حساب Google مرتبط کند، نام کاربری از آن حساب انتخاب می‌شود. با این حال، اگر درایور یک نام، به عنوان مثال DriverB، مشخص کند، و سپس آن نام کاربری را به حساب Google خود با نام Maddy مرتبط کند، نام اختصاص داده شده اولیه (DriverB) تغییر نمی کند زیرا آن نام به صراحت تنظیم شده است. راننده فقط می تواند نام را در منوی تنظیمات تغییر دهد.

طرح بندی را می توان در car_user_switching_dialog.xml .

OEM ها می توانند وضعیت و نوار پیمایش را با استفاده از موضوعی به نام NoActionBar.Fullscreen پنهان کنند. (این رابط کاربری اصلی سیستم است که برای رابط کاربری مرجع خودرو به‌روزرسانی شده است.) برای اطلاعات بیشتر، سفارشی‌سازی را ببینید.

در حالی که OEM ها می توانند نقاط ورودی رابط کاربری را برای تعویض کاربران فراهم کنند، نتایج ممکن است گاهی نامطلوب باشد. اگر این اتفاق بیفتد:

  1. OEM صفحه بارگیری سفارشی (یا گفتگو) را ایجاد و نمایش می دهد.
    • مخصوص UX، OEM صفحه بارگیری سفارشی را هنگامی که کاربر وسیله ای را برای تغییر انتخاب می کند راه اندازی می کند، که وقتی سوئیچ کاربر کامل شد می تواند پنهان شود.
    • OEM باید پنجره اولویت را مطابق با اولویت خود تنظیم کند. به عنوان مثال، یک نوع پنجره با اولویت بالاتر. اولویت اولویت نمی تواند از اولویت Keyguard بیشتر باشد.
  2. OEM config_customUserSwitchUi=true در چارچوب اصلی config.xml همانطور که در config_customuserswitchui توضیح داده شده است تنظیم می کند. در نتیجه، چارچوب CarUserSwitchingDialog را نمایش نمی دهد.

صفحه قفل را سفارشی کنید

صفحه قفل بخشی جدایی ناپذیر از رابط کاربری سیستم است که می تواند توسط OEM سفارشی شود. برای سفارشی کردن جریان، با frameworks/base/packages/CarSystemUI/ شروع کنید.

سفارشی کردن راه اندازی کاربر برای اولین بار

Setup Wizard برای اولین بار تنظیمات کاربر را انجام می دهد. این نیز می تواند سفارشی شود. برای ایجاد کاربر می توانید از UserManager API استفاده کنید. در برخی موارد، این را می توان در پس زمینه پیاده سازی کرد و در نتیجه فرآیند Setup Wizard را ساده کرد.