Pannello di controllo di Seppia

L'interfaccia del browser WebRTC predefinita per Cuttlefish include un pannello di controllo che consente di interagire con il dispositivo virtuale in più modi.

Il pannello di controllo include pulsanti predefiniti per simulare le azioni comuni dei dispositivi fisici, come il pulsante di accensione o i pulsanti del volume, nonché la rotazione del dispositivo.

Azioni personalizzate

Puoi personalizzare il pannello di controllo per aggiungere altri pulsanti che consentano al dispositivo virtuale di emulare più da vicino il dispositivo fisico. Questa funzionalità è utile per testare le funzionalità specifiche del tuo dispositivo, ad esempio un pulsante hardware o un gesto speciale che attiva un'azione univoca nel sistema operativo. Puoi anche utilizzare pulsanti personalizzati per abilitare il test di funzionalità più incentrate sul controllo qualità, ad esempio il comportamento del sistema operativo quando la batteria del dispositivo è scarica.

Il pannello di controllo Cuttlefish predefinito include il supporto per "collegare" azioni personalizzate senza dover modificare il progetto AOSP Cuttlefish principale. Per iniziare a utilizzare le azioni personalizzate, il dispositivo virtuale deve includere solo un file di configurazione minimo. Consulta questo file di configurazione di azioni personalizzate di esempio.

  1. Crea un file JSON che definisca le azioni personalizzate del tuo dispositivo. Puoi inserire questo file in qualsiasi directory di tua proprietà. La struttura di questo file è descritta nelle sezioni ADB shell e Server di azioni.

  2. Crea un modulo prebuilt_etc_host per la configurazione JSON. Assicurati che sub_dir sia uguale a 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. Imposta le variabili di configurazione di compilazione di Soong nel makefile del prodotto del dispositivo per configurare il pacchetto host del dispositivo virtuale in modo che includa il file di configurazione delle azioni personalizzate.

    # 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
    

Esistono due metodi supportati per implementare un'azione personalizzata:

  • Comando ADB shell
  • Server di azioni

Il file di configurazione JSON può definire più istanze di ogni tipo di implementazione.

Comando ADB shell

Puoi definire un singolo pulsante implementato eseguendo un singolo comando adb shell. Ad esempio, il seguente snippet JSON definisce un singolo pulsante che avvia una pagina web:

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

I campi sono:

  • shell_command: il comando da eseguire in adb shell quando viene premuto il pulsante
  • button: un singolo oggetto pulsante con i seguenti sottocampi:

Server di azioni

I server di azioni consentono un maggiore controllo sul comportamento delle azioni. Un server di azioni è un file binario host che ascolta gli eventi di pressione dei pulsanti da WebRTC utilizzando una coppia di socket. WebRTC inoltra gli eventi al server di azioni, che decide come implementare l'azione.

I server di azioni consentono un controllo più efficace, ad esempio il mantenimento dello stato (come per un evento attivabile/disattivabile) o persino l'esecuzione di "meta-azioni" come l'eliminazione del dispositivo corrente, l'avvio di altri dispositivi o l'avvio di un'estensione del browser per la registrazione dello schermo. Le possibilità sono limitate solo da ciò che decidi di implementare all'interno del file binario host.

Il seguente snippet JSON definisce un server di azioni che ascolta gli eventi su due pulsanti:

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

I campi sono:

  • server: il nome del modulo binario host
  • buttons: un array di pulsanti, con gli stessi sottocampi indicati sopra

Dopo aver aggiornato la configurazione JSON, aggiungi il nome del modulo del server di azioni alla variabile di configurazione di compilazione di Soong cvd_custom_action_servers. Ad esempio:

# 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

Ogni file binario host del server di azioni deve eseguire i seguenti passaggi:

  1. Accetta un numero di descrittore del file socket come primo e unico argomento del programma.

    Questo socket viene creato da launch_cvd utilizzando socketpair con dominio AF_LOCAL, tipo SOCK_STREAM e protocollo 0.

  2. In un loop, tenta di leggere 128 byte dal socket. Questi byte contengono gli eventi di pressione dei pulsanti inviati dal client WebRTC nel formato command:state. command è quello fornito nella configurazione JSON e state è lo stato di pressione del pulsante (down o up).

  3. Agisci sugli eventi in entrata per simulare l'azione personalizzata.