Panel de control de sepia

La interfaz del navegador WebRTC predeterminada para Cuttlefish incluye un panel de control que permite más formas de interactuar con el dispositivo virtual.

El panel de control cuenta con botones predeterminados para simular acciones comunes de dispositivos físicos, como el botón de encendido o los botones de volumen, así como la rotación del dispositivo.

Acciones personalizadas

Puede personalizar el panel de control para agregar más botones que permitan que su dispositivo virtual emule más de cerca su dispositivo físico. Esto es útil para probar funciones exclusivas de su dispositivo, como un botón de hardware o un gesto especial que desencadena una acción única en el sistema operativo. También puede usar botones personalizados para habilitar la prueba de más funciones centradas en el control de calidad, como el comportamiento de su sistema operativo cuando el dispositivo tiene poca batería.

El panel de control predeterminado de Cuttlefish incluye soporte para "conectar" acciones personalizadas sin necesidad de modificar el proyecto principal de Cuttlefish AOSP . Su dispositivo virtual debe incluir solo un archivo de configuración mínimo para comenzar a usar acciones personalizadas. Vea este archivo de configuración de acción personalizada de ejemplo .

  1. Cree un archivo JSON que defina las acciones personalizadas de su dispositivo. Puede poner este archivo en cualquier directorio que posea. La estructura de este archivo se describe en las secciones ADB shell y Action server .

  2. Cree un módulo prebuilt_etc_host para su configuración JSON. Asegúrese de que sub_dir sea ​​igual 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. Establezca las variables de compilación de configuración de Soong en el archivo MAKE del producto de su dispositivo para configurar el paquete de host del dispositivo virtual para incluir su archivo de configuración de acción personalizado.

    # 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
    

Hay dos métodos admitidos para implementar una acción personalizada:

  • Comando de shell ADB
  • servidor de acción

Su archivo de configuración JSON puede definir varias instancias de cada tipo de implementación.

Comando de shell ADB

Puede definir un solo botón que se implemente ejecutando un solo comando adb shell . Por ejemplo, el siguiente fragmento de código JSON define un solo botón que abre una página web:

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

Los campos son:

  • shell_command : el comando a ejecutar en adb shell cuando se presiona el botón
  • button : Un objeto de un solo botón con los siguientes subcampos:

servidor de acción

Los servidores de acciones permiten un mayor control sobre el comportamiento de sus acciones. Un servidor de acción es un host binario que escucha los eventos de pulsación de botón de WebRTC mediante un par de sockets. WebRTC reenvía los eventos al servidor de acciones y luego el servidor de acciones decide cómo implementar la acción.

Los servidores de acción permiten un control más potente, como mantener el estado (como para un evento alternable) o incluso ejecutar "metaacciones", como eliminar el dispositivo actual, iniciar más dispositivos o iniciar una extensión de navegador de grabación de pantalla. Las posibilidades están limitadas solo por lo que decida implementar dentro del binario del host.

El siguiente fragmento de código JSON define un servidor de acciones que escucha eventos en dos botones:

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

Los campos son:

  • server : el nombre de su módulo binario host
  • buttons : una matriz de botones, con los mismos subcampos que arriba

Después de actualizar la configuración de JSON, agregue el nombre del módulo del servidor de acciones a la variable de compilación de la configuración de Soong cvd_custom_action_servers . Por ejemplo:

# 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

Cada binario del host del servidor de acción debe realizar los siguientes pasos:

  1. Acepte un número de descriptor de archivo de socket como el primer y único argumento del programa.

    Este socket es creado por launch_cvd usando socketpair con dominio AF_LOCAL , tipo SOCK_STREAM y protocolo 0.

  2. En un bucle, intente leer 128 bytes del socket. Estos bytes contienen eventos de pulsación de botón enviados por el cliente WebRTC en el formato command:state . command es como se proporciona en la configuración JSON, y el state es el estado de presión del botón ( down o up ).

  3. Actúe sobre los eventos entrantes para simular la acción personalizada.