From a28b5fa5b88c76d0afc2fa3cf32fc5c39e963054 Mon Sep 17 00:00:00 2001 From: denis0001-dev Date: Sun, 7 Sep 2025 16:13:02 +0300 Subject: [PATCH] Clear --- app/build.gradle.kts | 10 +++ app/src/main/AndroidManifest.xml | 5 +- app/src/main/java/ru/fromchat/Constants.kt | 3 + app/src/main/java/ru/fromchat/ui/App.kt | 92 ---------------------- build.gradle.kts | 1 + gradle/libs.versions.toml | 10 +++ 6 files changed, 26 insertions(+), 95 deletions(-) create mode 100644 app/src/main/java/ru/fromchat/Constants.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index f43701d..71bb36e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,6 +4,7 @@ plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) + alias(libs.plugins.kotlin.serialization) } kotlin { @@ -54,6 +55,15 @@ dependencies { implementation(libs.androidx.material3) implementation(libs.androidx.navigation.compose) implementation(libs.androidx.material.icons.extended) + + implementation(libs.ktor.client.core) + implementation(libs.ktor.client.okhttp) + implementation(libs.ktor.client.websockets) + implementation(libs.ktor.client.logging) + implementation(libs.ktor.client.content.negotiation) + implementation(libs.ktor.serialization.json) + implementation(libs.kotlinx.serialization.json) + testImplementation(libs.junit) androidTestImplementation(libs.androidx.junit) androidTestImplementation(libs.androidx.espresso.core) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9f6fba6..d42e51b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - + + diff --git a/app/src/main/java/ru/fromchat/Constants.kt b/app/src/main/java/ru/fromchat/Constants.kt new file mode 100644 index 0000000..058ef50 --- /dev/null +++ b/app/src/main/java/ru/fromchat/Constants.kt @@ -0,0 +1,3 @@ +package ru.fromchat + +const val API_HOST = "fromchat.ru" \ No newline at end of file diff --git a/app/src/main/java/ru/fromchat/ui/App.kt b/app/src/main/java/ru/fromchat/ui/App.kt index 18ae74c..fdf326a 100644 --- a/app/src/main/java/ru/fromchat/ui/App.kt +++ b/app/src/main/java/ru/fromchat/ui/App.kt @@ -1,102 +1,10 @@ package ru.fromchat.ui -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.filled.Chat -import androidx.compose.material.icons.automirrored.outlined.Chat -import androidx.compose.material.icons.filled.Group -import androidx.compose.material.icons.filled.Settings -import androidx.compose.material.icons.outlined.Group -import androidx.compose.material.icons.outlined.Settings -import androidx.compose.material3.Icon -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem -import androidx.compose.material3.Scaffold -import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Modifier -import androidx.navigation.compose.NavHost -import androidx.navigation.compose.composable -import androidx.navigation.compose.rememberNavController - -@Composable -fun AppNavigationBar(selectedItem: Int, onSelectedItemChange: (Int) -> Unit) { - val items = listOf("Chats", "DMs", "Settings") - val selectedIcons = listOf( - Icons.Filled.Group, - Icons.AutoMirrored.Filled.Chat, - Icons.Filled.Settings - ) - val unselectedIcons = listOf( - Icons.Outlined.Group, - Icons.AutoMirrored.Outlined.Chat, - Icons.Outlined.Settings - ) - - NavigationBar { - items.forEachIndexed { index, item -> - NavigationBarItem( - icon = { - Icon( - if (selectedItem == index) selectedIcons[index] else unselectedIcons[index], - contentDescription = item, - ) - }, - label = { Text(item) }, - selected = selectedItem == index, - onClick = { onSelectedItemChange(index) }, - ) - } - } -} @Composable fun App() { FromChatTheme { - var selectedItem by remember { mutableIntStateOf(0) } - val navController = rememberNavController() - LaunchedEffect(selectedItem) { - navController.navigate( - when (selectedItem) { - 0 -> "chats" - 1 -> "dms" - 2 -> "settings" - else -> error("") - } - ) - } - - Scaffold( - modifier = Modifier.fillMaxSize(), - bottomBar = { - AppNavigationBar( - selectedItem = selectedItem, - onSelectedItemChange = { selectedItem = it } - ) - } - ) { innerPadding -> - NavHost( - navController = navController, - startDestination = "chats", - modifier = Modifier.padding(innerPadding) - ) { - composable("chats") { - Text("Chats") - } - composable("dms") { - Text("DMs") - } - composable("settings") { - Text("Settings") - } - } - } } } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 952b930..5ba8ae0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,4 +3,5 @@ plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false + alias(libs.plugins.kotlin.serialization) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 57c2095..d7658e4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -10,6 +10,8 @@ activityCompose = "1.10.1" composeBom = "2025.08.01" materialIconsExtended = "1.7.8" navigationCompose = "2.9.3" +ktor = "3.2.3" +kotlinxSerializationJson = "1.9.0" [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } @@ -28,9 +30,17 @@ androidx-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-man androidx-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } androidx-material3 = { group = "androidx.compose.material3", name = "material3" } androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" } +ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" } +ktor-client-okhttp = { group = "io.ktor", name = "ktor-client-okhttp", version.ref = "ktor" } +ktor-client-websockets = { group = "io.ktor", name = "ktor-client-websockets", version.ref = "ktor" } +ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } +ktor-serialization-json = { module = "io.ktor:ktor-serialization-kotlinx-json", version.ref = "ktor" } +kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxSerializationJson" } +ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } +kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }