Controla se o aplicativo Vender pode ser usado diretamente pela sua interface no terminal. A alteração é feita por outro aplicativo instalado no mesmo POS Android.
Integração via Intent Android. Há um modo automático, sem interação, e um modo manual, no qual o operador escolhe o estado das vendas.
Escopo do bloqueio
Desabilitar vendas bloqueia somente a abertura e o uso direto da interface do Vender. Pagamentos iniciados por com.sopague.START continuam permitidos.
Contrato da Integração
Action
| Parâmetro | Valor |
|---|---|
| Action | com.sopague.TOGGLE_SALES |
| Categoria | android.intent.category.DEFAULT |
Extras Opcionais
Resposta da Activity
| Resultado | Quando ocorre | Extras |
|---|---|---|
RESULT_OK | Estado alterado no modo manual ou automático | SUCCESS=true e SALES_ENABLED |
RESULT_CANCELED | Operador fechou ou cancelou o diálogo manual | CANCELLED=true e estado atual em SALES_ENABLED |
Exemplos de Integração
Kotlin com Activity Result API
private val toggleSalesLauncher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result ->
val data = result.data
val salesEnabled = data?.getBooleanExtra("SALES_ENABLED", true)
if (result.resultCode == Activity.RESULT_OK) {
val success = data?.getBooleanExtra("SUCCESS", false) == true
Log.i("VENDER", "Atualizado=$success; vendasAtivas=$salesEnabled")
} else {
val cancelled = data?.getBooleanExtra("CANCELLED", false) == true
Log.i("VENDER", "Cancelado=$cancelled; vendasAtivas=$salesEnabled")
}
}
fun definirVendas(ativar: Boolean) {
val intent = Intent("com.sopague.TOGGLE_SALES").apply {
addCategory(Intent.CATEGORY_DEFAULT)
putExtra("enabled", ativar)
}
toggleSalesLauncher.launch(intent)
}Modo Manual (com interface gráfica)
Exibe a tela de confirmação para o lojista escolher:
Intent intent = new Intent("com.sopague.TOGGLE_SALES");
intent.addCategory(Intent.CATEGORY_DEFAULT);
startActivityForResult(intent, 1002);Modo Automático — Ativar Vendas
Intent intent = new Intent("com.sopague.TOGGLE_SALES");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("enabled", true);
startActivityForResult(intent, 1002);Modo Automático — Desativar Vendas
Intent intent = new Intent("com.sopague.TOGGLE_SALES");
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.putExtra("enabled", false);
startActivityForResult(intent, 1002);Processando a Resposta
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1002 && resultCode == RESULT_OK && data != null) {
boolean success = data.getBooleanExtra("SUCCESS", false);
boolean salesEnabled = data.getBooleanExtra("SALES_ENABLED", false);
if (success) {
String status = salesEnabled ? "ativadas" : "desativadas";
Log.d(TAG, "Vendas " + status + " com sucesso!");
}
} else if (requestCode == 1002 && resultCode == RESULT_CANCELED) {
boolean cancelled = data != null
&& data.getBooleanExtra("CANCELLED", false);
boolean salesEnabled = data == null
|| data.getBooleanExtra("SALES_ENABLED", true);
Log.d(TAG, "Cancelada=" + cancelled + "; vendasAtivas=" + salesEnabled);
}
}Visibilidade de pacote no Android 11+
Se o aplicativo chamador verifica a disponibilidade com resolveActivity e usa targetSdkVersion 30 ou superior, inclua no AndroidManifest.xml:
<queries>
<intent>
<action android:name="com.sopague.TOGGLE_SALES" />
<category android:name="android.intent.category.DEFAULT" />
</intent>
</queries>Considerações Finais
- O aplicativo Vender deve estar instalado no dispositivo POS
- No modo automático, a operação é processada imediatamente sem interação do usuário
- No modo manual, o usuário pode cancelar a operação, retornando
CANCELLEDcomotrue - O estado fica persistido no terminal e continua válido após fechar ou reiniciar o Vender
- Restrinja essa action a aplicativos parceiros confiáveis; ela altera o comportamento operacional do POS
