mirror of
https://github.com/dev993848/lastochka-messenger.git
synced 2026-05-23 13:45:50 +00:00
d266606297
- lastochka-server: removed nested .git, now browsable on GitHub - lastochka-ios: removed nested .git, now browsable on GitHub - lastochka-android: added (Kotlin + Jetpack Compose) - lastochka-desktop: added (Electron + React) - lastochka-android-compose: removed (replaced by lastochka-android) - lastochka-ui: updated to latest prototype - .gitignore: added .gradle/, Pods/, DerivedData/, local.properties Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
8.6 KiB
8.6 KiB
Ласточка Android (Compose) — Статус разработки
Новый Android-клиент, переписанный с нуля на Jetpack Compose. Заменяет старый Tindroid-форк (
dev/lastochka-android/).
Путь проекта: dev/lastochka-android-compose/
Последнее обновление: 2026-04-03
✅ Сделано
Инфраструктура
- Создана папка проекта
dev/lastochka-android-compose/ - Gradle wrapper (8.7, совместим с AGP 8.3.2)
settings.gradle.kts,build.gradle.kts(корневой + app + tinodesdk)gradle.properties,local.properties(Android SDK настроен)- ProGuard правила
Tinode SDK
- Скопирован модуль
tinodesdk/из старого проекта (69 Java-файлов) build.gradle.ktsдля SDK модуляconsumer-rules.pro,proguard-rules.pro
Слой данных
TinodeClient.kt— обёртка над Tinode SDK (login, register, subscribe, sendMessage, events)ChatRepository.kt— Repository pattern (Tinode + Room)AppDatabase.kt— Room DB:MessageEntity,ContactEntity,TypingEntity+ DAOs
ViewModel
AuthViewModel.kt— вход, регистрация, проверка username, автологинChatListViewModel.kt— загрузка контактов из MeTopic, обновление через событияChatViewModel.kt— сообщения чата, отправка, typing, read receipts
Навигация
Screen.kt— маршруты: Login, Register, ChatList, Chat, Profile, NewChatMainActivity.kt— NavHost с проверкой авторизации
UI — Тема (lastochka-ui стиль)
Color.kt— 40+ цветов (бренд, light/dark, bubble, статусы, аватары)Type.kt— типографика (display, headline, title, body, label)Theme.kt— Material 3 + LocalBubbleColors для light/dark
UI — Компоненты
Avatar.kt— аватар с инициалами, цветовым хешем (16 цветов), online-индикаторChatItem.kt— элемент списка чатов (аватар, имя, превью, время, badge unread, muted)MessageBubble.kt— пузырь сообщения (скругление 18px, хвостик, статус ✓/✓✓, разделитель дат)MessageInput.kt— поле ввода (скрепка, текст, кнопка отправки/микрофон)ChatHeader.kt— хедер чата (назад, аватар, имя, статус, звонок, видео, меню)
UI — Экраны
LoginScreen.kt— вход (логотип, username, пароль, show/hide, error, ссылка на регистрацию)RegisterScreen.kt— регистрация (имя, username с проверкой, пароль, подтверждение)ChatListScreen.kt— список чатов (Empty state, LazyColumn, FAB, error snackbar)ChatScreen.kt— экран чата (ChatHeader, LazyColumn с bubble, DateDivider, MessageInput)
DI
AppModule.kt— Hilt: Database, TinodeClient, Repository@HiltAndroidAppнаLastochkaApp@AndroidEntryPointнаMainActivity@HiltViewModelна все 3 ViewModel
Ресурсы
colors.xml— все цвета (light/dark/bubble/status)strings.xml— 40+ строк (RU)themes.xml— LaunchScreen + AppThemeAndroidManifest.xml— permissions, activity, splash theme- mipmap иконки (mdpi–xxxhdpi) — логотип Ласточки
ic_launcher.xml/ic_launcher_round.xml— adaptive iconsplash_screen.xml— splash с логотипом
Документация
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 |
🔧 Команды
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) |
✅ |
📝 Примечания
- Windows — используйте
gradlew.batвместо./gradlew - Tinode SDK — Java-код, работает через PromisedReply (async pattern), нужно адаптировать под Kotlin coroutines
- Room — используется Flow для реактивных обновлений UI
- Drafty — формат rich-контента Tinode, пока отправляется plain text
- Оффлайн — Room кеш + Tinode SDK LocalData
- Hilt — полностью настроен (@HiltAndroidApp, @AndroidEntryPoint, @HiltViewModel)