Ringkasan

Pengaturan Mobil ( packages/apps/Car/Settings ) disediakan khusus untuk Android Automotive OS (AAOS). Pengaturan Mobil berbeda dengan Pengaturan Telepon ( packages/apps/Settings ). Meskipun Pengaturan Mobil berisi beberapa pengaturan telepon yang familier, Pengaturan Mobil menyediakan antarmuka pengguna visual yang disesuaikan dengan mobil , optimalisasi gangguan pengemudi, dan berbagai titik masuk penyesuaian untuk OEM.

Selain ikhtisar Pengaturan Mobil yang disediakan di bawah ini, lihat topik terkait berikut untuk mempelajari lebih lanjut tentang Pengaturan Mobil:

Arsitektur dan pedoman

Sebagian besar halaman di Car Settings 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 terhadap aturan ini, seperti beberapa fragmen khusus yang memperluas BaseFragment daripada SettingsFragment dan beberapa Aktivitas yang berada di luar CarSettingActivities , semuanya harus dianggap sebagai pengecualian (bukan sebagai pola yang harus diikuti).

Preferensi statis

Preferensi statis ditentukan 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 PreferenceGroup.

Dalam aplikasi CarSettings, preferensi dinamis mewakili serangkaian preferensi normal yang mengarahkan pengguna ke halaman tambahan dalam CarSettings, namun telah ditambahkan melalui Pengontrol Preferensi , bukan di XML. Contohnya adalah preferensi Kelola keyboard di bawah preferensi Bahasa & Masukan yang secara dinamis menambahkan metode masukan ke halaman preferensi berdasarkan apakah metode masukan ini diizinkan atau tidak.

Bilah tindakan

Bagian atas setiap layar pengaturan memiliki bilah tindakan, yang dapat berisi navigasi "kembali", judul layar, dan widget tindakan tambahan (misalnya, tombol dan tombol). Bilah tindakan ini mirip dengan Bilah Tindakan yang disediakan oleh Android, namun sebenarnya merupakan tampilan khusus. Di Android 11 dan yang lebih baru, toolbar ini disertakan dalam tata letak dasar sasis, yang berisi tampilan untuk toolbar dan framelayout 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 penyetel 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 hadir 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-beda.

Lihat gambar berikut untuk mengetahui keterkaitan komponen-komponen ini:

Komponen Pengaturan Mobil

Gambar 1. Komponen Pengaturan Mobil

PreferenceController adalah komponen sadar siklus hidup yang membantu merangkum logika bisnis yang berkaitan dengan Preferensi tertentu. PreferenceControllers hanya dapat dilampirkan ke Preferensi 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 agar dapat beroperasi dengan benar. Misalnya, PreferenceController yang mematikan notifikasi untuk suatu aplikasi perlu mengetahui aplikasi mana yang harus ditindaklanjuti. Karena PreferenceControllers selalu didefinisikan dalam XML, tidak ada cara untuk memberikan argumen konstruktor tambahan. Sebaliknya, nilai tambahan ini diberikan melalui penyetel 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 diubah. disalin ke fragmen yang baru dibuat. Salah satu cara untuk meminimalkan kesulitan dalam melakukan hal ini adalah dengan:

  • Minimalkan penggunaan use(...) Anda.
  • Cobalah untuk menyimpan setiap panggilan ke use(...) di satu tempat dalam fragmen (misalnya, dalam metode onAttach() ).

Penanganan niat

Semua maksud yang harus ditangani oleh aplikasi Pengaturan Mobil ditentukan dalam file manifes . Intent secara umum ditentukan dan ditangani seperti kebanyakan aplikasi Android standar, dengan semua aktivitas dan filter maksud ditentukan dalam manifes.

Ubah fragmen root

Jika diinginkan, ikon Keluar dapat ditampilkan atau disembunyikan menggunakan config_show_settings_root_exit_icon .

Sesuaikan temanya

Sesuaikan atribut dan sumber daya lainnya

Aplikasi Pengaturan Mobil terutama menggunakan CarSettingTheme , yang merupakan perpanjangan dari Theme.CarUi . Tema ini digunakan untuk menstandardisasi tampilan dan nuansa aplikasi sistem guna memastikan konsistensi dalam sistem.

Sesuaikan preferensi

Menyesuaikan preferensi mencakup lokasi tambahan berikut:

  • Tata letak beberapa kelas preferensi dasar ditentukan dalam car_preference dan dilapis untuk pembuatan mobil. Tata letak penyesuaian 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.