# Android Changelog ## 2026-03-08 ### Step 1 - Build and app wiring - Added Android project plugin configuration for Hilt and Kotlin serialization. - Added dependency repositories and explicit app module include in settings. - Added app dependencies for Retrofit/OkHttp, DataStore, coroutines, Hilt, and unit testing. - Enabled INTERNET permission and registered MessengerApplication in manifest. - Added MessengerApplication with HiltAndroidApp. ### Step 2 - Network/data core + DI - Fixed DTO/Auth API serialization annotations and endpoint declarations for `/api/v1/auth/login`, `/api/v1/auth/refresh`, `/api/v1/auth/me`. - Implemented DataStore-based token persistence with a corrected `getTokens()` read path. - Added auth network stack: bearer interceptor, 401 authenticator with refresh flow and retry guard. - Added clean-layer contracts and implementations: `domain/common`, `domain/auth`, `data/auth/repository`. - Wired dependencies with Hilt modules for DataStore, OkHttp/Retrofit, and repository bindings. ### Step 3 - Minimal auth UI and navigation - Replaced Phase 0 placeholder UI with Compose auth flow (`AuthViewModel` + login screen). - Added loading/error states for login and startup session restore. - Added navigation graph: `AuthGraph (login)` to placeholder `Chats` screen after successful auth. - Implemented automatic session restore on app start using stored tokens. ### Step 4 - Unit tests - Added `DataStoreTokenRepositoryTest` for token save/read and clear behavior. - Added `NetworkAuthRepositoryTest` for login success path and 401 -> `InvalidCredentials` error mapping. ### Step 5 - Chat Room models and persistence core - Added domain chat model (`ChatItem`) for chat list rendering concerns. - Added Room entities: `chats`, `users_short` with sort-friendly indices. - Added `ChatDao` with `observeChats()`, `upsertChats()`, and transactional `clearAndReplaceChats()`. - Added `MessengerDatabase` and Hilt database wiring (`DatabaseModule`). ### Step 6 - Chat API and repository sync - Added chat REST API client for `/api/v1/chats` and `/api/v1/chats/{chat_id}`. - Added chat DTOs and remote/local mappers (`ChatReadDto -> ChatEntity/UserShortEntity -> ChatItem`). - Implemented `NetworkChatRepository` with cache-first flow strategy (Room first, then server sync). - Added chat domain contracts/use-cases (`ChatRepository`, observe/refresh use-cases). - Wired chat API/repository via Hilt modules. ### Step 7 - Realtime manager and chat list updates - Added a unified realtime manager abstraction and WebSocket implementation for `/api/v1/realtime/ws?token=...`. - Implemented auto-reconnect with exponential backoff and max cap. - Added realtime event parser for `receive_message`, `message_updated`, `message_deleted`, `chat_updated`, `chat_deleted`, `user_online`, `user_offline`. - Added use-case level realtime event handling that updates Room and triggers repository refreshes when needed. - Wired realtime manager into DI. ### Step 8 - Chat list UI and navigation - Added Chat List screen with tabs (`All` / `Archived`), local search filter, pull-to-refresh, and state handling (loading/empty/error). - Added chat row rendering for unread badge, mention badge (`@`), pinned/muted marks, and message preview by media type. - Added private chat presence display (`online` / `last seen recently` fallback). - Connected Chat List to ViewModel/use-cases with no business logic inside composables. - Added chat click navigation to placeholder `ChatScreen(chatId)`.