mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-19 08:45:27 +02:00
Units repository updates
Units filter fixes Performance drop fixed
This commit is contained in:
parent
0d1d08a951
commit
f6c1d44be2
@ -37,7 +37,7 @@ class AllUnitsRepository @Inject constructor() {
|
||||
/**
|
||||
* This is a collection of all available units.
|
||||
*/
|
||||
val allUnits: List<AbstractUnit> by lazy {
|
||||
private val allUnits: List<AbstractUnit> by lazy {
|
||||
mapOfCollections.values.flatten()
|
||||
}
|
||||
|
||||
@ -79,12 +79,14 @@ class AllUnitsRepository @Inject constructor() {
|
||||
/**
|
||||
* Looks for a collection of units of the given [UnitGroup].
|
||||
*
|
||||
* @param unitGroup Requested [UnitGroup]. If you give it null, you will likely get null.
|
||||
* @param unitGroup Requested [UnitGroup]
|
||||
* @return List of [AbstractUnit]s. Will return null if the is no collection for the specified
|
||||
* [UnitGroup].
|
||||
*
|
||||
* @throws [NoSuchElementException] from [Map.getValue]
|
||||
*/
|
||||
fun getCollectionByGroup(unitGroup: UnitGroup?): List<AbstractUnit>? {
|
||||
return mapOfCollections[unitGroup]
|
||||
fun getCollectionByGroup(unitGroup: UnitGroup): List<AbstractUnit> {
|
||||
return mapOfCollections.getValue(unitGroup)
|
||||
}
|
||||
|
||||
/**
|
||||
@ -106,11 +108,12 @@ class AllUnitsRepository @Inject constructor() {
|
||||
searchQuery: String,
|
||||
allUnitsGroups: List<UnitGroup>
|
||||
): Map<UnitGroup, List<AbstractUnit>> {
|
||||
val shownUnits: List<AbstractUnit> =
|
||||
allUnitsGroups.flatMap { getCollectionByGroup(it) ?: listOf() }
|
||||
|
||||
var basicFilteredUnits: Sequence<AbstractUnit> =
|
||||
getCollectionByGroup(unitGroup = chosenUnitGroup)?.asSequence() ?: shownUnits.asSequence()
|
||||
var basicFilteredUnits: Sequence<AbstractUnit> = if (chosenUnitGroup == null) {
|
||||
allUnits.filter { it.group in allUnitsGroups }
|
||||
} else {
|
||||
val collection = getCollectionByGroup(chosenUnitGroup)
|
||||
collection
|
||||
}.asSequence()
|
||||
|
||||
if (favoritesOnly) {
|
||||
basicFilteredUnits = basicFilteredUnits.filter { it.isFavorite }
|
||||
@ -159,7 +162,7 @@ class AllUnitsRepository @Inject constructor() {
|
||||
fun updateBasicUnitsForCurrencies(
|
||||
conversions: Map<String, BigDecimal>
|
||||
) {
|
||||
getCollectionByGroup(UnitGroup.CURRENCY)?.forEach {
|
||||
getCollectionByGroup(UnitGroup.CURRENCY).forEach {
|
||||
// Getting rates from map. We set ZERO as default so that it can be skipped
|
||||
val rate = conversions.getOrElse(it.unitId) { BigDecimal.ZERO }
|
||||
// We make sure that we don't divide by zero
|
||||
|
@ -147,8 +147,7 @@ class MainViewModel @Inject constructor(
|
||||
|
||||
// Now setting up right unit (pair for the left one)
|
||||
unitTo = if (unitFrom.pairedUnit == null) {
|
||||
// Dangerous btw
|
||||
allUnitsRepository.getCollectionByGroup(unitFrom.group)!!.first()
|
||||
allUnitsRepository.getCollectionByGroup(unitFrom.group).first()
|
||||
} else {
|
||||
allUnitsRepository.getById(unitFrom.pairedUnit!!)
|
||||
}
|
||||
|
@ -85,9 +85,6 @@ class SecondViewModel @Inject constructor(
|
||||
hideBrokenCurrencies: Boolean
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
// Prevent user from seeing invalid list
|
||||
uiState = uiState.copy(unitsToShow = emptyMap())
|
||||
|
||||
// This is mostly not UI related stuff and viewModelScope.launch uses Dispatchers.Main
|
||||
// So we switch to Default
|
||||
withContext(Dispatchers.Default) {
|
||||
|
@ -25,6 +25,8 @@ class AllUnitsRepositoryTest {
|
||||
|
||||
private val allUnitsRepository = AllUnitsRepository()
|
||||
|
||||
private val allUnits: List<AbstractUnit> = ALL_UNIT_GROUPS.flatMap { allUnitsRepository.getCollectionByGroup(it) }
|
||||
|
||||
@Test
|
||||
fun filterAllUnitsNoFiltersLeft() {
|
||||
// No filters applied, empty search query, from Left side list
|
||||
@ -35,7 +37,7 @@ class AllUnitsRepositoryTest {
|
||||
searchQuery = "",
|
||||
allUnitsGroups = ALL_UNIT_GROUPS
|
||||
)
|
||||
assertEquals(allUnitsRepository.allUnits.groupBy { it.group }, result)
|
||||
assertEquals(allUnits.groupBy { it.group }, result)
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -53,7 +55,8 @@ class AllUnitsRepositoryTest {
|
||||
allUnitsGroups = ALL_UNIT_GROUPS
|
||||
)
|
||||
assertEquals(
|
||||
mapOf(UnitGroup.SPEED to listOf(allUnitsRepository.getCollectionByGroup(UnitGroup.SPEED)?.first { it.unitId == MyUnitIDS.kilometer_per_hour })),
|
||||
mapOf(UnitGroup.SPEED to listOf(allUnitsRepository.getCollectionByGroup(UnitGroup.SPEED)
|
||||
.first { it.unitId == MyUnitIDS.kilometer_per_hour })),
|
||||
result
|
||||
)
|
||||
}
|
||||
@ -68,7 +71,7 @@ class AllUnitsRepositoryTest {
|
||||
searchQuery = "",
|
||||
allUnitsGroups = ALL_UNIT_GROUPS
|
||||
)
|
||||
assertEquals(allUnitsRepository.allUnits.filter { it.group == UnitGroup.TIME }
|
||||
assertEquals(allUnits.filter { it.group == UnitGroup.TIME }
|
||||
.groupBy { it.group }, result)
|
||||
}
|
||||
|
||||
@ -83,7 +86,7 @@ class AllUnitsRepositoryTest {
|
||||
searchQuery = "",
|
||||
allUnitsGroups = ALL_UNIT_GROUPS
|
||||
)
|
||||
assertEquals(allUnitsRepository.allUnits.filter { it.unitId == MyUnitIDS.kilometer }
|
||||
assertEquals(allUnits.filter { it.unitId == MyUnitIDS.kilometer }
|
||||
.groupBy { it.group }, result)
|
||||
}
|
||||
|
||||
@ -102,7 +105,8 @@ class AllUnitsRepositoryTest {
|
||||
allUnitsGroups = ALL_UNIT_GROUPS
|
||||
)
|
||||
assertEquals(
|
||||
mapOf(UnitGroup.SPEED to listOf(allUnitsRepository.getCollectionByGroup(UnitGroup.SPEED)?.first { it.unitId == MyUnitIDS.kilometer_per_hour })),
|
||||
mapOf(UnitGroup.SPEED to listOf(allUnitsRepository.getCollectionByGroup(UnitGroup.SPEED)
|
||||
.first { it.unitId == MyUnitIDS.kilometer_per_hour })),
|
||||
result
|
||||
)
|
||||
}
|
||||
@ -121,7 +125,8 @@ class AllUnitsRepositoryTest {
|
||||
allUnitsGroups = ALL_UNIT_GROUPS
|
||||
)
|
||||
assertEquals(
|
||||
mapOf(UnitGroup.CURRENCY to allUnitsRepository.getCollectionByGroup(UnitGroup.CURRENCY)?.filter { it.unitId != MyUnitIDS.currency_btc }),
|
||||
mapOf(UnitGroup.CURRENCY to allUnitsRepository.getCollectionByGroup(UnitGroup.CURRENCY)
|
||||
.filter { it.unitId != MyUnitIDS.currency_btc }),
|
||||
result
|
||||
)
|
||||
}
|
||||
|
@ -354,6 +354,6 @@ class AllUnitsTest {
|
||||
fun after() {
|
||||
val unitGroup = history.keys.first()
|
||||
// GROUP : testedCount / totalCount
|
||||
println("${unitGroup.name} : ${history[unitGroup]?.size} / ${allUnitsRepository.getCollectionByGroup(unitGroup)?.size}")
|
||||
println("${unitGroup.name} : ${history[unitGroup]?.size} / ${allUnitsRepository.getCollectionByGroup(unitGroup).size}")
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user