This commit is contained in:
2026-09-23 01:18:39 +03:00
parent 50f4102b93
commit c9bdb03d5e
14 changed files with 222 additions and 38 deletions
+5 -5
View File
@@ -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"
}
@@ -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<String, String> {
val jsonString = assets.open("dict.json").bufferedReader().use { it.readText() }
return Json.decodeFromString(jsonString)
}
@@ -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
)
)
@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()
}
}
@@ -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()
) {
}
@@ -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<SearchViewModel>()
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() }
+13
View File
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample backup rules file; uncomment and customize as necessary.
See https://developer.android.com/guide/topics/data/autobackup
for details.
Note: This file is ignored for devices older that API 31
See https://developer.android.com/about/versions/12/backup-restore
-->
<full-backup-content>
<!--
<include domain="sharedpref" path="."/>
<exclude domain="sharedpref" path="device.xml"/>
-->
</full-backup-content>
+19
View File
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?><!--
Sample data extraction rules file; uncomment and customize as necessary.
See https://developer.android.com/about/versions/12/backup-restore#xml-changes
for details.
-->
<data-extraction-rules>
<cloud-backup>
<!-- TODO: Use <include> and <exclude> to control what is backed up.
<include .../>
<exclude .../>
-->
</cloud-backup>
<!--
<device-transfer>
<include .../>
<exclude .../>
</device-transfer>
-->
</data-extraction-rules>