From 0bf93ef754ebb699226f967c4c6a89b150e28216 Mon Sep 17 00:00:00 2001 From: Emmanuel Hansen Date: Sat, 5 Aug 2023 13:21:21 +0000 Subject: [PATCH] add game searching --- .../org/ryujinx/android/views/HomeViews.kt | 83 +++++++++++++------ 1 file changed, 58 insertions(+), 25 deletions(-) diff --git a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/views/HomeViews.kt b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/views/HomeViews.kt index 2e4567340..956849cfe 100644 --- a/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/views/HomeViews.kt +++ b/src/RyujinxAndroid/app/src/main/java/org/ryujinx/android/views/HomeViews.kt @@ -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, + refresh: MutableState + ) { 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,19 +164,23 @@ class HomeViews { tonalElevation = AlertDialogDefaults.TonalElevation ) { Column { - TextButton(onClick = { - navController.navigate("settings") - }, modifier = Modifier - .fillMaxWidth() - .align(Alignment.Start), + TextButton( + onClick = { + navController.navigate("settings") + }, + modifier = Modifier + .fillMaxWidth() + .align(Alignment.Start), ) { Icon( Icons.Filled.Settings, contentDescription = "Settings" ) - Text(text = "Settings", modifier = Modifier - .padding(16.dp) - .align(Alignment.CenterVertically)) + Text( + text = "Settings", modifier = Modifier + .padding(16.dp) + .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() } - viewModel.setViewList(list) + + 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