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 presenta botones predeterminados para simular acciones físicas comunes del dispositivo, 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 fielmente 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 utilizar botones personalizados para permitir probar funciones más 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 necesita incluir solo un archivo de configuración mínimo para comenzar a usar acciones personalizadas. Vea este ejemplo de archivo de configuración de acción personalizada .

  1. Cree un archivo JSON que defina las acciones personalizadas de su dispositivo. Puede colocar este archivo en cualquier directorio de su propiedad. 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. Configure 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 personalizada.

    # 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 múltiples instancias de cada tipo de implementación.

Comando de shell ADB

Puede definir un solo botón que se implementa ejecutando un solo comando adb shell . Por ejemplo, el siguiente fragmento JSON define un único botón que inicia 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 botón único 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 acciones es un binario de host que escucha eventos de pulsación de botones desde WebRTC utilizando 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 acciones permiten un control más potente, como mantener el estado (como para un evento alternable) o incluso ejecutar "metaacciones", como cerrar el dispositivo actual, iniciar más dispositivos o iniciar una extensión del navegador para grabar la pantalla. Las posibilidades están limitadas únicamente por lo que decida implementar dentro del binario del host.

El siguiente fragmento 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 serie de botones, con los mismos subcampos que arriba

Después de actualizar la configuración 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 acciones debe realizar los siguientes pasos:

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

    Este socket lo crea 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 el proporcionado en la configuración JSON, y state es el estado de presionar el botón ( down o up ).

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