- Add minute/second abbreviations and kotlin.time-based relative time formatter
- Introduce FastPreview and update previews to use AppTheme with dark/dynamic colors
- Refactor attachments preview grid & waveform to use ImmutableList and reduce recompositions
- Tweak message bubble reply styling and swipe-to-reply animation/haptics
- Add Compose Stability Analyzer plugin and enable it in debug builds
- Cache shared images by sha256 and improve share intent/chooser text
- Minor UX polish (e.g., “No views”) and immutability annotations
This commit upgrades the project's build system and refactors the build logic for better maintainability and alignment with modern practices.
The Gradle version has been updated from 8.14.2 to 9.3.0, and the Android Gradle Plugin (AGP) has been upgraded to version 9.0.0. This required migrating the build logic to use the new `com.android.build.api.dsl` interfaces instead of the deprecated `com.android.build.gradle` ones.
Key changes:
- Upgraded Gradle to `9.3.0`.
- Upgraded Android Gradle Plugin to `9.0.0`.
- Updated various dependencies including Kotlin, Compose BOM, Chucker, and serialization.
- Removed the explicit `kotlin-android` plugin application, as it's now handled by AGP.
- Migrated build convention plugins to use the new AGP DSL APIs.
- Commented out the custom APK naming logic in `app/build.gradle.kts`.
- Added new `gradle.properties` flags for build configuration.
- Corrected the namespace in `core/model` from `datastore` to `model`.
This commit refactors the UI composition logic by extracting it from `MainActivity` into a new, dedicated `RootScreen` composable. This improves the separation of concerns and simplifies `MainActivity`.
Additionally, a bug has been fixed where a replied-to message would incorrectly display the author of the parent message instead of its own author.
Key changes:
- Moved theme setup, permission handling, Long-Poll/Online service management, and navigation graph hosting into the new `RootScreen.kt`.
- `MainActivity` is now significantly simplified, delegating its UI composition to `RootScreen`.
- Corrected the user and group assignment for `replyMessage` in `MessagesRepositoryImpl` to ensure the correct author is displayed.
- Introduced `OnlineFriendsViewModel` to the `FriendsRoute` to separate the logic for online friends.
- Replaced `List` with a custom `ImmutableList` for `photoViewerInfo` state to improve Compose stability.
This commit refactors the PhotoViewScreen to be displayed as a Dialog instead of a separate navigation destination.
Key changes:
- Introduced `PhotoViewDialog` composable that wraps `PhotoViewRoute` in a `FullScreenDialog`.
- Modified `RootScreen` to use `PhotoViewDialog` for displaying images.
- Updated `PhotoViewViewModelImpl` to handle loading state and display a loader while downloading images.
- Made `Loader` and `ContainedLoader` colors configurable.
- Adjusted `PhotoViewScreen` UI:
- Set background to translucent black.
- Updated TopAppBar background color and icon tints.
- Improved vertical drag gesture for dismissing the viewer.
- Made `VkUserData.LastSeen.platform` nullable.
- Removed unused navigation functions related to the old PhotoViewScreen.
This commit introduces "Share" and "Open in..." actions to the `PhotoViewScreen`, allowing users to share images via other apps or open them in external viewers.
**Key changes:**
- **PhotoViewer:**
- Added "Share" and "Open in..." options to the `PhotoViewScreen` dropdown menu.
- `PhotoViewViewModel`:
- Implemented `onShareClicked()` and `onOpenInClicked()` to handle these new actions.
- Added `shareRequest` StateFlow to manage image sharing intents.
- Introduced `downloadAndStoreImageToCache()` to download and cache images for sharing.
- `onImageShared()` resets `shareRequest` after sharing.
- Updated `TopBar` to include the new menu items.
- Added string resources for "Open in…" and "Share".
- **Reply UI:**
- `Reply.kt`: Title and summary text now use `TextOverflow.Ellipsis` to prevent long text from breaking the layout.
- **API Model:**
- `MessagesResponse.kt`: Added `MessagesMarkAsImportantResponse` data class to handle the response for marking messages as important.
- **Data Layer:**
- `MessagesRepositoryImpl`: Updated `markAsImportant` to correctly map the API response using `MessagesMarkAsImportantResponse`.
- **Minor:**
- `README.md`: Updated feature checklist for external viewer.
- `ApplicationModule.kt`: Added experimental Coil API opt-in.
This commit moves the `minSdk`, `targetSdk`, `compileSdk`, `versionCode`, and `versionName` definitions from `gradle/libs.versions.toml` directly into the relevant build files (`app/build.gradle.kts` and convention plugins).
Additionally, the following dependencies were updated:
- Gradle wrapper from 8.12 to 8.14.2
- KSP from 2.1.21-2.0.2 to 2.2.0-2.0.2
- ModuleGraph from 2.8.0 to 2.9.0
The `fast-android-test` and `fast-jvm-library` plugin aliases were also commented out in `gradle/libs.versions.toml`.
This commit introduces `FullScreenContainedLoader` and replaces usages of `FullScreenLoader` where appropriate.
It also updates several composables to use `rememberUpdatedState` for lambda parameters to ensure the latest versions are used.
Additionally, the following changes are included:
- Add a setting to show/hide the attachment button in the chat input bar.
- Implement navigation to `PhotoViewScreen` when a photo attachment is clicked in a message.
- Add "Copy link" and "Copy image" actions to `PhotoViewScreen`.
- Remove unused settings and their corresponding logic from `SettingsViewModel` and `UserSettings`.
* Bump haze version to 1.6.0.
* Blur now works on android 11 and older
* Add "Sign up" and "Forgot password?" links to the auth screen.
* Add logic to toggle dynamic colors on logo click in the auth screen (Android 12+).
* new attachments in messages history - photo, video, audio, file, link
* improve attachments in messages history and adjusted font size for logo's text in auth screen
* audio duration, file preview and url preview are now visible in attachments in messages history screen
* make MessageBubble width adapt to attachments container width
* topbar back icon crossfade animation
* implement rich text for message input
* handle click and long click on attachments
* added click and long click handlers for attachments in message bubbles
* enabled opening photos, files, and links when clicked.
* implemented basic long-click logging for photos.
* handled back press to return to Conversations from other tabs.
* corrected the logic for filtering and selecting video images.
* updated string resources for attachments, including a new "Clip" string.
* make MessageBubble mention text underline on out messages
* Bump VK Api version to 5.238
* Implemented new authorization flow (at the moment, without auto re-requesting token)
* Add support for sticker pack preview attachments
* Bump LongPoll to version 19
* Improved messages handling
* Fixed coloring issues
* Cache improvements
* Archive screen with full functionality
* Recomposition fixes
* Markdown support for messages bubbles
* Adjust app name font size based on screen width
* Navigation related improvements
* Add logout functionality
* pagination in chat fixed
* other fixes and improvements
* fixed visual bug in progress bar in chat history
* Refactor: Enhance conversations and friends features
- In `ConversationsScreen`, removed `isNeedToScrollToTop` and `onScrolledToTop`, and refactored toolbar container color logic. Added `NoItemsView` for empty conversation lists.
- In `MainGraph`, added `onMessageClicked` for navigation to message history.
- In `ApiEvent`, introduced `parseOrNull` for handling unknown event types.
- In `ConversationsViewModel`, removed `scrollToTop` logic and refactored error handling.
- In `FriendsViewModel`, refactored error handling and introduced `onErrorConsumed` and `handleError`.
- In `FriendItem`, added an icon button to initiate sending a message to a friend.
- In `strings.xml`, added or updated strings for session expiration, log out, refreshing, and empty friend lists.
- In `RootScreen`, added `onMessageClicked` for navigating to messages.
- In `FriendsList`, added `onMessageClicked` for handling message clicks.
- In `MainScreen`, removed unused `MutableSharedFlow`.
- In `FriendsScreen`, added support for showing errors, added `onMessageClicked`, and replaced `hazeChild` with `hazeEffect` and `hazeSource`.
- In `FriendsNavigation`, added `onMessageClicked` for handling message clicks.
- In `ConversationsNavigation`, removed the unused `scrollToTopFlow` parameter.
- In `ErrorView`, added text alignment.
- In `NoItemsView`, added support for a button and custom text.
- In `LongPollUpdatesParser`, replaced try-catch with `parseOrNull`.
* Chat creation feature (#138)
* - read indicator, edit status and time for message in messages history
* message sending status
* Bump haze from 1.1.1 to 1.2.0 (#105)
* Bump org.jetbrains.kotlinx:kotlinx-serialization-json from 1.7.3 to 1.8.0 (#104)
* update gradle wrapper
* Bump agp from 8.7.3 to 8.8.0 (#106)
* Bump com.jraska.module.graph.assertion from 2.7.1 to 2.7.3 (#109)
* Bump haze from 1.2.0 to 1.2.2 (#111)
* Bump koin from 4.0.1 to 4.0.2 (#112)
* little improvement
* Bump kotlin from 2.1.0 to 2.1.10 (#113)
* Bump androidx.compose:compose-bom from 2024.12.01 to 2025.02.00 (#115)
* Bump androidx.navigation:navigation-compose from 2.8.5 to 2.8.7 (#119)
* Bump haze from 1.2.2 to 1.3.1 (#118)
* Bump ksp from 2.1.0-1.0.29 to 2.1.10-1.0.30 (#116)
* Bump agp from 8.8.0 to 8.8.1 (#117)
* Bump com.google.accompanist:accompanist-permissions (#121)
* Rename the app's namespace and applicationId to `dev.meloda.fastvk`, and update the package name in `ACTION_MANAGE_UNKNOWN_APP_SOURCES` intent. Remove unnecessary `onLowMemory` method in the `OnlineService`.
* Bump com.jraska.module.graph.assertion from 2.7.3 to 2.8.0 (#126)
* Bump ksp from 2.1.10-1.0.30 to 2.1.10-1.0.31 (#125)
* Bump haze from 1.3.1 to 1.4.0 (#124)
* Bump agp from 8.8.1 to 8.8.2 (#123)
* Bump androidx.navigation:navigation-compose from 2.8.7 to 2.8.8 (#122)
* Bump haze from 1.4.0 to 1.5.0 (#128)
* Bump agp from 8.8.2 to 8.9.0 (#127)
* Bump androidx.navigation:navigation-compose from 2.8.8 to 2.8.9 (#130)
* Bump androidx.compose:compose-bom from 2025.02.00 to 2025.03.00 (#129)
* revert agp version to 8.8.2
* fix issues with package names
* Bump haze from 1.5.0 to 1.5.1 (#133)
* Bump com.google.guava:guava from 33.4.0-jre to 33.4.5-jre (#132)
* russian translations
* fixes and improvements
---------
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* Bump com.google.guava:guava from 33.3.1-jre to 33.4.0-jre (#97)
* Bump coroutines from 1.9.0 to 1.10.1 (#100)
* some improvements + loading conversation on new message if it is not already in the list
* Bump koin from 4.0.0 to 4.0.1 (#101)
* minor update
---------
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
* settings reorganization;
implement long press on emoji button for fast text;
some deprecations fixed;
some typos fixed;
etc
* ability to use more animations (experimental);
fix online friends loading;
conversation avatar in messages history screen;
test second tap on conversations item in bottom bar to scroll to top;
etc
* version up