This commit is contained in:
Viktoria Polyakova
2026-01-25 15:57:18 +03:00
parent 9626c9f3be
commit 0a9c3f5bc4
2809 changed files with 182961 additions and 0 deletions

View File

@@ -0,0 +1,38 @@
#Sun Jan 25 15:52:44 MSK 2026
com.crm.chat.app-packageDebugResources-2\:/layout/activity_profile.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_profile.xml
com.crm.chat.app-main-5\:/drawable/ic_add.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_add.xml
com.crm.chat.app-main-5\:/mipmap-mdpi/ic_launcher.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-mdpi-v4/ic_launcher.png
com.crm.chat.app-main-5\:/drawable/circle_background.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/circle_background.xml
com.crm.chat.app-main-5\:/menu/main_menu.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/menu/main_menu.xml
com.crm.chat.app-main-5\:/mipmap-xxxhdpi/ic_launcher.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xxxhdpi-v4/ic_launcher.png
com.crm.chat.app-packageDebugResources-2\:/layout/activity_image_viewer.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_image_viewer.xml
com.crm.chat.app-main-5\:/mipmap-xxxhdpi/ic_launcher_round.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xxxhdpi-v4/ic_launcher_round.png
com.crm.chat.app-main-5\:/menu/menu_user_selection.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/menu/menu_user_selection.xml
com.crm.chat.app-main-5\:/drawable/ic_group_chat.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_group_chat.xml
com.crm.chat.app-packageDebugResources-2\:/layout/item_message.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/item_message.xml
com.crm.chat.app-main-5\:/mipmap-hdpi/ic_launcher_round.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-hdpi-v4/ic_launcher_round.png
com.crm.chat.app-main-5\:/drawable/ic_menu.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_menu.xml
com.crm.chat.app-packageDebugResources-2\:/layout/activity_user_selection.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_user_selection.xml
com.crm.chat.app-main-5\:/drawable/ic_paperclip.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_paperclip.xml
com.crm.chat.app-packageDebugResources-2\:/layout/activity_create_chat.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_create_chat.xml
com.crm.chat.app-main-5\:/mipmap-xhdpi/ic_launcher.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xhdpi-v4/ic_launcher.png
com.crm.chat.app-packageDebugResources-2\:/layout/item_user.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/item_user.xml
com.crm.chat.app-packageDebugResources-2\:/layout/activity_chat.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_chat.xml
com.crm.chat.app-main-5\:/drawable/ic_arrow_back.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_arrow_back.xml
com.crm.chat.app-packageDebugResources-2\:/layout/activity_auth.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_auth.xml
com.crm.chat.app-packageDebugResources-2\:/layout/toolbar_chat.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/toolbar_chat.xml
com.crm.chat.app-main-5\:/mipmap-xxhdpi/ic_launcher_round.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xxhdpi-v4/ic_launcher_round.png
com.crm.chat.app-main-5\:/mipmap-xhdpi/ic_launcher_round.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xhdpi-v4/ic_launcher_round.png
com.crm.chat.app-packageDebugResources-2\:/layout/activity_settings.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_settings.xml
com.crm.chat.app-main-5\:/mipmap-xxhdpi/ic_launcher.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-xxhdpi-v4/ic_launcher.png
com.crm.chat.app-packageDebugResources-2\:/layout/activity_main.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/activity_main.xml
com.crm.chat.app-main-5\:/mipmap-hdpi/ic_launcher.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-hdpi-v4/ic_launcher.png
com.crm.chat.app-main-5\:/mipmap-mdpi/ic_launcher_round.png=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/mipmap-mdpi-v4/ic_launcher_round.png
com.crm.chat.app-main-5\:/drawable/ic_launcher_foreground.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_launcher_foreground.xml
com.crm.chat.app-main-5\:/xml/data_extraction_rules.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/xml/data_extraction_rules.xml
com.crm.chat.app-packageDebugResources-2\:/layout/item_chat.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/layout/item_chat.xml
com.crm.chat.app-main-5\:/drawable/badge_background.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/badge_background.xml
com.crm.chat.app-main-5\:/drawable/ic_theme_toggle.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_theme_toggle.xml
com.crm.chat.app-main-5\:/drawable/ic_chat.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/ic_chat.xml
com.crm.chat.app-main-5\:/drawable/message_input_background.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/drawable/message_input_background.xml
com.crm.chat.app-main-5\:/xml/backup_rules.xml=/home/user/mydata/SRC/crm.mcmed.ru/MobileAndroid/app/build/intermediates/packaged_res/debug/packageDebugResources/xml/backup_rules.xml

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="background">#121212</color>
<color name="background_dark">#000000</color>
<color name="black">#FFFFFFFF</color>
<color name="error">#CF6679</color>
<color name="error_light">#FF8A80</color>
<color name="message_received">#333333</color>
<color name="message_received_text">#FFFFFF</color>
<color name="message_sent">#2D2D2D</color>
<color name="message_sent_text">#FFFFFF</color>
<color name="primary">#9E9E9E</color>
<color name="primary_dark">#616161</color>
<color name="primary_light">#BDBDBD</color>
<color name="reply_background">#2D3748</color>
<color name="secondary">#757575</color>
<color name="secondary_dark">#494949</color>
<color name="secondary_light">#A4A4A4</color>
<color name="surface">#1E1E1E</color>
<color name="text_hint">#808080</color>
<color name="text_primary">#FFFFFF</color>
<color name="text_secondary">#B3B3B3</color>
<color name="white">#FF000000</color>
</resources>

View File

@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:ns1="http://schemas.android.com/tools">
<color name="attachment_background">#E3F2FD</color>
<color name="background">#FAFAFA</color>
<color name="background_dark">#F5F5F5</color>
<color name="black">#FF000000</color>
<color name="error">#B00020</color>
<color name="error_light">#EF5350</color>
<color name="message_received">#F5F5F5</color>
<color name="message_received_text">#212121</color>
<color name="message_sent">#E3F2FD</color>
<color name="message_sent_text">#1976D2</color>
<color name="primary">#1976D2</color>
<color name="primary_dark">#1565C0</color>
<color name="primary_light">#BBDEFB</color>
<color name="reply_background">#E8F5E8</color>
<color name="secondary">#FF9800</color>
<color name="secondary_dark">#F57C00</color>
<color name="secondary_light">#FFCC02</color>
<color name="selected_item_background">#E8F5E8</color>
<color name="surface">#FFFFFF</color>
<color name="text_hint">#BDBDBD</color>
<color name="text_primary">#212121</color>
<color name="text_secondary">#757575</color>
<color name="white">#FFFFFFFF</color>
<string name="app_name">Medical Control</string>
<string name="cancel">Отмена</string>
<string name="chat_title">Чат</string>
<string name="chats_title">Medical Control</string>
<string name="create_chat">Создать чат</string>
<string name="email_hint">Электронная почта</string>
<string name="email_required">Электронная почта обязательна</string>
<string name="error">Ошибка</string>
<string name="error_empty_response">Сервер вернул пустой ответ. Проверьте подключение к серверу и правильность URL.</string>
<string name="error_empty_token">Сервер вернул пустой токен. Проверьте правильность email и пароля.</string>
<string name="error_forbidden">Доступ запрещен. Проверьте API ключ и права доступа.</string>
<string name="error_invalid_credentials">Неверный email или пароль. Проверьте правильность введенных данных.</string>
<string name="error_invalid_url">URL сервера должен начинаться с http:// или https://</string>
<string name="error_loading_chats">Ошибка загрузки чатов</string>
<string name="error_network">Ошибка сети. Проверьте подключение к интернету.</string>
<string name="error_sending_message">Ошибка отправки сообщения</string>
<string name="error_server_error">Ошибка сервера. Сервер временно недоступен, попробуйте позже.</string>
<string name="error_server_not_found">Сервер не найден. Проверьте URL сервера и подключение к сети.</string>
<string name="error_timeout">Таймаут соединения. Проверьте подключение к серверу и попробуйте снова.</string>
<string name="error_unexpected">Неожиданная ошибка. Попробуйте перезапустить приложение.</string>
<string name="loading">Загрузка...</string>
<string name="login_button">Войти</string>
<string name="login_description">Введите email и пароль для доступа к чату</string>
<string name="login_failed">Ошибка входа. Проверьте данные.</string>
<string name="login_title">Авторизация</string>
<string name="no_chats">Нет доступных чатов</string>
<string name="ok">ОК</string>
<string name="password_hint">Пароль</string>
<string name="password_required">Пароль обязателен</string>
<string name="retry">Повторить</string>
<string name="send_button">Отправить</string>
<string name="send_message_hint">Введите сообщение...</string>
<string name="theme_toggle">Переключить тему</string>
<style name="Theme.CRMChat" parent="Theme.Material3.DayNight">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryVariant">@color/primary_dark</item>
<item name="colorOnPrimary">@color/white</item>
<item name="colorSecondary">@color/secondary</item>
<item name="colorSecondaryVariant">@color/secondary_dark</item>
<item name="colorOnSecondary">@color/black</item>
<item name="android:statusBarColor" ns1:targetApi="l">?attr/colorPrimaryVariant</item>
</style>
<style name="Theme.CRMChat.AppBarOverlay" parent="ThemeOverlay.Material3.Dark"/>
<style name="Theme.CRMChat.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.CRMChat.PopupOverlay" parent="ThemeOverlay.Material3.Light"/>
</resources>

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".ui.auth.AuthActivity">
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="32dp">
<!-- Title -->
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:text="@string/login_title"
android:textColor="@color/text_primary"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Description -->
<TextView
android:id="@+id/descriptionTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/login_description"
android:textColor="@color/text_secondary"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/titleTextView" />
<!-- Email Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/emailInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:hint="@string/email_hint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/descriptionTextView">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/emailEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Password Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/passwordInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="@string/password_hint"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/emailInputLayout"
app:passwordToggleEnabled="true">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/passwordEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:textColor="@color/black" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Login Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/loginButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:backgroundTint="@color/primary"
android:text="@string/login_button"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/passwordInputLayout" />
<!-- Additional Settings Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/additionalSettingsButton"
style="@style/Widget.Material3.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Дополнительные настройки"
android:textColor="@color/primary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/loginButton" />
<!-- Progress Bar -->
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/additionalSettingsButton" />
<!-- Error Text -->
<TextView
android:id="@+id/errorTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textColor="@color/error"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/progressBar" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,226 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".ui.chat.ChatActivity">
<!-- Toolbar -->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/primary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.Material3.Dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_arrow_back"
app:title="@string/chat_title"
app:titleTextColor="@color/white" />
<!-- Messages RecyclerView -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/messagesRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:padding="8dp"
app:layout_constraintBottom_toTopOf="@id/messageInputLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
tools:listitem="@layout/item_message" />
<!-- Attachment Indicators Container -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/attachmentIndicators"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:elevation="4dp"
app:layout_constraintBottom_toTopOf="@id/messageInputLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<!-- Reply Indicator -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/replyIndicator"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/reply_background"
android:padding="8dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/replySenderText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="John Smith" />
<TextView
android:id="@+id/replyMessageText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:maxLines="2"
android:textColor="@color/text_secondary"
android:textSize="12sp"
app:layout_constraintEnd_toStartOf="@id/replyCancelButton"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/replySenderText"
tools:text="Original message text..." />
<ImageButton
android:id="@+id/replyCancelButton"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="Cancel reply"
android:src="@android:drawable/ic_menu_close_clear_cancel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:tint="@color/text_secondary" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- File Attachment Indicator -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/fileAttachmentIndicator"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/attachment_background"
android:padding="8dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/replyIndicator">
<TextView
android:id="@+id/fileAttachmentText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:textColor="@color/primary"
android:textSize="14sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@id/fileCancelButton"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Отправка: document.pdf" />
<ImageButton
android:id="@+id/fileCancelButton"
android:layout_width="24dp"
android:layout_height="24dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="Cancel file attachment"
android:src="@android:drawable/ic_menu_close_clear_cancel"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:tint="@color/primary" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Message Input Layout -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/messageInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/surface"
android:elevation="4dp"
android:minHeight="56dp"
android:padding="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<!-- Message EditText -->
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/messageEditText"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:background="@drawable/message_input_background"
android:hint="@string/send_message_hint"
android:inputType="textMultiLine"
android:maxLines="4"
android:minHeight="48dp"
android:padding="12dp"
android:textColor="@color/text_primary"
android:textSize="16sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/attachButton"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
<!-- Attach File Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/attachButton"
android:layout_width="40dp"
android:layout_height="48dp"
android:layout_marginEnd="8dp"
android:backgroundTint="@color/secondary"
android:padding="10dp"
app:icon="@drawable/ic_paperclip"
app:iconSize="28sp"
app:iconGravity="start"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/sendButton"
app:layout_constraintTop_toTopOf="parent"/>
<!-- Send Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/sendButton"
android:layout_width="40dp"
android:layout_height="48dp"
android:backgroundTint="@color/primary"
android:paddingStart="32dp"
android:textColor="@color/white"
app:icon="@android:drawable/ic_menu_send"
app:iconSize="40dp"
app:iconGravity="textStart"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Scroll to Bottom FAB -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/scrollToBottomFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:alpha="0.8"
android:rotation="90"
android:src="@android:drawable/ic_menu_send"
android:visibility="gone"
app:backgroundTint="@color/primary"
app:layout_constraintBottom_toTopOf="@id/attachmentIndicators"
app:layout_constraintEnd_toEndOf="parent"
app:tint="@color/white" />
<!-- Loading overlay -->
<ProgressBar
android:id="@+id/loadingProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,296 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".ui.main.CreateChatActivity">
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="24dp">
<!-- Title -->
<TextView
android:id="@+id/titleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:text="Создать чат"
android:textColor="@color/text_primary"
android:textSize="24sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Chat Type Selection -->
<TextView
android:id="@+id/chatTypeLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="Тип чата"
android:textColor="@color/text_primary"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/titleTextView" />
<RadioGroup
android:id="@+id/chatTypeRadioGroup"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/chatTypeLabel">
<RadioButton
android:id="@+id/radioPersonal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Личный чат"
android:checked="true" />
<RadioButton
android:id="@+id/radioGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Групповой чат" />
<RadioButton
android:id="@+id/radioExternal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Внешний чат" />
</RadioGroup>
<!-- Provider Info (hidden but used internally) -->
<TextView
android:id="@+id/providerInfo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Используется CRM Chat Provider (ID: 994)"
android:textColor="@color/text_hint"
android:textSize="12sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/chatTypeRadioGroup" />
<!-- Select User Button (Personal Chat) -->
<TextView
android:id="@+id/companionLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="Собеседник"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/providerInfo" />
<com.google.android.material.button.MaterialButton
android:id="@+id/selectUserButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Выбрать пользователя"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/companionLabel" />
<TextView
android:id="@+id/selectedUserTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/text_secondary"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/selectUserButton"
tools:text="Выбран: Иван Иванов (ID: 12031100)" />
<!-- Group Title -->
<TextView
android:id="@+id/groupTitleLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="Название группы"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/providerInfo" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/groupTitleInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:hint="Введите название группы"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/groupTitleLabel">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/groupTitleEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Participant IDs (Group Chat) - Hidden for simplified UI -->
<TextView
android:id="@+id/participantsLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="ID участников (через запятую)"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/groupTitleInputLayout" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/participantsInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:hint="1,2,3"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/participantsLabel">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/participantsEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<!-- External Chat Title -->
<TextView
android:id="@+id/externalTitleLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:text="Название чата"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/providerInfo" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/externalTitleInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:hint="Введите название чата"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/externalTitleLabel">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/externalTitleEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Entity ID -->
<TextView
android:id="@+id/entityLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="ID сущности (опционально)"
android:textColor="@color/text_primary"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/externalTitleInputLayout" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/entityInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:hint="Введите ID сущности"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/entityLabel">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/entityEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Create Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/createButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:backgroundTint="@color/primary"
android:text="Создать чат"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/groupTitleInputLayout" />
<!-- Progress Bar -->
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/createButton" />
<!-- Error Text -->
<TextView
android:id="@+id/errorTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textColor="@color/error"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/progressBar" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/primary">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/primary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
app:titleTextColor="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="center_vertical">
<ImageButton
android:id="@+id/backButton"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginStart="4dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="Back"
android:padding="12dp"
android:scaleType="fitCenter"
android:src="@drawable/ic_arrow_back"
android:tint="@android:color/white" />
<TextView
android:id="@+id/toolbarTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginStart="16dp"
android:textColor="@android:color/white"
android:textSize="18sp"
android:textStyle="bold"
android:maxLines="1"
android:ellipsize="end"
tools:text="image.jpg" />
<ImageButton
android:id="@+id/downloadButton"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginEnd="4dp"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="Download"
android:padding="12dp"
android:scaleType="fitCenter"
android:src="@android:drawable/stat_sys_download"
android:tint="@android:color/white" />
</LinearLayout>
</androidx.appcompat.widget.Toolbar>
</com.google.android.material.appbar.AppBarLayout>
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:src="@drawable/ic_launcher_foreground" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View File

@@ -0,0 +1,152 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".ui.main.MainActivity">
<!-- Toolbar -->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/primary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.Material3.Dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:title="">
<!-- Logo Block -->
<ImageView
android:id="@+id/logoImageView"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_gravity="start"
android:contentDescription="Medical Control Logo"
android:scaleType="centerInside"
android:src="@mipmap/ic_launcher"/>
<!-- Menu Button -->
<ImageButton
android:id="@+id/menuButton"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_gravity="end"
android:background="?attr/selectableItemBackgroundBorderless"
android:contentDescription="Menu"
android:padding="12dp"
android:scaleType="centerInside"
android:src="@drawable/ic_menu"
android:visibility="visible" />
</androidx.appcompat.widget.Toolbar>
<!-- SwipeRefreshLayout for chat list -->
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/swipeRefreshLayout"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar">
<!-- RecyclerView for chat list -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/chatsRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:padding="8dp"
tools:listitem="@layout/item_chat" />
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
<!-- Empty state -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/emptyStateLayout"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar">
<TextView
android:id="@+id/emptyStateTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/no_chats"
android:textColor="@color/text_secondary"
android:textSize="18sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Loading state -->
<ProgressBar
android:id="@+id/loadingProgressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<!-- Error state -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/errorStateLayout"
android:layout_width="0dp"
android:layout_height="0dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar">
<TextView
android:id="@+id/errorTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="@string/error_loading_chats"
android:textColor="@color/error"
android:textSize="16sp"
app:layout_constraintBottom_toTopOf="@id/retryButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/retryButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/retry"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Floating Action Button for creating new chat -->
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/createChatFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:contentDescription="@string/create_chat"
android:src="@drawable/ic_add"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:tint="@color/white" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,198 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".ui.profile.ProfileActivity">
<!-- Toolbar -->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/primary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.Material3.Dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:title="Профиль" />
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<!-- Avatar Section -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/avatarSection"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/avatarImageView"
android:layout_width="120dp"
android:layout_height="120dp"
android:clickable="true"
android:focusable="true"
android:contentDescription="User Avatar - Click to change"
android:scaleType="centerCrop"
android:background="@drawable/message_input_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/avatarHintTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="Нажмите на аватарку, чтобы изменить"
android:textColor="@color/text_secondary"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/avatarImageView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- First Name Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/firstNameInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginEnd="8dp"
android:hint="Имя"
app:layout_constraintEnd_toStartOf="@id/lastNameInputLayout"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/avatarSection">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/firstNameEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:textColor="@color/text_primary" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Last Name Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/lastNameInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:layout_marginStart="8dp"
android:hint="Фамилия"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/firstNameInputLayout"
app:layout_constraintTop_toBottomOf="@id/avatarSection">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/lastNameEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:textColor="@color/text_primary" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Email Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/emailInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="Email"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/firstNameInputLayout">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/emailEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:textColor="@color/text_primary" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Phone Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/phoneInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="Телефон"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/emailInputLayout">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/phoneEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="phone"
android:textColor="@color/text_primary" />
</com.google.android.material.textfield.TextInputLayout>
<!-- Save Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/saveButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:backgroundTint="@color/primary"
android:text="Сохранить"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/phoneInputLayout" />
<!-- Progress Bar -->
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/saveButton" />
<!-- Error Text -->
<TextView
android:id="@+id/errorTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textColor="@color/error"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/progressBar" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,178 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".ui.settings.SettingsActivity">
<!-- Toolbar -->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/primary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.Material3.Dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:title="Настройки" />
<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<!-- Server Settings Section -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/serverSection"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:background="@drawable/message_input_background"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/serverTitleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Сервер"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Server URL Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/serverUrlInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="Адрес сервера"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/serverTitleTextView">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/serverUrlEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textUri"
android:textColor="@color/text_primary" />
</com.google.android.material.textfield.TextInputLayout>
<!-- API Key Input -->
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/apiKeyInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:hint="API-ключ"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/serverUrlInputLayout">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/apiKeyEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:textColor="@color/text_primary" />
</com.google.android.material.textfield.TextInputLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Theme Settings Section -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/themeSection"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:background="@drawable/message_input_background"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/serverSection">
<TextView
android:id="@+id/themeTitleTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Тема"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Theme Toggle -->
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/themeSwitch"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Темная тема"
android:textColor="@color/text_primary"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/themeTitleTextView" />
</androidx.constraintlayout.widget.ConstraintLayout>
<!-- Save Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/saveButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="32dp"
android:backgroundTint="@color/primary"
android:text="Сохранить"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/themeSection" />
<!-- Progress Bar -->
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/saveButton" />
<!-- Error Text -->
<TextView
android:id="@+id/errorTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:textColor="@color/error"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/progressBar" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background"
tools:context=".ui.main.UserSelectionActivity">
<!-- Toolbar -->
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@color/primary"
android:elevation="4dp"
android:theme="@style/ThemeOverlay.Material3.Dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:titleTextColor="@color/white" />
<!-- Search View -->
<androidx.appcompat.widget.SearchView
android:id="@+id/searchView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:background="@drawable/message_input_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar"
app:queryHint="Поиск пользователей..." />
<!-- Users RecyclerView -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/usersRecyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:padding="8dp"
app:layout_constraintBottom_toTopOf="@id/doneButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/searchView"
tools:listitem="@layout/item_user" />
<!-- Done Button -->
<com.google.android.material.button.MaterialButton
android:id="@+id/doneButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:text="Создать чат"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:cornerRadius="8dp"
tools:visibility="visible" />
<!-- Progress Bar -->
<ProgressBar
android:id="@+id/progressBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- Empty State -->
<TextView
android:id="@+id/emptyTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="32dp"
android:gravity="center"
android:textColor="@color/text_secondary"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Пользователи не найдены" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,99 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
app:cardCornerRadius="8dp"
app:cardElevation="2dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:padding="16dp">
<!-- Chat Avatar -->
<ImageView
android:id="@+id/chatAvatarImageView"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginEnd="16dp"
android:background="@drawable/circle_background"
android:padding="2dp"
android:scaleType="centerInside"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@android:drawable/ic_menu_camera"
tools:srcCompat="@tools:sample/avatars" />
<!-- Chat Name -->
<TextView
android:id="@+id/chatNameTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toStartOf="@id/unreadCountBadge"
app:layout_constraintStart_toEndOf="@id/chatAvatarImageView"
app:layout_constraintTop_toTopOf="parent"
tools:text="Chat Name" />
<!-- Last Message -->
<TextView
android:id="@+id/lastMessageTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/text_secondary"
android:textSize="14sp"
app:layout_constraintEnd_toStartOf="@id/lastMessageTimeTextView"
app:layout_constraintStart_toEndOf="@id/chatAvatarImageView"
app:layout_constraintTop_toBottomOf="@id/chatNameTextView"
tools:text="Last message text" />
<!-- Last Message Time -->
<TextView
android:id="@+id/lastMessageTimeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:textColor="@color/text_hint"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/lastMessageTextView"
tools:text="12:30" />
<!-- Unread Count Badge -->
<TextView
android:id="@+id/unreadCountBadge"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="4dp"
android:background="@drawable/badge_background"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="10sp"
android:textStyle="bold"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/chatNameTextView"
app:layout_constraintBottom_toBottomOf="@id/chatNameTextView"
tools:text="5"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -0,0 +1,318 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<!-- Reply Indicator (for both sent and received messages) -->
<LinearLayout
android:id="@+id/replyIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:layout_marginEnd="8dp"
android:background="@color/reply_background"
android:orientation="vertical"
android:padding="8dp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible">
<TextView
android:id="@+id/replySenderText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:textStyle="bold"
tools:text="John Smith" />
<TextView
android:id="@+id/replyMessageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="2"
android:textColor="@color/text_secondary"
android:textSize="12sp"
tools:text="Original message text..." />
</LinearLayout>
<!-- Sent Message Bubble -->
<androidx.cardview.widget.CardView
android:id="@+id/sentMessageCard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="64dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="4dp"
android:visibility="gone"
app:cardBackgroundColor="@color/message_sent"
app:cardCornerRadius="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/replyIndicator"
tools:visibility="visible">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/sentReplyIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:layout_marginBottom="2dp"
android:background="@color/reply_background"
android:orientation="vertical"
android:padding="4dp"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/sentReplySenderText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:textStyle="bold"
tools:text="John Smith" />
<TextView
android:id="@+id/sentReplyMessageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="2"
android:textColor="@color/text_secondary"
android:textSize="12sp"
tools:text="Original message text..." />
</LinearLayout>
<!-- File Attachment for Sent Messages -->
<LinearLayout
android:id="@+id/sentFileLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="4dp"
android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:clickable="true"
android:focusable="true"
android:text="📎"
android:textSize="24sp" />
<TextView
android:id="@+id/sentFileNameText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:textColor="@color/message_sent_text"
android:textSize="14sp"
android:textStyle="bold"
tools:text="document.pdf" />
</LinearLayout>
<!-- Image Preview for Sent Messages -->
<ImageView
android:id="@+id/sentImagePreview"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="4dp"
android:adjustViewBounds="true"
android:clickable="true"
android:focusable="true"
android:scaleType="centerCrop"
android:visibility="gone"
tools:src="@drawable/ic_launcher_foreground"
tools:visibility="visible" />
<TextView
android:id="@+id/sentMessageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="280dp"
android:padding="12dp"
android:textAlignment="textEnd"
android:textColor="@color/message_sent_text"
android:textSize="16sp"
tools:text="This is a sent message" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Received Message Bubble -->
<androidx.cardview.widget.CardView
android:id="@+id/receivedMessageCard"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="64dp"
android:layout_marginBottom="4dp"
android:visibility="gone"
app:cardBackgroundColor="@color/message_received"
app:cardCornerRadius="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/replyIndicator"
tools:visibility="visible">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:id="@+id/receivedReplyIndicator"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:layout_marginBottom="2dp"
android:background="@color/reply_background"
android:orientation="vertical"
android:padding="4dp"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:id="@+id/receivedReplySenderText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_secondary"
android:textSize="12sp"
android:textStyle="bold"
tools:text="John Smith" />
<TextView
android:id="@+id/receivedReplyMessageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxLines="2"
android:textColor="@color/text_secondary"
android:textSize="12sp"
tools:text="Original message text..." />
</LinearLayout>
<!-- File Attachment for Received Messages -->
<LinearLayout
android:id="@+id/receivedFileLayout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="4dp"
android:gravity="center_horizontal"
android:orientation="vertical"
android:visibility="gone"
tools:visibility="visible">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="4dp"
android:clickable="true"
android:focusable="true"
android:text="📎"
android:textSize="24sp" />
<TextView
android:id="@+id/receivedFileNameText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="true"
android:focusable="true"
android:textColor="@color/message_received_text"
android:textSize="14sp"
android:textStyle="bold"
tools:text="document.pdf" />
</LinearLayout>
<!-- Image Preview for Received Messages -->
<ImageView
android:id="@+id/receivedImagePreview"
android:layout_width="200dp"
android:layout_height="200dp"
android:layout_marginStart="12dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="12dp"
android:layout_marginBottom="4dp"
android:adjustViewBounds="true"
android:clickable="true"
android:focusable="true"
android:scaleType="centerCrop"
android:visibility="gone"
tools:src="@drawable/ic_launcher_foreground"
tools:visibility="visible" />
<TextView
android:id="@+id/receivedMessageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="280dp"
android:padding="12dp"
android:textColor="@color/message_received_text"
android:textSize="16sp"
tools:text="This is a received message" />
</LinearLayout>
</androidx.cardview.widget.CardView>
<!-- Sender Name (for received messages) -->
<TextView
android:id="@+id/senderNameText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="4dp"
android:textColor="@color/text_secondary"
android:textSize="10sp"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/receivedMessageCard"
tools:text="John Doe"
tools:visibility="visible" />
<!-- Timestamp -->
<TextView
android:id="@+id/timestampText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="2dp"
android:layout_marginEnd="8dp"
android:maxLines="1"
android:textAlignment="textEnd"
android:textColor="@color/text_hint"
android:textSize="10sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/sentMessageCard"
tools:text="Я (17.01.2026 12:30) ✓"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,82 @@
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
app:cardCornerRadius="8dp"
app:cardElevation="2dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?android:attr/selectableItemBackground"
android:padding="16dp">
<!-- User Avatar -->
<ImageView
android:id="@+id/userAvatarImageView"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginEnd="12dp"
android:background="@drawable/circle_background"
android:padding="2dp"
android:scaleType="centerInside"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@android:drawable/ic_menu_camera"
tools:srcCompat="@tools:sample/avatars" />
<!-- User Name -->
<TextView
android:id="@+id/userNameTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/text_primary"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/userAvatarImageView"
app:layout_constraintTop_toTopOf="parent"
tools:text="Иван Иванов" />
<!-- User ID -->
<TextView
android:id="@+id/userIdTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="4dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/text_secondary"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/userAvatarImageView"
app:layout_constraintTop_toBottomOf="@id/userNameTextView"
tools:text="ID: 12345" />
<!-- User Email -->
<TextView
android:id="@+id/userEmailTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="2dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/text_hint"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/userAvatarImageView"
app:layout_constraintTop_toBottomOf="@id/userIdTextView"
tools:text="user@example.com" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>

View File

@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp">
<!-- Back Button -->
<ImageButton
android:id="@+id/backButton"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="20dp"
android:background="?android:attr/selectableItemBackground"
android:src="@drawable/ic_arrow_back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:contentDescription="Back" />
<!-- Chat Avatar -->
<ImageView
android:id="@+id/chatAvatarImageView"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="20dp"
android:background="@drawable/circle_background"
android:scaleType="centerCrop"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/backButton"
app:layout_constraintTop_toTopOf="parent"
tools:srcCompat="@tools:sample/avatars" />
<!-- Chat Name -->
<TextView
android:id="@+id/chatNameTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:ellipsize="end"
android:maxLines="1"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/chatAvatarImageView"
app:layout_constraintTop_toTopOf="parent"
tools:text="John Doe" />
</androidx.constraintlayout.widget.ConstraintLayout>