Merged
Conversation
…tion This change introduces a persistent local feed powered by DataStore, allowing push notifications to be saved and displayed to users. - Add `FeedLocalRepository` using DataStore and Kotlin Serialization for local message storage. - Integrate push notification handling on Android (`FirebaseMessagingService`) and iOS (`AppDelegate`) to capture and persist incoming feed items. - Introduce `FeedItem.Message` type and `MessageCard` UI component for displaying dynamic feed content. - Refactor `GetFeedUseCase` to fetch directly from the repository, removing hardcoded venue-to-article mapping. - Add POST_NOTIFICATIONS permission request for Android 13+ in `MainActivity`. - Update `AgendaRow` to limit visible tags to 3 with an overflow indicator and refine chip styling. - Replace `MockFeedRepository` with `FeedLocalRepository` in the dependency injection module.
- Introduce `InfoScreen` to combine about information and venue details. - Update bottom navigation and routes to replace `VenueKey` and `AboutKey` with `InfoKey`. - Refactor `AboutScreen` components to be reusable within the new `InfoScreen`. - Adjust `VenuePager` styling and add modifier support. - Bump dependency versions for `androidx-wear-compose`, `compose`, `firebase-bom`, and `jetbrains-lifecycle`.
…d modernize UI - Replaces the `material-icons-extended` dependency with local XML drawables in `composeResources`. - Updates UI components to use Material 3 Expressive APIs, including `ElevatedCard`, `OutlinedCard`, and `FilledTonalButton`. - Migrates standard typography to `Emphasized` styles (e.g., `headlineSmallEmphasized`, `titleMediumEmphasized`). - Replaces custom tag surfaces with `SuggestionChip`. - Implements dynamic edge-to-edge support in `MainActivity` based on the user's theme preference. - Refactors icon usage to use `painterResource` instead of `ImageVector`.
martinbonnin
approved these changes
Mar 28, 2026
shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaRow.kt
Fixed
Show fixed
Hide fixed
There was a problem hiding this comment.
Pull request overview
This PR implements the “Info” tab merge (Venue + About), re-enables and modernizes the Feed UI, and adds end-to-end push-notification ingestion (FCM → local storage → Feed display) across Android and iOS, alongside broader UI visual polish (cards, chips, icons, typography).
Changes:
- Add local feed persistence + message rendering, and wire push notifications (Android + iOS) to store incoming feed messages.
- Merge Venue/About into a new “Info” tab and update navigation (5 tabs, selected/unselected icons).
- Replace Material Icons usage with composeResources vector drawables and update multiple screens to Material3 expressive components/typography.
Reviewed changes
Copilot reviewed 78 out of 78 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| shared/ui/src/jvmMain/kotlin/com/androidmakers/ui/common/SigninButton.jvm.kt | Switch sign-in icon to composeResources drawable. |
| shared/ui/src/androidMain/kotlin/com/androidmakers/ui/common/SigninButton.android.kt | Switch sign-in icon to composeResources drawable. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/venue/VenuePager.kt | Add modifier parameter + padding; adjust TabRow colors. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/sponsors/SponsorScreen.kt | Move to ElevatedCard + expressive typography. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerListScreen.kt | Replace Material Icons with composeResources drawables. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailsScreen.kt | Replace back icon with composeResources drawable. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/info/InfoScreen.kt | New unified Info screen combining About + (optional) Venue. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/feed/MessageCard.kt | New UI card for persisted push notification messages. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/feed/FeedViewModel.kt | Update dismissed-alert tracking implementation. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/feed/FeedScreen.kt | Render FeedItem.Message via MessageCard. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/feed/ArticleCards.kt | Convert article cards to ElevatedCard + resource-based icons/typography. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/feed/AlertBannerCard.kt | Replace warning/close icons with composeResources drawables. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/common/navigation/Routes.kt | Add InfoKey; keep legacy keys for serialization; update tab key detection. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/common/navigation/AVALayout.kt | Update bottom nav to 5 tabs with selected/unselected painter icons; route Info tab to InfoScreen. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/common/SocialIcons.kt | Replace “Public” icon with composeResources drawable. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/common/GraphQLFeedbackLayout.kt | Use expressive typography; opt-in expressive API. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailLayout.kt | Modernize session detail UI (cards, chips, icons, typography). |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaRow.kt | Update session rows + tag display (max 3 + “+N”), switch icons/buttons/cards. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaLayout.kt | Replace filter icons with composeResources drawables. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaColumn.kt | Use expressive typography for time separators; opt-in expressive API. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/about/AboutScreen.kt | Refactor About building blocks to internal + adopt updated Material3 components/icons. |
| shared/ui/src/commonMain/kotlin/com/androidmakers/ui/MainLayout.kt | Replace About tab with Info tab and wire feature flags type import cleanup. |
| shared/ui/src/commonMain/composeResources/values/strings.xml | Add “info” string. |
| shared/ui/src/commonMain/composeResources/values-fr/strings.xml | Add French “info” string. |
| shared/ui/src/commonMain/composeResources/drawable/ic_account_circle.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_arrow_back.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_auto_awesome.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_bookmark.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_bookmark_add.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_bookmark_added.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_calendar_month.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_calendar_month_outlined.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_clear.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_close.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_code.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_dark_mode.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_dynamic_feed.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_dynamic_feed_outlined.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_favorite.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_favorite_border.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_filter_list.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_gavel.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_groups.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_groups_outlined.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_info.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_info_outlined.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_keyboard_arrow_right.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_light_mode.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_location_on.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_person.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_play_arrow.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_public.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_question_answer.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_schedule.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_search.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_settings_brightness.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_share.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/ic_warning.xml | Add vector icon resource. |
| shared/ui/src/commonMain/composeResources/drawable/0.xml | Add (likely accidental) vector resource file with invalid name. |
| shared/ui/build.gradle.kts | Remove material-icons-extended dependency. |
| shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/repo/FeedRepository.kt | Add addFeedItem API for persisting incoming items. |
| shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/model/FeedItem.kt | Add FeedItem.Message and MessageType. |
| shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/model/FeatureFlags.kt | Reformat FeatureFlags class definition. |
| shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/GetFeedUseCase.kt | Simplify use case to return repository feed only (remove venue merging). |
| shared/domain/src/commonTest/kotlin/fr/androidmakers/domain/interactor/GetFeedUseCaseTest.kt | Update tests for new feed-only behavior and message items. |
| shared/domain/src/commonTest/kotlin/fr/androidmakers/domain/interactor/FakeVenueRepository.kt | Remove unused venue fake after feed/venue decoupling. |
| shared/domain/src/commonTest/kotlin/fr/androidmakers/domain/interactor/FakeFeedRepository.kt | Implement addFeedItem for tests. |
| shared/di/src/commonMain/kotlin/fr/androidmakers/di/DataModule.kt | Bind FeedRepository to new FeedLocalRepository. |
| shared/di/src/iosMain/kotlin/fr/androidmakers/di/FeedHelper.kt | New iOS helper to store feed items from push payloads into shared repository. |
| shared/data/src/commonMain/kotlin/fr/androidmakers/store/local/FeedLocalRepository.kt | New DataStore-backed local feed storage implementation. |
| shared/data/src/commonMain/kotlin/fr/androidmakers/store/mock/MockFeedRepository.kt | Replace static mock feed with in-memory mutable list + addFeedItem. |
| shared/data/src/commonMain/kotlin/fr/androidmakers/store/graphql/VenueGraphQLRepository.kt | Minor formatting adjustments. |
| shared/data/build.gradle.kts | Add Kotlin serialization plugin + JSON dependency for feed persistence. |
| iosApp/AndroidMakers/AppDelegate.swift | Add APNs/FCM hooks and persist incoming notification payloads into shared feed storage. |
| androidApp/src/main/java/fr/paug/androidmakers/messaging/AndroidMakersMessagingService.kt | Persist incoming FCM payloads into shared feed storage and improve notification display. |
| androidApp/src/main/java/fr/paug/androidmakers/MainActivity.kt | Request notification permission (Android 13+) and adjust edge-to-edge styling based on theme. |
| androidApp/build.gradle.kts | Remove material-icons-extended dependency. |
| gradle/libs.versions.toml | Bump versions and add kotlinx-serialization-json dependency. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
shared/ui/src/commonMain/kotlin/com/androidmakers/ui/feed/AlertBannerCard.kt
Show resolved
Hide resolved
shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaRow.kt
Outdated
Show resolved
Hide resolved
shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailLayout.kt
Outdated
Show resolved
Hide resolved
shared/ui/src/commonMain/kotlin/com/androidmakers/ui/feed/MessageCard.kt
Show resolved
Hide resolved
shared/ui/src/commonMain/kotlin/com/androidmakers/ui/feed/FeedViewModel.kt
Outdated
Show resolved
Hide resolved
shared/data/src/commonMain/kotlin/fr/androidmakers/store/local/FeedLocalRepository.kt
Show resolved
Hide resolved
Introduces `BottomSheetSceneStrategy` to handle navigation entries as modal overlays using Navigation3. Updates the application layout to provide a responsive experience: session details now appear in a bottom sheet on narrow screens and remain in the detail pane on wide screens. - Added `BottomSheetSceneStrategy` and `BottomSheetScene` for Material3 `ModalBottomSheet` integration. - Updated `AVALayout` to toggle between `ListDetailSceneStrategy` and `BottomSheetSceneStrategy` based on screen size. - Added `showTopBar` and `showBackButton` configuration to `SessionDetailLayout`. - Refactored `AgendaRow` icon logic for better readability. - Removed unused `0.xml` vector resource.
- Added `dismiss` string resource to `strings.xml`. - Updated `AlertBannerCard` to use `stringResource` for the close icon's content description instead of a hardcoded string.
…TagChip - Replaces `SuggestionChip` with a custom `Surface` and `Text` layout in `AgendaRow` and `SessionDetailLayout` to improve styling control. - Enables the Feed navigation item in `AVALayout` by commenting out the feature flag check.
12b8b09 to
0ce447a
Compare
- Add optional `imageUrl` to `FeedItem.Message` domain model - Update `MessageCard` UI to display images using Coil - Parse `feed_image_url` from FCM payloads in `AndroidMakersMessagingService` - Update local persistence and repositories to handle image metadata - Supplement feed with mock/hardcoded article items for testing
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.
🔔 Notifications push dans le fil d'actualité
Les messages envoyés via Firebase (FCM) sont maintenant reçus, sauvegardés et affichés dans l'onglet Feed de l'application.
Les notifications contiennent un titre, un corps de texte et un type (Info, Alerte, Annonce)
Chaque message reçu est stocké localement et affiché avec un badge coloré et un horodatage relatif
Fonctionne sur iOS et Android, en premier plan comme en arrière-plan
Les données de test (mock) ont été supprimées — le feed est désormais 100 % alimenté par les vraies notifications
🗂️ Fusion des onglets Venue et About → "Info"
La barre de navigation passe de 6 à 5 onglets pour simplifier l'expérience utilisateur.
Un nouvel onglet "Info" regroupe les informations sur le lieu (Venue) et la page À propos (About)
L'onglet Feed, précédemment masqué, est de nouveau visible dans la navigation
🎨 Modernisation visuelle de l'interface
Plusieurs ajustements visuels pour une interface plus cohérente et plus légère.
Les icônes de navigation affichent désormais une version pleine quand l'onglet est sélectionné, et en contour sinon
Les tags sur les sessions de l'agenda ont une couleur plus douce (exit le rouge vif)
Maximum 3 tags visibles par session, avec un indicateur "+N" si davantage
Quelques composants graphiques modernisés (cartes, boutons, chips)