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

3.7 KiB

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

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í.