Panel kendali sotong

Antarmuka browser WebRTC default untuk Cuttlefish menyertakan panel kontrol yang memungkinkan lebih banyak cara untuk berinteraksi dengan perangkat virtual.

Panel kontrol dilengkapi tombol default untuk mensimulasikan tindakan umum perangkat fisik seperti tombol daya atau tombol volume, serta rotasi perangkat.

Tindakan khusus

Anda dapat menyesuaikan panel kontrol untuk menambahkan lebih banyak tombol yang memungkinkan perangkat virtual Anda meniru perangkat fisik Anda secara lebih dekat. Ini berguna untuk menguji fitur unik pada perangkat Anda, seperti tombol perangkat keras atau isyarat khusus yang memicu tindakan unik di OS. Anda juga dapat menggunakan tombol khusus untuk mengaktifkan pengujian fitur yang lebih berfokus pada QA seperti perilaku OS Anda saat baterai perangkat lemah.

Panel kontrol Sotong default menyertakan dukungan untuk "menyambungkan" tindakan kustom tanpa perlu memodifikasi proyek utama Sotong AOSP . Perangkat virtual Anda hanya perlu menyertakan file konfigurasi minimal untuk mulai menggunakan tindakan kustom. Lihat contoh file konfigurasi tindakan kustom ini.

  1. Buat file JSON yang menentukan tindakan khusus perangkat Anda. Anda dapat meletakkan file ini di direktori mana pun yang Anda miliki. Struktur file ini dijelaskan di bagian ADB shell dan Action server .

  2. Buat modul prebuilt_etc_host untuk konfigurasi JSON Anda. Pastikan sub_dir sama dengan cvd_custom_action_config .

    prebuilt_etc_host {
        // Use any name you choose.
        name: "my_custom_action_config.json",
        src: "my_custom_action_config.json",
        // Always use this sub_dir.
        sub_dir: "cvd_custom_action_config",
    }
    
  3. Tetapkan variabel build konfigurasi Soong di makefile produk perangkat Anda untuk mengonfigurasi paket host perangkat virtual agar menyertakan file konfigurasi tindakan kustom Anda.

    # Set these variables exactly as shown here to enable the host package to see
    # your custom config module name.
    SOONG_CONFIG_NAMESPACES += cvd
    SOONG_CONFIG_cvd += custom_action_config
    
    # Set this value to the name of your JSON module.
    SOONG_CONFIG_cvd_custom_action_config := my_custom_action_config.json
    

Ada dua metode yang didukung untuk menerapkan tindakan kustom:

  • Perintah cangkang ADB
  • Server tindakan

File konfigurasi JSON Anda dapat menentukan beberapa contoh dari setiap jenis implementasi.

Perintah cangkang ADB

Anda dapat menentukan satu tombol yang diimplementasikan dengan menjalankan satu perintah adb shell . Misalnya, cuplikan JSON berikut mendefinisikan satu tombol yang meluncurkan halaman web:

{
  "shell_command":"am start -a android.intent.action.VIEW -d https://www.android.com/",
  "button":{
      "command":"web",
      "title":"Web Page",
      "icon_name":"language"
  }
}

Bidangnya adalah:

  • shell_command : Perintah untuk dijalankan di adb shell ketika tombol ditekan
  • button : Objek tombol tunggal dengan subbidang berikut:

Server tindakan

Server tindakan memungkinkan kontrol lebih besar atas perilaku tindakan Anda. Server tindakan adalah biner host yang mendengarkan peristiwa penekanan tombol dari WebRTC menggunakan pasangan soket. WebRTC meneruskan peristiwa ke server tindakan, dan kemudian server tindakan memutuskan bagaimana menerapkan tindakan tersebut.

Server tindakan memungkinkan kontrol yang lebih kuat, seperti mempertahankan status (misalnya untuk peristiwa yang dapat diubah) atau bahkan menjalankan "tindakan meta" seperti mematikan perangkat saat ini, meluncurkan lebih banyak perangkat, atau memulai ekstensi browser perekam layar. Kemungkinannya hanya dibatasi oleh apa yang Anda putuskan untuk diterapkan di dalam biner host.

Cuplikan JSON berikut mendefinisikan server tindakan yang mendengarkan peristiwa pada dua tombol:

{
  "server":"cuttlefish_example_action_server",
  "buttons":[
    {
      "command":"settings",
      "title":"Quick Settings",
      "icon_name":"settings"
    },
    {
      "command":"alert",
      "title":"Do Not Disturb",
      "icon_name":"notifications_paused"
    }
  ]
}

Bidangnya adalah:

  • server : Nama modul biner host Anda
  • buttons : Serangkaian tombol, dengan subbidang yang sama seperti di atas

Setelah memperbarui konfigurasi JSON, tambahkan nama modul server tindakan ke variabel build konfigurasi Soong cvd_custom_action_servers . Misalnya:

# Append to this variable exactly as shown here.
SOONG_CONFIG_cvd += custom_action_servers

# Append the name of your action server(s) to this variable.
SOONG_CONFIG_cvd_custom_action_servers += cuttlefish_example_action_server

Setiap biner host server tindakan harus melakukan langkah-langkah berikut:

  1. Terima nomor deskriptor file soket sebagai argumen program pertama dan satu-satunya.

    Soket ini dibuat oleh launch_cvd menggunakan socketpair dengan domain AF_LOCAL , tipe SOCK_STREAM , dan protokol 0.

  2. Dalam satu lingkaran, cobalah membaca 128 byte dari soket. Byte ini berisi peristiwa penekanan tombol yang dikirim oleh klien WebRTC dalam format command:state . command seperti yang disediakan dalam konfigurasi JSON, dan state adalah status penekanan tombol ( down atau up ).

  3. Bertindak berdasarkan peristiwa yang masuk untuk menyimulasikan tindakan kustom.