From 895ee0fe2b8335accd4621a492f891aea9269786 Mon Sep 17 00:00:00 2001 From: "ityurner02@mail.ru" Date: Sat, 14 Oct 2023 19:51:04 +0400 Subject: [PATCH] 2 lab --- .gitignore | 15 ++ .idea/.gitignore | 3 + .idea/.name | 1 + .idea/codeStyles/Project.xml | 123 ++++++++++++ .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/compiler.xml | 6 + .idea/gradle.xml | 20 ++ .idea/inspectionProfiles/Project_Default.xml | 41 ++++ .idea/kotlinc.xml | 6 + .idea/misc.xml | 9 + .idea/vcs.xml | 13 ++ app/.gitignore | 1 + app/build.gradle.kts | 67 +++++++ app/proguard-rules.pro | 21 ++ .../myapplication/ExampleInstrumentedTest.kt | 24 +++ app/src/main/AndroidManifest.xml | 28 +++ .../com/example/myapplication/MainActivity.kt | 43 ++++ .../example/myapplication/book/model/Book.kt | 18 ++ .../myapplication/composeui/BookView.kt | 62 ++++++ .../myapplication/composeui/Catalog.kt | 58 ++++++ .../example/myapplication/composeui/Enter.kt | 63 ++++++ .../example/myapplication/composeui/Loader.kt | 67 +++++++ .../example/myapplication/composeui/Main.kt | 70 +++++++ .../myapplication/composeui/Profile.kt | 35 ++++ .../myapplication/composeui/Registration.kt | 69 +++++++ .../example/myapplication/composeui/Search.kt | 66 +++++++ .../composeui/navigation/MainNavbar.kt | 162 +++++++++++++++ .../composeui/navigation/Screen.kt | 54 +++++ .../example/myapplication/ui/theme/Color.kt | 11 ++ .../example/myapplication/ui/theme/Theme.kt | 71 +++++++ .../example/myapplication/ui/theme/Type.kt | 33 ++++ .../res/drawable/ic_launcher_background.xml | 170 ++++++++++++++++ .../res/drawable/ic_launcher_foreground.xml | 30 +++ app/src/main/res/drawable/logo.png | Bin 0 -> 50260 bytes .../res/mipmap-anydpi-v26/ic_launcher.xml | 6 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 6 + app/src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes app/src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes app/src/main/res/values/colors.xml | 11 ++ app/src/main/res/values/strings.xml | 37 ++++ app/src/main/res/values/themes.xml | 5 + app/src/main/res/xml/backup_rules.xml | 13 ++ .../main/res/xml/data_extraction_rules.xml | 19 ++ .../example/myapplication/ExampleUnitTest.kt | 17 ++ build.gradle.kts | 5 + gradle.properties | 23 +++ gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 185 ++++++++++++++++++ gradlew.bat | 89 +++++++++ settings.gradle.kts | 17 ++ .../Lab1Mobile_merged.pdf | Bin 0 -> 1766784 bytes .../Тюрнер_ЛР1.docx | Bin 0 -> 631343 bytes .../Тюрнер_ЛР2.docx | Bin 0 -> 1037725 bytes 62 files changed, 1904 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/compiler.xml create mode 100644 .idea/gradle.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/kotlinc.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 app/.gitignore create mode 100644 app/build.gradle.kts create mode 100644 app/proguard-rules.pro create mode 100644 app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.kt create mode 100644 app/src/main/AndroidManifest.xml create mode 100644 app/src/main/java/com/example/myapplication/MainActivity.kt create mode 100644 app/src/main/java/com/example/myapplication/book/model/Book.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/BookView.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/Catalog.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/Enter.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/Loader.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/Main.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/Profile.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/Registration.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/Search.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/navigation/MainNavbar.kt create mode 100644 app/src/main/java/com/example/myapplication/composeui/navigation/Screen.kt create mode 100644 app/src/main/java/com/example/myapplication/ui/theme/Color.kt create mode 100644 app/src/main/java/com/example/myapplication/ui/theme/Theme.kt create mode 100644 app/src/main/java/com/example/myapplication/ui/theme/Type.kt create mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/logo.png create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 app/src/main/res/values/colors.xml create mode 100644 app/src/main/res/values/strings.xml create mode 100644 app/src/main/res/values/themes.xml create mode 100644 app/src/main/res/xml/backup_rules.xml create mode 100644 app/src/main/res/xml/data_extraction_rules.xml create mode 100644 app/src/test/java/com/example/myapplication/ExampleUnitTest.kt create mode 100644 build.gradle.kts create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle.kts create mode 100644 Отчеты и макеты/Lab1Mobile_merged.pdf create mode 100644 Отчеты и макеты/Тюрнер_ЛР1.docx create mode 100644 Отчеты и макеты/Тюрнер_ЛР2.docx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 0000000..b3405b3 --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +My Application \ No newline at end of file diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..7643783 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,123 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..79ee123 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b589d56 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..ae388c2 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,20 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..44ca2d9 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,41 @@ + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..0fc3113 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8978d23 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..189f4c8 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..5b9e049 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,67 @@ +plugins { + id("com.android.application") + id("org.jetbrains.kotlin.android") +} + +android { + namespace = "com.example.myapplication" + compileSdk = 33 + + defaultConfig { + applicationId = "com.example.myapplication" + minSdk = 24 + targetSdk = 33 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary = true + } + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = "1.8" + } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = "1.4.3" + } + packaging { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } +} + +dependencies { + + implementation("androidx.core:core-ktx:1.9.0") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.1") + implementation("androidx.activity:activity-compose:1.7.0") + implementation(platform("androidx.compose:compose-bom:2023.03.00")) + implementation("androidx.navigation:navigation-compose:2.6.0") + implementation("androidx.compose.ui:ui") + implementation("androidx.compose.ui:ui-graphics") + implementation("androidx.compose.ui:ui-tooling-preview") + implementation("androidx.compose.material3:material3") + testImplementation("junit:junit:4.13.2") + androidTestImplementation("androidx.test.ext:junit:1.1.5") + androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1") + androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00")) + androidTestImplementation("androidx.compose.ui:ui-test-junit4") + debugImplementation("androidx.compose.ui:ui-tooling") + debugImplementation("androidx.compose.ui:ui-test-manifest") +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..e9283cf --- /dev/null +++ b/app/src/androidTest/java/com/example/myapplication/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.example.myapplication + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("com.example.myapplication", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e013846 --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/MainActivity.kt b/app/src/main/java/com/example/myapplication/MainActivity.kt new file mode 100644 index 0000000..10c5f08 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/MainActivity.kt @@ -0,0 +1,43 @@ +package com.example.myapplication + +import android.content.res.Configuration +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview +import com.example.myapplication.composeui.navigation.MainNavbar +import com.example.myapplication.ui.theme.MyApplicationTheme + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + MyApplicationTheme { + Surface( + modifier = Modifier.fillMaxSize(), + color = MaterialTheme.colorScheme.background + ) { + MainNavbar() + } + } + } + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun MainNavbarPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + MainNavbar() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/book/model/Book.kt b/app/src/main/java/com/example/myapplication/book/model/Book.kt new file mode 100644 index 0000000..26677a3 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/book/model/Book.kt @@ -0,0 +1,18 @@ +package com.example.myapplication.book.model + +import java.io.Serializable +import com.example.myapplication.R + +data class Book( + val title: String, + val author: String, + val content: String +) : Serializable + +fun getBooks(): List { + return listOf( + Book("1984", "Дж. Оруэлл", "Был холодный ясный апрельский день, и часы пробили тринадцать."), + Book("Собачье сердце", "М.А. Булгаков", "У‑у-у-у-у-гу-гуг-гуу! О, гляньте на меня, я погибаю."), + Book("Вельд", "Р. Брэдбери", "— Джорджи, пожалуйста, посмотри детскую комнату. — А что с ней?") + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/BookView.kt b/app/src/main/java/com/example/myapplication/composeui/BookView.kt new file mode 100644 index 0000000..1d68c84 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/BookView.kt @@ -0,0 +1,62 @@ +package com.example.myapplication.composeui + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.example.myapplication.R +import com.example.myapplication.book.model.getBooks +import com.example.myapplication.ui.theme.MyApplicationTheme + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun BookView(id: Int) { + val book = getBooks()[id] + Column( + Modifier + .fillMaxWidth() + .padding(all = 10.dp) + ) { + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = book.title, onValueChange = {}, readOnly = true, + label = { + Text(stringResource(id = R.string.book_title)) + } + ) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = book.author, onValueChange = {}, readOnly = true, + label = { + Text(stringResource(id = R.string.author_name)) + } + ) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = book.content, onValueChange = {}, readOnly = true, + label = { + Text(stringResource(id = R.string.all_content)) + } + ) + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun BookViewPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + BookView(id = 0) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/Catalog.kt b/app/src/main/java/com/example/myapplication/composeui/Catalog.kt new file mode 100644 index 0000000..51ceee0 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/Catalog.kt @@ -0,0 +1,58 @@ +package com.example.myapplication.composeui + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import com.example.myapplication.R +import com.example.myapplication.book.model.getBooks +import com.example.myapplication.composeui.navigation.Screen +import com.example.myapplication.ui.theme.MyApplicationTheme + +@Composable +fun Catalog(navController: NavController?) { + Column(Modifier.padding(all = 10.dp)) { + getBooks().forEachIndexed() { index, book -> + val bookId = Screen.BookView.route.replace("{id}", index.toString()) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(all = 10.dp), + onClick = { navController?.navigate(bookId) }) { + Text("${book.title}") + } + } + Spacer(Modifier.padding(bottom = 40.dp)) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(all = 10.dp), + onClick = { navController?.navigate(Screen.Loader.route) }) { + Text(stringResource(id = R.string.add_book)) + } + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun CatalogPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + Catalog(navController = null) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/Enter.kt b/app/src/main/java/com/example/myapplication/composeui/Enter.kt new file mode 100644 index 0000000..81c2ad4 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/Enter.kt @@ -0,0 +1,63 @@ +package com.example.myapplication.composeui + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import com.example.myapplication.R +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import com.example.myapplication.composeui.navigation.Screen +import com.example.myapplication.ui.theme.MyApplicationTheme + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun Enter(navController: NavController?) { + Column(Modifier.fillMaxWidth().padding(all = 40.dp)) { + val loginStr = remember{mutableStateOf("")} + Text(stringResource(id = R.string.login)) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = loginStr.value, onValueChange = { newText -> loginStr.value = newText }, + ) + Spacer(Modifier.padding(bottom = 10.dp)) + val passwordStr = remember{mutableStateOf("")} + Text(stringResource(id = R.string.password)) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = passwordStr.value, onValueChange = { newText -> passwordStr.value = newText }, + ) + Spacer(Modifier.padding(bottom = 20.dp)) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(all = 10.dp), + onClick = { navController?.navigate(Screen.Profile.route) }) { + Text(stringResource(id = R.string.enter)) + } + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun EnterPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + Enter(navController = null) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/Loader.kt b/app/src/main/java/com/example/myapplication/composeui/Loader.kt new file mode 100644 index 0000000..254c3de --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/Loader.kt @@ -0,0 +1,67 @@ +package com.example.myapplication.composeui + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.example.myapplication.R +import androidx.compose.foundation.BorderStroke +import androidx.compose.material3.ButtonDefaults +import com.example.myapplication.ui.theme.MyApplicationTheme + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun Loader() { + Column(Modifier.fillMaxWidth().padding(all = 40.dp)) { + Text(stringResource(id = R.string.help_me_pls)) + Spacer(Modifier.padding(bottom = 20.dp)) + val titleStr = remember{ mutableStateOf("") } + Text(stringResource(id = R.string.book_title)) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = titleStr.value, onValueChange = { newText -> titleStr.value = newText }, + ) + Spacer(Modifier.padding(bottom = 10.dp)) + val authorStr = remember{ mutableStateOf("") } + Text(stringResource(id = R.string.author_name)) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = authorStr.value, onValueChange = { newText -> authorStr.value = newText }, + ) + Spacer(Modifier.padding(bottom = 20.dp)) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(all = 10.dp), + onClick = {}, colors = ButtonDefaults.buttonColors(containerColor = Color.LightGray, contentColor = Color.Black), + border = BorderStroke(3.dp, Color.DarkGray)) { + Text(stringResource(id = R.string.load_book)) + } + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun LoaderPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + Loader() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/Main.kt b/app/src/main/java/com/example/myapplication/composeui/Main.kt new file mode 100644 index 0000000..6396ec8 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/Main.kt @@ -0,0 +1,70 @@ +package com.example.myapplication.composeui + +import android.content.res.Configuration +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import com.example.myapplication.composeui.navigation.Screen +import com.example.myapplication.ui.theme.MyApplicationTheme +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.sp +import com.example.myapplication.R +import androidx.compose.ui.layout.ContentScale + +@Composable +fun Main(navController: NavController?) { + Column(Modifier.padding(all = 40.dp)) { + Text(stringResource(id = R.string.welcome), modifier = Modifier.fillMaxWidth(), fontSize = 24.sp, textAlign = TextAlign.Center) + Spacer(Modifier.padding(bottom = 20.dp)) + Image( + painter = painterResource(id = R.drawable.logo), + contentDescription = "logo", + contentScale = ContentScale.FillWidth, + modifier = Modifier.fillMaxWidth(), + ) + Spacer(Modifier.padding(bottom = 20.dp)) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(all = 10.dp), + onClick = { navController?.navigate(Screen.Enter.route) }) { + Text(stringResource(id = R.string.enter)) + } + Spacer(Modifier.padding(bottom = 20.dp)) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(all = 10.dp), + onClick = { navController?.navigate(Screen.Registration.route) }) { + Text(stringResource(id = R.string.create_acc)) + } + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun MainPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + Main(navController = null) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/Profile.kt b/app/src/main/java/com/example/myapplication/composeui/Profile.kt new file mode 100644 index 0000000..3b1f6be --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/Profile.kt @@ -0,0 +1,35 @@ +package com.example.myapplication.composeui + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.example.myapplication.R +import com.example.myapplication.ui.theme.MyApplicationTheme + +@Composable +fun Profile() { + Column(Modifier.padding(all = 40.dp)) { + Text(stringResource(id = R.string.stats)) + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun ProfilePreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + Profile() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/Registration.kt b/app/src/main/java/com/example/myapplication/composeui/Registration.kt new file mode 100644 index 0000000..c8ac77b --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/Registration.kt @@ -0,0 +1,69 @@ +package com.example.myapplication.composeui + +import android.content.res.Configuration +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import com.example.myapplication.composeui.navigation.Screen +import com.example.myapplication.ui.theme.MyApplicationTheme +import com.example.myapplication.R + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun Registration(navController: NavController?) { + Column(Modifier.fillMaxWidth().padding(all = 40.dp)) { + val mailStr = remember{mutableStateOf("")} + Text(stringResource(id = R.string.email)) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = mailStr.value, onValueChange = { newText -> mailStr.value = newText }, + ) + Spacer(Modifier.padding(bottom = 10.dp)) + val loginStr = remember{mutableStateOf("")} + Text(stringResource(id = R.string.login)) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = loginStr.value, onValueChange = { newText -> loginStr.value = newText }, + ) + Spacer(Modifier.padding(bottom = 10.dp)) + val passwordStr = remember{mutableStateOf("")} + Text(stringResource(id = R.string.password)) + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = passwordStr.value, onValueChange = { newText -> passwordStr.value = newText }, + ) + Spacer(Modifier.padding(bottom = 20.dp)) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(all = 10.dp), + onClick = { navController?.navigate(Screen.Enter.route) }) { + Text(stringResource(id = R.string.create_acc)) + } + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun RegistrationPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + Registration(navController = null) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/Search.kt b/app/src/main/java/com/example/myapplication/composeui/Search.kt new file mode 100644 index 0000000..59b1279 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/Search.kt @@ -0,0 +1,66 @@ +package com.example.myapplication.composeui + +import android.content.res.Configuration +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.colorResource +import com.example.myapplication.R +import com.example.myapplication.ui.theme.MyApplicationTheme + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun Search() { + Column( + Modifier + .fillMaxWidth() + .padding(all = 40.dp)) { + Column(Modifier.background(color = colorResource(R.color.green_200)).padding(all = 20.dp)) { + Text(stringResource(id = R.string.welcome), color = Color.White) + Text(stringResource(id = R.string.book_world), color = Color.White) + } + Spacer(Modifier.padding(bottom = 20.dp)) + val searchStr = remember{ mutableStateOf("") } + OutlinedTextField(modifier = Modifier.fillMaxWidth(), + value = searchStr.value, onValueChange = { newText -> searchStr.value = newText }, + ) + Spacer(Modifier.padding(bottom = 10.dp)) + Button( + modifier = Modifier + .fillMaxWidth() + .padding(all = 10.dp), + onClick = {}) { + Text(stringResource(id = R.string.search_book)) + } + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun SearchPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + Search() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/navigation/MainNavbar.kt b/app/src/main/java/com/example/myapplication/composeui/navigation/MainNavbar.kt new file mode 100644 index 0000000..8904e0d --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/navigation/MainNavbar.kt @@ -0,0 +1,162 @@ +package com.example.myapplication.composeui.navigation + +import android.content.res.Configuration +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.navigation.NavDestination +import androidx.navigation.NavDestination.Companion.hierarchy +import androidx.navigation.NavGraph.Companion.findStartDestination +import androidx.navigation.NavHostController +import androidx.navigation.NavType +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController +import androidx.navigation.navArgument +import com.example.myapplication.ui.theme.MyApplicationTheme +import com.example.myapplication.R +import com.example.myapplication.composeui.Main +import com.example.myapplication.composeui.Registration +import com.example.myapplication.composeui.Enter +import com.example.myapplication.composeui.Profile +import com.example.myapplication.composeui.Search +import com.example.myapplication.composeui.Loader +import com.example.myapplication.composeui.Catalog +import com.example.myapplication.composeui.BookView + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun Topbar( + navController: NavHostController, + currentScreen: Screen? +) { + TopAppBar( + colors = TopAppBarDefaults.smallTopAppBarColors( + containerColor = MaterialTheme.colorScheme.primary, + titleContentColor = MaterialTheme.colorScheme.onPrimary, + ), + title = { + Text(stringResource(currentScreen?.resourceId ?: R.string.app_name)) + }, + navigationIcon = { + if ( + navController.previousBackStackEntry != null + && (currentScreen == null || !currentScreen.showInBottomBar) + ) { + IconButton(onClick = { navController.navigateUp() }) { + Icon( + imageVector = Icons.Filled.ArrowBack, + contentDescription = null, + tint = MaterialTheme.colorScheme.onPrimary + ) + } + } + } + ) +} + +@Composable +fun Navbar( + navController: NavHostController, + currentDestination: NavDestination?, + modifier: Modifier = Modifier +) { + NavigationBar(modifier) { + Screen.bottomBarItems.forEach { screen -> + NavigationBarItem( + icon = { Icon(screen.icon, contentDescription = null) }, + label = { Text(stringResource(screen.resourceId)) }, + selected = currentDestination?.hierarchy?.any { it.route == screen.route } == true, + onClick = { + navController.navigate(screen.route) { + popUpTo(navController.graph.findStartDestination().id) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + } + ) + } + } +} + +@Composable +fun Navhost( + navController: NavHostController, + innerPadding: PaddingValues, modifier: + Modifier = Modifier +) { + NavHost( + navController, + startDestination = Screen.Main.route, + modifier.padding(innerPadding) + ) { + composable(Screen.Main.route) { Main(navController) } + composable(Screen.Registration.route) { Registration(navController) } + composable(Screen.Enter.route) { Enter(navController) } + composable(Screen.Profile.route) { Profile() } + composable(Screen.Search.route) { Search() } + composable(Screen.Loader.route) { Loader() } + composable(Screen.Catalog.route) { Catalog(navController) } + composable( + Screen.BookView.route, + arguments = listOf(navArgument("id") { type = NavType.IntType }) + ) { backStackEntry -> + backStackEntry.arguments?.let { BookView(it.getInt("id")) } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun MainNavbar() { + val navController = rememberNavController() + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentDestination = navBackStackEntry?.destination + val currentScreen = currentDestination?.route?.let { Screen.getItem(it) } + + Scaffold( + topBar = { + Topbar(navController, currentScreen) + }, + bottomBar = { + if (currentScreen == null || currentScreen.showInBottomBar) { + Navbar(navController, currentDestination) + } + } + ) { innerPadding -> + Navhost(navController, innerPadding) + } +} + +@Preview(name = "Light Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(name = "Dark Mode", showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +fun MainNavbarPreview() { + MyApplicationTheme { + Surface( + color = MaterialTheme.colorScheme.background + ) { + MainNavbar() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/composeui/navigation/Screen.kt b/app/src/main/java/com/example/myapplication/composeui/navigation/Screen.kt new file mode 100644 index 0000000..7b17e95 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/composeui/navigation/Screen.kt @@ -0,0 +1,54 @@ +package com.example.myapplication.composeui.navigation + +import androidx.annotation.StringRes +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.AccountCircle +import androidx.compose.material.icons.filled.Favorite +import androidx.compose.material.icons.filled.List +import androidx.compose.material.icons.filled.Search +import androidx.compose.ui.graphics.vector.ImageVector +import com.example.myapplication.R + +enum class Screen( + val route: String, + @StringRes val resourceId: Int, + val icon: ImageVector = Icons.Filled.Favorite, + val showInBottomBar: Boolean = true +) { + Main( + "main", R.string.main_title, showInBottomBar = false + ), + Registration( + "registration", R.string.registration_title, showInBottomBar = false + ), + Enter( + "enter", R.string.enter_title, showInBottomBar = false + ), + Profile( + "profile", R.string.profile, Icons.Filled.AccountCircle + ), + Search( + "search", R.string.search, Icons.Filled.Search + ), + Catalog( + "catalog", R.string.catalog, Icons.Filled.List + ), + Loader( + "loader", R.string.loader, showInBottomBar = false + ), + BookView( + "book-view/{id}", R.string.book_view_title, showInBottomBar = false + ); + + companion object { + val bottomBarItems = listOf( + Profile, + Search, + Catalog, + ) + fun getItem(route: String): Screen? { + val findRoute = route.split("/").first() + return values().find { value -> value.route.startsWith(findRoute) } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/ui/theme/Color.kt b/app/src/main/java/com/example/myapplication/ui/theme/Color.kt new file mode 100644 index 0000000..dc64ba1 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.example.myapplication.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Green = Color(0xFF07B618) +val Grey = Color(0xFF686769) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/ui/theme/Theme.kt b/app/src/main/java/com/example/myapplication/ui/theme/Theme.kt new file mode 100644 index 0000000..ffb65c5 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/ui/theme/Theme.kt @@ -0,0 +1,71 @@ +package com.example.myapplication.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.core.view.WindowCompat + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Green, + secondary = Grey, + tertiary = Pink40, + + // Other default colors to override + background = Color(0xFFD8E2F1), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + +) + +@Composable +fun MyApplicationTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = false, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + val view = LocalView.current + if (!view.isInEditMode) { + SideEffect { + val window = (view.context as Activity).window + window.statusBarColor = colorScheme.primary.toArgb() + WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = darkTheme + } + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/ui/theme/Type.kt b/app/src/main/java/com/example/myapplication/ui/theme/Type.kt new file mode 100644 index 0000000..924c485 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/ui/theme/Type.kt @@ -0,0 +1,33 @@ +package com.example.myapplication.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 20.sp, + lineHeight = 28.sp, + letterSpacing = 0.5.sp + ), + //Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 32.sp, + lineHeight = 40.sp, + letterSpacing = 0.sp + ), + labelLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 20.sp, + lineHeight = 28.sp, + letterSpacing = 0.5.sp + ) +) \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/logo.png b/app/src/main/res/drawable/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1515a51612ae3119267f9b45d2b03285936ba2 GIT binary patch literal 50260 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 xYI7mxowrT!BJ|91lV=aKq + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..c209e78ecd372343283f4157dcfd918ec5165bb3 GIT binary patch literal 1404 zcmV-?1%vuhNk&F=1pok7MM6+kP&il$0000G0000-002h-06|PpNX!5L00Dqw+t%{r zzW2vH!KF=w&cMnnN@{whkTw+#mAh0SV?YL=)3MimFYCWp#fpdtz~8$hD5VPuQgtcN zXl<@<#Cme5f5yr2h%@8TWh?)bSK`O z^Z@d={gn7J{iyxL_y_%J|L>ep{dUxUP8a{byupH&!UNR*OutO~0{*T4q5R6@ApLF! z5{w?Z150gC7#>(VHFJZ-^6O@PYp{t!jH(_Z*nzTK4 zkc{fLE4Q3|mA2`CWQ3{8;gxGizgM!zccbdQoOLZc8hThi-IhN90RFT|zlxh3Ty&VG z?Fe{#9RrRnxzsu|Lg2ddugg7k%>0JeD+{XZ7>Z~{=|M+sh1MF7~ zz>To~`~LVQe1nNoR-gEzkpe{Ak^7{{ZBk2i_<+`Bq<^GB!RYG+z)h;Y3+<{zlMUYd zrd*W4w&jZ0%kBuDZ1EW&KLpyR7r2=}fF2%0VwHM4pUs}ZI2egi#DRMYZPek*^H9YK zay4Iy3WXFG(F14xYsoDA|KXgGc5%2DhmQ1gFCkrgHBm!lXG8I5h*uf{rn48Z!_@ z4Bk6TJAB2CKYqPjiX&mWoW>OPFGd$wqroa($ne7EUK;#3VYkXaew%Kh^3OrMhtjYN?XEoY`tRPQsAkH-DSL^QqyN0>^ zmC>{#F14jz4GeW{pJoRpLFa_*GI{?T93^rX7SPQgT@LbLqpNA}<@2wH;q493)G=1Y z#-sCiRNX~qf3KgiFzB3I>4Z%AfS(3$`-aMIBU+6?gbgDb!)L~A)je+;fR0jWLL-Fu z4)P{c7{B4Hp91&%??2$v9iRSFnuckHUm}or9seH6 z>%NbT+5*@L5(I9j@06@(!{ZI?U0=pKn8uwIg&L{JV14+8s2hnvbRrU|hZCd}IJu7*;;ECgO%8_*W Kmw_-CKmY()leWbG literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..b2dfe3d1ba5cf3ee31b3ecc1ced89044a1f3b7a9 GIT binary patch literal 2898 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..4f0f1d64e58ba64d180ce43ee13bf9a17835fbca GIT binary patch literal 982 zcmV;{11bDcNk&G_0{{S5MM6+kP&il$0000G0000l001ul06|PpNU8t;00Dqo+t#w^ z^1csucXz7-Qrhzl9HuHB%l>&>1tG2^vb*E&k^T3$FG1eQZ51g$uv4V+kI`0<^1Z@N zk?Jjh$olyC%l>)Xq;7!>{iBj&BjJ`P&$fsCfpve_epJOBkTF?nu-B7D!hO=2ZR}

C%4 zc_9eOXvPbC4kzU8YowIA8cW~Uv|eB&yYwAObSwL2vY~UYI7NXPvf3b+c^?wcs~_t{ ze_m66-0)^{JdOMKPwjpQ@Sna!*?$wTZ~su*tNv7o!gXT!GRgivP}ec?5>l1!7<(rT zds|8x(qGc673zrvYIz;J23FG{9nHMnAuP}NpAED^laz3mAN1sy+NXK)!6v1FxQ;lh zOBLA>$~P3r4b*NcqR;y6pwyhZ3_PiDb|%n1gGjl3ZU}ujInlP{eks-#oA6>rh&g+!f`hv#_%JrgYPu z(U^&XLW^QX7F9Z*SRPpQl{B%x)_AMp^}_v~?j7 zapvHMKxSf*Mtyx8I}-<*UGn3)oHd(nn=)BZ`d$lDBwq_GL($_TPaS{UeevT(AJ`p0 z9%+hQb6z)U9qjbuXjg|dExCLjpS8$VKQ55VsIC%@{N5t{NsW)=hNGI`J=x97_kbz@ E0Of=7!TQj4N+cqN`nQhxvX7dAV-`K|Ub$-q+H-5I?Tx0g9jWxd@A|?POE8`3b8fO$T))xP* z(X?&brZw({`)WU&rdAs1iTa0x6F@PIxJ&&L|dpySV!ID|iUhjCcKz(@mE z!x@~W#3H<)4Ae(4eQJRk`Iz3<1)6^m)0b_4_TRZ+cz#eD3f8V;2r-1fE!F}W zEi0MEkTTx}8i1{`l_6vo0(Vuh0HD$I4SjZ=?^?k82R51bC)2D_{y8mi_?X^=U?2|F{Vr7s!k(AZC$O#ZMyavHhlQ7 zUR~QXuH~#o#>(b$u4?s~HLF*3IcF7023AlwAYudn0FV~|odGH^05AYPEfR)8p`i{n zwg3zPVp{+wOsxKc>)(pMupKF!Y2HoUqQ3|Yu|8lwR=?5zZuhG6J?H`bSNk_wPoM{u zSL{c@pY7+c2kck>`^q1^^gR0QB7Y?KUD{vz-uVX~;V-rW)PDcI)$_UjgVV?S?=oLR zf4}zz{#*R_{LkiJ#0RdQLNC^2Vp%JPEUvG9ra2BVZ92(p9h7Ka@!yf9(lj#}>+|u* z;^_?KWdzkM`6gqPo9;;r6&JEa)}R3X{(CWv?NvgLeOTq$cZXqf7|sPImi-7cS8DCN zGf;DVt3Am`>hH3{4-WzH43Ftx)SofNe^-#|0HdCo<+8Qs!}TZP{HH8~z5n`ExcHuT zDL1m&|DVpIy=xsLO>8k92HcmfSKhflQ0H~9=^-{#!I1g(;+44xw~=* zxvNz35vfsQE)@)Zsp*6_GjYD};Squ83<_?^SbALb{a`j<0Gn%6JY!zhp=Fg}Ga2|8 z52e1WU%^L1}15Ex0fF$e@eCT(()_P zvV?CA%#Sy08_U6VPt4EtmVQraWJX` zh=N|WQ>LgrvF~R&qOfB$!%D3cGv?;Xh_z$z7k&s4N)$WYf*k=|*jCEkO19{h_(%W4 zPuOqbCw`SeAX*R}UUsbVsgtuG?xs(#Ikx9`JZoQFz0n*7ZG@Fv@kZk`gzO$HoA9kN z8U5{-yY zvV{`&WKU2$mZeoBmiJrEdzUZAv1sRxpePdg1)F*X^Y)zp^Y*R;;z~vOv-z&)&G)JQ{m!C9cmziu1^nHA z`#`0c>@PnQ9CJKgC5NjJD8HM3|KC(g5nnCq$n0Gsu_DXk36@ql%npEye|?%RmG)

FJ$wK}0tWNB{uH;AM~i literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000000000000000000000000000000000000..948a3070fe34c611c42c0d3ad3013a0dce358be0 GIT binary patch literal 1900 zcmV-y2b1_xNk&Fw2LJ$9MM6+kP&il$0000G0001A003VA06|PpNH75a00DqwTbm-~ zullQTcXxO9ki!OCRx^i?oR|n!<8G0=kI^!JSjFi-LL*`V;ET0H2IXfU0*i>o6o6Gy zRq6Ap5(_{XLdXcL-MzlN`ugSdZY_`jXhcENAu)N_0?GhF))9R;E`!bo9p?g?SRgw_ zEXHhFG$0{qYOqhdX<(wE4N@es3VIo$%il%6xP9gjiBri+2pI6aY4 zJbgh-Ud|V%3O!IcHKQx1FQH(_*TK;1>FQWbt^$K1zNn^cczkBs=QHCYZ8b&l!UV{K z{L0$KCf_&KR^}&2Fe|L&?1I7~pBENnCtCuH3sjcx6$c zwqkNkru);ie``q+_QI;IYLD9OV0ZxkuyBz|5<$1BH|vtey$> z5oto4=l-R-Aaq`Dk0}o9N0VrkqW_#;!u{!bJLDq%0092{Ghe=F;(kn} z+sQ@1=UlX30+2nWjkL$B^b!H2^QYO@iFc0{(-~yXj2TWz?VG{v`Jg zg}WyYnwGgn>{HFaG7E~pt=)sOO}*yd(UU-D(E&x{xKEl6OcU?pl)K%#U$dn1mDF19 zSw@l8G!GNFB3c3VVK0?uyqN&utT-D5%NM4g-3@Sii9tSXKtwce~uF zS&Jn746EW^wV~8zdQ1XC28~kXu8+Yo9p!<8h&(Q({J*4DBglPdpe4M_mD8AguZFn~ ztiuO~{6Bx?SfO~_ZV(GIboeR9~hAym{{fV|VM=77MxDrbW6`ujX z<3HF(>Zr;#*uCvC*bpoSr~C$h?_%nXps@A)=l_;({Fo#6Y1+Zv`!T5HB+)#^-Ud_; zBwftPN=d8Vx)*O1Mj+0oO=mZ+NVH*ptNDC-&zZ7Hwho6UQ#l-yNvc0Cm+2$$6YUk2D2t#vdZX-u3>-Be1u9gtTBiMB^xwWQ_rgvGpZ6(C@e23c!^K=>ai-Rqu zhqT`ZQof;9Bu!AD(i^PCbYV%yha9zuoKMp`U^z;3!+&d@Hud&_iy!O-$b9ZLcSRh? z)R|826w}TU!J#X6P%@Zh=La$I6zXa#h!B;{qfug}O%z@K{EZECu6zl)7CiNi%xti0 zB{OKfAj83~iJvmpTU|&q1^?^cIMn2RQ?jeSB95l}{DrEPTW{_gmU_pqTc)h@4T>~& zluq3)GM=xa(#^VU5}@FNqpc$?#SbVsX!~RH*5p0p@w z;~v{QMX0^bFT1!cXGM8K9FP+=9~-d~#TK#ZE{4umGT=;dfvWi?rYj;^l_Zxywze`W z^Cr{55U@*BalS}K%Czii_80e0#0#Zkhlij4-~I@}`-JFJ7$5{>LnoJSs??J8kWVl6|8A}RCGAu9^rAsfCE=2}tHwl93t0C?#+jMpvr7O3`2=tr{Hg$=HlnjVG^ewm|Js0J*kfPa6*GhtB>`fN!m#9J(sU!?(OSfzY*zS(FJ<-Vb zfAIg+`U)YaXv#sY(c--|X zEB+TVyZ%Ie4L$gi#Fc++`h6%vzsS$pjz9aLt+ZL(g;n$Dzy5=m=_TV(3H8^C{r0xd zp#a%}ht55dOq?yhwYPrtp-m1xXp;4X;)NhxxUpgP%XTLmO zcjaFva^}dP3$&sfFTIR_jC=2pHh9kpI@2(6V*GQo7Ws)`j)hd+tr@P~gR*2gO@+1? zG<`_tB+LJuF|SZ9tIec;h%}}6WClT`L>HSW?E{Hp1h^+mlbf_$9zA>!ug>NALJsO{ mU%z=YwVD?}XMya)Bp;vlyE5&E_6!fzx9pwrdz474!~g(M6R?N? literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000000000000000000000000000000000000..1b9a6956b3acdc11f40ce2bb3f6efbd845cc243f GIT binary patch literal 3918 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�(p-{x$&=IACIfoAR!za)F-^da-t3#0Dycnp zwO~NVXwXCl;jE<}>%@xz|=8fIJAB?>+E{7)|4l${4ngA3G|=r z2Dyv;VVWSgZx9Wj>qUjleGl3Ei9K4>h!(lPS%8VOG>Xu0%6VDz^O=bjJmuP7>DeUv zrbI}MlHB^^d?{zv6d=@_ZD2lg1&G7UjnVN{1}9WkaM3H~btX0GtSzB+tZ^qRgWo4m z!GmimlG$=wgXCnr6j@m<1gAL46#T~5Bnm=2{^@>|t&`9mkEPddj zAvG~@Tv~TAm2i%VW}R-g(Z0)z-Y|szHr@rk>4MAyG*Ma*7Yh#H7(!-5>DZ@8r;_dx z{prSe<>~099F8vsYd2xff7uAS%7{S)f(|@me3t2$iy&NEc7OUEchp@9A|X;;IA>8!oX+y(BKJ$EzV* znR$z;!L$s7uy@{OT~nG#B!NRraT8(X##Ho!0r_o@gg0CA-9H^;-uE&?$2$nHv_00o z%cbuUc-tCx$Uh&EZ4Nf4Zgqv)Y6>usG3>GeQnxx_Z6+PcbX-+ysbt1hQ`K1LDpOE? zrAhIZhSN9yVIAOa22gn577tbc&i3|3V8NWy&!tw##`}9*x}gtI^h1DzZRA>UuaJG) zaZ7j)dq!O}{?#8Y7~7i6fHh4{`pL?>-18|p!S75Y#^DM>-S3)vuZG+Q7l@ek zQP~#cBpWgg#mApc_sPYjpw8odQuRokmTkzcNl`^CcKB7e&;zViV;{Y{o^Y$%7i0m# z62%#1Lq!RC?}lK>%mp}T!3Xv;L*0v*>USLm``N%>w>@fwC+#T&Tx2bN4w(20JB}oU zuSa6v^kXi0xPs?pbaOHnyiqq6By1EZY9OZ^^QA>{q-Hsd&m`pbQ%8121aWG-F5xf zlZ%;B{;C>X19|`^_?dVyCq>n+41w7|!tUS!{9rHlbhX=SZO5CQ^;!Du_E7*`GiR^Q w)2!4MKjfSAeNo!9>IaV6aUZ*?W>} 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

UmY2RIYtNPVDpE$%vda+HD#3m z&VuXJ{BK&Qe+rBa7eq}Q(bq|tn(RrJAk|ztj2(i{d>nmQnM?;HF2k&9sA6up5tmjl z7lySlzMbifH17-m-Lwa_F&e7nOH?ESi3#ckR3tsM+jsck3`oG!uMS}|eAwVXv>}qxwq?QY%QJ0}r@^;fhuUA9W z*BVl>TGo&N004@xSiwDUXUvp51sVmqO3m)=B55aPwf@0=e}cN+$-BdKxY`YrT_4)0 z_d10#i44Q*rFr8MC>*)v$EJvz``(pb{e&*6k+b zsMz%($|1+8hn8c2?P(l@;Rb&CsZeYoCI3?2!LqjbwPXW3z4G$Qfj=cT5Yb%vY0(AX oeb?AaKtwrnc|$|zzw9vfvn^aJJ!zd)XFXqqy0000001=f@-~a#s literal 0 HcmV?d00001 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..99bbc41 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,11 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF07B618 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..acb01fe --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,37 @@ + + My Application + +

TurnerLibrary

+ + Регистрация + Вход + Профиль + Поиск + Загрузка + Каталог + Книга + Войти + Создать аккаунт + Почта + Логин + Пароль + +

Пользователь

\n +

User1

\n\n +

Дата регистрации

\n +

20.09.2023

\n\n +

Прочитано книг

\n +

7

\n\n +

Загружено книг

\n +

0

+
+ Название + Автор + Содержание + Добро пожаловать + в мир книг! + Найти + Загрузить + Добавить + Вы можете помочь нашей библиотеке, загрузив свою книгу. + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..e48770a --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + + +