diff --git a/app/src/main/java/com/sadellie/unitto/UnittoApp.kt b/app/src/main/java/com/sadellie/unitto/UnittoApp.kt index 93d72b12..df70b5b8 100644 --- a/app/src/main/java/com/sadellie/unitto/UnittoApp.kt +++ b/app/src/main/java/com/sadellie/unitto/UnittoApp.kt @@ -47,10 +47,10 @@ import com.sadellie.unitto.core.ui.common.open import com.sadellie.unitto.core.ui.common.rememberUnittoDrawerState import com.sadellie.unitto.core.ui.model.DrawerItems import com.sadellie.unitto.core.ui.pushDynamicShortcut -import com.sadellie.unitto.core.ui.theme.TypographySystem -import com.sadellie.unitto.core.ui.theme.TypographyUnitto import com.sadellie.unitto.core.ui.theme.DarkThemeColors import com.sadellie.unitto.core.ui.theme.LightThemeColors +import com.sadellie.unitto.core.ui.theme.TypographySystem +import com.sadellie.unitto.core.ui.theme.TypographyUnitto import com.sadellie.unitto.data.userprefs.AppPreferences import io.github.sadellie.themmo.Themmo import io.github.sadellie.themmo.rememberThemmoController @@ -79,23 +79,15 @@ internal fun UnittoApp(prefs: AppPreferences) { val shortcutsScope = rememberCoroutineScope() - val tabs by remember(prefs.enableToolsExperiment) { - derivedStateOf { - if (prefs.enableToolsExperiment) { - listOf( - DrawerItems.Calculator, - DrawerItems.Converter, - DrawerItems.DateDifference, - DrawerItems.TimeZones, - ) - } else { - listOf( - DrawerItems.Calculator, - DrawerItems.Converter, - DrawerItems.DateDifference, - ) - } - } + val tabs by remember { + mutableStateOf( + listOf( + DrawerItems.Calculator, + DrawerItems.Converter, + DrawerItems.DateDifference, + DrawerItems.TimeZones + ) + ) } val navBackStackEntry by navController.currentBackStackEntryAsState() diff --git a/core/base/src/main/java/com/sadellie/unitto/core/base/TopLevelDestinations.kt b/core/base/src/main/java/com/sadellie/unitto/core/base/TopLevelDestinations.kt index 73c35855..e8fa2424 100644 --- a/core/base/src/main/java/com/sadellie/unitto/core/base/TopLevelDestinations.kt +++ b/core/base/src/main/java/com/sadellie/unitto/core/base/TopLevelDestinations.kt @@ -106,15 +106,15 @@ val TOP_LEVEL_DESTINATIONS by lazy { TopLevelDestinations.Calculator, TopLevelDestinations.Converter, TopLevelDestinations.DateCalculator, - // TopLevelDestinations.TimeZone, + TopLevelDestinations.TimeZone, ) } // Only routes, not graphs! val TOP_LEVEL_START_ROUTES by lazy { listOf( - CONVERTER_START, CALCULATOR_START, + CONVERTER_START, DATE_CALCULATOR_START, TIME_ZONE_START, ) diff --git a/data/database/src/main/java/com/sadellie/unitto/data/database/UnittoDatabaseModule.kt b/data/database/src/main/java/com/sadellie/unitto/data/database/UnittoDatabaseModule.kt index d47cc6f6..c0d5c399 100644 --- a/data/database/src/main/java/com/sadellie/unitto/data/database/UnittoDatabaseModule.kt +++ b/data/database/src/main/java/com/sadellie/unitto/data/database/UnittoDatabaseModule.kt @@ -45,17 +45,16 @@ class UnittoDatabaseModule { return unittoDatabase.calculatorHistoryDao() } -// For some reason this fucks up the migration -// /** -// * Tells Hilt to use this method to get [TimeZoneDao] -// * -// * @param unittoDatabase Database for which we need DAO -// * @return Singleton of [TimeZoneDao] -// */ -// @Provides -// fun provideTimeZoneDao(unittoDatabase: UnittoDatabase): TimeZoneDao { -// return unittoDatabase.timeZoneDao() -// } + /** + * Tells Hilt to use this method to get [TimeZoneDao] + * + * @param unittoDatabase Database for which we need DAO + * @return Singleton of [TimeZoneDao] + */ + @Provides + fun provideTimeZoneDao(unittoDatabase: UnittoDatabase): TimeZoneDao { + return unittoDatabase.timeZoneDao() + } @Provides fun provideCurrencyRatesDao(unittoDatabase: UnittoDatabase): CurrencyRatesDao { diff --git a/data/timezone/src/main/java/com/sadellie/unitto/data/timezone/TimeZonesRepository.kt b/data/timezone/src/main/java/com/sadellie/unitto/data/timezone/TimeZonesRepository.kt index 4eeacfd5..91a453e5 100644 --- a/data/timezone/src/main/java/com/sadellie/unitto/data/timezone/TimeZonesRepository.kt +++ b/data/timezone/src/main/java/com/sadellie/unitto/data/timezone/TimeZonesRepository.kt @@ -19,62 +19,48 @@ package com.sadellie.unitto.data.timezone import com.sadellie.unitto.data.common.lev +import com.sadellie.unitto.data.database.TimeZoneDao +import com.sadellie.unitto.data.database.TimeZoneEntity import com.sadellie.unitto.data.model.UnittoTimeZone import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.update +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext import javax.inject.Inject import javax.inject.Singleton @Singleton -class TimeZonesRepository @Inject constructor() { +class TimeZonesRepository @Inject constructor( + private val dao: TimeZoneDao +) { private val allTimeZones: HashMap = hashMapOf( "zulu_time_zone" to UnittoTimeZone(id = "zulu_time_zone", nameRes = "Zulu Time Zone", offsetSeconds = 0) ) - val favoriteTimeZones: MutableStateFlow> = MutableStateFlow(emptyList()) + val favoriteTimeZones: Flow> = dao + .getAll() + .map { list -> + val favorites = mutableListOf() + list.forEach { entity -> + val foundTimeZone = allTimeZones[entity.id] ?: return@forEach + val mapped = foundTimeZone.copy( + position = entity.position + ) + favorites.add(mapped) + } -// UNCOMMENT FOR RELEASE -// val favoriteTimeZones: Flow> = dao -// .getAll() -// .map { list -> -// val favorites = mutableListOf() -// list.forEach { entity -> -// val foundTimeZone = allTimeZones[entity.id] ?: return@forEach -// val mapped = foundTimeZone.copy( -// position = entity.position -// ) -// favorites.add(mapped) -// } -// -// favorites -// } + favorites + } suspend fun swapTimeZones(from: String, to: String) = withContext(Dispatchers.IO) { -// UNCOMMENT FOR RELEASE -// dao.swap(from, to) - - favoriteTimeZones.update { - val fromIndex = it.indexOfFirst { it.id == from } - val toIndex = it.indexOfFirst { it.id == to } - - it - .toMutableList() - .apply { - add(toIndex, removeAt(fromIndex)) - } - } + dao.swap(from, to) return@withContext } suspend fun delete(timeZone: UnittoTimeZone) = withContext(Dispatchers.IO) { -// UNCOMMENT FOR RELEASE -// // Only PrimaryKey is needed -// dao.remove(TimeZoneEntity(id = timeZone.id, position = 0)) - - favoriteTimeZones.update { it.minus(timeZone) } + // Only PrimaryKey is needed + dao.remove(TimeZoneEntity(id = timeZone.id, position = 0)) } suspend fun filterAllTimeZones(searchQuery: String): List = @@ -118,12 +104,11 @@ class TimeZonesRepository @Inject constructor() { suspend fun addToFavorites(timeZone: UnittoTimeZone) { // UNCOMMENT FOR RELEASE -// dao.insert( -// TimeZoneEntity( -// id = timeZone.id, -// position = System.currentTimeMillis().toInt() -// ) -// ) - favoriteTimeZones.update { it.plus(timeZone) } + dao.insert( + TimeZoneEntity( + id = timeZone.id, + position = System.currentTimeMillis().toInt() + ) + ) } } diff --git a/feature/timezone/src/main/java/com/sadellie/unitto/feature/timezone/navigation/TimeZoneNavigation.kt b/feature/timezone/src/main/java/com/sadellie/unitto/feature/timezone/navigation/TimeZoneNavigation.kt index da673b0c..a1bf34d1 100644 --- a/feature/timezone/src/main/java/com/sadellie/unitto/feature/timezone/navigation/TimeZoneNavigation.kt +++ b/feature/timezone/src/main/java/com/sadellie/unitto/feature/timezone/navigation/TimeZoneNavigation.kt @@ -32,8 +32,8 @@ import com.sadellie.unitto.feature.timezone.TimeZoneRoute import java.time.ZonedDateTime import java.time.format.DateTimeFormatter -private val graph = TopLevelDestinations.TimeZone.start -private val start: String = TopLevelDestinations.TimeZone.graph +private val graph = TopLevelDestinations.TimeZone.graph +private val start = TopLevelDestinations.TimeZone.start private const val ADD_TIME_ZONE_ROUTE = "ADD_TIME_ZONE_ROUTE" private const val USER_TIME_ARG = "USER_TIME_ARG" diff --git a/settings.gradle.kts b/settings.gradle.kts index 5496d546..d0e2a867 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -28,7 +28,6 @@ include(":feature:timezone") include(":feature:settings") include(":data:userprefs") include(":data:licenses") -// include(":data:epoch") include(":data:calculator") include(":data:database") include(":data:model")