Commit Graph

18 Commits

Author SHA1 Message Date
caspar
4b23724639 Allow the soft keyboard on fields the site marks as typed
Scan fields keep inputmode="none" and the forced hide; fields the site's markup
marks as manual (data-jk, its own inputmode, textarea, autocapitalize, or a
typing input type) keep the keyboard and the site's inputmode, so numeric
fields get a numeric keypad. Native code checks the focused field before
hiding the keyboard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 15:02:45 -04:00
caspar
d22af8f256 Show an explicit camera/gallery choice for photo uploads
Image file inputs went straight to the gallery picker when the camera was
hidden by the system chooser or its permission was missing. They now show a
Tomar foto / Elegir de la galería dialog (capture fields open the camera
directly), and a denied camera permission explains how to enable it in
Settings instead of silently falling back to the picker.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 14:07:04 -04:00
caspar
d1b8c34fe1 Save downloads and camera photos to the device, prompt for permissions
All checks were successful
APK-BUILD/pipeline/head This commit looks good
- Downloads (https on allowed hosts, data: and blob: URLs) are saved to the
  Downloads folder, with a toast when they finish
- Image upload fields offer the camera; photos are kept in Pictures/Joykoo
- In-page camera (getUserMedia) is granted to allowed hosts only
- Camera and storage (Android 9 and below) permissions are requested at
  first launch and again on demand

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:51:51 -04:00
caspar
4401519166 Start every launch with kiosk mode off while it is in testing
The saved kiosk setting is cleared on startup unless AppConfig.KIOSK_PERSISTED
is set, so a device left locked is released on the next launch. Scanning the
kiosk barcode still toggles lockdown for the current session.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:51:51 -04:00
caspar
babcd34c60 Use brand red for status strip with contrast-tuned indicator colors
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:46:44 -04:00
caspar
455f8498f7 Add kiosk lockdown, custom status strip, crash recovery and error screens
All checks were successful
APK-BUILD/pipeline/head This commit looks good
- Kiosk mode: scanning AppConfig.KIOSK_BARCODE toggles Android Lock Task
  mode (persisted). As device owner (KioskAdminReceiver) it is a full
  lockdown and the app becomes the persistent home screen; otherwise it
  falls back to screen pinning. "Salir" and Back-to-exit are disabled
  while kiosk mode is on.
- Status strip: app-drawn bar showing only Wi-Fi status and battery
  percentage; system bars stay hidden.
- Renderer crash: onRenderProcessGone replaces the WebView and reloads
  the last URL; repeated crashes show an error screen instead.
- Error screen: per-cause messages (no Wi-Fi with auto-retry on
  reconnect, server unreachable, 5xx, SSL) and an "Ir al inicio"
  button; 4xx pages are left to the site.
- Mixed content is never allowed.
- Admin volume-key hold reduced to 3 seconds.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 14:37:25 -04:00
caspar
84035e7107 Replace corner-tap admin gesture with volume-key hold and admin barcode
All checks were successful
APK-BUILD/pipeline/head This commit looks good
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
caspar
2f88432776 Add intent-output scanner support and key event logging
All checks were successful
APK-BUILD/pipeline/head This commit looks good
Scanners in "Intent output" mode deliver barcodes via broadcast, which
nothing in the app received, so scans never reached any field. Add
BroadcastScannerIntegration (Urovo, Newland and other common actions,
configurable in AppConfig) and inject the text into the focused field,
or the first visible search/text field, using the native value setter
plus an input event so React-controlled inputs accept it. Optionally
sends Enter afterwards (SCANNER_SEND_ENTER).

Add a logging-only dispatchKeyEvent pass-through to diagnose why
keystroke-mode scans don't reach the orders search field.

Ignore SamplePage/ and update README and CLAUDE.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 12:39:16 -04:00
caspar
b03d4507c1 Fix scanner input and move keyboard toggle into admin dialog
All checks were successful
APK-BUILD/pipeline/head This commit looks good
onCheckIsTextEditor() returning false prevented the InputConnection
from being established, breaking hardware key relay from the barcode
scanner into HTML inputs. Always return true — the other suppression
layers handle keyboard hiding.

Move the keyboard toggle from the top-right corner gesture (which
blocked a UI feature) into the admin dialog (7 taps top-left corner).
The dialog now shows three options: exit, toggle keyboard, or cancel.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-08 01:00:07 -04:00
caspar
619fa4f048 Add hidden on-screen keyboard toggle (5 taps top-right corner)
All checks were successful
APK-BUILD/pipeline/head This commit looks good
Tap the top-right 60dp corner 5 times within 3 seconds to toggle
the soft keyboard on or off. Default is off (suppressed). The toggle
controls all suppression layers: JS inputmode injection, the
MutationObserver, InputMethodManager hide calls, and the WebView's
EditorInfo flags. A toast confirms the current state in Spanish.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-08 00:39:53 -04:00
caspar
b7cf7256ac Restore real InputConnection to fix barcode scanner input
Returning null from onCreateInputConnection() prevented the Chromium
renderer from relaying hardware key events into HTML inputs, breaking
scanner input on the Urovo CT58C. Return the real InputConnection from
super and rely on the multi-layer keyboard suppression (JS inputmode,
InputMethodManager, EditorInfo flags, manifest flags) which is already
proven to work on this device.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-08 00:37:43 -04:00
caspar
72ee038cde Fix build error and add stronger soft keyboard suppression
All checks were successful
APK-BUILD/pipeline/head This commit looks good
Replace BuildConfig.DEBUG (not generated by AGP 8.x) with unconditional
WebView debugging — safe for a kiosk app since it requires ADB access.

Add two additional layers of keyboard suppression for devices where the
null InputConnection alone is insufficient: inject JavaScript that sets
inputmode="none" on all inputs via MutationObserver, and force-hide the
keyboard via InputMethodManager on page load and window focus changes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-08 00:25:48 -04:00
caspar
e6ac00fe2a Replace app icon with Joykoo brand logo and improve WebView error handling
Some checks failed
APK-BUILD/pipeline/head There was a failure building this commit
Use the Jk logo from smart.joykoo.mx as the launcher icon (legacy PNGs
and adaptive icon foreground at all densities). Add SSL/HTTP error
handling so failures show the error overlay instead of a silent white
screen. Add JS console logging to logcat and WebView debugging for
debug builds. Relax mixed content mode to compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-10-08 00:13:20 -04:00
caspar
f99c6c05fa Fix: archive APKs before cleaning workspace
All checks were successful
APK-BUILD/pipeline/head This commit looks good
2026-10-07 19:18:29 -04:00
caspar
4747dbc3c6 Fix release stage: use withCredentials to gracefully skip when creds missing 2026-10-07 19:13:55 -04:00
caspar
abec4c6c84 Modified Jenkinsfile. 2026-10-07 18:40:44 -04:00
caspar
a574ad6662 Modified Jenkinsfile. 2026-10-07 18:29:11 -04:00
caspar
63909abf6d Initial commit. Basic app. 2026-09-28 15:41:55 -04:00