Merged
Conversation
- Add 12x6 heatmap (72 hours) showing event density with red intensity - Show reverse-geocoded address instead of "Alert detected" in alert rows - Store lat/lon/address in SentryAlertLog (DB migration v10→v11) - Pass car coordinates from status poll into sentry alert log - Lazy reverse geocoding via Nominatim when history screen opens - Tapping a heatmap cell scrolls to the corresponding time in the list Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The car's sentry position is always the end of the last drive, so the geocode cache already has that grid cell. Check it first and only fall back to Nominatim API if the cache misses. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When a day spans two rows in the heatmap, the label is now offset down by half a cell height so it visually centers between both rows. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Same 12x6 grid (72 blocks), same color threshold (20+ = full red), but each block now covers 2 hours instead of 1, giving 6 days of history instead of 3. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The debug "Simulate Sentry Event" button now fetches the car's current lat/lon from the API so simulated alerts also get reverse-geocoded addresses. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Store the geofence name directly as the address at insert time, matching the normal code path. Reverse geocode via cache/Nominatim only kicks in for alerts without a geofence but with lat/lon. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Each row is now one calendar day (midnight-aligned), so Y axis labels are always clean day names (EEE d / Yesterday / Today). X axis now shows 00, 06, 12, 18 matching the 2h-per-block layout. Removed BoxWithConstraints and offset logic that are no longer needed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Labels now show 00, 06, 12, 18, 23 formatted with the system locale (24h or 12h AM/PM depending on user settings). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Use isSystemInDarkTheme() instead of hardcoded darkTheme=true. Heatmap empty cell color now derives from the palette so it adapts to light/dark mode. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Empty-to-red interpolation now starts from palette.onSurfaceVariant (theme-aware) and ends at StatusError, so the entire gradient adapts to light/dark mode. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Blocks for hours that haven't happened yet are now transparent (showing the background), distinguishing them from past hours with zero events. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tapping a heatmap cell now shows a tooltip with date, time range, and event count. Tapping the tooltip scrolls to that time in the history list. Tapping outside dismisses it. Tooltip uses Popup with focusable=true for proper dismiss behavior. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Tooltip is now wider than tall with 3 no-wrap lines: date, time range, event count - Selected cell gets a thick border highlight so it stays visible - Tooltip placed below the cell, or above if in the bottom half of the grid, so the selected block is never obscured Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Tooltip now measures its own height and subtracts it from the offset when placing above the cell, so it sits correctly above bottom-half rows and below top-half rows with a 4dp gap. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Popup coordinates are relative to the window, not the grid, causing wrong positioning. Now uses a Box overlay inside the grid's own Box, so boundsInParent() coordinates match the tooltip offset coordinate space. Adds an invisible scrim for outside-tap dismiss. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…ment" This reverts commit 6f99b56.
Instead of calculating coordinates manually, the Popup is now declared inside the tapped cell's Box. It auto-anchors to that cell using Alignment.TopCenter (above) or BottomCenter (below) based on row position. No coordinate math needed. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Custom PopupPositionProvider receives both anchor bounds and popup content size, enabling exact placement above or below the cell. Centers horizontally with window-edge clamping. No more guessing popup height or misaligned offsets. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Changes
latitude,longitude,addresscolumns tosentry_alert_logPopupPositionProvider, address in alert rowsTest plan
🤖 Generated with Claude Code