Releases: yrkan/KPedal
KPedal v1.8.2
What's New in v1.8.2
Layout polish pass for all 19 DataType data fields — larger fonts, removed redundant labels, and fixed text truncation issues for better readability while cycling.
📊 SMALL Layout Fixes
- Removed all labels from SMALL data fields to maximize value readability
- Bumped primary font sizes for arm's-length visibility
- Fixed balance text truncation: Split combined "49/51" strings into separate elements to prevent Glance
maxLines=1cutting text to "49/..."
📏 SMALL_WIDE Label Cleanup
Removed redundant labels (BAL, TE, HR, SYM, GRADE, etc.) from 8 DataTypes:
- Balance Trend, Symmetry Index, Climbing Mode, Power Focus
- Single Balance, HR Efficiency, Left Leg, Right Leg
These labels wasted vertical space in the 58-73sp usable height. Only unit suffixes (w, rpm) are kept where helpful.
🔤 LARGE Layout Header Removal
Removed decorative name headers from 5 DataTypes:
- Climbing Mode ("▲ CLIMB MODE")
- Sprint Mode ("● SPRINT MODE")
- HR Efficiency ("HR + EFFICIENCY")
- Symmetry Index ("SYMMETRY INDEX")
- Pedaling Score ("PEDALING SCORE")
Headers wasted a full row on names users already know from setup. Activity indicators (▲, ●) moved inline with their primary values. Primary metrics bumped to 34-40sp, secondary to 24-28sp.
📈 NARROW Layout Font Bumps
Bumped secondary values (3s/10s averages, TE/PS, balance, cadence, grade) by 4-6sp across all DataTypes for better readability at arm's length.
🐛 Bug Fixes
- Fixed FullOverview SMALL balance showing "49/..." instead of "49/51"
- Fixed PowerBalance SMALL_WIDE separator being too wide
- Fixed PS validation upper bound in cloud settings sync (40 → 30)
📦 Build Changes
| Change | Before | After |
|---|---|---|
| versionCode | 18 | 19 |
| versionName | 1.8.1 | 1.8.2 |
Full Changelog: v1.8.1...v1.8.2
KPedal v1.8.1
What's New in v1.8.1
Minor update with UI improvements for data fields and preparation for Hammerhead App Store publishing.
🏪 Hammerhead App Store
KPedal is now ready for the Hammerhead App Store! The app can be discovered and installed directly from your Karoo device.
Note for developers: APK filename changed from kpedal-X.X.X.apk to stable kpedal.apk. This allows the manifest URL releases/latest/download/kpedal.apk to always point to the current version.
📊 Full Overview DataType Improvements
SMALL layout fix:
- Fixed balance text "48:52" being truncated to "..."
- Split into separate L|R values with smaller fonts
- Added individual colors for left/right imbalance indication
LARGE layout fix:
- Fixed values being too close to vertical dividers
- Added proper spacing (8dp) between values and dividers
📈 Live DataType Improvements
Time In Zone section redesigned:
- New professional segmented progress bar showing proportional zone widths
- Color-coded chips with dot indicators for each zone percentage
- Visual representation of optimal (green), attention (yellow), and problem (red) zones
🧩 New Glance Components
ZoneSegmentedBar- horizontal bar with colored segments for each zoneZoneChip- colored indicator dot with percentage value
📦 Build Changes
| Change | Before | After |
|---|---|---|
| APK filename | kpedal-1.8.0.apk |
kpedal.apk |
| versionCode | 17 | 18 |
| versionName | 1.8.0 | 1.8.1 |
Full Changelog: v1.8.0...v1.8.1
KPedal v1.8.0
What's New in v1.8.0
This is a major update featuring a complete rewrite of the data field rendering system, 15 brand new layouts, and important sync reliability fixes.
🎨 Complete DataType Migration to Jetpack Glance
We've completely rewritten all data fields using Jetpack Glance technology. This solves the crash that some users experienced after 10-15 minutes of riding.
Technical details:
- Old system: A single RemoteViews instance accumulated actions over time (900 updates × 25 actions = 22,500 actions → crash)
- New system: Fresh RemoteViews created on each update, max ~25 actions per instance → stable indefinitely
📊 15 New Data Field Layouts (22 total!)
| Layout | Description |
|---|---|
| Pedaling Score | Overall pedaling quality score from 0-100 |
| Fatigue Indicator | Shows fatigue level based on how your metrics change during the ride |
| Cadence + Balance | RPM display with L/R balance percentage |
| Delta vs Average | Current metrics compared to your ride average with +/- indicators |
| Left Leg Focus | All metrics for left leg (balance %, TE, PS) |
| Right Leg Focus | All metrics for right leg (balance %, TE, PS) |
| Climbing Mode | Grade percentage, elevation gain, and power - optimized for climbs |
| Sprint Mode | Extra large power display for sprints and intervals |
| Power Focus | Power as the primary metric with pedaling quality secondary |
| HR + Efficiency | Heart rate combined with TE/PS efficiency metrics |
| Symmetry Index | Balance shown as symmetry percentage (100% = perfect 50/50) |
| Compact Multi | Maximum pedaling information in minimum screen space |
All layouts are adaptive and look great at any size - from small data field slots to full-width displays.
🔄 Sync Reliability Improvements
- Auto-retry for failed syncs: Previously failed sync attempts are now automatically retried on each sync
- Visual feedback: Settings screen now shows the count of failed items in red
- More robust cleanup: Fixed a rare issue where the settings sync flag could get stuck
- Cloud settings validation: Added bounds checking to prevent invalid values
🏠 Home Screen Updates
- Score display: Your ride score is now prominently displayed with a color-coded quality label (Excellent/Great/Good/Improving/Needs Work)
- Zone distribution bar: Visual breakdown of time spent in optimal/attention/problem zones
📱 Layouts Screen Redesign
- Layouts are now organized into categories: Core, Analysis, Focus, and With Context
- Each layout has a preview card showing what it looks like
- Updated count: "19 layouts" (was "6 layouts")
🌐 Localization
All new strings have been translated to all 17 supported languages:
Arabic, Chinese, Danish, Dutch, English, French, German, Hebrew, Italian, Japanese, Korean, Polish, Portuguese, Russian, Spanish, Swedish, Ukrainian
Full Changelog
Added:
- 15 new data field layouts
- Score hero display on home screen
- Zone distribution bar on home screen
- Layout categories in layouts screen
- Failed sync count display in settings
- Cloud settings validation
Changed:
- Migrated all DataTypes from RemoteViews to Jetpack Glance
- Sync now includes failed items for automatic retry
- Layouts screen now shows 22 layouts in 4 categories
Fixed:
- Crash after 10-15 minutes of riding (RemoteViews action accumulation)
- isApplyingCloudSettings flag getting stuck on coroutine cancellation
- Failed syncs never being retried
Removed:
- Old RemoteViews-based DataType classes
- 35 XML layout files (replaced by Glance composables)
- 8 drawable XML files (colors now in code)
Full Changelog: v1.7.6...v1.8.0
KPedal v1.7.6
Bug Fixes
Multi-View DataType Fix
- Fix data fields freezing when multiple views of same DataType exist on screen
- Remove shared instance variables that caused state conflicts between views
- Each view now maintains independent state captured in closures
- Affects all 7 DataType layouts (Quick Glance, Balance, Efficiency, etc.)
Sensor Disconnect Handling
- Improved sensor disconnect detection and tracking
- New alert strings for sensor disconnection in all 17 languages
- Better state management in PedalingEngine and AlertManager
Improvements
Pedal Info Screen
- Enhanced pedal information display
- Better status indicators and connection details
Documentation
- README updated with Crash Recovery section
- Tech stack versions updated (Hono 4.11.3, Workers Types 4.20260101.0)
- Removed deprecated Chart.js reference
Technical Details
- 40 files changed, 1951 insertions, 257 deletions
- All 8 DataType classes refactored for multi-view support
- PedalMonitor and PedalingEngine improvements
KPedal v1.7.5
Bug Fixes
- Fix data fields freezing during rides
- Fix sync staying blocked if ride save fails
- Properly handle coroutine cancellation
KPedal v1.7.4
What's New
Crash Recovery System
- Ride data is now protected from app crashes and device restarts
- Checkpoints are saved every minute during rides
- Auto-restore on app restart (silent, no user interaction needed)
- Checkpoints automatically expire after 24 hours
Privacy Policy
- Updated to document crash recovery checkpoint data storage
- Translations for all 17 languages
Technical Details
- New Room database migration (v10 → v11)
- 23 unit tests for checkpoint logic
- Emergency save on service destroy
KPedal v1.7.3
What's New
Sync on App Launch
When you open the KPedal app, it now automatically syncs pending data to the cloud. This ensures rides recorded offline are uploaded as soon as possible.
How it works:
- App opens → checks if user is logged in
- Checks network availability
- Skips if ride is currently recording
- Respects 5-minute cooldown between syncs
- If pending rides/drills/achievements exist → syncs them
Sync Decision Logic
New SyncOnLaunchDecider class with clear priority chain:
- NotLoggedIn → skip (no account linked)
- Offline → skip (no network)
- Recording → skip (don't interrupt active ride)
- Cooldown → skip (synced less than 5 min ago)
- NothingPending → skip (nothing to upload)
- Sync → proceed with upload
Cooldown Periods
| Trigger | Cooldown |
|---|---|
| App launch sync | 5 minutes |
| Network restore sync | 60 seconds |
| Settings upload | 2 seconds |
Testing
Added 24 unit tests for SyncOnLaunchDecider:
- Skip conditions (5 tests)
- Sync decisions (4 tests)
- Cooldown calculations (6 tests)
- Priority of conditions (4 tests)
- Edge cases (5 tests)
Documentation
Updated README with:
- Sync decision flow diagram
- Cooldown periods table
- Pending data detection explanation
Full Changelog: v1.7.2...v1.7.3
KPedal v1.7.2
What's New
🔄 Auto-Sync on Network Restore
Rides now automatically sync when your Karoo reconnects to WiFi after an offline ride.
How it works:
- Start ride offline — Ride data is collected normally
- End ride — Saved locally with
syncStatus=PENDING - Arrive home — Karoo connects to WiFi
- NetworkCallback triggers — Auto-sync uploads pending rides
Safety mechanisms:
- 60-second cooldown between network-triggered syncs
- Sync blocked during active rides
- Retry on failure with next trigger
📊 Ride Sync Architecture
Karoo Recording → LiveDataCollector (1s samples)
↓
RideStateMonitor
↓ (ride ends)
Room DB (local)
syncStatus=PENDING
↓
SyncService
┌─────────────┼─────────────┐
Auto-sync NetworkCallback Manual
(ride end) (offline→online) button
└─────────────┴─────────────┘
↓
POST /sync/ride → Cloud
↓
syncStatus=SYNCED
Sync Triggers
| Trigger | When |
|---|---|
| Ride completion | Immediate sync after ride ends |
| Network restored | Auto-sync pending (60s cooldown) |
| App start | Sync pending + fetch settings |
| Manual button | Sync all pending + fetch settings |
Error Handling
| Error | Behavior |
|---|---|
| No network | Mark PENDING, retry on restore |
| HTTP 5xx | Retry 3x with backoff |
| HTTP 401 | Refresh token, retry |
| HTTP 403 | Device revoked, stop syncing |
Other Changes
- Fix ChallengeTest.kt for i18n migration
- Update hono 4.11.0 → 4.11.3
- Update @cloudflare/workers-types
KPedal v1.7.1
What's New
Bug Fixes
- Fixed data fields freezing during rides while data continued recording correctly
- A single exception in the view update loop no longer kills the entire polling loop
- Errors are now logged but the loop continues, preventing freeze
Affected DataTypes
- PowerBalance
- SingleBalance
- FullOverview
- QuickGlance
- BalanceTrend
- Efficiency
- Live
KPedal v1.7.0
What's New
RTL Support
- Hebrew and Arabic now display with correct right-to-left layout
Localization Fixes
- Fixed dates showing in system locale instead of selected app language
- Updated all screens to use correct locale for date formatting
DataType Translations
- Fixed Karoo data field labels not translating to selected language
- All 7 DataTypes now properly localized