- Add your SERVER_KEY="your key" in a file in the root folder by the name of "apikey.properties".
- Connect your project with firebase (add google-service.json to PROJECT_NAME/app/) and use firestore, storage, phone Auth and FCM.
- Add your app sha-1 and sha-256 Read this and you are ready to go.
- Login with your phone number
- Send a Private chat
- Create a Group chat
- Send text, image, and voice messages (INSTANTLY)
- Delete and/or update messages
- Reactions to messages
- Notification for private and group chats
- Realtime messaging and updates
- Online, offline, and writing status of a private chat
- Message status (have been sent, the user saw the message, updated, deleted, sent at, and sent by )
- Offline support for all messages type
- Change your profile photo, hide your phone number, write and edit your name and bio
- Block users
- Leave groups
- Preview images with zoom in and out
- Multi notification but only one from each chat or group
Future plans (Will be added to notion) but here are a few:
- Offline Chat using WIFI or nearby API.
- Video and Audio calls.
- Bottom Sheet Fragment for Image Viewer instead of normal fragment
- Private messages on a password-protected screen.
- Add audio when sending a message.(Done)
- None yet! :)
-
Minimum SDK level 21
-
Kotlin based, Coroutines together with Flow for asynchronous streams and one side viewModel to fragment communication.
-
Firebase used extensively in this app:
-
Dagger Hilt for dependency injection.
-
Retrofit A type-safe HTTP client for Android and Java
-
Glide for loading images.
-
SDP for different screen sizes
-
Lottie files for playing beautiful animations
-
Shimmer for facebook-like loading effect
-
JetPack:
- Lifecycle - Dispose of observing data when the lifecycle state changes.
- ViewModel - UI related data holder, lifecycle aware.
- ViewBinding - Interact with XML views in safeway and avoid findViewById()
- Navigation Component - Make it easy to navigate between different screens and pass data in type-safe way
-
Architecture:
- MVI Architecture (Model-View-Intent)
- Repository pattern
-
Material-Components - Material design components like cardView
-
SaveStateHandler to handle process death