Mode Garasi

Untuk memberikan periode waktu tidak ada aktivitas di kendaraan, Mode Garasi membuat sistem tetap aktif sehingga tugas di JobScheduler yang dibatasi dengan tidak ada aktivitas dapat dijalankan.

Apa yang dimaksud dengan Mode Garasi?

Di perangkat terhubung seperti ponsel, pengguna mengandalkan sistem untuk memastikan perangkat stabil, terbaru, dan dioptimalkan. Untuk mencapai status tersebut, platform Android menyediakan periode waktu tidak ada aktivitas selama aplikasi dapat melakukan tugas saat pengguna tidak berinteraksi dengan perangkat. Ponsel dianggap tidak ada aktivitas saat pengguna tidak menyentuhnya selama durasi yang lama (60 menit atau lebih) dan layar dinonaktifkan. Tidak seperti ponsel, saat tidak digunakan, mobil akan dinonaktifkan, yang berarti mobil tidak memiliki periode waktu tidak ada aktivitas. Mode Garasi memastikan waktu tidak ada aktivitas di mobil.

Saat mobil dimatikan oleh pengguna, sistem akan memasuki Mode Garasi. Saat mobil dalam Mode Garasi, sistem diaktifkan, layar dinonaktifkan, dan tugas yang tidak ada aktivitasnya di antrean JobScheduler akan dieksekusi. Untuk menerapkan Mode Garasi, lihat Panduan penerapan perangkat.

Panduan penerapan perangkat

Untuk mengaktifkan Mode Garasi, saat menonaktifkan kendaraan, Vehicle HAL (VHAL) harus mengirim AP_POWER_STATE_REQ dengan status SHUTDOWN_PREPARE dengan parameter yang ditetapkan ke SHUTDOWN_ONLY atau CAN_SLEEP.

Agar status SHUTDOWN_PREPARE efektif, VHAL harus menentukan dua parameter (status dan parameter tambahan) untuk perintah AP_POWER_STATE_REQ. Tindakan ini memungkinkan perangkat memasuki Mode Garasi, yang mendeteksi tugas terjadwal di JobScheduler dan mencegah sistem melanjutkan untuk menangguhkan atau menonaktifkan hingga tugas selesai.

Bagaimana implementasi perangkat terhubung ke framework Android?

Untuk Mode Garasi, framework meminta VHAL untuk memperpanjang waktu penonaktifan hingga durasi yang diperlukan terlampaui atau semua tugas telah dijalankan, saat sistem dinonaktifkan. Dalam situasi tertentu yang ditentukan dalam CDD, implementasi perangkat dapat mematikan sistem lebih cepat. Untuk mengetahui detail persyaratan kompatibilitas Android, lihat Dokumen Definisi Kompatibilitas (CDD) Android.

Jika VHAL harus mematikan sistem sebelum Mode Garasi selesai, VHAL dapat mengeluarkan SHUTDOWN_PREPARE dengan parameter yang ditetapkan ke SHUTDOWN_IMMEDIATELY atau SLEEP_IMMEDIATELY. Implementasi perangkat dapat menggunakannya hanya dalam keadaan tertentu, biasanya saat resource yang diperlukan untuk menjaga sistem tetap berjalan tidak tersedia. Misalnya, saat kapasitas baterai tidak mencukupi.

Mode garasi

Gambar 1. Alur Mode Garasi

Bagaimana cara kerja developer aplikasi dengan Mode Garasi?

Aplikasi dan layanan tidak berinteraksi langsung dengan Mode Garasi. Sebagai gantinya, aplikasi menjadwalkan tugas di JobScheduler. Tugas yang dibatasi oleh tidak ada aktivitas dijalankan selama Mode Garasi.

Kode berikut menunjukkan cara menjadwalkan tugas untuk dijalankan selama Mode Garasi:

public class MyGarageModeJob extends JobService { ... }

Context context = ...;
int jobId = ...;

ComponentName myGarageModeJobName = new componentName(context,
                                                      MyGarageModeJob.class);

JobInfo.Builder infoBuilder = new JobInfo.Builder(jobId, myGarageModeJobName)
                    .setRequiresDeviceIdle(true);

// Example of an optional constraint:
infoBuilder.setRequiredNetworkType(NetworkType.NETWORK_TYPE_UNMETERED);

JobScheduler jobScheduler = (JobScheduler) context
                    .getSystemService(Context.JOB_SCHEDULER_SERVICE);

jobScheduler.schedule(infoBuilder.build());

Mode Garasi Debug

Untuk men-debug Mode Garasi:
  1. Untuk mengaktifkan kategori logging yang relevan dengan Mode Garasi:
    adb shell stop
    adb shell setprop log.tag.GarageMode VERBOSE
    adb shell setprop log.tag.Finsky VERBOSE
    adb shell setprop log.tag.CAR.POWER VERBOSE
    adb shell setprop log.tag.JobScheduler.Connectivity VERBOSE
    adb shell start
    
  2. Untuk meninjau output logcat guna menunjukkan bahwa Mode Garasi dimulai:
    GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE
    GarageMode: [GarageMode]: Entering GarageMode
    GarageMode: [Controller]: Sending broadcast with action: com.android.server.jobscheduler.GARAGE_MODE_ON
  3. Untuk menentukan bahwa output logcat untuk menunjukkan Mode Garasi telah selesai (dibatalkan atau selesai):
    [GarageMode]: GarageMode was canceled
    atau
    [GarageMode]: GarageMode completed normally

    Mode Garasi bergantung pada status daya kendaraan seperti yang dijelaskan di atas.

  4. Tinjau output logcat untuk menunjukkan status daya yang benar telah dimasukkan:
    CAR.POWER: starting shutdown prepare without Garage Mode
    GarageMode: [Controller]: CPM state changed to SHUTDOWN_PREPARE
    GarageMode: [GarageMode]: Entering GarageMode
    CAR.POWER: send shutdown prepare
    CAR.POWER: setPowerState=SHUTDOWN_PREPARE(7) param=0