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

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@color/colorSplashScreenBackground" />
<item>
<bitmap
android:src="@drawable/logo_src"
android:width="180dp"
android:height="180dp"
android:gravity="center"/>
</item>
</layer-list>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/brand_primary"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground_padded"/>
</adaptive-icon>

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Inset wrapper для иконки лаунчера.
Добавляет 16% отступ (safe zone) чтобы лого не обрезалось
круглой/квадратной маской adaptive icon.
-->
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/ic_launcher_foreground"
android:inset="16%" />

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/brand_primary"/>
<foreground android:drawable="@mipmap/ic_launcher_foreground_padded"/>
</adaptive-icon>

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Splash screen (dark mode) -->
<color name="colorSplashScreenBackground">#3B3E7F</color>
</resources>

View File

@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Splash Screen theme for dark mode -->
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/background_dark</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/logo_splash</item>
<item name="windowSplashScreenAnimationDuration">800</item>
<item name="splashScreenIconSize">96dp</item>
<item name="postSplashScreenTheme">@style/Theme.Lаstochka</item>
<item name="android:statusBarColor">@color/background_dark</item>
<item name="android:navigationBarColor">@color/background_dark</item>
</style>
</resources>

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Lastochka brand colors -->
<color name="brand_primary">#5B5EF4</color>
<color name="brand_primary_dark">#4338CA</color>
<color name="brand_secondary">#7B61FF</color>
<color name="brand_secondary_dark">#5C45D6</color>
<color name="brand_accent">#FFD93D</color>
<!-- Light theme -->
<color name="surface">#FFFFFF</color>
<color name="surface_variant">#F5F5F5</color>
<color name="background">#EFEFF3</color>
<color name="on_surface">#1A1A1A</color>
<color name="on_surface_variant">#666666</color>
<color name="outline">#E0E0E0</color>
<!-- Message bubbles (light) -->
<color name="bubble_own">#EEF2FF</color>
<color name="bubble_peer">#FFFFFF</color>
<color name="bubble_own_text">#1A1A1A</color>
<color name="bubble_peer_text">#1A1A1A</color>
<!-- Dark theme -->
<color name="surface_dark">#17212B</color>
<color name="surface_variant_dark">#1E2C3A</color>
<color name="background_dark">#0E1621</color>
<color name="on_surface_dark">#F5F5F5</color>
<color name="on_surface_variant_dark">#9E9E9E</color>
<color name="outline_dark">#2B3A4A</color>
<!-- Message bubbles (dark) -->
<color name="bubble_own_dark">#2B5278</color>
<color name="bubble_peer_dark">#182533</color>
<color name="bubble_own_text_dark">#E8E8E8</color>
<color name="bubble_peer_text_dark">#E8E8E8</color>
<!-- Status -->
<color name="online">#40C040</color>
<color name="read_receipt">#5B5EF4</color>
<color name="sent_receipt">#9E9E9E</color>
<!-- Selection -->
<color name="selection_overlay">#2F3F51B5</color>
<!-- Splash screen -->
<color name="colorSplashScreenBackground">#5B5EF4</color>
<!-- Launcher -->
<color name="launcherBackground">#5B5EF4</color>
</resources>

View File

@@ -0,0 +1,79 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Ласточка</string>
<string name="app_name_full">Ласточка Мессенджер</string>
<!-- Login -->
<string name="login_title">Вход в Ласточку</string>
<string name="login_username">Имя пользователя или телефон</string>
<string name="login_password">Пароль</string>
<string name="login_button">Войти</string>
<string name="login_no_account">Нет аккаунта? Зарегистрироваться</string>
<string name="login_error">Неверное имя или пароль</string>
<string name="login_host">Сервер</string>
<!-- Registration -->
<string name="register_title">Регистрация</string>
<string name="register_name">Ваше имя</string>
<string name="register_name_optional">(необязательно)</string>
<string name="register_username">Логин</string>
<string name="register_email">Email</string>
<string name="register_phone">Телефон</string>
<string name="register_password">Пароль</string>
<string name="register_password_confirm">Подтверждение пароля</string>
<string name="register_button">Зарегистрироваться</string>
<string name="register_have_account">Уже есть аккаунт? Войти</string>
<string name="register_error">Ошибка регистрации</string>
<string name="register_password_mismatch">Пароли не совпадают</string>
<string name="register_username_taken">Этот логин уже занят</string>
<string name="register_email_taken">Этот email уже зарегистрирован</string>
<string name="register_phone_taken">Этот номер уже зарегистрирован</string>
<string name="register_username_short">Логин должен быть не менее 3 символов</string>
<string name="register_username_invalid">Логин может содержать только буквы, цифры и подчёркивание</string>
<string name="register_email_invalid">Введите корректный email</string>
<string name="register_phone_invalid">Введите корректный номер телефона</string>
<string name="register_password_short">Пароль должен быть не менее 6 символов</string>
<string name="register_username_available">Логин доступен</string>
<string name="register_email_available">Email доступен</string>
<string name="register_phone_available">Номер доступен</string>
<string name="register_terms">Регистрируясь, вы принимаете условия использования и политику конфиденциальности</string>
<!-- Chat list -->
<string name="chats_title">Чаты</string>
<string name="chats_empty">Нет чатов</string>
<string name="chats_empty_hint">Нажмите + чтобы начать диалог</string>
<string name="chat_new">Новый чат</string>
<!-- Chat -->
<string name="chat_typing">печатает…</string>
<string name="chat_online">в сети</string>
<string name="chat_offline">не в сети</string>
<string name="chat_last_seen">был(а) %s</string>
<string name="chat_message_hint">Сообщение…</string>
<string name="chat_send">Отправить</string>
<string name="chat_edit">Редактировать</string>
<string name="chat_delete">Удалить</string>
<string name="chat_forward">Переслать</string>
<string name="chat_reply">Ответить</string>
<string name="chat_copy">Копировать</string>
<string name="chat_edited">(ред.)</string>
<!-- Profile -->
<string name="profile_title">Профиль</string>
<string name="profile_logout">Выйти</string>
<string name="profile_name">Имя</string>
<string name="profile_username">Имя пользователя</string>
<!-- Common -->
<string name="today">Сегодня</string>
<string name="yesterday">Вчера</string>
<string name="you">Вы</string>
<string name="just_now">только что</string>
<string name="muted">Без звука</string>
<string name="pinned">Закреплено</string>
<!-- Errors -->
<string name="error_network">Нет подключения к интернету</string>
<string name="error_server">Ошибка сервера</string>
<string name="error_unknown">Неизвестная ошибка</string>
</resources>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Splash Screen theme (Android 12+) -->
<style name="Theme.App.Starting" parent="Theme.SplashScreen">
<item name="windowSplashScreenBackground">@color/brand_primary</item>
<item name="windowSplashScreenAnimatedIcon">@drawable/logo_splash</item>
<item name="windowSplashScreenAnimationDuration">800</item>
<item name="splashScreenIconSize">96dp</item>
<item name="postSplashScreenTheme">@style/Theme.Lаstochka</item>
<item name="android:statusBarColor">@color/brand_primary</item>
<item name="android:navigationBarColor">@color/brand_primary</item>
</style>
<!-- Main app theme (will be overridden by Compose) -->
<style name="Theme.Lаstochka" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="colorPrimary">@color/brand_primary</item>
<item name="colorPrimaryDark">@color/brand_primary_dark</item>
<item name="colorAccent">@color/brand_secondary</item>
<item name="android:windowBackground">@color/background</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
</style>
</resources>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<paths>
<cache-path name="camera_images" path="." />
<external-cache-path name="external_camera_images" path="." />
</paths>