# 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; gesto oculto de administrador (7 toques en esquina superior izquierda) con diálogo de confirmación ## 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_TAP_COUNT` | Toques en esquina superior izquierda para menú de administrador | 7 | ## 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í.