Загрузка данных
package com.example.monika
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.filled.Send
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 kotlinx.coroutines.launch
class MainActivity : ComponentActivity() {
// Настройки модели
private val modelName = "gemini-1.5-flash"
private val apiKey = BuildConfig.GEMINI_API_KEY // Ключ подтянется из build.gradle
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Инициализация модели
val generativeModel = GenerativeModel(
modelName = modelName,
apiKey = apiKey
)
setContent {
MaterialTheme {
val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
val scope = rememberCoroutineScope()
var mainInputText by remember { mutableStateOf("") }
var statusText by remember { mutableStateOf("") } // Для надписи "пишу ответ..."
ModalNavigationDrawer(
drawerState = drawerState,
drawerContent = {
ModalDrawerSheet {
Column(modifier = Modifier.padding(16.dp)) {
Text("Меню", fontSize = 20.sp, fontWeight = FontWeight.Bold)
Spacer(modifier = Modifier.height(16.dp))
NavigationDrawerItem(
label = { Text("Создать новый чат") },
selected = false,
onClick = {
mainInputText = ""
scope.launch { drawerState.close() }
}
)
}
}
}
) {
Scaffold(
topBar = {
Box(modifier = Modifier.fillMaxWidth().padding(16.dp)) {
IconButton(
onClick = { scope.launch { drawerState.open() } },
modifier = Modifier.align(Alignment.CenterStart)
) {
Icon(Icons.Default.Menu, contentDescription = "Меню")
}
Text(
text = "Monika",
fontSize = 20.sp,
fontWeight = FontWeight.Bold,
modifier = Modifier.align(Alignment.Center)
)
}
}
) { paddingValues ->
Column(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues)
.padding(16.dp)
) {
Text(
text = "Здравствуйте!",
fontSize = 42.sp,
fontWeight = FontWeight.Bold,
color = Color(0xFF6200EE) // Фиолетовый
)
Text(
text = "Начнем общение?",
fontSize = 18.sp,
color = Color.Gray
)
// Область для отображения статуса
Text(text = statusText, color = Color.Gray, fontSize = 14.sp)
Spacer(modifier = Modifier.weight(1f))
Row(
modifier = Modifier.fillMaxWidth(),
verticalAlignment = Alignment.CenterVertically
) {
OutlinedTextField(
value = mainInputText,
onValueChange = { mainInputText = it },
label = { Text("Спросить Монику") },
modifier = Modifier.weight(1f)
)
Spacer(modifier = Modifier.width(8.dp))
IconButton(onClick = {
scope.launch {
statusText = "пишу ответ...."
// Здесь будет вызов генерации:
// val response = generativeModel.generateContent(mainInputText)
statusText = ""
}
}) {
Icon(Icons.Default.Send, contentDescription = "Отправить")
}
}
}
}
}
}
}
}
}