add game searching

This commit is contained in:
Emmanuel Hansen 2023-08-05 13:21:21 +00:00
parent 8f8f9e996a
commit 0bf93ef754

View File

@ -21,6 +21,7 @@ import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.MoreVert
import androidx.compose.material.icons.filled.Refresh
import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.filled.Settings
import androidx.compose.material3.AlertDialog
@ -47,7 +48,6 @@ import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
@ -68,6 +68,7 @@ import org.ryujinx.android.R
import org.ryujinx.android.viewmodels.GameModel
import org.ryujinx.android.viewmodels.HomeViewModel
import java.io.File
import java.util.Locale
import kotlin.math.roundToInt
class HomeViews {
@ -76,7 +77,11 @@ class HomeViews {
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MainTopBar(navController: NavHostController) {
fun MainTopBar(
navController: NavHostController,
query: MutableState<String>,
refresh: MutableState<Boolean>
) {
val topBarSize = remember {
mutableStateOf(0)
}
@ -87,15 +92,17 @@ class HomeViews {
TopAppBar(
modifier = Modifier
.zIndex(1f)
.padding(top = 16.dp)
.padding(top = 8.dp)
.onSizeChanged {
topBarSize.value = it.height
},
title = {
DockedSearchBar(
shape = SearchBarDefaults.inputFieldShape,
query = "",
onQueryChange = {},
query = query.value,
onQueryChange = {
query.value = it
},
onSearch = {},
active = false,
onActiveChange = {},
@ -113,6 +120,16 @@ class HomeViews {
}
},
actions = {
IconButton(
onClick = {
refresh.value = true
}
) {
Icon(
Icons.Filled.Refresh,
contentDescription = "Refresh"
)
}
IconButton(
onClick = {
showOptionsPopup.value = true
@ -126,15 +143,17 @@ class HomeViews {
}
)
Box {
if(showOptionsPopup.value)
{
if (showOptionsPopup.value) {
AlertDialog(
modifier = Modifier.padding(top = (topBarSize.value / Resources.getSystem().displayMetrics.density + 10).dp,
start = 16.dp, end = 16.dp),
modifier = Modifier.padding(
top = (topBarSize.value / Resources.getSystem().displayMetrics.density + 10).dp,
start = 16.dp, end = 16.dp
),
onDismissRequest = {
showOptionsPopup.value = false
}) {
val dialogWindowProvider = LocalView.current.parent as DialogWindowProvider
val dialogWindowProvider =
LocalView.current.parent as DialogWindowProvider
dialogWindowProvider.window.setGravity(Gravity.TOP)
Surface(
modifier = Modifier
@ -145,9 +164,11 @@ class HomeViews {
tonalElevation = AlertDialogDefaults.TonalElevation
) {
Column {
TextButton(onClick = {
TextButton(
onClick = {
navController.navigate("settings")
}, modifier = Modifier
},
modifier = Modifier
.fillMaxWidth()
.align(Alignment.Start),
) {
@ -155,9 +176,11 @@ class HomeViews {
Icons.Filled.Settings,
contentDescription = "Settings"
)
Text(text = "Settings", modifier = Modifier
Text(
text = "Settings", modifier = Modifier
.padding(16.dp)
.align(Alignment.CenterVertically))
.align(Alignment.CenterVertically)
)
}
}
}
@ -171,15 +194,19 @@ class HomeViews {
@Composable
fun Home(viewModel: HomeViewModel = HomeViewModel(), navController: NavHostController? = null) {
val sheetState = rememberModalBottomSheetState()
val scope = rememberCoroutineScope()
val showBottomSheet = remember { mutableStateOf(false) }
val showLoading = remember { mutableStateOf(false) }
val query = remember {
mutableStateOf("")
}
val refresh = remember {
mutableStateOf(true)
}
Scaffold(
modifier = Modifier.fillMaxSize(),
topBar = {
navController?.apply {
MainTopBar(navController)
MainTopBar(navController, query, refresh)
}
},
floatingActionButtonPosition = FabPosition.End,
@ -200,11 +227,18 @@ class HomeViews {
val list = remember {
mutableStateListOf<GameModel>()
}
if(refresh.value) {
viewModel.setViewList(list)
refresh.value = false
}
LazyColumn(Modifier.fillMaxSize()) {
items(list) {
it.titleName?.apply {
if (this.isNotEmpty())
if (this.isNotEmpty() && (query.value.trim().isEmpty() || this.lowercase(
Locale.getDefault()
)
.contains(query.value)))
GameItem(it, viewModel, showBottomSheet, showLoading)
}
}
@ -357,8 +391,7 @@ class HomeViews {
)
viewModel.mainViewModel?.navController?.navigate("game")
}
}
else {
} else {
gameModel.close()
}
showLoading.value = false