diff --git a/.gitignore b/.gitignore
old mode 100644
new mode 100755
diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index 26d3352..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index 600b76c..b268ef3 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -5,12 +5,6 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 0e106ff..e19a045 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -1,9 +1,9 @@
-
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 94a25f7..35eb1dd 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
old mode 100644
new mode 100755
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
old mode 100644
new mode 100755
index e484071..415cd0c
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -2,7 +2,7 @@ plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
- kotlin("kapt")
+ id("com.google.devtools.ksp")
id("com.google.dagger.hilt.android")
}
@@ -60,7 +60,7 @@ dependencies {
debugImplementation(libs.androidx.ui.test.manifest)
implementation(libs.hilt.android)
- kapt(libs.hilt.android.compiler)
+ ksp(libs.hilt.android.compiler)
implementation(libs.voyager.navigator)
diff --git a/app/data/.gitignore b/app/data/.gitignore
old mode 100644
new mode 100755
diff --git a/app/data/build.gradle.kts b/app/data/build.gradle.kts
old mode 100644
new mode 100755
diff --git a/app/data/proguard-rules.pro b/app/data/proguard-rules.pro
old mode 100644
new mode 100755
diff --git a/app/data/src/androidTest/java/ru/megboyzz/lks/data/ExampleInstrumentedTest.kt b/app/data/src/androidTest/java/ru/megboyzz/lks/data/ExampleInstrumentedTest.kt
old mode 100644
new mode 100755
diff --git a/app/data/src/main/AndroidManifest.xml b/app/data/src/main/AndroidManifest.xml
old mode 100644
new mode 100755
diff --git a/app/data/src/test/java/ru/megboyzz/lks/data/ExampleUnitTest.kt b/app/data/src/test/java/ru/megboyzz/lks/data/ExampleUnitTest.kt
old mode 100644
new mode 100755
diff --git a/app/domain/.gitignore b/app/domain/.gitignore
old mode 100644
new mode 100755
diff --git a/app/domain/build.gradle.kts b/app/domain/build.gradle.kts
old mode 100644
new mode 100755
diff --git a/app/domain/src/test/kotlin/EntityTest.kt b/app/domain/src/test/kotlin/EntityTest.kt
old mode 100644
new mode 100755
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
old mode 100644
new mode 100755
diff --git a/app/src/androidTest/java/ru/megboyzz/lks/profile/ExampleInstrumentedTest.kt b/app/src/androidTest/java/ru/megboyzz/lks/profile/ExampleInstrumentedTest.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/assets/dict.json b/app/src/main/assets/dict.json
new file mode 100755
index 0000000..4985ae4
--- /dev/null
+++ b/app/src/main/assets/dict.json
@@ -0,0 +1,105 @@
+{
+ "ИДО": "Институт дополнительного образования",
+ "ИМО": "Институт международного образования",
+ "ИДП": "Институт довузовской подготовки",
+ "ИТХТ": "Институт тонких химических технологий имени М.В. Ломоносова",
+ "ИИИ": "Институт искусственного интеллекта",
+ "БК250": "Базовая кафедра № 250 - математического обеспечения информационных систем",
+ "ИПТ": "Институт перспективных технологий и индустриального программирования",
+ "БК235": "Базовая кафедра № 235 - цифровых устройств и систем защиты информации",
+ "КСТУ": "Кафедра современных технологий управления",
+ "БК536": "Базовая кафедра № 536 - программного обеспечения систем РЭА",
+ "ИКДТ": "Институт кибербезопасности и цифровых технологий",
+ "УПО": "Управление платных образовательных услуг",
+ "КВМ3": "Кафедра высшей математики-3",
+ "КФТМ": "Кафедра физики и технической механики",
+ "УОРТ": "Учебный отдел Института радиотехнических и телекоммуникационных систем",
+ "БК333": "Базовая кафедра № 333 имени профессора Лобанова Б.С. - систем радиоэлектронной борьбы",
+ "БК334": "Базовая кафедра № 334 - дальней радиосвязи",
+ "БК338": "Базовая кафедра № 338 - космической радиоэлектроники",
+ "КИЭТ": "Кафедра инженерной экологии техносферы",
+ "КИЯ1": "Кафедра иностранных языков 1",
+ "КРЭСК": "Кафедра радиоэлектронных систем и комплексов",
+ "КБПФ": "Кафедра биотехнологии и промышленной фармации",
+ "КДГП": "Кафедра документоведения, истории государства и права",
+ "БК340": "Базовая кафедра № 340 - информационных космических систем",
+ "БК343": "Базовая кафедра № 343 - моделирования радиофизических процессов",
+ "ЦДО": "Центр дистанционного обучения",
+ "КФТМ2024": "Кафедра физики и технической механики (от 19.06.2024 № 26-ст)",
+ "КИТГУ": "Кафедра информационных технологий в государственном управлении",
+ "КМОСИТ": "Кафедра математического обеспечения и стандартизации информационных технологий",
+ "КПК": "Колледж программирования и кибербезопасности",
+ "КВТ": "Кафедра вычислительной техники",
+ "ИИТ": "Институт информационных технологий",
+ "КИГ": "Кафедра инженерной графики",
+ "КЭТ": "Кафедра экономической теории",
+ "КОИ": "Кафедра общей информатики",
+ "ККПРЭС": "Кафедра конструирования и производства радиоэлектронных средств",
+ "КСИ": "Кафедра системной инженерии",
+ "Аспирантура": "Аспирантура",
+ "ПОДГ": "Подготовительное отделение для иностранных граждан",
+ "Ректорат": "Ректорат",
+ "ИРИ": "Институт радиоэлектроники и информатики",
+ "ЮО": "Юридический отдел",
+ "УМУ": "Учебно-методическое управление",
+ "УК": "Управление кадров",
+ "ФФГБОУВОС": "Филиал федерального государственного бюджетного образовательного учреждения высшего образования «МИРЭА - Российский технологический университет» в г. Ставрополе",
+ "УГОЧС": "Управление гражданской обороны и чрезвычайных ситуаций",
+ "КН": "Кафедра наноэлектроники",
+ "Бухгалтерия": "Бухгалтерия",
+ "УОИМО": "Учебный отдел института международного образования",
+ "СПВ86": "Сектор «Проспект Вернадского, 86»",
+ "СИАО": "Студенческий информационно-архивный отдел",
+ "УЭФ": "Управление экономики и финансов",
+ "УМС": "Управление международных связей",
+ "УВСР": "Управление по воспитательной и социальной работе",
+ "ПР": "Первый отдел",
+ "СГИ": "Служба главного инженера",
+ "НТБ": "Научно-техническая библиотека",
+ "УИ": "Управление информатизации",
+ "КМС": "Кафедра метрологии и стандартизации",
+ "ССт20": "Сектор «Стромынка, 20»",
+ "ИАО": "Информационно-аналитический отдел",
+ "ОСПР": "Отдел судебно-претензионной работы",
+ "БК140": "Базовая кафедра № 140 - фотоники",
+ "УД": "Управление делами",
+ "УМП": "Управление мобилизационной подготовки",
+ "БК130": "Базовая кафедра № 130 - твердотельной электроники",
+ "НОЦТЦ": "Научно-образовательный центр «Технологический центр»",
+ "БК131": "Базовая кафедра № 131 - оптико-физических измерений",
+ "БК132": "Базовая кафедра № 132 - лазерной техники",
+ "БК136": "Базовая кафедра № 136 - СВЧ приборов и устройств",
+ "ФМШ": "Физико-математическая школа",
+ "КПВВ": "Курсы по подготовке к поступлению в вуз",
+ "ОМКО": "Отдел менеджмента качества образования",
+ "ОТСО": "Отдел технических средств обучения",
+ "ОЗЗИ": "Отдел обеспечения защиты информации",
+ "ОТК": "Отдел технического контроля",
+ "Автобаза": "Автобаза",
+ "Академия ТВ": "Академия ТВ",
+ "ГИВЦ": "Главный информационно-вычислительный центр",
+ "УНИР": "Управление научно-исследовательских разработок",
+ "КДЦ": "Культурно-досуговый центр",
+ "МНТЦИС": "Межотраслевой научно-технический центр интеллектуальных технологий обработки информации и управления «Интеллектуальные системы»",
+ "НТЦН": "Научно-технологический центр «Наука»",
+ "НИЦРСВТ": "Научно-исследовательский центр разработки специальной вычислительной техники",
+ "НИЦИПМ": "Научно-исследовательский центр «Инновационные полимерные материалы и изделия»",
+ "ОИТОСБ": "Отдел инженерно-технического обеспечения средств безопасности",
+ "ЦПИС": "Центр проектирования интегральных схем, устройств наноэлектроники и микросистем",
+ "ЦЯП": "Центр языковой подготовки",
+ "ИМПМО": "Институт молодежной политики и международных отношений",
+ "НИИМФП": "Научно-исследовательский институт медицинской и фармацевтической промышленности",
+ "ИПЦСНК": "Инженерно-научный производственный центр «Средства неразрушающего контроля» МИРЭА",
+ "УЦВ": "Учебный центр подготовки водителей",
+ "ИТП": "Институт технологического предпринимательства",
+ "СУЛСДФ": "Специализированная учебно-научная лаборатория сверхбыстрой динамики ферроиков",
+ "УНИИСУ": "Учебно-научный институт информатики и систем управления",
+ "УМЦИТ": "Учебно-методический центр интерактивных технологий",
+ "ОКБМИРЭА": "Особое конструкторское бюро МИРЭА",
+ "ИУС": "Институт учета и статистики",
+ "НИЦПНТП": "Научно-инжиниринговый центр «Перспективные научно-технические проекты»",
+ "Наноцентр МИРЭА": "Наноцентр МИРЭА",
+ "НТЦИРФ": "Научно-технологический центр «Интегральная радиофотоника»",
+ "РИО": "Редакционно-издательский отдел",
+ "ПЛМА": "Проблемная лаборатория молекулярной активации"
+}
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/MainActivity.kt b/app/src/main/java/ru/megboyzz/lks/profile/MainActivity.kt
old mode 100644
new mode 100755
index 84d197e..1dace87
--- a/app/src/main/java/ru/megboyzz/lks/profile/MainActivity.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/MainActivity.kt
@@ -26,6 +26,7 @@ import ru.megboyzz.lks.profile.ui.theme.MainTheme
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/data/App.kt b/app/src/main/java/ru/megboyzz/lks/profile/data/App.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/data/Core.kt b/app/src/main/java/ru/megboyzz/lks/profile/data/Core.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/data/di/CoroutineModule.kt b/app/src/main/java/ru/megboyzz/lks/profile/data/di/CoroutineModule.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/data/di/DataModule.kt b/app/src/main/java/ru/megboyzz/lks/profile/data/di/DataModule.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/data/repositories/LksRepositoryImpl.kt b/app/src/main/java/ru/megboyzz/lks/profile/data/repositories/LksRepositoryImpl.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/data/repositories/StudentRepositoryImpl.kt b/app/src/main/java/ru/megboyzz/lks/profile/data/repositories/StudentRepositoryImpl.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/domain/Scopes.kt b/app/src/main/java/ru/megboyzz/lks/profile/domain/Scopes.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/LksRequest.kt b/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/LksRequest.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/LksResponse.kt b/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/LksResponse.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/LksStudent.kt b/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/LksStudent.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/Resource.kt b/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/Resource.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/Student.kt b/app/src/main/java/ru/megboyzz/lks/profile/domain/entities/Student.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/domain/repositories/LksRepository.kt b/app/src/main/java/ru/megboyzz/lks/profile/domain/repositories/LksRepository.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/domain/repositories/StudentRepository.kt b/app/src/main/java/ru/megboyzz/lks/profile/domain/repositories/StudentRepository.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/HiltModule.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/HiltModule.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/Util.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/Util.kt
old mode 100644
new mode 100755
index 7463f33..8f2b7fc
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/Util.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/Util.kt
@@ -1,5 +1,9 @@
package ru.megboyzz.lks.profile.ui
+import android.content.ClipData
+import android.content.ClipboardManager
+import android.content.Context
+import android.widget.Toast
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
@@ -24,5 +28,27 @@ fun Modifier.clickableWithNormalRipple(
onLongClick = onLongClick
)
+@OptIn(ExperimentalFoundationApi::class)
@Composable
-fun Int.asPainter() = painterResource(this)
\ No newline at end of file
+fun Modifier.clickableWithNoEffect(
+ onClick: () -> Unit = {},
+ onLongClick: () -> Unit = {},
+) = this.combinedClickable(
+ interactionSource = remember { MutableInteractionSource() },
+ indication = null,
+ onClick = onClick,
+ onLongClick = onLongClick
+)
+
+@Composable
+fun Int.asPainter() = painterResource(this)
+
+fun Context.copyToClipboard(content: String) {
+ val clipboardManager = this.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
+
+ val clip = ClipData.newPlainText("label", content)
+
+ clipboardManager.setPrimaryClip(clip)
+
+ Toast.makeText(this, "Текст скопирован в буфер обмена", Toast.LENGTH_SHORT).show()
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/MainNavigator.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/MainNavigator.kt
old mode 100644
new mode 100755
index caddf38..bf73cdd
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/MainNavigator.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/MainNavigator.kt
@@ -9,14 +9,17 @@ import cafe.adriel.voyager.navigator.Navigator
import cafe.adriel.voyager.navigator.bottomSheet.BottomSheetNavigator
import cafe.adriel.voyager.transitions.SlideTransition
import ru.megboyzz.lks.profile.ui.screens.SearchScreen
+import ru.megboyzz.lks.profile.ui.theme.MainTheme
@Composable
fun MainNavigator(screen: Screen) {
BottomSheetNavigator(
sheetShape = RoundedCornerShape(12.dp)
) {
- Navigator(screen) {
- SlideTransition(it)
+ MainTheme {
+ Navigator(screen) {
+ SlideTransition(it)
+ }
}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SearchBottomComponents.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SearchBottomComponents.kt
old mode 100644
new mode 100755
index 31d8521..d006933
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SearchBottomComponents.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SearchBottomComponents.kt
@@ -1,7 +1,6 @@
package ru.megboyzz.lks.profile.ui.components
import androidx.compose.foundation.background
-import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -18,19 +17,18 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowRight
import androidx.compose.material.icons.filled.KeyboardArrowDown
-import androidx.compose.material.icons.filled.KeyboardArrowRight
import androidx.compose.material.icons.filled.KeyboardArrowUp
+import androidx.compose.material.icons.outlined.AccountCircle
+import androidx.compose.material.icons.outlined.Person
import androidx.compose.material3.Button
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.OutlinedTextFieldDefaults
import androidx.compose.material3.Text
-import androidx.compose.material3.TextFieldDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
@@ -42,7 +40,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.painter.Painter
-import androidx.compose.ui.graphics.vector.ImageVector
+import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview
@@ -62,7 +60,7 @@ fun ContextMenuContainer(
Column(
modifier = Modifier
- .padding(4.dp)
+ .padding(horizontal = 4.dp, vertical = 8.dp)
.fillMaxWidth()
.navigationBarsPadding(),
horizontalAlignment = Alignment.CenterHorizontally
@@ -264,7 +262,7 @@ fun ContextMenuButton(
Box(
modifier = Modifier
- .padding(8.dp)
+ .padding(0.dp)
.clickableWithNormalRipple(onClick = onClick)
) {
Row(
@@ -275,19 +273,20 @@ fun ContextMenuButton(
Row(
verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.spacedBy(4.dp)
+ horizontalArrangement = Arrangement.spacedBy(16.dp)
) {
Icon(
painter = icon,
contentDescription = null,
- tint = Color.Unspecified
+ tint = Color.Unspecified,
+ modifier = Modifier.size(36.dp)
)
Text(text = label)
}
Icon(
imageVector = Icons.AutoMirrored.Filled.KeyboardArrowRight,
- contentDescription = null
+ contentDescription = null,
)
}
@@ -311,10 +310,12 @@ fun ContextMenuButtonPrev() {
@Composable
fun LongPressCardContextMenu(
lksStudent: LksStudent,
- onClick: () -> Unit
+ onGoToVk: () -> Unit,
+ onCopyName: (String) -> Unit,
+ onCopyGroup: (String) -> Unit
) {
ContextMenuContainer {
- Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
Text(
"${lksStudent.studentFullName} ${lksStudent.group}"
@@ -323,7 +324,17 @@ fun LongPressCardContextMenu(
ContextMenuButton(
icon = R.drawable.vk_ic.asPainter(),
label = "Переидти в VK",
- onClick = onClick
+ onClick = onGoToVk
+ )
+ ContextMenuButton(
+ icon = rememberVectorPainter(Icons.Outlined.AccountCircle),
+ label = "Скопировать имя пользователя",
+ onClick = { onCopyName.invoke(lksStudent.studentFullName ?: "") }
+ )
+ ContextMenuButton(
+ icon = rememberVectorPainter(Icons.Outlined.Person),
+ label = "Скопировать группу",
+ onClick = { onCopyGroup.invoke(lksStudent.group ?: "") }
)
}
}
@@ -340,7 +351,9 @@ private fun LongPressCardContextMenuPrev() {
LongPressCardContextMenu(
lksStudent = lksStudent,
- onClick = {}
+ onGoToVk = {},
+ onCopyName = {},
+ onCopyGroup = {}
)
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SearchComponents.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SearchComponents.kt
old mode 100644
new mode 100755
index b9dbc8d..ea23c5d
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SearchComponents.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SearchComponents.kt
@@ -52,6 +52,7 @@ import kotlinx.coroutines.withContext
import ru.megboyzz.lks.profile.MainActivity
import ru.megboyzz.lks.profile.domain.entities.LksResponse
import ru.megboyzz.lks.profile.domain.entities.LksStudent
+import ru.megboyzz.lks.profile.ui.clickableWithNoEffect
import ru.megboyzz.lks.profile.ui.clickableWithNormalRipple
import ru.megboyzz.lks.profile.ui.screens.sub.LongPressMenu
import ru.megboyzz.lks.profile.ui.theme.MainTheme
@@ -120,12 +121,16 @@ fun ProfileCard(
@Composable
fun MainScaffold(
onFloatingButtonClick: () -> Unit,
+ onTopClick: () -> Unit = {},
content: @Composable (PaddingValues) -> Unit
) {
Scaffold(
topBar = {
- Surface(shadowElevation = 8.dp) {
+ Surface(
+ shadowElevation = 8.dp,
+ modifier = Modifier.clickableWithNoEffect(onTopClick)
+ ) {
TopAppBar(
title = { Text("LKS Search") }
)
@@ -217,7 +222,10 @@ fun CardsColumn(
}
}
- Column(modifier) {
+ Column(
+ modifier = modifier.fillMaxWidth(),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
LazyColumn(
state = listState,
contentPadding = PaddingValues(12.dp),
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SharedComponets.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/SharedComponets.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/model/SearchScreenModel.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/model/SearchScreenModel.kt
old mode 100644
new mode 100755
index 95d3eba..59a5875
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/model/SearchScreenModel.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/model/SearchScreenModel.kt
@@ -39,28 +39,27 @@ class SearchScreenModel @Inject constructor(
val state = MutableStateFlow(UiState.Idle)
- init {
- _curPageNumber.onEach {
+ suspend fun nextPage() {
+ if(_responseList.value.availablePages > _curPageNumber.value) {
+ _curPageNumber.emit(_curPageNumber.value + 1)
update(_request.value)
- }.launchIn(CoroutineScope(Dispatchers.IO))
+ }
}
- fun nextPage() = screenModelScope.launch { _curPageNumber.emit(_curPageNumber.value++) }
-
- fun resetStudents() = screenModelScope.launch {
+ suspend fun resetStudents() {
+ _curPageNumber.value = 1
_responseList.emit(LksResponse())
}
fun newSearch(request: LksRequest) {
screenModelScope.launch(Dispatchers.IO) {
+ state.emit(UiState.Loading)
resetStudents()
- update(request)
+ state.emit(update(request))
}
}
- private suspend fun update(request: LksRequest) {
-
- state.emit(UiState.Loading)
+ suspend fun update(request: LksRequest): UiState {
_request.emit(request)
@@ -68,21 +67,19 @@ class SearchScreenModel @Inject constructor(
val result = lksRepository.getPage(request, repoCookies, curPageNumber.value)
- if(result.isFailure) {
- state.emit(UiState.Error("Ошибка :-("))
- return
- }
+ if(result.isFailure)
+ return UiState.Error("Ошибка :-(")
val list = result.getOrElse { LksResponse() }
- val updatedStudents = _responseList.value.copy(
+ val updatedStudents = LksResponse(
students = _responseList.value.students + list.students,
- availablePages = _responseList.value.availablePages + list.availablePages
+ availablePages = list.availablePages
)
_responseList.emit(updatedStudents)
- state.emit(UiState.Idle)
+ return UiState.Idle
}
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/model/SignInScreenModel.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/model/SignInScreenModel.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/SearchScreen.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/SearchScreen.kt
old mode 100644
new mode 100755
index 858eb5a..abb90ed
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/SearchScreen.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/SearchScreen.kt
@@ -43,10 +43,9 @@ class SearchScreen : Screen {
val list by screenModel.responseList.collectAsState()
- val context = LocalContext.current
-
MainScaffold(
- onFloatingButtonClick = { bottomSheetNavigator.show(SearchBottomScreen(screenModel)) }
+ onFloatingButtonClick = { bottomSheetNavigator.show(SearchBottomScreen(screenModel)) },
+ onTopClick = { }
) {
when (state) {
@@ -60,7 +59,7 @@ class SearchScreen : Screen {
onColumnOverflow = {
//Toast.makeText(context, "Hello!", Toast.LENGTH_SHORT).show()
screenModel.nextPage()
- screenModel.update(screenModel.request.value)
+ //screenModel.update(screenModel.request.value)
//screenModel.nextPage()
}
)
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/SignInScreen.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/SignInScreen.kt
old mode 100644
new mode 100755
index ee30be8..c373b70
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/SignInScreen.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/SignInScreen.kt
@@ -1,5 +1,7 @@
package ru.megboyzz.lks.profile.ui.screens
+import android.os.Parcel
+import android.os.Parcelable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/LongPressMenu.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/LongPressMenu.kt
old mode 100644
new mode 100755
index d25fb96..9610665
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/LongPressMenu.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/LongPressMenu.kt
@@ -8,6 +8,7 @@ import androidx.compose.ui.platform.LocalContext
import cafe.adriel.voyager.core.screen.Screen
import ru.megboyzz.lks.profile.domain.entities.LksStudent
import ru.megboyzz.lks.profile.ui.components.LongPressCardContextMenu
+import ru.megboyzz.lks.profile.ui.copyToClipboard
class LongPressMenu(private val lksStudent: LksStudent) : Screen {
@@ -18,13 +19,20 @@ class LongPressMenu(private val lksStudent: LksStudent) : Screen {
val context = LocalContext.current
LongPressCardContextMenu(
- lksStudent = lksStudent
- ) {
- Toast.makeText(context, "Переход на VK", Toast.LENGTH_SHORT).show()
- val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://vk.com/search?q=${lksStudent.studentFullName?.split(" ")?.dropLast(1)?.joinToString(" ")}"))
- browserIntent.`package` = "com.vkontakte.android"
- context.startActivity(browserIntent)
- }
+ lksStudent = lksStudent,
+ onCopyName = {
+ context.copyToClipboard(lksStudent.studentFullName.toString())
+ },
+ onCopyGroup = {
+ context.copyToClipboard(lksStudent.studentFullName.toString())
+ },
+ onGoToVk = {
+ Toast.makeText(context, "Переход на VK", Toast.LENGTH_SHORT).show()
+ val browserIntent = Intent(Intent.ACTION_VIEW, Uri.parse("https://vk.com/search?q=${lksStudent.studentFullName?.split(" ")?.dropLast(1)?.joinToString(" ")}"))
+ browserIntent.`package` = "com.vkontakte.android"
+ context.startActivity(browserIntent)
+ }
+ )
}
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/SearchBottomScreen.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/SearchBottomScreen.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/theme/Color.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/theme/Color.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/theme/Theme.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/theme/Theme.kt
old mode 100644
new mode 100755
index 33aa5e3..016f20e
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/theme/Theme.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/theme/Theme.kt
@@ -12,47 +12,44 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
private val DarkColorScheme = darkColorScheme(
- primary = Purple80,
- secondary = PurpleGrey80,
- tertiary = Pink80
+ primary = Color(0xFFB0BEC5), // Серый с голубым оттенком
+ secondary = Color(0xFF90A4AE), // Более мягкий серо-голубой
+ tertiary = Color(0xFFB39DDB), // Нежный фиолетовый
+
+ background = Color(0xFF121212), // Темный фон для контраста
+ surface = Color(0xFF1E1E1E), // Темная поверхность
+ onPrimary = Color.Black,
+ onSecondary = Color.Black,
+ onTertiary = Color.Black,
+ onBackground = Color(0xFFECEFF1), // Светлый текст на темном фоне
+ onSurface = Color(0xFFECEFF1) // Светлый текст на поверхностях
)
private val LightColorScheme = lightColorScheme(
- primary = Purple40,
- secondary = PurpleGrey40,
- tertiary = Pink40,
+ primary = Color(0xFF90CAF9), // Голубой с пастельным оттенком
+ secondary = Color(0xFFB3E5FC), // Мягкий голубой
+ tertiary = Color(0xFFC5CAE9), // Светлый фиолетовый
- // Other default colors to override
- background = Color(0xFFFFFBFE),
- surface = Color(0xFFFFFBFE),
+ background = Color(0xFFF5F5F5), // Очень светлый фон
+ surface = Color(0xFFFFFFFF), // Чисто белая поверхность
onPrimary = Color.White,
- onSecondary = Color.White,
- onTertiary = Color.White,
- onBackground = Color(0xFF1C1B1F),
- onSurface = Color(0xFF1C1B1F),
-
+ onSecondary = Color.Black,
+ onTertiary = Color.Black,
+ onBackground = Color(0xFF212121), // Темный текст на светлом фоне
+ onSurface = Color(0xFF212121) // Темный текст на поверхностях
)
@Composable
fun MainTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
- // Dynamic color is available on Android 12+
- dynamicColor: Boolean = true,
+ 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 colorScheme = if (darkTheme) DarkColorScheme else LightColorScheme
MaterialTheme(
colorScheme = colorScheme,
typography = Typography,
content = content
)
-}
\ No newline at end of file
+}
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/theme/Type.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/theme/Type.kt
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/drawable/vk_ic.xml b/app/src/main/res/drawable/vk_ic.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
old mode 100644
new mode 100755
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
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
old mode 100644
new mode 100755
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
old mode 100644
new mode 100755
diff --git a/app/src/test/java/ru/megboyzz/lks/profile/ExampleUnitTest.kt b/app/src/test/java/ru/megboyzz/lks/profile/ExampleUnitTest.kt
old mode 100644
new mode 100755
diff --git a/build.gradle.kts b/build.gradle.kts
old mode 100644
new mode 100755
index cb4c2b2..338e8c2
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -5,5 +5,6 @@ plugins {
alias(libs.plugins.kotlin.compose) apply false
alias(libs.plugins.jetbrains.kotlin.jvm) apply false
alias(libs.plugins.android.library) apply false
+ id("com.google.devtools.ksp") version "2.0.0-1.0.24" apply false
id("com.google.dagger.hilt.android") version "2.51.1" apply false
}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
old mode 100644
new mode 100755
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
old mode 100644
new mode 100755
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
old mode 100644
new mode 100755
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
old mode 100644
new mode 100755
diff --git a/gradlew.bat b/gradlew.bat
old mode 100644
new mode 100755
diff --git a/settings.gradle.kts b/settings.gradle.kts
old mode 100644
new mode 100755