The application is a Chat App developed using Jetpack Compose and follows a Modular architecture. To log into the app, users must create an account or sign in directly using a Google account. Authentication processes are handled through Firebase Auth. Users can update their profile picture or username, and if desired, delete their account. The app allows real-time messaging with individuals or creating group chats with friends for instant messaging. It supports text, PDF, image, and voice recording types. Within the app, you can also take photos using the built-in camera feature and share them. The notification feature is provided through Firebase Cloud Messaging. Even when you are not using the app, incoming messages are displayed to you via notifications.
This is the GitHub repository for the backend project used by the app.
- Authentication: Allows users to create an account or log in directly with a Google account using Firebase Authentication.
- Profile Management: Users can update their profile picture or username and delete their account if desired.
- Instant Messaging: The app enables real-time messaging with an individual or group chats with friends.
- File Sharing: Supports text, PDF, image, and voice recording sharing.
- Camera Integration: Users can take photos using the in-app camera and share them instantly.
- Notifications: Receive real-time message notifications via Firebase Cloud Messaging, even when the app is not in use.
- Android Architecture Components
- Hilt
- Room
- Retrofit
- Coil
- Okhttp
- Firebase Auth
- Firebase Storage
- Firebase Firestore
- Paging 3
- Datastore
- Splash API
- Google Sign In
- Accompanist Permissions
- Firebase Cloud Messaging
- Kotlin Serialization
- Lottie Compose
- Constraint Layout
- CameraX
Dark Theme | Light Theme | |
---|---|---|
Login | ||
Sign Up | ||
Chats | ||
Chat Box | ||
Profile | ||
Create Contact | ||
Create Group | ||
Settings |
Name | Responsibilities | Key classes |
app
|
Brings everything together required for the app to function correctly. This module responsible for navigation. | ChatApp, MainActivity |
feature:1, feature:2 ... |
Functionality associated with a specific feature or user journey. Typically contains UI components and ViewModels which read data from other modules. Examples include:
|
ChatsScreen ChatsViewModel
|
core:data
|
Fetching app data from multiple sources and sends it to the UI through the core:domain module.
|
ChatRepository |
core:designsystem
|
Design system which includes Core UI components (many of which are customized Material 3 components), app theme and icons. |
ChatAppModalBottomSheet ChatAppButton ChatAppTheme
|
core:ui
|
Composite UI components and resources used by feature modules. Unlike the designsystem module, it is dependent on the data layer since it renders models.
|
ChatItem
|
core:common
|
Common classes shared between modules. | UiText Response
|
core:network
|
Making network requests and handling responses from a remote data source. | KtorChatApi MessagesRemoteDataSource
|
core:datastore
|
Storing persistent data using DataStore. | AppPreferencesDataSource |
core:database
|
Local database storage using Room. | UserDatabase Dao classes
|
core:model
|
Model classes used throughout the app. | User UserChat Message
|
core:domain
|
It houses use cases. It serves as a bridge between the data layer's repositories and the UI. | GetMessagesUseCase
UpdateUserUseCase
|
core:authentication
|
Manages user identity verification and access control. | GoogleSignInClient
FirebaseEmailPasswordClient
|
The app uses MVVM [Model-View-ViewModel] architecture to have a unidirectional flow of data, separation of concern, testability, and a lot more.