Implementar o affordance de emergência

Todos os dispositivos móveis vendidos na Índia a partir de 1º de janeiro de 2017 precisam ter um botão de pânico para atender aos requisitos do Departamento de Telecomunicações (DoT) da Índia. Para atender a esses requisitos regulamentares, o Android inclui uma implementação de referência do recurso de facilidade de emergência para ativar um botão de pânico em dispositivos Android.

Esse recurso é ativado por padrão no Android 8.0 e versões mais recentes, mas precisa ser corrigido em builds atuais de versões anteriores. Esse recurso é destinado exclusivamente a dispositivos vendidos no mercado indiano, mas pode ser incluído em todos os dispositivos vendidos no mundo todo, já que não tem efeito fora da Índia.

Exemplos e origem

O recurso de affordance de emergência é implementado no projeto frameworks/base do Android Open Source Project (AOSP). Ele está disponível na ramificação de lançamento mais recente do Android e é ativado por padrão no Android 8.0 e em versões mais recentes.

Esse recurso está disponível nas seguintes ramificações e commits. Essas informações são fornecidas para permitir que os fabricantes de dispositivos corrijam as mudanças necessárias nas builds atuais. Os fabricantes de dispositivos que quiserem implementar o recurso de acessibilidade de emergência de referência do AOSP podem selecionar os commits das ramificações aplicáveis nos próprios builds.

Tabela 1. Cherry-picks para o recurso de acessibilidade de emergência de referência do AOSP

Filial Commits
android-latest-release e0c3c66 Adição do recurso de acessibilidade de emergência
42a4338 Adição de traduções para a string de ação de emergência
4df8d64 Correção de um problema em que o recurso de acessibilidade de emergência aparecia em tablets
nougat-dev e6680d9 Adição do recurso de affordance de emergência
95e1865 Adição de traduções para a string de ação de emergência
a70bb89 Correção de um problema em que o recurso de affordance de emergência era exibido em tablets
marshmallow-dev cd22634 Adição do recurso de conveniência de emergência
13f51c6 Adição de traduções para a string de ação de emergência
6531666 Correção de um problema em que o recurso de conveniência de emergência aparecia em tablets
lollipop-mr1-dev 5fbc86b Adição do recurso de affordance de emergência
1b60879 Adição de traduções para a string de ação de emergência
d74366f Correção de um problema em que o recurso de affordance de emergência era mostrado em tablets

Implementação

O recurso de conveniência de emergência não faz mudanças nas APIs expostas pelo kit de desenvolvimento de software (SDK) do Android. Quando ativado e ativada, o recurso oferece dois gatilhos que podem iniciar uma chamada de emergência para 112, que é o único número de emergência a ser usado na Índia e exigido pelas regulamentações do DoT indiano.

Uma chamada de emergência é iniciada por:

Tocar e manter pressionado o botão EMERGÊNCIA
na tela de bloqueio
Tocar na opção Emergência
no Menu de ações globais
Tela de bloqueio mostrando um botão de EMERGÊNCIA

Figura 1. Botão EMERGÊNCIA na tela de bloqueio.

Menu de ações global com uma opção de emergência selecionada

Figura 2. Ação de emergência no Menu de ações globais (acessado ao tocar e pressionar a tecla liga/desliga).

Esse recurso apresenta os seguintes componentes internos:

  • EmergencyAffordanceManager
        frameworks/base/core/java/com/android/internal/policy/EmergencyAffordanceManager.java
        
  • EmergencyAffordanceService
        frameworks/base/services/core/java/com/android/server/emergency/EmergencyAffordanceService.java
        

EmergencyAffordanceManager

O EmergencyAffordanceManager fornece uma API interna para usar o recurso de acessibilidade de emergência. Ele fornece métodos para iniciar a chamada de emergência e consultar durante a execução se o recurso deve ser ativado.

  • void performEmergencyCall(). Inicia uma chamada de emergência.
  • boolean needsEmergencyAffordance(). Determina se o recurso deve estar ativo.

O recurso pode ser desativado permanentemente no momento do build mudando a constante EmergencyAffordanceManager.ENABLED para false. Isso faz com que needsEmergencyAffordance() sempre retorne false e impede que o EmergencyAffordanceService seja iniciado.

EmergencyAffordanceService

O EmergencyAffordanceService é um serviço do sistema que monitora o código de país para dispositivos móveis (MCC) de todas as redes celulares detectadas e o MCC dos chips instalados. Se algum dos chips instalados ou das redes celulares detectadas tiver um MCC correspondente a um dos MCCs da Índia (404 ou 405), o recurso será ativado. Isso significa que o recurso pode ser ativado na Índia mesmo sem um chip. Presume-se que a rede móvel permita o registro para chamadas de emergência mesmo sem um chip instalado. O recurso permanece ativado até que um chip de fora da Índia seja instalado e nenhuma das redes detectadas tenha um MCC correspondente.

Os recursos e configurações a seguir afetam o comportamento do recurso de acessibilidade de emergência. Se o tipo de configuração for:

  • Recurso:um recurso interno definido em frameworks/base/core/res/res/values/config.xml.
  • Configuração:uma configuração armazenada no provedor de configurações do sistema.

Tabela 2. Configurações que afetam o comportamento do recurso de emergência

Tipo de configuração Nome Descrição
Recurso config_emergency_call_number O número de telefone que é discado automaticamente quando a chamada de emergência é iniciada.
Tipo: string
Padrão: 112
Recurso config_emergency_mcc_codes Uma matriz de números inteiros que lista as MCCs em que o recurso deve estar ativo.
Tipo: matriz de números inteiros
Padrão: {404,405}
Configuração emergency_affordance_number Substituição da configuração global com o número a ser chamado com a ação de emergência. Isso só tem efeito em imagens de build depuráveis (ou seja, o tipo de build é userdebug ou eng). Isso é destinado apenas a testes.
Tipo: string
Padrão: não definido
Configuração force_emergency_affordance Configuração global que indica se o recurso de conveniência de emergência deve ser mostrado independente do estado do dispositivo. Isso é destinado apenas a testes.
Tipo: booleano (1 ou 0)
Padrão: não definido --> 0

Ativar chamadas de emergência para 112

O recurso de affordance de emergência conecta a chamada usando o discador de emergência para que ela possa ser conectada quando a tela de bloqueio estiver ativa. O discador de emergência conecta chamadas apenas à lista de números fornecida pela camada de interface de rádio (RIL, na sigla em inglês) pela propriedade do sistema:

  • ril.ecclist quando nenhum chip estiver instalado.
  • ril.ecclistSimSlotNumber quando um chip é inserido e SimSlotNumber é o ID do slot do assinante padrão.

Os fabricantes de dispositivos que usam o recurso de conveniência de emergência precisam verificar se os dispositivos na Índia sempre ativam o 112 como um número de emergência na RIL.

Validação

Ao testar em uma versão depurável, o número chamado pode ser alterado com o seguinte comando:

adb shell settings put global emergency_affordance_number NUMBER_TO_CALL

Embora essa configuração possa ser definida em um build de usuário normal, ela é ignorada. Para conectar a chamada, o número precisa estar na lista de números de emergência fornecida pela RIL. Isso pode ser definido temporariamente usando o seguinte comando executado em um shell raiz em um dispositivo userdebug:

setprop ril.ecclist "$(getprop ril.ecclist),NUMBER_TO_CALL"

O comando a seguir também pode ser usado para forçar a ativação do recurso de acessibilidade de emergência mesmo na ausência de uma rede móvel indiana detectada ou de um chip indiano inserido.

adb shell settings put global force_emergency_affordance 1

No mínimo, recomendamos testar os seguintes casos:

  • Quando ativado, tocar e manter pressionado o botão EMERGÊNCIA na tela de bloqueio (Figura 1) inicia uma ligação para o número de emergência especificado.
  • Quando ativado, o item Emergência no menu de ações globais fica disponível, e tocar nele inicia uma ligação para o número de emergência especificado.
  • O recurso não é ativado na ausência de uma rede móvel indiana detectada com um chip de fora da Índia instalado.
  • O recurso é ativado no dispositivo quando um chip da Índia é instalado, independente das redes móveis detectadas.
  • O recurso é ativado no dispositivo na presença de uma rede móvel indiana, independente dos chips instalados.

Se um dispositivo for compatível com vários chips, o teste vai verificar se a detecção de MCC do chip funciona corretamente em cada slot. O recurso de acessibilidade de emergência não é regido pelo Teste de compatibilidade do Android (CTS, na sigla em inglês). Portanto, não há testes do CTS para ele.

Perguntas frequentes

P: O número de emergência 112 ainda não foi comissionado na Índia. Ele ainda deve ser usado?

112 é o número usado na Índia como o Ponto de Atendimento de Segurança Pública (PSAP, na sigla em inglês), conforme definido pelos Sistemas Integrados de Comunicações e Resposta a Emergências (IECRS, na sigla em inglês). Até que a PSAP seja comissionada, todas as ligações para 112 serão encaminhadas para o número de emergência 100 (embora isso seja responsabilidade da operadora, não do Android).

P: E quanto a outros gatilhos, como pressionar três vezes o botão liga/desliga?

Os fabricantes de dispositivos podem implementar outros acionadores. No entanto, embora o DoT da Índia aprove o toque triplo no botão liga/desliga do hardware, esse gatilho não é compatível na implementação de referência do AOSP, já que alguns apps usados com frequência (por exemplo, o app Câmera) usam gestos do botão liga/desliga que incluem toques repetidos. Esses apps podem interferir no discador de emergência, ou o usuário pode acionar acidentalmente o botão de pânico ao tentar realizar ações neles.