Skip to content

Bugfix/1.3.8#945

Merged
tunjid merged 85 commits intoreleasesfrom
bugfix/1.3.8
Feb 3, 2026
Merged

Bugfix/1.3.8#945
tunjid merged 85 commits intoreleasesfrom
bugfix/1.3.8

Conversation

@tunjid
Copy link
Owner

@tunjid tunjid commented Feb 3, 2026

No description provided.

tunjid and others added 30 commits January 31, 2026 09:05
Reverese logo leg rotation angle
Make sure nessages with records that have no embeds are saved
tunjid and others added 27 commits February 2, 2026 11:22
Split GalleryScreen methods into separate files
Lock gallery shared elements to items in the viewport
Add DragToPopState as a receiver in shouldDragToPop
@gemini-code-assist
Copy link

Summary of Changes

Hello @tunjid, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces significant refactoring to the Timeline model and Gallery screen, enhancing type safety, code organization, and user experience. The changes focus on improving how content sources are represented, how media is displayed in the Gallery screen, and how navigation actions are handled for post interactions.

Highlights

  • Timeline Source Refactor: The Timeline model now uses a Source interface to represent different content sources (Following, Record, Profile), replacing the previous sourceId string. This change improves type safety and code organization.
  • Gallery Screen Improvements: The Gallery screen has been refactored to use vertical and horizontal pagers for media display, improving navigation and performance. Drag-to-pop functionality has also been enhanced.
  • Post Interaction Navigation: Navigation actions for post interactions now include the timeline source and query data, allowing for a more contextual and seamless navigation experience.
  • Media Handling: The media handling in gallery has been improved to account for both photos and videos, and handles video playback more effectively.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • data/core/src/commonMain/kotlin/com/tunjid/heron/data/repository/TimelineRepository.kt
    • Modified TimelineQuery to use Timeline.Source instead of Timeline
    • Updated timelineItems function to handle Timeline.Source
    • Updated OfflineTimelineRepository to use Timeline.Source for various timeline types
  • data/core/src/commonMain/kotlin/com/tunjid/heron/data/utilities/multipleEntitysaver/SaveFeedViewPost.kt
    • Modified add function to use Timeline.Source instead of Timeline
  • data/core/src/commonMain/kotlin/com/tunjid/heron/data/utilities/saveMessageView/SaveMessageView.kt
    • Fixed an error in the upstream lexicon where only one embed should be in a record.
  • data/core/src/commonMain/kotlin/com/tunjid/heron/data/utilities/writequeue/Writable.kt
    • Added import for sourceId
  • data/models/src/commonMain/kotlin/com/tunjid/heron/data/core/models/CursorQuery.kt
    • Made CursorQuery.Data implement UrlEncodableModel
  • data/models/src/commonMain/kotlin/com/tunjid/heron/data/core/models/TimelineItem.kt
    • Refactored Timeline to use a Source interface for different content sources
    • Added Timeline.Source sealed interface and its implementations (Following, Record, Profile)
    • Updated Timeline.Home to use Source.Reference
    • Added sourceId extension property to Timeline and Source
    • Removed Timeline.StarterPack
  • feature/auth/src/commonMain/kotlin/com/tunjid/heron/signin/di/Bindings.kt
    • Updated AppBarTitle to use a title parameter
  • feature/compose/src/commonMain/kotlin/com/tunjid/heron/compose/di/Bindings.kt
    • Removed imePadding and moved padding to ComposeScreen
  • feature/feed/src/commonMain/kotlin/com/tunjid/heron/feed/FeedScreen.kt
    • Added import for sourceId
    • Updated recordDestination to include timeline source and query data
  • feature/feed/src/commonMain/kotlin/com/tunjid/heron/feed/State.kt
    • Modified State to use timeline.source instead of timeline
  • feature/gallery/src/commonMain/kotlin/com/tunjid/heron/gallery/GalleryScreen.kt
    • Refactored GalleryScreen to use vertical and horizontal pagers
    • Implemented drag-to-pop functionality
    • Removed unused imports and composables
    • Added HorizontalItems composable for media display
    • Added Indicator composable for pager navigation
  • feature/gallery/src/commonMain/kotlin/com/tunjid/heron/gallery/GalleryViewModel.kt
    • Modified loadPostMutations to use currentState
    • Added verticalTimelineMutations to handle timeline state
    • Added galleryTimelineStateHolder to create TimelineStateHolder for gallery
    • Removed profileRelationshipMutations
  • feature/gallery/src/commonMain/kotlin/com/tunjid/heron/gallery/State.kt
    • Modified State to use Timeline.Source and CursorQuery.Data
    • Added canScrollVertically and cursorData properties
    • Added timelineStateHolder property
    • Modified GalleryItem to include media list and sharedElementPrefix
    • Added toGalleryMedia extension function for Embed
  • feature/gallery/src/commonMain/kotlin/com/tunjid/heron/gallery/di/Bindings.kt
    • Removed dragToPop modifier from GalleryScreen
  • feature/gallery/src/commonMain/kotlin/com/tunjid/heron/gallery/ui/Downloads.kt
    • Added ImageDownloadState and DownloadButton composable
  • feature/gallery/src/commonMain/kotlin/com/tunjid/heron/gallery/ui/Media.kt
    • Added GalleryImage and GalleryVideo composables
    • Added MediaOverlay and MediaPoster composables
    • Added GalleryText and MediaInteractions composables
    • Added VideoPlayerControls and MuteButton composables
  • feature/gallery/src/commonMain/kotlin/com/tunjid/heron/gallery/ui/PagerIndicator.kt
    • Added Indicator composable for pager navigation
  • feature/gallery/src/commonMain/kotlin/com/tunjid/heron/gallery/ui/PagerStates.kt
    • Added PagerStates class for managing pager states
  • feature/home/src/commonMain/kotlin/com/tunjid/heron/home/HomeScreen.kt
    • Added import for sourceId
    • Updated HomeTimeline to include timeline source and query data
  • feature/home/src/commonMain/kotlin/com/tunjid/heron/home/HomeTabs.kt
    • Added import for sourceId
  • feature/list/src/commonMain/kotlin/com/tunjid/heron/list/ListScreen.kt
    • Added import for sourceId
    • Updated ListTimeline to include timeline source and query data
  • feature/list/src/commonMain/kotlin/com/tunjid/heron/list/State.kt
    • Modified State to use timeline.source instead of timeline
  • feature/messages/src/commonMain/composeResources/values/strings.xml
    • Added title string
  • feature/messages/src/commonMain/kotlin/com/tunjid/heron/messages/di/Bindings.kt
    • Updated AppBarTitle to use a title parameter
    • Added AnimatedContent for search bar visibility
  • feature/moderation/src/commonMain/kotlin/com/tunjid/heron/moderation/di/Bindings.kt
    • Updated AppBarTitle to use a title parameter
  • feature/notification-settings/src/commonMain/kotlin/com/tunjid/heron/notificationsettings/di/Bindings.kt
    • Updated AppBarTitle to use a title parameter
  • feature/notifications/src/commonMain/composeResources/values/strings.xml
    • Added title string
  • feature/notifications/src/commonMain/kotlin/com/tunjid/heron/notifications/di/Bindings.kt
    • Updated AppBarTitle to use a title parameter
  • feature/post-detail/src/commonMain/composeResources/values/strings.xml
    • Added title string
  • feature/post-detail/src/commonMain/kotlin/com/tunjid/heron/postdetail/PostDetailScreen.kt
    • Updated recordDestination to include timeline source and position
    • Updated avatarSharedElementKey to take into account profile
  • feature/post-detail/src/commonMain/kotlin/com/tunjid/heron/postdetail/State.kt
    • Added source and timelinePosition properties
    • Modified State to use Timeline.Source and CursorQuery.Data
  • feature/post-detail/src/commonMain/kotlin/com/tunjid/heron/postdetail/di/Bindings.kt
    • Updated AppBarTitle to use a title parameter
  • feature/posts/src/commonMain/kotlin/com/tunjid/heron/posts/di/Bindings.kt
    • Updated AppBarTitle to use a title parameter
  • feature/profile-avatar/src/commonMain/kotlin/com/tunjid/heron/profile/avatar/AvatarScreen.kt
    • Added drag-to-pop functionality
  • feature/profile-avatar/src/commonMain/kotlin/com/tunjid/heron/profile/avatar/di/Bindings.kt
    • Removed dragToPop modifier from AvatarScreen
  • feature/profile/src/commonMain/kotlin/com/tunjid/heron/profile/ProfileScreen.kt
    • Added import for sourceId
  • feature/search/src/commonMain/kotlin/com/tunjid/heron/search/ui/searchresults/PostSearchResults.kt
    • Added isMainPost parameter to PostAction.OfPost
  • feature/settings/src/commonMain/kotlin/com/tunjid/heron/settings/di/Bindings.kt
    • Updated AppBarTitle to use a title parameter
  • scaffold/src/commonMain/kotlin/com/tunjid/heron/scaffold/navigation/NavigationMutator.kt
    • Added import for Timeline
    • Updated galleryDestination to include otherModels
  • scaffold/src/commonMain/kotlin/com/tunjid/heron/scaffold/scaffold/AppLogo.kt
    • Changed legRotation to negative value
  • scaffold/src/commonMain/kotlin/com/tunjid/heron/scaffold/scaffold/DragToPop.kt
    • Implemented drag-to-pop functionality using scrollable2D and pointerInput
    • Removed dragToDismiss dependency
  • scaffold/src/commonMain/kotlin/com/tunjid/heron/scaffold/scaffold/PaneTopAppBar.kt
    • Added modifier parameter to AppBarTitle
  • ui/timeline/src/commonMain/kotlin/com/tunjid/heron/timeline/state/Timeline.kt
    • Modified TimelineQuery to use source instead of timeline
    • Updated TimelineQuery functions to use copy instead of creating new instances
  • ui/timeline/src/commonMain/kotlin/com/tunjid/heron/timeline/ui/PostActions.kt
    • Added isMainPost parameter to PostAction.OfPost and PostAction.OfMedia
  • ui/timeline/src/commonMain/kotlin/com/tunjid/heron/timeline/ui/TimelineItem.kt
    • Added isMainPost parameter to Post
    • Modified TimelineItem composable to use when instead of when
  • ui/timeline/src/commonMain/kotlin/com/tunjid/heron/timeline/ui/post/Post.kt
    • Added isMainPost parameter to PostData and rememberUpdatedPostData
  • ui/timeline/src/commonMain/kotlin/com/tunjid/heron/timeline/utilities/RecordExt.kt
    • Added isMainPost parameter to PostAction.OfPost
  • ui/timeline/src/commonMain/kotlin/com/tunjid/heron/timeline/utilities/TimelineExt.kt
    • Added import for id
    • Modified sharedElementPrefix to use source.id instead of sourceId
Activity
  • Refactored Timeline model to use Source interface
  • Improved Gallery screen with vertical and horizontal pagers
  • Enhanced drag-to-pop functionality
  • Updated navigation actions for post interactions
  • Modified loadPostMutations to use currentState
  • Added verticalTimelineMutations to handle timeline state
  • Added galleryTimelineStateHolder to create TimelineStateHolder for gallery
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a significant refactoring of the data models, primarily by encapsulating timeline sources into a new Timeline.Source sealed interface. This change simplifies query objects and improves type safety throughout the data layer.

A major feature enhancement is the complete overhaul of the gallery screen. It now supports vertical scrolling between different posts' media within a timeline, using a VerticalPager. This includes a sophisticated custom dragToPop implementation to handle gestures gracefully alongside vertical and horizontal scrolling. The gallery UI has been broken down into smaller, reusable components for better maintainability.

Additionally, the PR includes several minor UI refinements, such as improving animations in the search bar and standardizing the use of named arguments for composables like AppBarTitle. The changes are well-structured and significantly improve both the codebase architecture and user experience.

@tunjid tunjid merged commit 4ad54d9 into releases Feb 3, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant