Pengaturan Mobil ( packages/apps/Car/Settings ) disediakan khusus untuk Android Automotive OS (AAOS). Pengaturan Mobil berbeda dari Pengaturan Telepon ( packages/apps/Settings ). Sementara Pengaturan Mobil berisi beberapa pengaturan telepon yang sudah dikenal, Pengaturan Mobil menyediakan antarmuka pengguna visual yang disesuaikan dengan mobil , pengoptimalan gangguan pengemudi, dan banyak titik masuk penyesuaian untuk OEM.
Selain ikhtisar Pengaturan Mobil yang disediakan di bawah ini, lihat topik terkait ini untuk mempelajari lebih lanjut tentang Pengaturan Mobil:
- Menambahkan Pengaturan Mobil
- Mengatur Ulang Pengaturan Mobil
- Optimalisasi Gangguan di Pengaturan Mobil
- Pengindeksan Pencarian Pengaturan Mobil
- Kustomisasi Panel Ganda
Arsitektur dan pedoman
Sebagian besar halaman di Pengaturan Mobil diimplementasikan sebagai serangkaian fragmen yang memperluas SettingsFragment , masing-masing memiliki aktivitasnya sendiri yang ditentukan di CarSettingActivities . Aktivitas statis ini diperluas dari BaseCarSettingsActivity . Meskipun ada beberapa pengecualian untuk aturan ini, seperti beberapa fragmen khusus yang memperluas BaseFragment daripada SettingsFragment dan beberapa Aktivitas yang berada di luar CarSettingActivities , yang semuanya harus dianggap sebagai pengecualian (bukan sebagai pola yang harus diikuti).
Preferensi statis
Preferensi statis didefinisikan dalam XML menggunakan tag Preference atau CarUiPreference . Implementasi SettingsFragment menggunakan metode getPreferenceScreenResId() untuk menentukan file XML mana yang berisi daftar preferensi statis untuk ditampilkan.
Preferensi dinamis
Preferensi dinamis menggunakan tag PreferenceGroup > atau implementasi dari PreferenceGroup seperti LogicalPreferenceGroup untuk menentukan sekumpulan preferensi yang dihasilkan dan dikontrol oleh Preference Controllers .
Dalam aplikasi CarSettings, preferensi dinamis mewakili kumpulan preferensi normal yang mengarahkan pengguna ke halaman tambahan dalam CarSettings, tetapi yang telah ditambahkan melalui Preference Controller , bukan di XML. Contohnya adalah preferensi Kelola keyboard di bawah preferensi Bahasa & Input yang secara dinamis menambahkan metode input ke halaman preferensi berdasarkan apakah metode input ini diizinkan atau tidak.
Bilah aksi
Bagian atas setiap layar pengaturan memiliki bilah tindakan, yang dapat berisi navigasi "kembali", judul layar, dan widget tindakan tambahan (misalnya, tombol dan sakelar). Bilah tindakan ini mirip denganActionBar yang disediakan oleh Android, tetapi sebenarnya adalah tampilan khusus. Di Android 11 dan di atasnya, bilah alat ini disertakan dalam tata letak dasar sasis, yang berisi tampilan bilah alat dan tata letak bingkai untuk konten aplikasi lainnya.
Widget tindakan tambahan adalah kelas MenuItem dan harus dibuat di onCreate dari masing-masing SettingsFragment atau BaseFragment . Properti seperti visibilitas, status, dan sebagainya harus dikontrol oleh setter dalam logika bisnis SettingsFragment .
// ExampleSettingsFragment.java
public class ExampleSettingsFragment extends SettingsFragment {
@Override
protected List<MenuItem> getToolbarMenuItems() {
return Collections.singletonList(mClearConfirmButton);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mButton = new MenuItem.Builder(getContext())
.setTitle(R.string.text)
.setOnClickListener(mOnClickListener)
.setUxRestrictions(CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP)
.build();
}
private void updateState() {
button.setVisible(false);
}
}
Bilah tindakan dilengkapi dengan dukungan untuk Pengoptimalan Gangguan di Pengaturan Mobil . Atur UXRestrictions di MenuItem.Builder saat pembuatan.
Pengontrol preferensi
Setiap halaman pengaturan dapat menampung sejumlah Preferensi yang berbeda. Untuk membantu memelihara organisasi kode, setiap preferensi atau grup preferensi terkait memiliki PreferenceController yang terkait dengannya.
Lihat gambar berikut untuk mengetahui bagaimana komponen-komponen ini terkait:

Gambar 1. Komponen Pengaturan Mobil
PreferenceController adalah komponen lifecycle-aware yang membantu merangkum logika bisnis yang berkaitan dengan Preferensi tertentu. PreferenceControllers hanya dapat dilampirkan ke Preference yang relevan melalui XML.
// example_settings_fragment.xml
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:title="@string/example_settings_title">
<Preference
android:key="@string/pk_example_preference_key"
android:title="@string/example_preference_title"
settings:controller="com.android.car.settings.example.ExamplePreferenceController"/>
</PreferenceScreen>
Pengaturan Mobil secara eksplisit mencegah pembuatan PreferenceController melalui kode untuk mempermudah memodifikasi hierarki Pengaturan dengan sedikit perubahan pada kode Java.
Ada kemungkinan bahwa PreferenceController memerlukan beberapa data dinamis untuk beroperasi dengan benar. Misalnya, PreferenceController yang mematikan notifikasi untuk aplikasi perlu mengetahui aplikasi mana yang harus ditindaklanjuti. Karena PreferenceControllers selalu didefinisikan dalam XML, tidak ada cara untuk memberikan argumen konstruktor tambahan. Sebagai gantinya, nilai tambahan ini disediakan melalui setter publik di PreferenceController dan disetel menggunakan metode use(...) dari SettingsFragment .
// ExamplePreferenceController.java
public class ExamplePreferenceContorller extends PreferenceController<Preference> {
private ExampleArg mExampleArg;
public ExamplePreferenceController(...) {
...
}
public void setExampleArg(ExampleArg exampleArg) {
mExampleArg = exampleArg;
}
}
// ExampleSettingsFragment.java
public class ExampleSettingsFragment extends SettingsFragment {
@Override
@XmlRes
protected int getPreferenceScreenResId() {
Return R.xml.example_settings_fragment;
}
@Override
public void onAttach(Context context) {
ExampleArg arg = (ExampleArg) getArguments().getSerializeable(ARG_KEY);
ExamplePreferenceController controller =
use(ExamplePreferenceController.class, R.string.pk_example_preference_key);
controller.setExampleArg(arg);
}
}
Semakin sering metode use(...) digunakan, semakin sulit mempertahankan tujuan awal untuk dapat mengatur ulang hierarki pengaturan dengan sedikit perubahan pada kode Java, karena sebagian besar kode fragmen yang ada perlu disalin ke fragmen yang baru dibuat. Salah satu cara untuk meminimalkan kesulitan melakukan ini adalah dengan:
- Minimalkan penggunaan
use(...). - Cobalah untuk menyimpan setiap panggilan untuk
use(...)di satu tempat dalam fragmen (misalnya, dalam metodeonAttach()).
Penanganan niat
Semua maksud yang harus ditangani oleh aplikasi Pengaturan Mobil didefinisikan dalam file manifes . Maksud umumnya ditentukan dan ditangani seperti kebanyakan aplikasi Android standar, dengan semua aktivitas dan filter maksud ditentukan dalam manifes.
Mengubah fragmen root
Secara default, Pengaturan Mobil menampilkan HomepageFragment saat aplikasi diluncurkan. Ini dapat dikonfigurasi menjadi QuickSettingFragment dengan membalikkan nilai boolean untuk config_is_quick_settings_root , config_enable_home_settings_icon , dan config_enable_quick_settings_icon .
Jika diinginkan, ikon Keluar dapat ditampilkan atau disembunyikan menggunakan config_show_settings_root_exit_icon .
Menyesuaikan tema
Menyesuaikan atribut dan sumber daya lainnya
Aplikasi Pengaturan Mobil terutama menggunakan CarSettingTheme , yang merupakan perpanjangan dari Theme.CarUi . Tema ini digunakan untuk membakukan tampilan dan nuansa aplikasi sistem untuk memastikan konsistensi dalam sistem.
Menyesuaikan preferensi
Menyesuaikan preferensi mencakup lokasi tambahan berikut:
- Tata letak beberapa kelas preferensi dasar didefinisikan di
car_preferencedan dilapis untuk pembuatan mobil. Tata letak kustomisasi apa pun untuk kelas preferensi dasar dapat diganti di sini. - Pengaturan Mobil menggunakan beberapa preferensi khusus yang ditentukan terutama dalam paket
common. Ini harus dilapis dalam modul Pengaturan Mobil secara terpisah dari kelas preferensi dasar.