Commit Graph
108 Commits
Author SHA1 Message Date
Davide Ferrari 5da3fcc4c5 feat: show version number at bottom of Settings screen 2025-12-22 14:41:30 +01:00
Davide Ferrari 4c9751b329 chore: release v0.5.0 2025-12-22 14:36:48 +01:00
Davide Ferrari 24e00f40fa fix: recognize Nova19/Helix19 as same Highland M3 wheel (fallback to W38A) 2025-12-22 14:23:13 +01:00
Davide Ferrari 4f5deb9b0e feat: add Highland M3 Helix19 wheel detection (fallback to W38A) 2025-12-22 14:14:42 +01:00
Davide Ferrari 47c6f0a1d4 fix: show 'Model Y/3/S/X' when car name is empty 2025-12-22 13:44:20 +01:00
Davide Ferrari d4012e91b5 feat: add Model Y Juniper Crossflow19 wheel support
- Add Crossflow19 wheel mapping (WY19P) for Juniper MY
- Download 3 new car images with Crossflow19 wheels
- Update ASSETS.md documentation
- Fix app icon centering
2025-12-22 13:41:26 +01:00
Davide Ferrari 218205df40 feat: add MateDroid logo as app icon 2025-12-22 13:10:22 +01:00
Davide Ferrari edb1dac9a4 feat: add GitHub Actions workflow for release builds
- Build APK automatically when a release is published
- Upload APK as release asset
- Support custom keystore signing via GitHub secrets
- Fall back to debug signing when secrets not configured
2025-12-22 11:52:28 +01:00
Davide FerrariandClaude Opus 4.5 cc5222c216 fix: allow unsecure HTTP connections to TeslamateApi
Changed android:usesCleartextTraffic from false to true in the
AndroidManifest to allow HTTP (non-HTTPS) connections to Teslamate
servers running on local networks without TLS.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 10:06:14 +01:00
Davide FerrariandClaude Opus 4.5 a20cfe447e fix: apply default 7-day filter on charges/drives screens
Remove auto-load from setCarId to prevent race condition where
all data was loaded before the date filter was applied.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 00:00:20 +01:00
Davide FerrariandClaude Opus 4.5 81b70315b7 feat: add multi-car support
- Show dropdown arrow next to car name when multiple cars available
- Tap car name to open vehicle selector dialog
- Selecting a different car resets and refreshes all data
- Dialog shows all cars with checkmark on selected one

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 23:56:55 +01:00
Davide FerrariandClaude Opus 4.5 590f48761b refactor: redesign tire pressure display to be more compact
- Replace bulky car silhouette with minimalist Tesla outline
- Use colored dots (green=OK, yellow=warning) next to pressure values
- Reduce vertical height from 100dp to 56dp
- Cleaner layout with values on sides, car shape in center
- Add mockups/ to gitignore

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 23:42:13 +01:00
Davide FerrariandClaude Opus 4.5 b8a26406ef fix: filter 0 km drives and convert certificate to toggle
- Add distance filter: drives < 0.1 km are now also hidden
- Convert certificate checkbox to toggle switch for consistency
- Update info dialog to mention distance filter

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 23:22:48 +01:00
Davide FerrariandClaude Opus 4.5 9192e5e99c fix: use car color palette for location card
Match the styling of other dashboard cards by using the palette's
surface and accent colors instead of default Material colors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 23:19:22 +01:00
Davide FerrariandClaude Opus 4.5 a0bf3f2b98 feat: add display setting to show/hide short drives and charges
- Add "Show short drives / charges" toggle in settings (disabled by default)
- Hide drives under 1 minute and charges <= 0.1 kWh from lists when disabled
- Short entries still included in totals, averages, and chart data
- Add info tooltip explaining the setting behavior
- Remove "(less secure)" text from certificate option

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 23:15:16 +01:00
Davide Ferrari bd4db48b7e fix: add chevrons to nav buttons and fix pull-to-refresh
- Add chevron arrows to all 4 navigation buttons in Vehicle Info card
- Fix pull-to-refresh indicator staying visible after refresh completes
  (was caused by loadCarStatus launching separate coroutine)
2025-12-21 23:01:06 +01:00
Davide Ferrari 46669a7109 fix: make battery row more obviously tappable
- Add subtle background to battery info row
- Add chevron icon on right to indicate tappable
- Increase battery icon size slightly
- Improve padding and rounded corners
2025-12-21 22:57:03 +01:00
Davide Ferrari a506c9f6d4 refactor: redesign Vehicle Info card with navigation buttons
- Add rectangular navigation buttons inside Vehicle Info card (Charges, Drives, Mileage, Software)
- Each button shows icon, value, and label in horizontal layout
- Remove bottom quick links row - all navigation now inside card
- Keep tire pressure display inside Vehicle Info card
- Battery row in main card remains tappable for battery health
2025-12-21 22:53:14 +01:00
Davide Ferrari f6a95cdfc0 refactor: merge Vehicle Info card with bottom quick links
- Bottom buttons now show values: Charges, Drives, Mileage (odometer), SW
- Remove Battery button from bottom - tap battery % to go to battery health
- Make battery info row in main card tappable for battery health navigation
- Move tire pressure to separate card
- Remove unused VehicleInfoCard and CompactInfoItem components
2025-12-21 22:47:15 +01:00
Davide Ferrari c4383a27e8 fix: location card not showing address outside geofences
- Handle empty string geofence (API may return '' instead of null)
- Use takeIf { it.isNotBlank() } for proper fallback chain
- Update address during auto-refresh when location changes
- Always fall back to coordinates if no geofence or address available
2025-12-21 22:38:05 +01:00
Davide Ferrari 1c828bfc49 feat: add SteeringWheel icon for drives
- Add CustomIcons.SteeringWheel from Material Symbols (search_hands_free)
- Update Drives button on dashboard to use steering wheel icon
- Update DrivesScreen and DriveDetailScreen to use steering wheel icon
2025-12-21 22:35:53 +01:00
Davide Ferrari 2bad76749f feat: add custom Road icon from Material Symbols
- Create CustomIcons.kt with Road icon converted from Material Symbols SVG
- Update Mileage button on dashboard to use Road icon
- Update all mileage-related icons to use CustomIcons.Road
- Change 'Total' icon in MileageScreen to AllInclusive
2025-12-21 22:31:04 +01:00
Davide Ferrari 902049e266 feat: use AddRoad icon for mileage and DriveEta for drives
Note: 'Road' and 'SearchHandsFree' icons from fonts.google.com
are not available in Compose Material Icons Extended library.
Using AddRoad and DriveEta as alternatives.
2025-12-21 22:21:46 +01:00
Davide Ferrari af08610801 style: remove colons from Vehicle Info labels 2025-12-21 22:07:31 +01:00
Davide Ferrari 897b489aa6 style: right-align values in Vehicle Info card 2025-12-21 22:05:53 +01:00
Davide Ferrari 352c36fd6d style: add icons back to Vehicle Info card, left-align columns 2025-12-21 22:02:48 +01:00
Davide Ferrari 55336b0fd3 refactor: make Vehicle Info card more compact
Use horizontal 'Label: Value' format instead of vertical icons:
- Row 1: Odometer | Drives
- Row 2: Charges | SW (clickable)
- Divider + Tires section
2025-12-21 22:00:22 +01:00
Davide Ferrari 9500e3e73d feat: default to 7-day filter and show charges/drives counts
- Set 'Last 7 days' as default filter in Charges and Drives screens
- Add total charges and drives counts to Vehicle Info card on dashboard
- Reorganize card into 2x2 grid layout
2025-12-21 21:54:00 +01:00
Davide Ferrari 140322d1b3 fix: reduce X-axis label crowding on charts with many bars
Show maximum ~6 labels regardless of data size.
2025-12-21 21:42:19 +01:00
Davide Ferrari b4e8270719 feat: dynamic chart granularity based on date range
- 30 days or less: show daily bars
- 31-90 days: show weekly bars
- More than 90 days: show monthly bars

Applied to both Charges and Drives screens.
2025-12-21 18:38:03 +01:00
Davide Ferrari 23eb68f349 fix: reset chart selection when data changes to prevent crash 2025-12-21 18:29:08 +01:00
Davide FerrariandClaude Opus 4.5 cca78184d3 feat: add interactive bar charts with tooltips to all data screens
- Create shared InteractiveBarChart component with tap-to-show-value tooltip
- Add monthly bar charts to Charges and Drives screens
- Update Software Versions and Mileage screens to use InteractiveBarChart
- Replace DirectionsRun icons with Route icons in Mileage screens
- Add Y-axis labels showing max and min values on all charts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 18:24:23 +01:00
Davide Ferrari 83aad925e3 feat: add max/min Y-axis labels to Mileage screen bar charts
Shows the maximum value at the top (with 'k' suffix for thousands)
and 0 at the bottom for all bar charts in the Mileage screen:
- Yearly mileage chart
- Monthly mileage chart
- Daily mileage chart
2025-12-21 18:09:51 +01:00
Davide Ferrari d90bee530f feat: add max/min Y-axis labels to Software Versions bar chart
Shows the maximum update count at the top and 0 at the bottom
of the monthly updates chart for better readability.
2025-12-21 18:07:36 +01:00
Davide Ferrari 40d087412f fix: use drivingDetails.elevation instead of carGeodata.elevation
The elevation field is in DrivingDetails, not CarGeodata.
Also adds elevation display to LocationCard with metric/imperial units.
2025-12-21 17:58:41 +01:00
Davide FerrariandClaude Opus 4.5 63a0351a27 fix: improve tire pressure display colors and thresholds
- Normal pressure (2.7-3.2 bar / 39-46 PSI): uses main text color
- Out of bounds: yellow warning color
- Also respects Tesla's soft warning flags from API
- Car body now filled with 30% transparency instead of stroke
- Works with both bar and PSI display units (API returns bar)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:48:17 +01:00
Davide FerrariandClaude Opus 4.5 f6d82c3ba4 fix: position tires inside car body outline
Tires are now drawn inside the car rectangle at the corners,
like real wheel wells. Car body is now a stroke outline so
the colored tires are visible inside it.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:44:42 +01:00
Davide FerrariandClaude Opus 4.5 f60b59b4a2 feat: improve battery range icons, tire display, and plug indicator
Battery Health:
- Range card icons now use green (new) and yellow (now) colors
  to match the capacity cards styling

Dashboard:
- Redesigned tire pressure display with visual top-down car view
  - Canvas drawing shows car body with 4 colored tire rectangles
  - Tires are green when OK, yellow/orange when low pressure warning
  - Cleaner layout with values on each side
- Added plug icon next to locked status when vehicle is plugged in
  but not actively charging (charging state already shows power icon)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:41:52 +01:00
Davide FerrariandClaude Opus 4.5 99f9b92eac feat: add info tooltips to battery health screen
- Add clickable tooltips explaining Capacity, Degradation, Range,
  Current Charge, Range Information, and Estimated Total Capacity
- Replace generic Info icons with Route icons in range value cards
- Rename "Battery Status" to "Current Charge" for clarity
- Each tooltip provides clear explanations of what the metrics mean

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:33:13 +01:00
Davide FerrariandClaude Opus 4.5 e477b51ce5 chore: release v0.3.0
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 13:14:52 +01:00
Davide FerrariandClaude Opus 4.5 3016e4f6ed feat: improve charge/drive details and mileage screen
Charge Details:
- Show both start and end times (not just start)
- Add minimum voltage and current to Charger section

Drive Details:
- Show both start and end times (not just start)

Mileage Screen:
- Use car palette accent color for all bar graphs
- Apply consistent palette styling across year/month/day views

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 13:02:47 +01:00
Davide FerrariandClaude Opus 4.5 78836d00ab feat: add intermediate Y-axis labels to line graphs
Show values for all horizontal grid lines (not just min/max) to make
it easier to read peaks and valleys on Power, Voltage, Current,
Temperature, Battery, Speed, and Elevation charts.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 12:47:27 +01:00
Davide FerrariandClaude Opus 4.5 68b6265aaf feat: add non-charging state previews and make debug button conditional
- Add charging/not-charging state variations to PalettePreviewScreen
- Show different battery icons, states, and progress bars for each
- Make palette preview button visible only in debug builds
- Fix deprecated ArrowBack icon to use AutoMirrored variant

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 12:42:37 +01:00
Davide FerrariandClaude Opus 4.5 65792f7429 feat: enhance Software Versions screen with stats and charts
- Add overview card showing total updates, avg interval, oldest/newest
- Add bar chart showing updates per month (max 24 months for all time)
- Show update duration in hh:mm format (time to install update)
- Show days installed for each version (current uses now - install date)
- Remove hash suffixes from version numbers (e.g. "2025.44.25.1")
- Trophy badge now based on days installed, not update duration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 12:29:15 +01:00
Davide FerrariandClaude Opus 4.5 b777d0036e fix: correct UpdatesResponse model to match API structure
The TeslamateAPI returns updates nested as data.updates[], not data[].
Also fixed field name from 'id' to 'update_id'.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 12:10:13 +01:00
Davide FerrariandClaude Opus 4.5 ea80b16623 feat: add Software Versions screen with update history
- Add SoftwareVersionsScreen showing historic software updates
- Each version shows install date and duration installed
- Trophy badge highlights the longest-installed version
- Date filter chips: Last 6 months, Last year, All time
- Navigate by tapping Software item in Vehicle Info card
- Clickable InfoItem with visual feedback (primary color)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 12:04:08 +01:00
Davide Ferrari d227fa6f72 feat: improve Highland/Juniper detection using wheel type
- Add Glider18 and Nova18 to Highland M3 wheel patterns
- Add HIGHLAND_M3_WHEEL_TYPES set for detection
- Add JUNIPER_MY_WHEEL_TYPES set for detection
- Update determineModelVariant to check wheel type as well as color
- Now correctly detects Highland M3 with common colors (e.g., Pearl White)
  when using Highland-only wheels like Glider18 or Photon18
2025-12-21 11:50:11 +01:00
Davide Ferrari 441ba763c8 feat: add scale factors for consistent car image sizing
- Add getScaleFactor() to CarImageResolver for model-specific scaling
- Scale Highland M3 by 1.35x, Juniper MY by 1.25x, Model X by 1.4x
- Apply scale factors in DashboardScreen and PalettePreviewScreen
- Add Pearl White Model Y Legacy to palette preview for comparison
2025-12-21 11:42:06 +01:00
Davide Ferrari b974953cc6 feat: add Model S/X images and fix Highland image sizing
- Use STUD_3QTR view for all compositor requests for consistent car sizing
- Add Model S and Model X to asset fetcher (10 new images)
- Update CarImageResolver to support Model S/X
- Add Model Y Legacy, Juniper, Model S, and Model X to palette preview screen
- Total assets now: 73 images
2025-12-21 11:30:36 +01:00
Davide FerrariandClaude Opus 4.5 b5e863f13e feat: use transparent PNG for all car images
Update Tesla compositor to use bkba_opt=1 for Highland/Juniper models,
which returns transparent PNGs instead of opaque JPEGs.

Changes:
- fetch_tesla_assets.py: Set NEW_BKBA_OPT=1, output .png for all models
- CarImageResolver.kt: Remove .jpg extension logic, use .png everywhere
- Re-downloaded all 63 car images as transparent PNGs

The bkba_opt parameter controls background transparency:
- bkba_opt=1: Transparent PNG (now used for all)
- bkba_opt=2: Opaque JPEG with background

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 11:20:07 +01:00