Commit Graph
62 Commits
Author SHA1 Message Date
herel f2f5a15967 build: Bypass Homebrew JDK vendor check for desktop packaging
Compose Desktop's checkRuntime task rejects Homebrew JDK distributions
because their bundled runtimes may be broken. Disable the vendor check
to keep packaging with the current toolchain.

Refs JetBrains/compose-multiplatform#3107
2026-08-31 16:41:30 +02:00
herel 22c0a61e32 Merge pull request 'fix(desktop): Persist window size and position across restarts' (#2) from desktop-window-size into main
Reviewed-on: #2
2026-08-11 15:13:45 +00:00
herel 057be15822 fix(desktop): Persist window size and position across restarts
The desktop window always reset to its default size after restart
because no WindowState was persisted. Add WindowStateStorage backed
by multiplatform-settings (java.util.prefs on desktop) to save and
restore width, height, and position. Use snapshotFlow inside the
Window composition to persist changes continuously, with an explicit
Preferences.flush() to ensure values reach disk before exit.

Also add 'desktop-install' Makefile target to rebuild and copy the
app to /Applications/myicek.app.
2026-08-11 17:11:58 +02:00
herel 8f5d5d1ca8 feat: auto-launch app after USB install 2026-08-07 14:27:24 +02:00
herel cd58d58b8f chore: better Makefile 2026-08-06 17:58:12 +02:00
herel 3caa608d97 fix: show full date of birth instead of just the year 2026-08-06 17:57:18 +02:00
herel 4a439bfd2c fix: simplify player birth year to just the year (drop '(né ...)') 2026-08-06 17:56:46 +02:00
herel 4bc40e9128 fix: correct 'née' to 'né' and show position as trailing badge
- Fix French: 'née' → 'né' for player birth year
- Move position (F/D/G) from supportingContent to trailingContent as
  an AssistChip badge (secondaryContainer), matching the number avatar style
2026-08-06 17:55:51 +02:00
herel 77c8e65be7 fix: address final review findings
- Suppress 'Tous' option for Compte chip (account is required)
- Fix BadgedBox: wrap Joueurs text inside content lambda
- EventCard: left-only color stripe instead of full border
- AndroidManifest: 'MyIceK' -> 'MyIce'
2026-08-06 17:44:30 +02:00
herel 85e2391833 feat: add screen transitions and rebrand to MyIce
- AnimatedContent with fade transitions between screens (300ms)
- Desktop window title 'MyIce' (dropped 'K' codename)
2026-08-06 17:19:21 +02:00
herel c9841b6744 refactor: remove unused imports from EventDetailScreen
- Remove Spacer, height, items, FontWeight imports flagged during review
2026-08-06 17:18:44 +02:00
herel d03ac82a8a feat: redesign EventDetailScreen with icon back, styled info, ListItem players
- ArrowBack icon replaces TextButton('Retour')
- Info card with label/value rows and leading icons
- Players as ListItem with number avatar in primaryContainer circle
- Staff as ListItem with role AssistChip
- ErrorState shared component
- errorContainer for empty convocation warning
- French accents corrected
2026-08-06 17:17:37 +02:00
herel 3edf991cde feat: redesign ScheduleScreen with icon actions, filter chips, sticky date headers
- TopAppBar: Refresh/Logout icon buttons, 'Calendrier' title
- TypeFilterSegmented + FilterAssistChips replace collapsible filter card
- Account dropdown uses label instead of name
- 'Effacer' chip appears when filters are active
- Sticky date headers group events by day
- SkeletonCard loading state (4 shimmer cards)
- ErrorState/EmptyState shared components
- lastUpdated timestamp displayed at bottom
- French accents corrected throughout
2026-08-06 17:14:15 +02:00
herel 73b8e4480a feat: redesign LoginScreen with icon, branding, polished layout
- Sports icon in primaryContainer circle (80dp)
- 'MyIce' branding (dropped 'K' tech codename)
- 'Votre calendrier hockey' subtitle
- Login icon on connect button
- Centered vertical layout with proper spacing
2026-08-06 17:11:10 +02:00
herel c1c8e21ba3 feat: add FilterChips (SegmentedButton + AssistChip), remove FilterDropdown
- TypeFilterSegmented: 3-segment single-choice for Tous/Matchs/Entraînements
- FilterAssistChip: chip with dropdown for account/age/subgroup
- Selected chips highlighted with primaryContainer
- Note: ScheduleScreen update in next task resolves FilterDropdown reference
2026-08-06 17:08:45 +02:00
herel e5c0a1183d feat: redesign EventCard with color border, type badge, leading icons
- 4dp colored border from event.color (fallback primary)
- AssistChip badge: Match (teal) vs Entraînement (slate)
- Opponent line only for games, 'Entraînement' for practices
- Place and Schedule icons leading info lines
- Condensed time range via formatEventTimeRange
2026-08-06 17:07:11 +02:00
herel 06d2eceba3 refactor: remove unused imports from SkeletonCard
- Remove Spacer, Alignment, Color imports flagged during review
2026-08-06 17:06:33 +02:00
herel a7e3b52ca6 feat: add EmptyState, ErrorState, and SkeletonCard shared components 2026-08-06 17:04:53 +02:00
herel cf24f9c0e3 feat: add groupEventsByDate helper for schedule date headers 2026-08-06 17:03:24 +02:00
herel b7af237002 feat: add teal arctique theme with full M3 color scheme, typography, shapes, spacing tokens
- Complete light/dark color schemes (all M3 slots)
- Typography scale (headlineLarge through labelMedium)
- Shape tokens (small 8dp, medium 12dp, large 16dp)
- Dimens spacing object (xs through xxl)
- Add material-icons-extended dependency
2026-08-06 16:21:07 +02:00
herel be6e9d733a docs: add UI redesign implementation plan (10 tasks)
Plan covers: theme foundation, date grouping helper (TDD), shared
components, EventCard/FilterChips/LoginScreen/ScheduleScreen/
EventDetailScreen redesigns, App.kt transitions, desktop branding.
2026-08-06 16:19:32 +02:00
herel d4f43de933 docs: add UI redesign design spec (teal arctique, moderne & épuré)
Spec for complete visual overhaul of MyIce KMP app:
- Teal arctique color scheme (full Material 3 slots, light/dark)
- Typography scale, shape tokens, spacing tokens (Dimens)
- 4 screens redesigned (Login, Schedule, EventDetail + navigation)
- New components: SkeletonCard, EmptyState, ErrorState, FilterChips
- EventCard rework: color border, type badge, leading icons
- Sticky date headers in schedule list
- French accents corrected, hardcoded colors removed
- Branded as 'MyIce' (dropped tech codename 'K')

Refs: brainstorming session 2026-08-06
2026-08-06 15:35:22 +02:00
herel efaa93d907 chore: add targets to makefile 2026-08-06 15:28:20 +02:00
herel 418a8978f2 ref: Rename package ch.parano.myice to ch.parano.myicek
Complete the MyIceK rename by updating the Kotlin package from ch.parano.myice to ch.parano.myicek across all source sets (androidMain, commonMain, desktopMain, iosMain, commonTest), the build.gradle.kts (namespace, applicationId, mainClass, desktop packageName) and the iOS Info.plist bundle URL name. The myice:// OAuth scheme is kept unchanged as it depends on the backend.

Also add pull-to-refresh to ScheduleScreen using Material 3 PullToRefreshBox, replacing the manual loading overlay.
2026-08-06 15:20:47 +02:00
herel a2d5a57aec feat(ui): Rename app from MyIce to MyIceK
Update the app display name in all user-visible locations:
Android manifest label, desktop window title, login screen,
and schedule screen top bar.

Refs #2
2026-08-06 13:49:35 +02:00
herel ea15c0423c feat(ui): Display staff in single card with aligned columns
Replace per-staff cards with a single card listing all staff. Each
line shows the name on the left and role in muted color on the right,
matching the players section style.
2026-08-06 11:39:50 +02:00
herel 3dc5890a7a feat(ui): Display players in single card with aligned columns
Replace per-player cards with a single card listing all players. Each
player shows on one line: number, name, position, and birth year in
muted color. Add Makefile with android and desktop targets.
2026-08-04 12:24:51 +02:00
herel fd8fcb9b4c fix(ui): Wire system back gesture to in-app navigation
Add PlatformBackHandler (expect/actual) to intercept the back gesture
on Android via BackHandler, and enable OnBackInvokedCallback in the
manifest so the swipe-back gesture triggers onBack instead of exiting
the app.

Fixes the back gesture exiting to home from the event detail screen.
2026-08-04 12:02:30 +02:00
herel 1e5c2fd864 chore: remove mention of myice_mobile 2026-08-04 11:15:05 +02:00
herel 9524bc93ca feat: show nice dates in events 2026-08-04 11:14:51 +02:00
herel 1795337d01 Merge pull request 'fix(ui): Show event dates in card view' (#1) from fix/event-card-date-display into main
Reviewed-on: #1
2026-08-04 07:59:29 +00:00
herel a8905327f0 fix(ui): Show event dates in card view
The EventCard had a fixed 120dp height that clipped the date line.
Remove the height constraint so the card grows to fit all content,
and format ISO datetime strings into readable dd.MM.yyyy HH:mm format.
2026-08-04 09:57:47 +02:00
herel ed97b2a1f0 license: add GPL-3.0-or-later license
- Add full LICENSE file (GPL-3.0)
- Add SPDX headers to all 44 Kotlin source files
- Add SPDX headers to 3 iOS Swift/Info.plist files
- Update README.md and AGENTS.md with license info
2026-07-09 16:19:38 +02:00
herel 64ba5aea5d docs: add AGENTS.md with build commands, architecture, and conventions 2026-07-09 16:07:30 +02:00
herel de107a4295 docs: add README with project overview, build instructions, and architecture 2026-07-09 16:06:52 +02:00
herel 8c2de8b475 build: configure release signing for Android APK
Reads keystore credentials from keystore.properties (gitignored).
Keystore file (myice.keystore) is also gitignored.
2026-07-09 16:05:49 +02:00
herel 765fe51720 ui: make filter card collapsible with 2x2 grid layout
- Collapsed: compact row showing 'Filtres' + active filter count + expand arrow
- Expanded: 2x2 grid (Compte+Type, Age+Sous-groupe) halves vertical space
- Animated expand/collapse with AnimatedVisibility
- FilterDropdown now respects weight() modifier for row layout
2026-07-08 18:20:40 +02:00
herel c4bf05d728 feat: add app launcher icon from Flutter project 2026-07-08 18:16:33 +02:00
herel b291277d4f build: remove iosX64 target (unsupported by Compose MP 1.11.1) 2026-07-08 18:12:53 +02:00
herel cc4b0a1ecf fix: chunk large cached events to avoid Preferences 8KB limit on desktop
java.util.prefs.Preferences (desktop Settings backend) has an 8KB
per-value limit. Schedule JSON exceeds this. Now splits into 8000-char
chunks stored as cached_events_chunk_<account>_<i>, with a count key.
Maintains backward compat with old single-value format.
2026-07-08 18:12:19 +02:00
herel d93cae0816 fix: trigger loadAccounts() on auth and loadCachedSchedule() on account selection
The schedule screen was never loading data because no LaunchedEffect
called loadAccounts() when the user became authenticated. Now:
- App.kt: calls scheduleViewModel.loadAccounts() when authState becomes Authenticated
- ScheduleScreen.kt: calls loadCachedSchedule() when selectedAccount is set
2026-07-08 18:07:21 +02:00
herel b676c768fe fix: add back navigation from EventDetailScreen to Schedule 2026-07-08 18:02:14 +02:00
herel 28de93263b feat: wire up app root, navigation, and platform entry points
- Add App.kt root composable with state-based routing
  (Login -> Schedule -> EventDetail) driven by AuthViewModel.state
- Update MainActivity (Android), MainViewController (iOS), and
  Main.kt (Desktop) to host App() with their platform OAuthClient
- Add iOS Xcode source files (MyIceApp.swift, ContentView.swift)
  and Info.plist with myice:// URL scheme
- Delete Placeholder.kt
- Add kotlinx-coroutines-swing to desktopMain to provide
  Dispatchers.Main for viewModelScope (app crashed on desktop
  without it)
2026-07-08 18:00:57 +02:00
herel 88aa9de4ad fix: use French labels for refresh/logout buttons in ScheduleScreen 2026-07-08 17:56:01 +02:00
herel 38d420524a feat: add LoginScreen, ScheduleScreen, and EventDetailScreen
Add 3 Compose Multiplatform screens consuming Task 6 ViewModels and
Task 8 components:
- LoginScreen: MyIce title, login button, loading/error states
- ScheduleScreen: AppBar + filter card (4 dropdowns) + event list
  with loading/error/empty/refreshing states
- EventDetailScreen: AppBar + recap card + players/staff sections
  with amber empty-state card

Use TextButton for Refresh/Logout actions (material-icons-core not
available in this Compose Multiplatform setup). Guard setAccount call
against nullable onSelect callback.
2026-07-08 17:54:19 +02:00
herel 277517bf7e fix: make parseHexColor crash-safe, clean up imports in EventCard 2026-07-08 17:53:04 +02:00
herel af85605dd4 feat: add Material 3 theme and UI components (EventCard, FilterDropdown, LoadingIndicator) 2026-07-08 17:52:04 +02:00
herel 5aa264c2a7 fix: add Desktop OAuth timeout, restore iOS keyWindow filter 2026-07-08 17:51:27 +02:00
herel 00e7a7456f fix: address OAuth review findings (redirect_uri, binding, timeout, CRLF, DRY) 2026-07-08 17:46:40 +02:00
herel 5dc206ae72 feat: add platform OAuth implementations (Android, iOS, Desktop)
- AndroidOAuthClient: ACTION_VIEW + OAuthCallbackActivity (myice://callback)
- IosOAuthClient: ASWebAuthenticationSession with presentation context provider
- DesktopOAuthClient: local HTTP server + system browser
- AndroidManifest: register OAuthCallbackActivity intent filter
- Align Kotlin to 2.3.20 (required by Compose MP 1.11.1 klibs) and
  compileSdk to 36 (required by activity-compose 1.13.0); fix missing
  Text import and stray brace in placeholder iOS/Android entry points
2026-07-08 17:42:44 +02:00