Bloqueo de apps

El Bloqueo de aplicaciones permite a los usuarios proteger apps individuales con un código PIN único. Esto protege los datos sensibles del acceso de invitados o usuarios secundarios, en especial cuando el usuario principal no está en el vehículo.

El bloqueo de aplicaciones funciona de forma independiente del bloqueo del perfil. Este diseño brinda a los usuarios la flexibilidad de proteger apps sensibles específicas sin necesidad de bloquear todo el perfil de usuario.

El Bloqueo de aplicaciones está disponible como una app independiente en Android 14 (nivel de API 34) y versiones posteriores. Puedes desarrollar esta app por separado de la plataforma principal del SO Android Automotive (AAOS). Sin embargo, debes implementar la app de App Lock como una app privilegiada firmada por la plataforma que se incluya con la imagen de la plataforma.

Se informa a los usuarios sobre la función de bloqueo de aplicaciones cuando instalan apps:

Notificación de App Lock que se muestra después de instalar una app

Figura 1: Notificación de Bloqueo de aplicaciones que se muestra después de instalar una app.

El Bloqueo de aplicaciones está inhabilitado de forma predeterminada. Cuando se habilita la función, se le solicita al usuario que establezca un PIN. Posteriormente, se requiere este PIN para acceder a cualquier app protegida por App Lock:

Configuración de Bloqueo de apps

Figura 2: Configuración de Bloqueo de aplicaciones

Cuando el usuario intenta abrir una app bloqueada, se le solicita que ingrese el código PIN de App Lock:

Mensaje de bloqueo de la app cuando se intenta abrir una app bloqueada

Figura 3: Mensaje de bloqueo de la app cuando se intenta abrir una app bloqueada.

Cómo configurar el bloqueo de aplicaciones

Para aplicar la configuración de la app, edita res/values/config.xml:

<resources>
    <!--A customizable list of system packages that appear in the App Lock settings. -->
    <string-array name="system_lockable_packages">
        <item>com.android.car.calendar</item>
    </string-array>

    <!-- Config for allowing locking of media apps. -->
    <bool name="config_enableMediaAppsLocking">true</bool>

    <!-- Default account type used for recovering pin. -->
    <string name="config_recoveryAccountType" translatable="false">com.google</string>
</resources>

Cómo personalizar las apps que se pueden bloquear

De forma predeterminada, las apps del sistema no se pueden bloquear. Puedes especificar que las apps del sistema se puedan bloquear con la configuración de system_lockable_packages.

Las apps principales, como Configuración, las apps de navegación y los asistentes de voz, no se pueden bloquear, ya que hacerlo podría provocar un comportamiento impredecible del sistema.

Para habilitar el Bloqueo de aplicaciones en una app del sistema, usa la lista system_lockable_packages:

<!-- List of system packages that appear in the App Lock settings. -->
<string-array name="system_lockable_packages">
    <item>com.android.car.calendar</item>
</string-array>

Configura la suspensión de medios

De forma predeterminada, las apps multimedia se pueden bloquear si la plataforma admite la app de música para automóviles de Car-apps-release 17 o versiones posteriores. Si no admites la versión 17 o posterior de Car-apps-release, puedes inhabilitar el bloqueo de la app de música:

<!-- Config for allowing locking of media apps. -->
<bool name="config_enableMediaAppsLocking">false</bool>

Configura un flujo de recuperación

Es posible que los usuarios olviden el PIN de bloqueo de apps. Usa config_recoveryAccountType para personalizar el tipo de cuenta que se usa para la recuperación del PIN.

<!-- Default account type used for recovering pin. -->
<string name="config_recoveryAccountType" translatable="false">com.google</string>

El Bloqueo de aplicaciones restablece el PIN y borra los datos privados de la app cuando un usuario se autentica con una cuenta del tipo que coincide con config_recoveryAccountType.

Cómo definir el diseño del código de referencia

Para personalizar el código de referencia, usa superposiciones de recursos de tiempo de ejecución (RRO) para superponer SensitiveAppLockOverlayableResources.

Dado que App Lock usa la biblioteca de la IU del vehículo, los RRO existentes de la biblioteca de la IU del vehículo también se pueden aplicar a App Lock.

Las teclas del teclado de PIN usan el mismo estilo que se define en styles.xml:

<style name="PinPadKey" parent="Widget.CarUi.Button">
    <item  name="android:textSize">@dimen/pin_pad_key_text_size</item>
    <item name="android:layout_height">@dimen/pin_pad_key_diameter</item>
    <item name="android:layout_width">@dimen/pin_pad_key_diameter</item>
    …
</style>

También puedes definir las dimensiones del teclado PIN:

<resources>
  <!-- Default dimensions for PIN pad view -->
  <dimen name="pin_pad_title_text_size">44sp</dimen>
  <dimen name="pin_pad_subtitle_text_size">32sp</dimen>
  <dimen name="pin_pad_key_diameter">96dp</dimen>
  <dimen name="pin_pad_key_text_size">32sp</dimen>
  <dimen name="pin_pad_key_padding">0dp</dimen>
  <dimen name="pin_pad_row_spacing">10dp</dimen>
  <dimen name="pin_pad_col_spacing">12dp</dimen>
</resources>

Compatibilidad con la suspensión a RAM

Para admitir la suspensión a RAM, debes agregar el servicio de bloqueo de apps a config_earlyStartupServices:

<string-array translatable="false" name="config_earlyStartupServices">
    <!-- App Lock Persistent Background Service -->
    <item>com.android.car.sensitiveapplock/.service.PersistentBackgroundService#bind=bind,user=foreground,trigger=userUnlocked</item>
</string-array>

Configuración de compilación

El Bloqueo de aplicaciones requiere permisos con privilegios del sistema. Las plataformas que admiten el bloqueo de aplicaciones también deben declarar la función del sistema com.android.car.sensitive_app_lock.

Agrega la declaración de la función y los permisos a com.android.car.sensitiveapplock.xml:

<permissions>
    <feature name="com.android.car.sensitive_app_lock"/>

    <privapp-permissions package="com.android.car.sensitiveapplock">
        <permission name="android.permission.GET_ACCOUNTS_PRIVILEGED" />
        <permission name="android.permission.QUERY_USERS" />
        <permission name="android.permission.MEDIA_CONTENT_CONTROL" />
        <permission name="android.car.permission.CAR_POWER" />
        <permission name="android.permission.POST_NOTIFICATIONS" />
    </privapp-permissions>
</permissions>

App Lock se debe importar como una app del sistema firmada en el archivo Android.bp:

android_app_import {
    name: "AppLock",
    apk: "AppLock.apk",
    certificate: "platform",
    privileged: true,
    required: [
        "privapp-com.android.car.sensitiveapplock",
    ],
    optional_uses_libs: [
        "androidx.window.extensions",
        "androidx.window.sidecar",
        "com.android.oem.tokens", /* For Android 16+ */
    ],
}

prebuilt_etc {
    name: "privapp-com.android.car.sensitiveapplock",
    sub_dir: "permissions",
    src: "com.android.car.sensitiveapplock.xml",
    filename_from_src: true,
}

Dado que el modo de usuario del sistema sin interfaz gráfica (HSUM) y los usuarios invitados no admiten el bloqueo de aplicaciones, debes habilitar el bloqueo de aplicaciones solo en los perfiles secundarios. Usa esta configuración para habilitar la app para usuarios secundarios.

Por ejemplo, en tu preinstalled-packages.xml:


<config>
        <!-- Config for the Sensitive App Lock app -->
    <install-in-user-type package="com.android.car.sensitiveapplock">
        <!-- Sensitive App Lock is only available to secondary users. Do not install app in Guest users. -->
        <install-in user-type="android.os.usertype.full.SECONDARY" />
    </install-in-user-type>
</config>