lc
This commit is contained in:
@@ -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() }
|
||||
|
||||
Executable
+13
@@ -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
@@ -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>
|
||||
Reference in New Issue
Block a user