JoykooSmartApp/README.md
caspar 84035e7107
All checks were successful
APK-BUILD/pipeline/head This commit looks good
Replace corner-tap admin gesture with volume-key hold and admin barcode
The 7-tap top-left corner gesture passed every tap through to the page,
triggering site UI underneath it. Remove it entirely and open the admin
dialog (exit / toggle soft keyboard) by either:

- holding Volume Up + Volume Down together for 5 seconds; volume keys
  are consumed so they never reach the page, or
- scanning AppConfig.ADMIN_BARCODE in Intent output mode, which opens
  the dialog instead of being injected into the page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 13:28:45 -04:00

82 lines
3.7 KiB
Markdown

# Joykoo Scanner
Aplicación nativa de Android que funciona como navegador dedicado de pantalla completa para el sistema web de Joykoo (`smart.joykoo.mx`), diseñada para escáneres industriales de códigos de barras y QR.
## Características
- **WebView en pantalla completa** — Carga el sitio web de la empresa sin barra de direcciones ni controles del navegador
- **Supresión del teclado virtual** — El teclado en pantalla de Android nunca aparece, mientras que la entrada del escáner de códigos de barras (modo HID/teclado) funciona normalmente
- **Modo kiosco** — Pantalla siempre encendida, modo inmersivo, navegación restringida al dominio de la empresa
- **Persistencia de sesión** — Cookies y almacenamiento local persisten entre reinicios de la aplicación
- **Manejo de errores de red** — Pantalla de reintento cuando no hay conexión Wi-Fi
- **Salida protegida** — Se requieren 3 pulsaciones rápidas del botón Atrás para salir; menú de administrador (salir / mostrar u ocultar teclado) al mantener presionados Subir y Bajar volumen 5 segundos, o al escanear el código de administrador
## Requisitos
- Android 7.0+ (API 24)
- Dispositivo con escáner de códigos de barras integrado en modo HID/teclado
- Conexión Wi-Fi al servidor de la empresa
## Compilación
### Prerrequisitos
- JDK 17
- Android SDK con:
- `platform-tools`
- `platforms;android-34`
- `build-tools;34.0.0`
### Usando Android Studio
Abrir el proyecto y compilar normalmente.
### Línea de comandos
```bash
export JAVA_HOME=/ruta/a/jdk-17
export ANDROID_HOME=/ruta/a/android-sdk
./gradlew assembleDebug # APK de depuración
./gradlew assembleRelease # APK de producción (requiere configurar firma)
```
El APK resultante se encuentra en `app/build/outputs/apk/`.
## Configuración
Todos los valores configurables están en un solo archivo:
**`app/src/main/java/mx/joykoo/scanner/AppConfig.kt`**
| Parámetro | Descripción | Valor por defecto |
|---|---|---|
| `HOME_URL` | URL que se carga al iniciar | `https://smart.joykoo.mx/` |
| `ALLOWED_HOSTS` | Dominios permitidos dentro del WebView | `smart.joykoo.mx`, `joykoo.mx` |
| `BACK_PRESS_EXIT_COUNT` | Pulsaciones rápidas de Atrás para salir | 3 |
| `ADMIN_VOLUME_HOLD_MS` | Tiempo (ms) con ambos botones de volumen presionados para abrir el menú de administrador | 5000 |
| `ADMIN_BARCODE` | Código que, al escanearse (modo Intent), abre el menú de administrador | `JOYKOO-ADMIN-…` |
## Uso del escáner
1. El usuario toca un campo de texto en la página web
2. El campo recibe el foco — **el teclado virtual no aparece**
3. El usuario escanea un código de barras o QR
4. El texto escaneado aparece en el campo
5. Si el escáner envía Enter al final, la página lo procesa normalmente
## Estructura del proyecto
```
app/src/main/java/mx/joykoo/scanner/
├── AppConfig.kt — Configuración centralizada
├── MainActivity.kt — Actividad principal (kiosco, WebView, navegación)
├── NoSoftKeyboardWebView.kt — WebView que suprime el teclado virtual
├── ScannerIntegration.kt — Interfaz para integración con el escáner
└── BroadcastScannerIntegration.kt — Recepción de códigos en modo Intent
```
## Modo de salida por Intent (broadcast)
Además del modo teclado (keystroke), la aplicación acepta escáneres configurados en **modo Intent**. El código recibido se escribe en el campo con foco (o, si no hay ninguno, en el primer campo de búsqueda/texto visible) y se envía Enter al final. Las acciones y claves extra soportadas (Urovo, Newland y otros) están en `SCANNER_BROADCAST_ACTIONS` / `SCANNER_BROADCAST_EXTRAS` en `AppConfig.kt`; si el dispositivo usa otra acción, agréguela ahí.