Bloqueio de app

O Bloqueio de apps permite que os usuários protejam apps individuais com um código PIN exclusivo. Isso protege dados sensíveis contra acesso de convidados ou usuários secundários, principalmente quando o usuário principal não está no veículo.

O Bloqueio de apps funciona de forma independente do bloqueio de perfil. Esse design oferece aos usuários a flexibilidade de proteger apps sensíveis específicos sem precisar bloquear todo o perfil do usuário.

O Bloqueio de apps está disponível como um app não agrupado no Android 14 (nível 34 da API) e versões mais recentes. Você pode desenvolver esse app separadamente da plataforma principal do Android Automotive OS (AAOS). No entanto, é necessário implantar o app Bloqueio de apps como um app privilegiado assinado pela plataforma incluído na imagem da plataforma.

Os usuários são informados sobre o recurso Bloqueio de apps quando instalam apps:

Notificação do Bloqueio de apps mostrada depois que um app é
instalado

Figura 1. Notificação do Bloqueio de apps mostrada após a instalação de um app.

O Bloqueio de apps fica desativado por padrão. Ao ativar o recurso, o usuário recebe uma solicitação para definir um PIN. Esse PIN é necessário para acessar qualquer app protegido pelo Bloqueio de apps:

Configurações do
Bloqueio de app

Figura 2. Configurações do Bloqueio de apps.

Ao tentar abrir um app bloqueado, o usuário recebe uma solicitação para inserir o código PIN do Bloqueio de apps:

Solicitação de bloqueio de app ao tentar abrir um app
bloqueado

Figura 3. Solicitação do Bloqueio de apps ao tentar abrir um app bloqueado.

Configurar o Bloqueio de apps

Para aplicar as configurações do app, edite 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>

Personalizar apps bloqueáveis

Por padrão, os apps do sistema não podem ser bloqueados. É possível especificar os apps do sistema que podem ser bloqueados usando a configuração system_lockable_packages.

Os apps principais, como Configurações, apps de navegação e assistentes de voz, não podem ser bloqueados porque isso pode causar um comportamento imprevisível do sistema.

Para ativar o Bloqueio de apps para um app do sistema, use a 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>

Configurar a suspensão de mídia

Por padrão, os apps de mídia podem ser bloqueados se a plataforma oferecer suporte ao app de mídia para carros da versão 17 ou mais recente do Car-apps-release. Se você não oferece suporte à versão 17 ou mais recente do Car-apps-release, é possível desativar o bloqueio de apps de mídia:

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

Configurar um fluxo de recuperação

Os usuários podem esquecer o PIN do Bloqueio de apps. Use config_recoveryAccountType para personalizar o tipo de conta usado para a recuperação do PIN.

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

O Bloqueio de apps redefine o PIN e limpa os dados do app particular quando um usuário faz a autenticação com uma conta do tipo que corresponde a config_recoveryAccountType.

Estilizar o código de referência

Para personalizar o código de referência, use sobreposições de recursos de ambiente de execução (RROs, na sigla em inglês) para sobrepor SensitiveAppLockOverlayableResources.

Como o Bloqueio de apps usa a biblioteca Car UI, as RROs da biblioteca Car UI atuais também podem ser aplicadas ao Bloqueio de apps.

As chaves do teclado numérico usam o mesmo estilo definido em 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>

Também é possível definir as dimensões do teclado numérico:

<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>

Oferecer suporte à suspensão para RAM

Para oferecer suporte à suspensão para RAM, adicione o serviço Bloqueio 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>

Configuração do build

O Bloqueio de apps exige permissões privilegiadas do sistema. As plataformas que oferecem suporte ao Bloqueio de apps também precisam declarar o recurso do sistema com.android.car.sensitive_app_lock.

Adicione a declaração de recurso e as permissões 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>

O Bloqueio de apps precisa ser importado como um app do sistema assinado no arquivo 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,
}

Como o modo de usuário do sistema sem interface (HSUM, na sigla em inglês) e os usuários convidados não oferecem suporte ao Bloqueio de apps, é necessário ativar o Bloqueio de apps apenas em perfis secundários. Use essa configuração para ativar o app para usuários secundários.

Por exemplo, no seu 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>