Fix: Handling search query in Main

This commit is contained in:
machiav3lli 2022-09-18 15:19:45 +02:00
parent 9f0698141f
commit b35ffb327e

View File

@ -15,10 +15,9 @@ import androidx.compose.material.icons.rounded.Sync
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue 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.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -45,6 +44,10 @@ import com.machiav3lli.fdroid.utility.extension.text.nullIfEmpty
import com.machiav3lli.fdroid.utility.isDarkTheme import com.machiav3lli.fdroid.utility.isDarkTheme
import com.machiav3lli.fdroid.utility.setCustomTheme import com.machiav3lli.fdroid.utility.setCustomTheme
import com.machiav3lli.fdroid.utility.showBatteryOptimizationDialog import com.machiav3lli.fdroid.utility.showBatteryOptimizationDialog
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlin.properties.Delegates import kotlin.properties.Delegates
@ -63,8 +66,12 @@ class MainActivityX : AppCompatActivity() {
} }
private lateinit var powerManager: PowerManager private lateinit var powerManager: PowerManager
private val cScope: CoroutineScope = CoroutineScope(Dispatchers.Default)
val syncConnection = Connection(SyncService::class.java) val syncConnection = Connection(SyncService::class.java)
private val _searchQuery = MutableSharedFlow<String>()
val searchQuery = _searchQuery.asSharedFlow()
val db val db
get() = (application as MainApplication).db get() = (application as MainApplication).db
@ -92,9 +99,13 @@ class MainActivityX : AppCompatActivity() {
else -> isDarkTheme else -> isDarkTheme
} }
) { ) {
var searchQuery by remember() { mutableStateOf("") } // TODO link query to the current Page/VM val query by searchQuery.collectAsState(initial = "")
val navController = rememberAnimatedNavController() val navController = rememberAnimatedNavController()
SideEffect {
cScope.launch { _searchQuery.emit("") }
}
Scaffold( Scaffold(
containerColor = Color.Transparent, containerColor = Color.Transparent,
contentColor = MaterialTheme.colorScheme.onBackground, contentColor = MaterialTheme.colorScheme.onBackground,
@ -104,12 +115,14 @@ class MainActivityX : AppCompatActivity() {
title = stringResource(id = R.string.application_name), title = stringResource(id = R.string.application_name),
) { ) {
ExpandableSearchAction( ExpandableSearchAction(
query = searchQuery, query = query,
onClose = { onClose = {
searchQuery = "" cScope.launch { _searchQuery.emit("") }
}, },
onQueryChanged = { query -> onQueryChanged = { newQuery ->
if (query != searchQuery) searchQuery = query if (newQuery != query) {
cScope.launch { _searchQuery.emit(newQuery) }
}
} }
) )
TopBarAction(icon = Icons.Rounded.Sync) { TopBarAction(icon = Icons.Rounded.Sync) {