From 6a1bc7ad9798b25721d10591adbd6b9a5f4bd0d6 Mon Sep 17 00:00:00 2001 From: grtsinry43 Date: Mon, 6 Oct 2025 00:29:51 +0800 Subject: [PATCH] feat: Implement core features with MVVM and Hilt This commit introduces a comprehensive set of features, establishing the core functionality of the application using an MVVM architecture with Hilt for dependency injection. **Key Changes:** * **UI & Navigation:** * Implemented navigation between the main feed, post details, and login screens using Jetpack Navigation Compose. * Added `TalkScreen` for displaying a feed of posts and `PostDetailScreen` for viewing individual posts and their comments. * Created a `LoginScreen` with input fields and authentication logic. * Introduced `PostCardItem` and `CommentItem` Composables for a consistent and reusable UI. * Added shared element transitions for a smoother user experience when navigating to post details. * **Architecture & State Management:** * Integrated Hilt for dependency injection across ViewModels and Repositories. * Created ViewModels (`TalkViewModel`, `PostDetailViewModel`, `UserViewModel`, `CommentViewModel`, etc.) to manage UI state and business logic. * Implemented Repository pattern for abstracting data sources from the backend API. * Defined UI state data classes to ensure a predictable and observable state flow. * **Data & Models:** * Introduced data models for `PostCard` and `CommentCard` to aggregate and display complex data structures. * Added `PostDetailRepository` to orchestrate fetching of post and comment data concurrently. * Refined DTOs, such as `CreateCommentDto`, for API interactions. * **Dependencies & Tooling:** * Added Hilt, Navigation Compose, and Lifecycle ViewModel dependencies. * Included the `pangu-jvm` library for improved text formatting with spacing between Chinese and English characters. --- .idea/deploymentTargetSelector.xml | 2 +- .idea/misc.xml | 1 - .idea/vcs.xml | 6 + app/build.gradle.kts | 16 + app/release/output-metadata.json | 37 + .../main/java/com/qingshuige/tangyuan/App.kt | 143 +++- .../com/qingshuige/tangyuan/MainActivity.kt | 16 +- .../tangyuan/TangyuanApplication.kt | 14 +- .../qingshuige/tangyuan/di/NetworkModule.kt | 36 + .../tangyuan/di/RepositoryModule.kt | 60 ++ .../qingshuige/tangyuan/model/CommentCard.kt | 123 ++++ .../tangyuan/model/CreateCommentDto.kt | 2 +- .../com/qingshuige/tangyuan/model/PostCard.kt | 138 ++++ .../qingshuige/tangyuan/navigation/Screen.kt | 4 + .../tangyuan/repository/CategoryRepository.kt | 75 +++ .../tangyuan/repository/CommentRepository.kt | 89 +++ .../tangyuan/repository/MediaRepository.kt | 25 + .../repository/NotificationRepository.kt | 34 + .../repository/PostDetailRepository.kt | 251 +++++++ .../tangyuan/repository/PostRepository.kt | 249 +++++++ .../tangyuan/repository/UserRepository.kt | 65 ++ .../ui/components/AuroraBackground.kt | 292 ++++++++ .../ui/components/CommentComponents.kt | 601 +++++++++++++++++ .../tangyuan/ui/components/PostCardItem.kt | 501 ++++++++++++++ .../tangyuan/ui/screens/LoginScreen.kt | 275 ++++++++ .../tangyuan/ui/screens/PostDetailScreen.kt | 637 ++++++++++++++++++ .../tangyuan/ui/screens/TalkScreen.kt | 398 +++++++++++ .../com/qingshuige/tangyuan/ui/theme/Type.kt | 25 +- .../tangyuan/utils/FlowExtensions.kt | 49 ++ .../com/qingshuige/tangyuan/utils/Pangu.kt | 10 + .../com/qingshuige/tangyuan/utils/Resource.kt | 39 ++ .../tangyuan/viewmodel/CategoryViewModel.kt | 160 +++++ .../tangyuan/viewmodel/CommentViewModel.kt | 154 +++++ .../tangyuan/viewmodel/MediaViewModel.kt | 89 +++ .../viewmodel/NotificationViewModel.kt | 138 ++++ .../tangyuan/viewmodel/PostDetailViewModel.kt | 287 ++++++++ .../tangyuan/viewmodel/PostViewModel.kt | 244 +++++++ .../tangyuan/viewmodel/TalkViewModel.kt | 234 +++++++ .../tangyuan/viewmodel/UserViewModel.kt | 140 ++++ .../res/drawable/ic_launcher_background.xml | 167 +---- .../res/drawable/ic_launcher_foreground.xml | 47 +- build.gradle.kts | 2 + gradle/libs.versions.toml | 22 +- 43 files changed, 5652 insertions(+), 245 deletions(-) create mode 100644 .idea/vcs.xml create mode 100644 app/release/output-metadata.json create mode 100644 app/src/main/java/com/qingshuige/tangyuan/di/NetworkModule.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/di/RepositoryModule.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/model/CommentCard.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/model/PostCard.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/repository/CategoryRepository.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/repository/CommentRepository.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/repository/MediaRepository.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/repository/NotificationRepository.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/repository/PostDetailRepository.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/repository/PostRepository.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/repository/UserRepository.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/ui/components/AuroraBackground.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/ui/components/CommentComponents.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/ui/components/PostCardItem.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/ui/screens/LoginScreen.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/ui/screens/PostDetailScreen.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/ui/screens/TalkScreen.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/utils/FlowExtensions.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/utils/Pangu.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/utils/Resource.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/viewmodel/CategoryViewModel.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/viewmodel/CommentViewModel.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/viewmodel/MediaViewModel.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/viewmodel/NotificationViewModel.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/viewmodel/PostDetailViewModel.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/viewmodel/PostViewModel.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/viewmodel/TalkViewModel.kt create mode 100644 app/src/main/java/com/qingshuige/tangyuan/viewmodel/UserViewModel.kt diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml index 02a51f8..64eb97d 100644 --- a/.idea/deploymentTargetSelector.xml +++ b/.idea/deploymentTargetSelector.xml @@ -4,7 +4,7 @@