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