SocketChat is a single-screen (P0) real-time chat application built using Jetpack Compose, MVVM, Hilt, Room, and PieSocket WebSockets.
It supports:
✔ Live message streaming
✔ Offline queueing
✔ Automatic resend
✔ Conversations list
✔ Unread preview
✔ Full error handling
This project fulfills all required functional points from the assignment, including real-time sync, offline behavior, message reliability, and chat preview list.
- Kotlin
- Jetpack Compose
- MVVM Architecture
- Hilt Dependency Injection
- Room Database
- WebSockets (PieSocket)
- Coroutines + StateFlow
- Material 3 Design
- Clean, real-time Compose chat UI.
- Messages aligned left (others) / right (mine).
- Auto-scroll to latest message.
- Intelligent “New Messages” button when user is not at bottom.
- Uses PieSocket WebSocket channel.
- Messages appear instantly without refreshing.
- Messages are sent as JSON:
{
"senderId": "<device-id>",
"content": "Hello!"
}- Detects network disconnect with NetworkMonitor.
- Unsent messages stored in Room (Pending Messages).
- Automatically resent on reconnection with proper JSON payload.
- Shows Snackbars for: i) Socket failures ii) Connection drops iii) Resend failures
- Handles empty states: ❗ No Internet ❗ No Chats Available
Includes:
-
Last message preview
-
Unread message count
-
Timestamp
-
Tapping a conversation opens chat screen
-
Conversations cleared on app close (per requirement)
Simple internal navigation between:
✔ Conversations List ✔ Chat Screen
com.himanshuhc.socketchat │ ├── data │ ├── local (Room) │ ├── repository (ChatRepositoryImpl) │ └── socket (PieSocketManager) │ ├── domain │ └── model (MessageModel, Conversation) │ ├── presentation │ ├── chatlist (Chat UI + ViewModel) │ └── conversation (Conversation UI + ViewModel) │ ├── core (NetworkMonitor) └── di (Hilt Modules)
Message Flow
- User sends message
- If online → Sent instantly through WebSocket
- If offline → Added to Room DB (pending queue)
- On reconnect → Auto resend
- Incoming messages update:
-
Chat UI
-
Conversations preview
-
Unread count
Used as per PieSocket: wss://s15496.blr1.piesocket.com/v3/1?api_key=C7uK7TCatKTXwfSSQwcRjbVntcKN6kEvFeiNPwgM¬ify_self=0