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

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

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 توسعه بسته SystemUI است، به این معنی که کلاس ها و منابع موجود در بسته SystemUI می توانند توسط بسته CarSystemUI استفاده و لغو شوند.

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

پوشش ها

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

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

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

رابط کاربری Automotive System از منابع SystemUI و بسته‌های 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 ، (در SystemUI، نه 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 UI را می توان با حداقل تضادهای ادغام ارتقا داد زیرا همه سفارشی سازی ها از طریق سطوح شناخته شده 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 راه اندازی می شود، صفحه User Picker نمایش داده می شود. برای کسب اطلاعات بیشتر، FullscreenUserSwitcher را ببینید.

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

شکل 3. صفحه بارگیری

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

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

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

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

برای راه‌اندازی کاربر Android، جریان اولیه Setup Wizard درایور را قادر می‌سازد تا یک نام کاربری برای خود تنظیم کند. اگر درایور کاربر Android را با یک حساب 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 را ساده کرد.