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()
+ }
}