Restrições de experiência do usuário de carro

Antes de continuar, consulte as diretrizes para gerar distrações.

Esta página descreve as regras de restrições da experiência do usuário (UX) do carro que você pode usar para criar várias configurações de regras de Restrições de UX (por exemplo, União Europeia versus Japão) e, em seguida, determinar qual conjunto de regras aplicar no ambiente de execução. Para mais informações, consulte CarUxRestrictions.

O serviço Restrições de UX para carros permite que os desenvolvedores definam novas restrições de UX para carros. configuração do Terraform. Caso um desenvolvedor queira modificar as regras de restrição (por exemplo, para obedecer às padrões de segurança), o desenvolvedor pode usar a API para definir a nova configuração.

A API que define a configuração persiste apenas na nova configuração. Em outras palavras, a configuração não entra em vigor imediatamente. Em vez disso, a nova configuração carregado quando o serviço de restrições de UX é reiniciado e o carro está no modo "Estacionado". O serviço de motorista garante que o carro esteja no modo "Estacionado" antes de recarregar a nova configuração.

Além do novo método de serviço Restrições de UX, são fornecidas APIs para construir o configuração do Terraform. O estado de seleção de marcha e velocidade é convertido em um dos três estados de direção:

  • Estacionado. Gear no Park.
  • Inativo. O veículo não está estacionado, e a velocidade é zero.
  • Mudança. A marcha não está no estacionamento e a velocidade não está zero.

Para saber como os apps consomem o estado de condução de um carro e as restrições de UX correspondentes, consulte Consumo de restrições de UX e estado de condução do carro.

Configuração de restrição com base nos estados da unidade

Para evitar a distração do motorista, o Android mapeia o estado do condutor com um conjunto de restrições de UX. /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

  • Estacionado. Sem restrições.
  • Inativo. Sem tela de vídeo e de configuração.
  • Mudança. Totalmente restrito (todas as restrições são obrigatórias).

O mapeamento ilustrado acima é predeterminado e configurado como um recurso XML. A /packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java salva as regras na memória. Em seguida, o serviço mapeia o estado de condução atual para as restrições de UX. e transmite as restrições atuais para todo o sistema.

<!-- No restrictions when car is parked -->
<DrivingState car:state="parked">
    <Restrictions car:requiresDistractionOptimization="false"
                  car:uxr="baseline"/>
</DrivingState>

<!-- Restrictions when car is idling -->
<DrivingState car:state="idling">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="no_video|no_config"/>
</DrivingState>

<!-- Restrictions for speed >= 0 m/s -->
<DrivingState car:state="moving" car:minSpeed="0.0">
    <Restrictions car:requiresDistractionOptimization="true"
                  car:uxr="fully_restricted"/>
</DrivingState>

Configurações para várias telas

Por padrão, nenhuma restrição é aplicada a telas adicionais. Para criar uma restrição configurações para várias telas, inclua a tag RestrictionMapping com o averagePort dessa tela. As restrições apropriadas são aplicadas automaticamente a cada exibição. No exemplo a seguir, as telas com IDs de portas físicas 1 e 2 têm diferentes de configuração:

<RestrictionMapping car:physicalPort="1">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_keyboard|no_video"/>
       </DrivingState>
   </RestrictionMapping>

   <RestrictionMapping car:physicalPort="2">
       <DrivingState car:state="moving">
           <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
       </DrivingState>
  </RestrictionMapping>

Configurações para modos de restrição

Você pode selecionar qualquer nome para o modo, como adolescente. No exemplo a seguir, Restrições diferentes foram configuradas para os modos padrão e passageiro. Antes, apenas o modo passageiro era compatível:

<DrivingState car:state="idling">
    <Restrictions car:mode="passenger" car:requiresDistractionOptimization="false" car:uxr="baseline"/>
    <Restrictions car:requiresDistractionOptimization="true" car:uxr="no_video"/>
</DrivingState>
</Restrictions>
Você pode usar a API para definir qualquer nome de string para o modo. Por exemplo, o Método setRestrictionMode(@NonNull String mode) em CarUxRestrictionsManager. Antes, você usaria o método Método setRestrictionMode(@CarUxRestrictionsManager.UxRestrictionMode int mode) em CarUxRestrictionsManager).

APIs CarUxRestrictionsConfiguration

Restrições com CarUxRestrictionsConfiguration

A nova classe CarUxRestrictionsConfiguration é mapeada individualmente para o XML atual de configuração do Terraform. CarUxRestrictionsConfiguration pode ser construída com CarUxRestrictions.Builder, que valida a configuração em build().

new CarUxRestrictionsConfiguration.Builder()
        // Explicitly set restrictions for each driving state.
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_PARKED,
                /* requiresOptimization= */ false,
                /* restrictions= */ UX_RESTRICTIONS_BASELINE)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_IDLING,
                true,
                UX_RESTRICTIONS_NO_VIDEO|UX_RESTRICTIONS_NO_SETUP)
        .setUxRestrictions(CarDrivingStateEvent.DRIVING_STATE_MOVING,
                true,
                UX_RESTRICTIONS_FULLY_RESTRICTED)
        // Set restriction parameters.
        .setMaxStringLength(int max)
        .setMaxCumulativeContentItems(int max)
        .setMaxContentDepth(int max)
        // Build a new CarUxRestrictionsConfiguration.
        .build();

API CarUxRestrictionsManager

Defina CarUxRestrictionsConfiguration para o próximo percurso com CarUxRestrictionsManager. Esse método requer permissão, Car.PERMISSION_CAR_UX_RESTRICTIONS_CONFIGURATION:

public synchronized boolean saveUxRestrictionsConfigurationForNextBoot(
        CarUxRestrictionsConfiguration config);

Manter uma nova configuração de restrições de UX

Quando uma nova configuração é passada, o serviço de restrições de UX retorna um booleano para indicar se a nova configuração foi salva. Essa nova configuração só é usada quando a unidade principal integrada (IHU, na sigla em inglês) é reiniciada e o carro está estacionado. Internamente, as restrições de UX contém dois conjuntos de configurações:

  • Produção. Essa configuração é opcional, mas muitas vezes está presente. A UX O serviço de restrições lê essa configuração ao ser iniciado.
  • Preparado. Também opcional, esta configuração não afeta as restrições de UX e é promovido para produção quando o automóvel é iniciado e o carro está estacionado.

Configuração de produção

Figura 1. Configuração de produção

Resolver falhas

Até que informações sobre o estado de condução sejam recebidas do CarPropertyManager (por exemplo, durante inicialização), as restrições de UX não serão aplicadas. O sistema funciona como se o estado de condução fosse Estacionado.

Se a leitura de uma configuração salva falhar (por exemplo, nos resultados de SetupNotFoundException), o O serviço de restrições de UX volta ao modo codificado e totalmente restrito:

// Idling/moving state is fully restricted.
private static CarUxRestrictionsConfiguration generateDefaultConfig() {}

Estado de direção e restrições do usuário

O conteúdo a seguir descreve as interações exibidas no diagrama de design a seguir:

Como acionar interações de estado

Figura 2. Como acionar interações de estado

Propriedades usadas para derivar o estado de condução

Use os três VehiclePropertyIds a seguir para derivar o estado de direção:

APIs disponíveis para apps

O código pode ser encontrado nos seguintes locais:

Código Local
CarUxRestrictionsManager e
APIs públicas para registrar mudanças de restrição de UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarUxRestrictions e
definição de restrições de UX.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java
CarDrivingStateManager
APIs do sistema para registrar mudanças de estado de condução.
/packages/services/Car/+/main/car-lib/src/android/car/drivingstate/CarDrivingStateManager.java

Para simular estados de direção, consulte Testes.