improvement: If Keyguard is already open when you click on a custom filter home icon, apply the custom filter anyway

This commit is contained in:
Artem Chepurnoy 2024-03-09 09:02:59 +02:00
parent 4651a45216
commit a24d7470b4
No known key found for this signature in database
GPG Key ID: FAC37D0CF674043E
3 changed files with 34 additions and 14 deletions

View File

@ -141,7 +141,11 @@ data class Rail(
private const val ROUTE_NAME = "home" private const val ROUTE_NAME = "home"
private val vaultRoute = VaultRoute() private val vaultRoute = VaultRoute(
args = VaultRoute.Args(
main = true,
),
)
private val sendsRoute = SendRoute() private val sendsRoute = SendRoute()

View File

@ -63,7 +63,9 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onEach
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
import org.kodein.di.DirectDI import org.kodein.di.DirectDI
@ -216,7 +218,7 @@ data class OurFilterResult(
) )
data class FilterParams( data class FilterParams(
val deeplinkCustomFilter: String? = null, val deeplinkCustomFilterFlow: Flow<String>? = null,
val section: Section = Section(), val section: Section = Section(),
) { ) {
data class Section( data class Section(
@ -834,15 +836,19 @@ suspend fun <
) )
.filterSection(params.section.misc) .filterSection(params.section.misc)
if (params.deeplinkCustomFilter != null) { if (params.deeplinkCustomFilterFlow != null) {
val customFilter = kotlin.run { params.deeplinkCustomFilterFlow
val customFilters = getCipherFilters() .onEach { customFilterId ->
.first() val customFilter = kotlin.run {
customFilters.firstOrNull { it.id == params.deeplinkCustomFilter } val customFilters = getCipherFilters()
} .first()
if (customFilter != null) { customFilters.firstOrNull { it.id == customFilterId }
input.onApply(customFilter.filter) }
} if (customFilter != null) {
input.onApply(customFilter.filter)
}
}
.launchIn(screenScope)
} }
val filterCustomListFlow = getCipherFilters() val filterCustomListFlow = getCipherFilters()

View File

@ -124,6 +124,7 @@ import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.launchIn
@ -1277,8 +1278,17 @@ fun vaultListScreenState(
.flowOn(Dispatchers.Default) .flowOn(Dispatchers.Default)
.shareIn(this, SharingStarted.WhileSubscribed(), replay = 1) .shareIn(this, SharingStarted.WhileSubscribed(), replay = 1)
val dl = deeplinkService.get("customFilter") val deeplinkCustomFilterFlow = if (args.main) {
deeplinkService.clear("customFilter") val customFilterKey = "customFilter"
deeplinkService
.getFlow(customFilterKey)
.filterNotNull()
.onEach {
deeplinkService.clear(customFilterKey)
}
} else {
null
}
val filterListFlow = ah( val filterListFlow = ah(
directDI = directDI, directDI = directDI,
outputGetter = { it.source }, outputGetter = { it.source },
@ -1301,7 +1311,7 @@ fun vaultListScreenState(
organizationFlow = getOrganizations(), organizationFlow = getOrganizations(),
input = filterResult, input = filterResult,
params = FilterParams( params = FilterParams(
deeplinkCustomFilter = dl, deeplinkCustomFilterFlow = deeplinkCustomFilterFlow,
), ),
) )
.stateIn(this, SharingStarted.WhileSubscribed(), OurFilterResult()) .stateIn(this, SharingStarted.WhileSubscribed(), OurFilterResult())