- 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
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>
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>
- 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>
- 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>
- 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>
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>
- 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>
- 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)
- 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
- 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
- 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
- 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
- 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
Note: 'Road' and 'SearchHandsFree' icons from fonts.google.com
are not available in Compose Material Icons Extended library.
Using AddRoad and DriveEta as alternatives.
- 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
- 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>
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
- 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>
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>
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>
- 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>
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>
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>
- 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>
- 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>
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>
- 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>
- 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
- 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
- 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
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>