diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml
index b268ef3..a5d16f7 100644
--- a/.idea/deploymentTargetSelector.xml
+++ b/.idea/deploymentTargetSelector.xml
@@ -5,6 +5,9 @@
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
index cde3e19..7061a0d 100644
--- a/.idea/inspectionProfiles/Project_Default.xml
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -49,6 +49,10 @@
+
+
+
+
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b2c751a..31d4edd 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/.kotlin/errors/errors-1740239876325.log b/.kotlin/errors/errors-1740239876325.log
new file mode 100644
index 0000000..3327958
--- /dev/null
+++ b/.kotlin/errors/errors-1740239876325.log
@@ -0,0 +1,76 @@
+kotlin version: 2.0.0
+error message: org.jetbrains.kotlin.util.FileAnalysisException: While analysing /home/megboyzz/workdir/Projects/AndroidStudioProjects/LKSPROFILE/app/src/main/java/ru/megboyzz/lks/profile/ui/components/MainNavigation.kt:34:1: java.lang.IllegalStateException: Zero or multiple overrides found for serialize in FirRegularClassSymbol ru/megboyzz/lks/profile/ui/components/SearchScreen
+ at org.jetbrains.kotlin.util.AnalysisExceptionsKt.wrapIntoFileAnalysisExceptionIfNeeded(AnalysisExceptions.kt:56)
+ at org.jetbrains.kotlin.fir.FirCliExceptionHandler.handleExceptionOnFileAnalysis(Utils.kt:180)
+ at org.jetbrains.kotlin.fir.pipeline.AnalyseKt.runCheckers(analyse.kt:46)
+ at org.jetbrains.kotlin.fir.pipeline.ConvertToIrKt.runPlatformCheckers(convertToIr.kt:62)
+ at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineKt.compileModuleToAnalyzedFir(jvmCompilerPipeline.kt:316)
+ at org.jetbrains.kotlin.cli.jvm.compiler.pipeline.JvmCompilerPipelineKt.compileModulesUsingFrontendIrAndLightTree(jvmCompilerPipeline.kt:116)
+ at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:155)
+ at org.jetbrains.kotlin.cli.jvm.K2JVMCompiler.doExecute(K2JVMCompiler.kt:50)
+ at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:104)
+ at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:48)
+ at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:101)
+ at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:453)
+ at org.jetbrains.kotlin.incremental.IncrementalJvmCompilerRunner.runCompiler(IncrementalJvmCompilerRunner.kt:62)
+ at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.doCompile(IncrementalCompilerRunner.kt:506)
+ at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileImpl(IncrementalCompilerRunner.kt:423)
+ at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compileNonIncrementally(IncrementalCompilerRunner.kt:301)
+ at org.jetbrains.kotlin.incremental.IncrementalCompilerRunner.compile(IncrementalCompilerRunner.kt:129)
+ at org.jetbrains.kotlin.daemon.CompileServiceImplBase.execIncrementalCompiler(CompileServiceImpl.kt:676)
+ at org.jetbrains.kotlin.daemon.CompileServiceImplBase.access$execIncrementalCompiler(CompileServiceImpl.kt:92)
+ at org.jetbrains.kotlin.daemon.CompileServiceImpl.compile(CompileServiceImpl.kt:1661)
+ at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Unknown Source)
+ at java.base/java.lang.reflect.Method.invoke(Unknown Source)
+ at java.rmi/sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
+ at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
+ at java.rmi/sun.rmi.transport.Transport$1.run(Unknown Source)
+ at java.base/java.security.AccessController.doPrivileged(Unknown Source)
+ at java.rmi/sun.rmi.transport.Transport.serviceCall(Unknown Source)
+ at java.rmi/sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
+ at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
+ at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(Unknown Source)
+ at java.base/java.security.AccessController.doPrivileged(Unknown Source)
+ at java.rmi/sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
+ at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
+ at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
+ at java.base/java.lang.Thread.run(Unknown Source)
+Caused by: java.lang.IllegalStateException: Zero or multiple overrides found for serialize in FirRegularClassSymbol ru/megboyzz/lks/profile/ui/components/SearchScreen
+ at org.jetbrains.kotlinx.serialization.compiler.fir.SerializationFirResolveExtension.getFromSupertype(SerializationFirResolveExtension.kt:146)
+ at org.jetbrains.kotlinx.serialization.compiler.fir.SerializationFirResolveExtension.generateFunctions(SerializationFirResolveExtension.kt:177)
+ at org.jetbrains.kotlin.fir.scopes.impl.FirGeneratedMemberDeclarationsStorage$CallableStorage.generateMemberFunctions(FirGeneratedScopes.kt:198)
+ at org.jetbrains.kotlin.fir.scopes.impl.FirGeneratedMemberDeclarationsStorage$CallableStorage.access$generateMemberFunctions(FirGeneratedScopes.kt:175)
+ at org.jetbrains.kotlin.fir.scopes.impl.FirGeneratedMemberDeclarationsStorage$CallableStorage$special$$inlined$createCache$1.invoke(FirCachesFactory.kt:71)
+ at org.jetbrains.kotlin.fir.scopes.impl.FirGeneratedMemberDeclarationsStorage$CallableStorage$special$$inlined$createCache$1.invoke(FirCachesFactory.kt:69)
+ at org.jetbrains.kotlin.fir.caches.FirThreadUnsafeCache.getValue(FirThreadUnsafeCachesFactory.kt:40)
+ at org.jetbrains.kotlin.fir.scopes.impl.FirGeneratedClassDeclaredMemberScope.processFunctionsByName(FirGeneratedScopes.kt:281)
+ at org.jetbrains.kotlin.fir.scopes.FirCompositeScope.processFunctionsByName(FirCompositeScope.kt:55)
+ at org.jetbrains.kotlin.fir.scopes.FirNameAwareCompositeScope.processFunctionsByName(FirCompositeScope.kt:82)
+ at org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope.collectDeclaredFunctions(AbstractFirUseSiteMemberScope.kt:78)
+ at org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope.collectFunctions(AbstractFirUseSiteMemberScope.kt:72)
+ at org.jetbrains.kotlin.fir.scopes.impl.AbstractFirUseSiteMemberScope.processFunctionsByName(AbstractFirUseSiteMemberScope.kt:63)
+ at org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScopeKt.processAllFunctions(FirContainingNamesAwareScope.kt:19)
+ at org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMultipleDefaultsInheritedFromSupertypesChecker.check(FirMultipleDefaultsInheritedFromSupertypesChecker.kt:44)
+ at org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMultipleDefaultsInheritedFromSupertypesChecker$Regular.check(FirMultipleDefaultsInheritedFromSupertypesChecker.kt:32)
+ at org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirMultipleDefaultsInheritedFromSupertypesChecker$Regular.check(FirMultipleDefaultsInheritedFromSupertypesChecker.kt:29)
+ at org.jetbrains.kotlin.fir.analysis.collectors.components.DeclarationCheckersDiagnosticComponent.check(DeclarationCheckersDiagnosticComponent.kt:133)
+ at org.jetbrains.kotlin.fir.analysis.collectors.components.DeclarationCheckersDiagnosticComponent.visitRegularClass(DeclarationCheckersDiagnosticComponent.kt:57)
+ at org.jetbrains.kotlin.fir.analysis.collectors.components.DeclarationCheckersDiagnosticComponent.visitRegularClass(DeclarationCheckersDiagnosticComponent.kt:19)
+ at org.jetbrains.kotlin.fir.declarations.FirRegularClass.accept(FirRegularClass.kt:48)
+ at org.jetbrains.kotlin.fir.analysis.collectors.CheckerRunningDiagnosticCollectorVisitor.checkElement(CheckerRunningDiagnosticCollectorVisitor.kt:24)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor.access$checkElement(AbstractDiagnosticCollectorVisitor.kt:29)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor.visitWithDeclarationAndReceiver(AbstractDiagnosticCollectorVisitor.kt:1349)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor.visitClassAndChildren(AbstractDiagnosticCollectorVisitor.kt:86)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor.visitRegularClass(AbstractDiagnosticCollectorVisitor.kt:91)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor.visitRegularClass(AbstractDiagnosticCollectorVisitor.kt:29)
+ at org.jetbrains.kotlin.fir.declarations.FirRegularClass.accept(FirRegularClass.kt:48)
+ at org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl.acceptChildren(FirFileImpl.kt:56)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor.visitNestedElements(AbstractDiagnosticCollectorVisitor.kt:37)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor.visitFile(AbstractDiagnosticCollectorVisitor.kt:1124)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor.visitFile(AbstractDiagnosticCollectorVisitor.kt:29)
+ at org.jetbrains.kotlin.fir.declarations.FirFile.accept(FirFile.kt:42)
+ at org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollector.collectDiagnostics(AbstractDiagnosticCollector.kt:36)
+ at org.jetbrains.kotlin.fir.pipeline.AnalyseKt.runCheckers(analyse.kt:34)
+ ... 32 more
+
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 5998675..4d0c6c4 100755
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -9,14 +9,14 @@ plugins {
android {
namespace = "ru.megboyzz.lks.profile"
- compileSdk = 34
+ compileSdk = 36
defaultConfig {
applicationId = "ru.megboyzz.lks.profile"
- minSdk = 24
- targetSdk = 34
- versionCode = 1
- versionName = "1.0"
+ minSdk = 29
+ targetSdk = 36
+ versionCode = 105
+ versionName = "1.0.5"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
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
index 34e8bc3..891fa2e 100755
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/Util.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/Util.kt
@@ -11,11 +11,14 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.material.ripple.rememberRipple
+import androidx.compose.material3.ripple
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.Dp
+import kotlinx.serialization.decodeFromString
+import kotlinx.serialization.json.Json
import kotlin.concurrent.thread
@OptIn(ExperimentalFoundationApi::class)
@@ -25,7 +28,7 @@ fun Modifier.clickableWithNormalRipple(
onLongClick: () -> Unit = {},
) = this.combinedClickable(
interactionSource = remember { MutableInteractionSource() },
- indication = rememberRipple(bounded = true),
+ indication = ripple(bounded = true),
onClick = onClick,
onLongClick = onLongClick
)
@@ -61,4 +64,9 @@ fun Context.goToVK(request: String) {
Uri.parse("https://vk.com/search?q=$request")
)
this.startActivity(browserIntent)
+}
+
+fun Context.getDepartmentDict() : Map {
+ val jsonString = assets.open("dict.json").bufferedReader().use { it.readText() }
+ return Json.decodeFromString(jsonString)
}
\ No newline at end of file
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/DropdownMenu.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/DropdownMenu.kt
index 7e7becc..5228c00 100644
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/components/DropdownMenu.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/components/DropdownMenu.kt
@@ -1,21 +1,26 @@
package ru.megboyzz.lks.profile.ui.components
+import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.ColumnScope
import androidx.compose.foundation.layout.padding
-import androidx.compose.material.icons.Icons
-import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
-import androidx.compose.material3.Icon
-import androidx.compose.material3.IconButton
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.ExposedDropdownMenuBox
+import androidx.compose.material3.ExposedDropdownMenuDefaults
import androidx.compose.material3.Text
+import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
@Composable
@@ -36,4 +41,55 @@ fun SimpleDropdownMenuItem(
) = DropdownMenuItem(
text = { Text(text) },
onClick = onClick
-)
\ No newline at end of file
+)
+
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun DropdownSelectableSearch(
+) {
+ var expanded by remember { mutableStateOf(false) }
+ val options = listOf("Option 1", "Option 2", "Option 3", "Option 4", "Option 5")
+ var selectedOptionText by remember { mutableStateOf(options[0]) }
+
+ ExposedDropdownMenuBox(
+ expanded = expanded,
+ onExpandedChange = { expanded != expanded }
+ ) {
+ TextField(
+ readOnly = true,
+ modifier = Modifier.clickable {
+ expanded != expanded
+ },
+ value = selectedOptionText,
+ onValueChange = { },
+ label = { Text("Label") },
+ trailingIcon = {
+ ExposedDropdownMenuDefaults.TrailingIcon(
+ expanded = expanded
+ )
+ },
+ colors = ExposedDropdownMenuDefaults.textFieldColors(),
+ )
+ ExposedDropdownMenu(
+ expanded = expanded,
+ onDismissRequest = {}
+ ) {
+ options.forEach { selectionOption ->
+ DropdownMenuItem(
+ text = { Text(text = selectionOption) },
+ onClick = {
+ selectedOptionText = selectionOption
+ }
+ )
+ }
+ }
+ }
+}
+
+@Preview
+@Composable
+private fun DropdownSearchPrev() {
+ Box(Modifier.padding(top =100.dp)) {
+ DropdownSelectableSearch()
+ }
+}
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
index a957b9b..a857fd0 100755
--- 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
@@ -168,13 +168,14 @@ fun SearchTextFieldPrev() {
@Composable
fun SearchContextMenu(
+ initialState: LksRequest,
onSearch: (LksRequest) -> Unit
) {
- var name by remember { mutableStateOf("") }
- var surname by remember { mutableStateOf("") }
- var family by remember { mutableStateOf("") }
+ var name by remember { mutableStateOf(initialState.student?.name ?: "") }
+ var surname by remember { mutableStateOf(initialState.student?.patronymic ?: "") }
+ var family by remember { mutableStateOf(initialState.student?.surname ?: "") }
- var group by remember { mutableStateOf("") }
+ var group by remember { mutableStateOf(initialState.group ?: "") }
var departamnet by remember { mutableStateOf("") }
Column(
@@ -243,7 +244,9 @@ fun SearchContextMenu(
@Composable
private fun SearchContextMenuPrev() {
- SearchContextMenu {
+ SearchContextMenu(
+ initialState = LksRequest()
+ ) {
}
diff --git a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/SearchBottomSheet.kt b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/SearchBottomSheet.kt
index aec4d69..6da651d 100755
--- a/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/SearchBottomSheet.kt
+++ b/app/src/main/java/ru/megboyzz/lks/profile/ui/screens/sub/SearchBottomSheet.kt
@@ -11,6 +11,7 @@ import androidx.compose.material3.ModalBottomSheet
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
+import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -31,6 +32,7 @@ import ru.megboyzz.lks.profile.ui.provider.LocalMainActivity
fun SearchBottomSheet(onDismiss: () -> Unit) {
val viewModel by LocalMainActivity.current.viewModels()
+ val request by viewModel.request.collectAsState()
val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true)
val coroutineScope = rememberCoroutineScope()
@@ -55,7 +57,7 @@ fun SearchBottomSheet(onDismiss: () -> Unit) {
ModalBottomSheet(
sheetState = sheetState,
onDismissRequest = onDismiss,
- windowInsets = WindowInsets.ime,
+ //windowInsets = WindowInsets.ime,
dragHandle = { BottomSheetDefaults.DragHandle() },
modifier = Modifier.then(
if (isImeVisible)
@@ -64,7 +66,7 @@ fun SearchBottomSheet(onDismiss: () -> Unit) {
Modifier.fillMaxHeight(0.73F) // Partial height when keyboard is hidden
)
) {
- SearchContextMenu { lksRequest ->
+ SearchContextMenu(request) { lksRequest ->
viewModel.newSearch(lksRequest)
onDismiss()
coroutineScope.launch { sheetState.hide() }
diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml
new file mode 100755
index 0000000..fa0f996
--- /dev/null
+++ b/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100755
index 0000000..9ee9997
--- /dev/null
+++ b/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle.kts b/build.gradle.kts
index 338e8c2..d0563ea 100755
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -5,6 +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
+ id("com.google.devtools.ksp") version "2.2.0-2.0.2" apply false
+ id("com.google.dagger.hilt.android") version "2.57" apply false
}
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index c6875e1..bec979b 100755
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -1,20 +1,20 @@
[versions]
-agp = "8.5.1"
-hiltAndroidCompiler = "2.51.1"
-jsoup = "1.18.1"
-kotlin = "2.0.0"
-coreKtx = "1.13.1"
+agp = "8.11.1"
+hiltAndroidCompiler = "2.57"
+jsoup = "1.21.1"
+kotlin = "2.2.0"
+coreKtx = "1.16.0"
junit = "4.13.2"
-junitVersion = "1.2.1"
-espressoCore = "3.6.1"
-lifecycleRuntimeKtx = "2.8.4"
-activityCompose = "1.9.1"
-composeBom = "2024.04.01"
-jetbrainsKotlinJvm = "2.0.0"
-composeNavigation = "2.8.0-alpha08"
-room_version = "2.6.1"
-serialization = "1.6.3"
-foundationLayoutAndroid = "1.6.6"
+junitVersion = "1.3.0"
+espressoCore = "3.7.0"
+lifecycleRuntimeKtx = "2.9.2"
+activityCompose = "1.10.1"
+composeBom = "2025.07.00"
+jetbrainsKotlinJvm = "2.2.0"
+composeNavigation = "2.9.3"
+room_version = "2.7.2"
+serialization = "1.9.0"
+foundationLayoutAndroid = "1.8.3"
[libraries]
androidx-room-compiler = { group = "androidx.room", name = "room-compiler", version.ref = "room_version" }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 8f7eabb..7cb2623 100755
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Aug 21 19:37:41 MSK 2024
+#Fri Aug 01 15:44:12 MSK 2025
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists