Initial commit

This commit is contained in:
Алексей Будаев 2026-04-03 22:53:33 +08:00
commit cda6eb7ce0
680 changed files with 75081 additions and 0 deletions

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#E0E0E0"/>
<corners android:radius="16dp"/>
<padding android:left="12dp" android:top="8dp" android:right="12dp" android:bottom="8dp"/>
</shape>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#1976D2"/>
<corners android:radius="16dp"/>
<padding android:left="12dp" android:top="8dp" android:right="12dp" android:bottom="8dp"/>
</shape>

View file

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#FFFFFF"
android:pathData="M54,35 L54,73 M35,54 L73,54"
android:strokeWidth="6"
android:strokeColor="#FFFFFF"/>
<path
android:fillColor="#FFFFFF"
android:pathData="M54,42 A12,12 0 1,1 54,66 A12,12 0 1,1 54,42"
android:strokeWidth="3"
android:strokeColor="#FFFFFF"/>
</vector>

View file

@ -0,0 +1,117 @@
<?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:fitsSystemWindows="true"
tools:context=".ui.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="Mistral Chat"
app:titleCentered="true"
app:menu="@menu/main_menu" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
android:padding="16dp">
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/modelSelectorLayout"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox.ExposedDropdownMenu"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="@string/select_model"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<AutoCompleteTextView
android:id="@+id/modelSelector"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="none" />
</com.google.android.material.textfield.TextInputLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
android:clipToPadding="false"
app:layout_constraintBottom_toTopOf="@id/inputCard"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/modelSelectorLayout" />
<com.google.android.material.card.MaterialCardView
android:id="@+id/inputCard"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:cardCornerRadius="28dp"
app:cardElevation="4dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="16dp"
android:paddingEnd="8dp">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/inputField"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@android:color/transparent"
android:hint="@string/enter_message"
android:imeOptions="actionSend"
android:inputType="textMultiLine"
android:maxLines="5"
android:minHeight="56dp" />
<com.google.android.material.button.MaterialButton
android:id="@+id/sendButton"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="48dp"
android:layout_height="48dp"
app:icon="@android:drawable/ic_menu_send"
app:iconGravity="textStart"
app:iconPadding="0dp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.progressindicator.LinearProgressIndicator
android:id="@+id/progressIndicator"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="gone"
app:layout_anchor="@id/appBarLayout"
app:layout_anchorGravity="bottom" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>

View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="24dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/profile_title"
android:textAppearance="?attr/textAppearanceHeadlineSmall"
android:layout_marginBottom="16dp" />
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/nameLayout"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/profile_name">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/nameInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:maxLines="1" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/bioLayout"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:hint="@string/profile_bio">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/bioInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:minLines="3"
android:maxLines="5" />
</com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/preferencesLayout"
style="@style/Widget.Material3.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:hint="@string/profile_preferences">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/preferencesInput"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:minLines="2"
android:maxLines="4" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>

View file

@ -0,0 +1,29 @@
<?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/senderName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:textColor="#888888"
android:textStyle="bold"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/messageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="280dp"
android:padding="12dp"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/senderName" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -0,0 +1,19 @@
<?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"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp">
<TextView
android:id="@+id/messageText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:maxWidth="280dp"
android:padding="12dp"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/action_profile"
android:icon="@android:drawable/ic_menu_myplaces"
android:title="@string/profile"
app:showAsAction="ifRoom" />
<item
android:id="@+id/action_clear"
android:icon="@android:drawable/ic_menu_delete"
android:title="@string/clear_chat"
app:showAsAction="never" />
<item
android:id="@+id/action_about"
android:title="@string/about"
app:showAsAction="never" />
</menu>

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/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#6B4EFF"/>
<size android:width="48dp" android:height="48dp"/>
</shape>

View file

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_background">#6B4EFF</color>
<string name="about">About</string>
<string name="about_text">Mistral Chat\nPowered by Mistral AI</string>
<string name="app_name">Mistral Chat</string>
<string name="bio_hint">Tell AI about yourself...</string>
<string name="cancel">Cancel</string>
<string name="chat_cleared">Chat cleared</string>
<string name="clear_chat">Clear Chat</string>
<string name="clear_chat_confirm">Clear all messages?</string>
<string name="delete">Delete</string>
<string name="enter_message">Enter message</string>
<string name="name_hint">Your name</string>
<string name="no">No</string>
<string name="no_profile">No profile set</string>
<string name="profile">Profile</string>
<string name="profile_bio">Bio</string>
<string name="profile_deleted">Profile deleted</string>
<string name="profile_name">Name</string>
<string name="profile_preferences">Preferences</string>
<string name="profile_saved">Profile saved</string>
<string name="profile_title">User Profile</string>
<string name="save">Save</string>
<string name="select_model">Select Model</string>
<string name="send">Send</string>
<string name="yes">Yes</string>
<style name="Theme.MistralChat" parent="Theme.Material3.DayNight.NoActionBar">
<item name="colorPrimary">#6750A4</item>
<item name="colorOnPrimary">#FFFFFF</item>
<item name="colorPrimaryContainer">#EADDFF</item>
<item name="colorOnPrimaryContainer">#21005D</item>
<item name="colorSecondary">#625B71</item>
<item name="colorOnSecondary">#FFFFFF</item>
<item name="colorSecondaryContainer">#E8DEF8</item>
<item name="colorOnSecondaryContainer">#1D192B</item>
<item name="colorTertiary">#7D5260</item>
<item name="colorOnTertiary">#FFFFFF</item>
<item name="colorTertiaryContainer">#FFD8E4</item>
<item name="colorOnTertiaryContainer">#31111D</item>
<item name="colorError">#B3261E</item>
<item name="colorOnError">#FFFFFF</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">true</item>
</style>
</resources>