From dc2fdf8fa73075481f139a3aa9fdecf5e297f237 Mon Sep 17 00:00:00 2001 From: Sad Ellie Date: Sat, 18 Jun 2022 21:48:56 +0300 Subject: [PATCH] AllUnitsRepository is now singleton Also moved mapping function from init of MainViewModel to repository. --- .../sadellie/unitto/data/units/AllUnits.kt | 25 ++++++++++++++++++- .../sadellie/unitto/screens/MainViewModel.kt | 11 +------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/sadellie/unitto/data/units/AllUnits.kt b/app/src/main/java/com/sadellie/unitto/data/units/AllUnits.kt index 9636ef7f..3d8ac2ff 100644 --- a/app/src/main/java/com/sadellie/unitto/data/units/AllUnits.kt +++ b/app/src/main/java/com/sadellie/unitto/data/units/AllUnits.kt @@ -1,17 +1,20 @@ package com.sadellie.unitto.data.units +import android.content.Context import com.sadellie.unitto.R import com.sadellie.unitto.data.preferences.MAX_PRECISION +import com.sadellie.unitto.data.units.database.MyBasedUnit import com.sadellie.unitto.screens.setMinimumRequiredScale import com.sadellie.unitto.screens.sortByLev import java.math.BigDecimal import java.math.RoundingMode import javax.inject.Inject - +import javax.inject.Singleton /** * This repository provides access to all collection of units in the app. */ +@Singleton class AllUnitsRepository @Inject constructor() { /** * This is a collection of all available units. @@ -104,6 +107,26 @@ class AllUnitsRepository @Inject constructor() { return unitsToShow.groupBy { it.group } } + /** + * Maps data from database to [allUnits] item: favorites, counters, renderedNames and etc. + * + * @param context [Context] that is used to fill [AbstractUnit.renderedName]. Rendered names are used when + * searching. + * @param allBasedUnits List from database. See: [MyBasedUnit]. + */ + fun loadFromDatabase(context: Context, allBasedUnits: List) { + allUnits.forEach { + // Loading unit names so that we can search through them + it.renderedName = context.getString(it.displayName) + val based = allBasedUnits.firstOrNull { based -> based.unitId == it.unitId } + // Loading paired units + it.pairedUnit = based?.pairedUnitId + // Loading favorite state + it.isFavorite = based?.isFavorite ?: false + it.counter = based?.frequency ?: 0 + } + } + // NOTE: Ignore formatting below it's easier to read this lines as table private val lengthCollection: List by lazy { listOf( diff --git a/app/src/main/java/com/sadellie/unitto/screens/MainViewModel.kt b/app/src/main/java/com/sadellie/unitto/screens/MainViewModel.kt index 5c20ce23..15977d77 100644 --- a/app/src/main/java/com/sadellie/unitto/screens/MainViewModel.kt +++ b/app/src/main/java/com/sadellie/unitto/screens/MainViewModel.kt @@ -420,16 +420,7 @@ class MainViewModel @Inject constructor( // Now we load units data from database val allBasedUnits = basedUnitRepository.getAll() - allUnitsRepository.allUnits.forEach { - // Loading unit names so that we can search through them - it.renderedName = application.getString(it.displayName) - val based = allBasedUnits.firstOrNull { based -> based.unitId == it.unitId } - // Loading paired units - it.pairedUnit = based?.pairedUnitId - // Loading favorite state - it.isFavorite = based?.isFavorite ?: false - it.counter = based?.frequency ?: 0 - } + allUnitsRepository.loadFromDatabase(application, allBasedUnits) // User is free to convert values and units on units screen can be sorted properly mainUIState = mainUIState.copy(isLoadingDatabase = false)