diff --git a/core/base/src/main/res/values/strings.xml b/core/base/src/main/res/values/strings.xml index 0cfb467d..ed3aba5e 100644 --- a/core/base/src/main/res/values/strings.xml +++ b/core/base/src/main/res/values/strings.xml @@ -1419,4 +1419,5 @@ Used in this dialog window. Should be short --> History view Unit groups, sorting, formatting Display + Clear cache \ No newline at end of file diff --git a/data/database/src/main/java/com/sadellie/unitto/data/database/CurrencyRatesDao.kt b/data/database/src/main/java/com/sadellie/unitto/data/database/CurrencyRatesDao.kt index 75a40bda..9f8838f4 100644 --- a/data/database/src/main/java/com/sadellie/unitto/data/database/CurrencyRatesDao.kt +++ b/data/database/src/main/java/com/sadellie/unitto/data/database/CurrencyRatesDao.kt @@ -31,4 +31,7 @@ interface CurrencyRatesDao { @Query("SELECT DISTINCT * FROM currency_rates WHERE timestamp = (SELECT MAX(timestamp) FROM currency_rates) AND base_unit_id = :baseId") suspend fun getLatestRates(baseId: String): List + + @Query("DELETE FROM currency_rates") + suspend fun clear() } diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index b122979e..5e28fcd7 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -33,6 +33,7 @@ dependencies { implementation(libs.androidx.appcompat.appcompat) implementation(project(":data:common")) + implementation(project(":data:database")) implementation(project(":data:model")) implementation(project(":data:userprefs")) implementation(project(":data:licenses")) diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt index fa8cfb0d..ccd8e5bd 100644 --- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt +++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsScreen.kt @@ -21,6 +21,7 @@ package com.sadellie.unitto.feature.settings import androidx.compose.foundation.clickable import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Cached import androidx.compose.material.icons.filled.Calculate import androidx.compose.material.icons.filled.Home import androidx.compose.material.icons.filled.Info @@ -64,6 +65,7 @@ internal fun SettingsRoute( navigateUp = navigateUp, navControllerAction = navControllerAction, updateVibrations = viewModel::updateVibrations, + clearCache = viewModel::clearCache ) } @@ -73,6 +75,7 @@ private fun SettingsScreen( navigateUp: () -> Unit, navControllerAction: (String) -> Unit, updateVibrations: (Boolean) -> Unit, + clearCache: () -> Unit, ) { val mContext = LocalContext.current @@ -146,7 +149,15 @@ private fun SettingsScreen( ) } - // RATE THIS APP + item("clear cache") { + UnittoListItem( + headlineText = stringResource(R.string.clear_cache), + icon = Icons.Default.Cached, + iconDescription = stringResource(R.string.clear_cache), + modifier = Modifier.clickable { clearCache() }, + ) + } + if (BuildConfig.STORE_LINK.isNotEmpty()) { item("rate this app") { UnittoListItem( @@ -179,5 +190,6 @@ private fun PreviewSettingsScreen() { navigateUp = {}, navControllerAction = {}, updateVibrations = {}, + clearCache = {} ) } diff --git a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsViewModel.kt b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsViewModel.kt index 4b6fc447..c0fe81a8 100644 --- a/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsViewModel.kt +++ b/feature/settings/src/main/java/com/sadellie/unitto/feature/settings/SettingsViewModel.kt @@ -21,6 +21,7 @@ package com.sadellie.unitto.feature.settings import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.sadellie.unitto.data.common.stateIn +import com.sadellie.unitto.data.database.CurrencyRatesDao import com.sadellie.unitto.data.userprefs.GeneralPreferences import com.sadellie.unitto.data.userprefs.UserPreferencesRepository import dagger.hilt.android.lifecycle.HiltViewModel @@ -30,6 +31,7 @@ import javax.inject.Inject @HiltViewModel internal class SettingsViewModel @Inject constructor( private val userPrefsRepository: UserPreferencesRepository, + private val currencyRatesDao: CurrencyRatesDao, ) : ViewModel() { val userPrefs = userPrefsRepository.generalPrefs .stateIn(viewModelScope, GeneralPreferences()) @@ -40,4 +42,8 @@ internal class SettingsViewModel @Inject constructor( fun updateVibrations(enabled: Boolean) = viewModelScope.launch { userPrefsRepository.updateVibrations(enabled) } + + fun clearCache() = viewModelScope.launch { + currencyRatesDao.clear() + } }