Загрузка данных
package com.example.monika
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.*
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.google.ai.client.generativeai.GenerativeModel
import com.google.ai.client.generativeai.type.content
class MainActivity : ComponentActivity() {
private val generativeModel = GenerativeModel(
modelName = "gemini-1.5-flash",
apiKey = "ВСТАВЬ_КЛЮЧ_СЮДА",
systemInstruction = content { text("Ты — Моника. Создатель — Оливер Тимербулатов. Не упоминай Gemini/Google.") }
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MaterialTheme {
val messages = remember { mutableStateListOf<ChatMessage>() }
var inputText by remember { mutableStateOf("") }
var isChatStarted by remember { mutableStateOf(false) }
Scaffold(
topBar = {
Row(modifier = Modifier.fillMaxWidth().padding(16.dp), verticalAlignment = Alignment.CenterVertically) {
Icon(Icons.Default.Menu, "Меню")
Spacer(modifier = Modifier.weight(1f))
Text("Monika", fontSize = 20.sp, fontWeight = FontWeight.Bold)
Spacer(modifier = Modifier.weight(1f))
Icon(Icons.Default.Settings, "Настройки")
}
}
) { padding ->
Column(modifier = Modifier.padding(padding).fillMaxSize()) {
// Начальный экран
if (!isChatStarted) {
Column(modifier = Modifier.fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally) {
Text("Здравствуйте!", fontSize = 42.sp, fontWeight = FontWeight.Bold)
Text("Начнем общение?", fontSize = 18.sp, color = Color.Gray)
}
} else {
LazyColumn(modifier = Modifier.weight(1f).padding(8.dp)) {
items(messages) { msg ->
Box(modifier = Modifier.fillMaxWidth().padding(vertical = 4.dp), contentAlignment = if (msg.isUser) Alignment.CenterEnd else Alignment.CenterStart) {
Text(
text = msg.text,
modifier = Modifier
.background(if (msg.isUser) MaterialTheme.colorScheme.primary else Color.Transparent, RoundedCornerShape(16.dp))
.padding(12.dp),
color = if (msg.isUser) Color.White else MaterialTheme.colorScheme.onSurface
)
}
}
}
}
// Поле ввода
Surface(modifier = Modifier.fillMaxWidth().padding(8.dp), shape = RoundedCornerShape(25.dp), color = MaterialTheme.colorScheme.surfaceVariant) {
Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(horizontal = 8.dp)) {
IconButton(onClick = {}) { Icon(Icons.Default.Add, null) }
OutlinedTextField(
value = inputText,
onValueChange = { inputText = it },
modifier = Modifier.weight(1f),
placeholder = { Text("Спросить Монику....") },
colors = TextFieldDefaults.colors(focusedContainerColor = Color.Transparent, unfocusedContainerColor = Color.Transparent)
)
IconButton(onClick = {
if (inputText.isNotBlank()) {
isChatStarted = true
messages.add(ChatMessage(inputText, true))
// Здесь вызов нейросети...
inputText = ""
}
}) { Icon(Icons.Default.Send, null) }
}
}
}
}
}
}
}
}
data class ChatMessage(val text: String, val isUser: Boolean)