Releases: nettrash/Scan.Android
Releases · nettrash/Scan.Android
v1.7.57
Scan for Android — 1.7.57
Six feature drops have landed since 1.1. This release rolls them all up: a richer scanner, a smarter generator, a History that travels with you, deep-link + share-sheet entry points, App Links, F-Droid metadata, and a camera that finally does pinch-to-zoom and centred-frame ROI. Every change ships in lockstep with iOS Scan 1.7 — same payloads, same labels, same behaviour.
Camera
- Pinch-to-zoom in the live preview. Honours each phone's full zoom range, including telephoto and macro lenses on multi-cam devices. Pan drift during a pinch is locked out so the zoom factor stays clean.
- Centred-frame scanning. Codes outside the central 78 % × 78 % region of the preview are ignored, matching the iOS reticle exactly. Eliminates accidental hits on neighbouring barcodes when scanning shelves or stacks of receipts.
- Multi-code disambiguation. When the analyzer sees two or more codes in frame, numbered chips appear over each bounding rect. Tap one to commit; everything else (haptic, sound, save, continuous-scan) behaves identically to a single-code framing.
- The reticle now tracks the largest detected rect rather than the first, giving you a clear primary anchor while the chooser stays visible.
New payload types
Two passes of new recognisers, ported one-for-one from iOS:
- Magnet URIs — info-hash, display name, exact length, tracker list. "Open in torrent client" action.
- Rich URLs — WhatsApp click-to-chat, Telegram, Apple Wallet
.pkpass, App Store / Google Play, YouTube (incl. Shorts), Spotify, Apple Music. Per-kind smart-action labels. - Maps URLs (Google + Apple) re-classify to
Geowhen coordinates are extractable, so they get the same "Open in Maps" action as ageo:payload. - vCard 4.0 parses transparently.
- More crypto chains — Ripple, Stellar, Cosmos, LNURL, Lightning Address. Schemes
xrp,xrpl,ripple,stellar,web+stellar,cosmos. - Bare-address crypto detection — strings without a URI scheme classify as crypto when they match Bitcoin (legacy + bech32), Ethereum, XRP, Stellar, Cosmos, bolt11 invoices, or LNURL bech32.
- GS1 Application Identifier — parens, Digital Link, and FNC1-separated forms. ~40 common AIs with friendly names; date AIs render
YYYY-MM-DD. GTIN web-lookup action. - IATA Bar Coded Boarding Pass (BCBP) — full RP 1740c 60-char mandatory leg layout.
- AAMVA driver's licence (PDF417) — every US state + Canadian province, full identity / dates / address fields. Auto-detects MM/DD/YYYY vs YYYY/MM/DD expiry encoding.
Wi-Fi, crypto tokens, digital identity, loyalty
- Wi-Fi WPA3 (SAE) and Passpoint (HS20) join the existing OPEN/WEP/WPA-WPA2 cases. Passpoint payloads surface a "must be installed manually" caveat — there's no public Android API for programmatic provisioning either.
- Stablecoin / token recognition. USDC, USDT, DAI on Ethereum (ERC-20). USDT, USDC on Tron (TRC-20). USDC, USDT on Solana (SPL). Unknown contracts surface as a generic ERC-20 / TRC-20 / SPL tag with the contract preserved.
- Solana Pay SPL (
solana:RECIPIENT?spl-token=MINT&amount=…) and full Tron support (tron:/tronlink:, plus 34-char base58 bare-address detection). - Digital identity payloads — DigiD, EUDI Wallet, OpenID4VC. Conservative detection rules and an orange security warning above the action button: "Identity flow — only continue if you started this login yourself." History uses a person icon for these.
- Save as loyalty card. Product-code payloads now offer an outlined "Save as loyalty card" action with a merchant prompt. Saved as a favourited record so it pins to the top of History; searchable by merchant tag. Google Wallet's loyalty-pass API is deliberately not used — it requires server-side JWTs signed with a service account, which isn't viable for an offline app.
Generator
- Foreground / background colour pickers — full HSV picker (saturation/value square, hue strip, hex field, presets). Material 3 doesn't ship one, so we wrote it.
- QR error-correction picker alongside the colour controls. Forced to HIGH whenever a logo is set.
- Logo embedding. Photo-Picker → centred composite at ~22 % of the canvas with a white rounded-rect punch behind the logo. Punch stays white regardless of the chosen background colour, to keep the finder pattern legible.
- SVG and PDF export. SVG is run-length-encoded per row (~5× smaller than per-module). PDF uses native vector output (
PdfDocument). Both share viaFileProviderand anACTION_SENDchooser with the right MIME type. - WCAG contrast warning appears in the Style block when the foreground / background contrast drops below 3:1 — same algorithm as iOS, so the warning fires on the same colour pairs cross-platform.
Settings, History, feedback
- New Settings tab with three toggles: Haptic on scan (default ON), Sound on scan (default OFF, uses
ToneGeneratoronSTREAM_NOTIFICATIONso the user's ringer / DnD policy still applies), Continuous scanning (default OFF). - Continuous mode auto-saves recognised codes and surfaces them in a green banner across the top of the preview instead of popping the result sheet. Tap the banner to open the sheet for the most recent scan. Image-import path is unchanged.
- History favourites. Star a row to pin it. Sort is
(is_favourite DESC, timestamp DESC), mirroring the iOS Core Data sort exactly. Toolbar filter chip toggles "favourites only". - CSV export of History — UTF-8 / CRLF / RFC 4180, same column schema as iOS, shared via
FileProviderwith per-Intent grants. - What's-New sheet appears on first launch after an upgrade. Stored ack is per-
versionName; if the user installs a newer build before opening, the stored ack silently catches up so the sheet shows for the version it was actually written for. - Test feedback button in Settings fires haptic + sound at once for tuning.
- Room schema migrated v1 → v2 (
is_favoritecolumn added). NofallbackToDestructiveMigration— a Play upgrade silently nuking saved scans is strictly worse than crashing visibly.
Deep links, share sheet, App Links
- Universal-style deep links —
https://nettrash.me/scan/<base64url-payload>opens directly into a result sheet that re-uses the camera-path payload actions. Same URL shape and Base64URL rules as iOS, payloads round-trip cleanly between platforms. - Android App Links with
autoVerify="true"claiminghttps://nettrash.me/scan/*. The verifier fetchesassetlinks.jsonon install and on everyversionNamebump; the filter flips from "browsable" to "verified" only when every signing fingerprint validates. - Share-to-Scan. Scan now appears in the Android share sheet for
image/*andapplication/pdf, single or multi-select. A bottom sheet renders the recognised codes; one-result inputs auto-drill into the detail. - PDF support. Every page rasterises at 2× density via
PdfRenderer, runs through ML Kit, and aggregates with dedup on raw value. Mixed image+PDF batches handled. Per-entry failures are swallowed so one bad file doesn't poison the batch. Cloud-storage URIs that aren't seekable fall back to a cached copy. - Backup status surface in Settings — a Sync section that surfaces whether Auto Backup is declared and offers a button to deep-link into the OS-level toggle.
F-Droid
- New
metadata/me.nettrash.scan.ymlbuild recipe — git source,subdir: Scan, version-tag driven,keystore.propertiescleaned from the build env so F-Droid signs with their own key. - Fastlane metadata under
fastlane/metadata/android/en-US/mirrorsplay/listings/so the same source can drive both stores.
Build / packaging
- Default
versionNameinScan/build.gradle.ktsis now 1.7.versionCodecontinues to auto-increment fromversion.properties(this build = 57). Tag-driven CI builds still override (git tag v1.7.0→versionName = "1.7.0").
v1.1.24
Full Changelog: v1.1...v1.1.24
v1.1
Full Changelog: https://github.com/nettrash/Scan.Android/commits/v1.1