What's New
Updates to RideLens, newest first.
v2.9.9.3
June 5, 2026
Latest
- Fare recognition fixed on Samsung devices — offers that used to show the wrong grade now score correctly.
- $/mi color corrected — now shows green, yellow, or red to match the actual rating. It was always showing yellow before.
- Fewer false pop-ups — the HUD only appears on real offer screens, not on map views or promotion screens.
- Home screen simplified — less clutter, easier to get started.
- Settings are now backed up to your Google account — your thresholds and HUD preferences transfer automatically when you switch phones.
v2.9.2
May 17, 2026
Fix
- Lyft tekliflerinde HUD bazen geç güncelleniyordu — yeni bir teklif ekrana geldiğinde HUD hemen yeni teklifi gösteriyor, artık önceki teklifin verileri kalmıyor.
- Teklif kabul edildikten sonra HUD ekranı temizleniyor — önceki teklifin notu bir sonraki teklife karışmıyor.
- Bazı Lyft tekliflerinde pickup mesafesi eksik geldiğinde uygulama yanlış değer hesaplıyordu — düzeltildi.
- Voice announcement for green/yellow/red grades (enable in Settings → Sesli Bildirim).
- Küçük iyileştirmeler ve hata düzeltmeleri.
v2.9.1
May 17, 2026
HUD update
- Expanded HUD layout redesigned — fare, $/hr, and $/mi on the left; trip time, distance, and dropoff city on the right. Everything at a glance without scrolling.
- Duplicate offer filtering: the same offer showing up twice in History is now prevented.
- Three-way grading — offers are now scored on hourly rate, per-mile rate, and total trip duration simultaneously. All three must be green for the offer to show green.
- Per-mile rate ($/mi) now shown in the HUD alongside $/hr.
- Settings page updated with separate sliders for $/hr, $/mi, and max trip duration thresholds.
v2.1.0
May 14, 2026
Setup & stability
- New setup guide walks you through every required permission in plain language — no guessing which Android screen to find.
- Set your $/hr thresholds right during setup, before your first shift.
- First-launch "What's new" summary shown after each update.
- Works on the latest Android version (Android 16).
- Automatic crash reporting added so issues get fixed faster — no personal or offer data included.
v2.0.1
May 11, 2026
Fix
- Lyft: estimated hourly rate shown on the offer card ("$27/hr est.") no longer confused with the actual fare. Grade is now always based on the real payout.
v2.0.1
May 10, 2026
Fix
- Fixed: after three or more offers in a row, the app could stop reading new ones until restarted. Now reliably reads every offer throughout your shift.
v2.0.1
May 9, 2026
Fix
- Fixed: some Lyft offers were missed when the fare amount wasn't displayed immediately. The app now retries automatically and catches those offers.
v2.0.0
April 25, 2026
Launch
- Complete app rewrite — faster, more reliable offer reading on both Uber and Lyft.
- New floating HUD overlay — drag it anywhere on screen. Tap to cycle between full, compact, and icon modes. Long-press to open the app.
- Grading is based on gross $/hr — the number you see before expenses, matching what Uber and Lyft show on the offer card.
- Full shift history saved locally — review every offer, see your acceptance patterns, export to CSV.
- Screen capture stability improvements — the HUD stays live longer without needing to re-grant permission.
2.9.4
-
2.9.4
- In-app active session card in History: live mileage + offer counts (green/yellow/red)
- Setup wizard guidance: English-only beta notice on welcome screen and settings
- Auto-action mode hidden in base flavor — grading-only beta, will return as Pro feature
- Defensive Locale.US for all numeric output (protects non-US device locales)
- Skip fare=$0 PARTIAL entries — parse noise no longer logged or stored
- History view deduplicates same-offer multiple OCR parses (collapse to most complete row)
- Session offer counters (green/yellow/red) now persist to database every 30s
2.9.3
-
2.9.3
- Speed sanity guard: OCR corruptions that produce physically impossible speeds
- Debug log: raw node text is no longer truncated, full character dump available for diagnosis
v2.3.0
2026-05-15
v2.3.0 · versionCode 43 · Wave A
- Fix: Default language is now English on first install (Wave-A-3)
- Fix: Report a Bug now sends HTTP directly to Telegram bot — no email fallback (Wave-A-5)
- Feature: TelegramReporter.sendDocument() — attaches diagnostic ZIP to bug report
- Fix: About and Settings headers are now sticky (Scaffold+TopAppBar pinnedScrollBehavior) (Wave-A-4)
- Feature: Onboarding redesigned from 9 steps to 5 steps (Wave-A-1+2)
v2.2.0
2026-05-14
v2.2.0 · versionCode 41 · Hotfix 17
- Fix: HomeScreen rate display — was showing net $/hr, now correctly shows gross $/hr (AGENT_CONTEXT gross-only rule)
- Fix: History "All time" summary now reads directly from offers table — no longer shows 0/0/0/0 for active sessions
- Fix: About page — removed GitHub link, added Website (ridelens.app) and Help (ridelens.app/help)
- Feature: Config infra — TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID, IS_BETA via local.properties → BuildConfig → Config.kt; CONFIG.md
- Feature: LicenseManager scaffold — BETA_TESTER / TRIAL_ACTIVE / SUBSCRIBED / EXPIRED enum; About shows 🧪 Beta Tester badge; Onboarding done step shows beta welcome
- Feature: Firebase App Distribution — appDistributionUploadBaseRelease task, release notes auto-pulled from CHANGELOG.md, group=beta-testers
- Feature: TelegramReporter — sendMessage(), buildBugReport(), buildCrashReport()
- Feature: BugReportSheet — About → "🐛 Hata Bildir" CTA, fallback email if token empty
- Feature: CrashReporter — UncaughtExceptionHandler → Crashlytics + Telegram, 60s rate limiter, IS_BETA sends all crashes
- Feature: MP token auto-refresh — ProjectionRefreshNotifier fires "Ekran erişimi kesildi" notification on token revoke, tap → MainActivity opens consent; 4h proactive check in OfferOverlayService
- Feature: Multi-language UI — strings.xml EN/TR/ES/FR; AboutScreen, HistoryScreen, BugReportSheet, SettingsScreen key strings use stringResource(); Language picker at top of Settings (API 33+ LocaleManager + SharedPrefs fallback)
v2.1.0
2026-05-14
v2.1.0 · versionCode 40 · Sprint 1
- **B9** Target SDK upgraded to 36 (Android 16) — API 35 min met and exceeded
- **B10** Network security config: HTTPS-only, cleartext disabled
- **B4-prep** Crashlytics SDK integrated (disabled in DEBUG builds); custom keys `parserKey`, `platformKey`; `google-services.json` placeholder instructions added to README
- **B2-prep** ProGuard rules for ML Kit, Compose, Kotlin reflection, Hilt, Room
- **B1** Retroactive CHANGELOG created; release keystore setup documented in README
v2.0.1
2026-05-12
v2.0.1 · versionCode 39 · HOTFIX 16E
- `AGENT_CONTEXT.md` — AI agent bootstrap document with architecture, critical decisions, past failure catalogue
- `.cursorrules` — Cursor editor guidelines
- README updated with agent link
v2.0.1
2026-05-11
v2.0.1 · versionCode 39 · HOTFIX 16C
- 2 new shift-replay fixtures for Vardiya 6 edge cases
- `UsLyftSanitizerEdgeCaseTest` — 4 tests covering partial OCR, `/hr` rate exclusion, missing fare
- Lyft `$27.03/hr est. rate for this ride` no longer mis-parsed as fare (`/hr` exclusion regex)
v2.0.1
2026-05-10
v2.0.1 · versionCode 39 · HOTFIX 16B
- Rescan budget counter never reset → after first 3 skips, no further rescans ever fired
- Fix: reset `rescanCount` when package changes or gap > 30 s
v2.0.1
2026-05-09
v2.0.1 · versionCode 39 · HOTFIX 16A
- Lyft offer missed when fare line absent in OCR — was returning `Failure`, now returns `Partial(["fare"])` which triggers rescan
v2.0.0
2026-05-08
v2.0.0 · versionCode 38 · HOTFIX 15D-D
- `core/README.md` — locked module stability policy (620-fixture regression + ShiftReplayTest 7-fixture gate)
v2.0.0
2026-05-07
v2.0.0 · versionCode 38 · HOTFIX 15D-B/C
- `ShiftReplayTest` — 7 JSON shift-replay fixtures, auto-discovered from `fixtures/shift_replay/`
v2.0.0
2026-05-06
v2.0.0 · versionCode 38 · HOTFIX 15D-A
- `OcrRawText` CSV column always blank — `fold("")` bug replaced with `fold(rawOcrText)`
v2.0.0
2026-05-05
v2.0.0 · versionCode 38 · HOTFIX 15C
- History screen: total row `Toplam: X min · Y.Y mi` at bottom of offer list
v2.0.0
2026-05-04
v2.0.0 · versionCode 38 · HOTFIX 15B
- Settings threshold preview: 5 live examples (RED/YELLOW/GREEN/GREEN/YELLOW) update in real time as sliders move
v2.0.0
2026-05-03
v2.0.0 · versionCode 38 · HOTFIX 15A
- `scheduleRescan()` — up to 3 retries at 1.5 s intervals when OCR returns `Partial`
- Lyft offer capture rate improved significantly for slow-render screens
v2.0.0
2026-05-02
v2.0.0 · versionCode 38 · HOTFIX 15
- **Critical crash** after MediaProjection permission grant: `ViewTreeLifecycleOwner` not set on plain `ComposeView` in `WindowManager`
- Fix: `DraggableHostView` wrapper calls `setViewTreeLifecycleOwner(composeView)` on attach
v2.0.0
2026-05-01
v2.0.0 · versionCode 38 · HOTFIX 14
- Grade shown as RED while HUD displayed `$28/hr` — grading was comparing net $/hr against threshold instead of gross $/hr
- Fix: all grade comparisons now use `grossPerHour`; `netPerHour` retained in `GradedOffer` but never shown in UI
v2.0.0
2026-04-30
v2.0.0 · versionCode 38 · HOTFIX 13
- HUD drag non-functional — `setOnTouchListener` consumed by Compose touch system
- Fix: `DraggableHostView.onInterceptTouchEvent` handles drag before Compose sees touches
v2.0.0
2026-04-25
v2.0.0 · versionCode 38
- `:core` module — pure JVM: `Offer`, `Grade`, `Thresholds`, `Grader`, `CostModel`
- `:app` module — `RideLensAccessibilityService` (811-line pipeline), `OfferOverlayService`, `DraggableHostView`, `RideLensLogger` (rides.csv), `HistoryScreen`, `SettingsScreen`, `OnboardingScreen` (7-step)
- Product flavors: `base` (HUD + parse + grade) · `full` (+ auto-action engine)
- Room database: `OfferEntity`, `SessionEntity`, migrations
- Hilt DI throughout
- ML Kit OCR integration
- `UsUberSanitizer` + `UsLyftSanitizer` with full fixture test suite (620+ fixtures)
- versionCode 38 (continued from Java v1 versionCode 37)