first commit

This commit is contained in:
Anton Budylin
2026-04-14 10:12:51 +03:00
commit ea171ed95a
247 changed files with 42642 additions and 0 deletions

View File

@@ -0,0 +1,182 @@
# Ласточка Android (Compose) — Статус разработки
> Новый Android-клиент, переписанный с нуля на Jetpack Compose.
> Заменяет старый Tindroid-форк (`dev/lastochka-android/`).
**Путь проекта:** `dev/lastochka-android-compose/`
**Последнее обновление:** 2026-04-03
---
## ✅ Сделано
### Инфраструктура
- [x] Создана папка проекта `dev/lastochka-android-compose/`
- [x] Gradle wrapper (8.7, совместим с AGP 8.3.2)
- [x] `settings.gradle.kts`, `build.gradle.kts` (корневой + app + tinodesdk)
- [x] `gradle.properties`, `local.properties` (Android SDK настроен)
- [x] ProGuard правила
### Tinode SDK
- [x] Скопирован модуль `tinodesdk/` из старого проекта (69 Java-файлов)
- [x] `build.gradle.kts` для SDK модуля
- [x] `consumer-rules.pro`, `proguard-rules.pro`
### Слой данных
- [x] `TinodeClient.kt` — обёртка над Tinode SDK (login, register, subscribe, sendMessage, events)
- [x] `ChatRepository.kt` — Repository pattern (Tinode + Room)
- [x] `AppDatabase.kt` — Room DB: `MessageEntity`, `ContactEntity`, `TypingEntity` + DAOs
### ViewModel
- [x] `AuthViewModel.kt` — вход, регистрация, проверка username, автологин
- [x] `ChatListViewModel.kt` — загрузка контактов из MeTopic, обновление через события
- [x] `ChatViewModel.kt` — сообщения чата, отправка, typing, read receipts
### Навигация
- [x] `Screen.kt` — маршруты: Login, Register, ChatList, Chat, Profile, NewChat
- [x] `MainActivity.kt` — NavHost с проверкой авторизации
### UI — Тема (lastochka-ui стиль)
- [x] `Color.kt` — 40+ цветов (бренд, light/dark, bubble, статусы, аватары)
- [x] `Type.kt` — типографика (display, headline, title, body, label)
- [x] `Theme.kt` — Material 3 + LocalBubbleColors для light/dark
### UI — Компоненты
- [x] `Avatar.kt` — аватар с инициалами, цветовым хешем (16 цветов), online-индикатор
- [x] `ChatItem.kt` — элемент списка чатов (аватар, имя, превью, время, badge unread, muted)
- [x] `MessageBubble.kt` — пузырь сообщения (скругление 18px, хвостик, статус ✓/✓✓, разделитель дат)
- [x] `MessageInput.kt` — поле ввода (скрепка, текст, кнопка отправки/микрофон)
- [x] `ChatHeader.kt` — хедер чата (назад, аватар, имя, статус, звонок, видео, меню)
### UI — Экраны
- [x] `LoginScreen.kt` — вход (логотип, username, пароль, show/hide, error, ссылка на регистрацию)
- [x] `RegisterScreen.kt` — регистрация (имя, username с проверкой, пароль, подтверждение)
- [x] `ChatListScreen.kt` — список чатов (Empty state, LazyColumn, FAB, error snackbar)
- [x] `ChatScreen.kt` — экран чата (ChatHeader, LazyColumn с bubble, DateDivider, MessageInput)
### DI
- [x] `AppModule.kt` — Hilt: Database, TinodeClient, Repository
- [x] `@HiltAndroidApp` на `LastochkaApp`
- [x] `@AndroidEntryPoint` на `MainActivity`
- [x] `@HiltViewModel` на все 3 ViewModel
### Ресурсы
- [x] `colors.xml` — все цвета (light/dark/bubble/status)
- [x] `strings.xml` — 40+ строк (RU)
- [x] `themes.xml` — LaunchScreen + AppTheme
- [x] `AndroidManifest.xml` — permissions, activity, splash theme
- [x] mipmap иконки (mdpixxxhdpi) — логотип Ласточки
- [x] `ic_launcher.xml` / `ic_launcher_round.xml` — adaptive icon
- [x] `splash_screen.xml` — splash с логотипом
### Документация
- [x] `README.md` — архитектура, стек, цвета, сборка, roadmap
### Итого: **22 Kotlin файла**, ~2500 строк кода
---
## 🚧 В процессе / предстоит
### Критично для MVP
- [ ] **Собрать проект** — проверить компиляцию (`gradlew assembleDebug`) — **ГОТОВО К СБОРКЕ после перезагрузки консоли**
- [ ] **Сохранение/восстановление токена**`autoLogin()` должен работать при перезапуске
### Чат (базовый)
- [ ] **Загрузка истории сообщений** — подгрузка старых сообщений при скролле вверх
- [ ] **Отправка Drafty** — сейчас отправляется plain text, нужен полноценный Drafty
- [ ] **Отображение senderName** — резолвить имя отправителя из контактов
- [ ] **Реакция на входящие сообщения** — обновление UI через Tinode events
### Чат (продвинутый)
- [ ] **Голосовые сообщения** — запись, воспроизведение, waveform
- [ ] **Файловые вложения** — фото, видео, документы (CameraX, MediaStore)
- [ ] **Редактирование/удаление** сообщений
- [ ] **Пересылка** сообщений
- [ ] **Reply** на сообщение
- [ ] **Поиск** по сообщениям
### Группы и каналы
- [ ] **Создание группы** — выбор участников, название, аватар
- [ ] **Групповой чат** — отображение имён отправителей
- [ ] **Каналы** — read-only подписчики
### Звонки
- [ ] **WebRTC** — аудио/видео звонки (из старого Tindroid)
- [ ] **Push-уведомления** — FCM для входящих звонков и сообщений
### Настройки
- [ ] **Экран профиля** — имя, аватар, смена пароля
- [ ] **Настройки уведомлений** — звук, вибрация, мут
- [ ] **Тема** — переключение light/dark/system
### Инфраструктура
- [ ] **Push-уведомления FCM** — фоновые уведомления
- [ ] **Фоновая синхронизация** — WorkManager
- [ ] **Обработка offline** — очередь отправки, кеш
---
## 📦 Зависимости
| Библиотека | Версия |
|------------|--------|
| Kotlin | 1.9.24 |
| Compose BOM | 2024.06.00 |
| Material 3 | (из BOM) |
| Room | 2.6.1 |
| Hilt | 2.52 |
| Navigation Compose | 2.8.3 |
| Coil | 2.7.0 |
| Coroutines | 1.8.1 |
| DataStore | 1.1.1 |
| Gson | 2.11.0 |
| Tinode SDK | форк Tinode |
---
## 🔧 Команды
```bash
cd dev/lastochka-android-compose
# Сборка (Windows)
gradlew.bat assembleDebug
gradlew.bat assembleRelease
# Установка на устройство
gradlew.bat installDebug
# Запуск
gradlew.bat installDebug & adb shell am start -n ru.lastochka.messenger/.MainActivity
# Лог
adb logcat -s Lastochka Tinode
```
---
## 🎨 Дизайн-соответствие с lastochka-ui
| lastochka-ui | Android Compose | Статус |
|--------------|-----------------|--------|
| Bubble свои `#EEF2FF` | `BubbleOwn` | ✅ |
| Bubble чужие `#FFFFFF` | `BubblePeer` | ✅ |
| Скругление 18px | `RoundedCornerShape(18.dp)` | ✅ |
| Хвостик bubble | `bottomEnd=4dp` / `bottomStart=4dp` | ✅ |
| Статус ✓/✓✓ | `Done` / `DoneAll` icons | ✅ |
| Аватар + инициалы | `Avatar` composable | ✅ |
| Разделитель дат | `DateDivider` | ✅ |
| Input скруглённый | `MessageInput` | ✅ |
| Тёмная тема | `LastochkaTheme(darkTheme)` | ✅ |
---
## 📝 Примечания
1. **Windows** — используйте `gradlew.bat` вместо `./gradlew`
2. **Tinode SDK** — Java-код, работает через PromisedReply (async pattern), нужно адаптировать под Kotlin coroutines
3. **Room** — используется Flow для реактивных обновлений UI
4. **Drafty** — формат rich-контента Tinode, пока отправляется plain text
5. **Оффлайн** — Room кеш + Tinode SDK LocalData
6. **Hilt** — полностью настроен (@HiltAndroidApp, @AndroidEntryPoint, @HiltViewModel)