Skip to content
Snippets Groups Projects
Unverified Commit 2e556f9b authored by Philipp Woessner's avatar Philipp Woessner Committed by GitHub
Browse files

reset singleton instances when the user resets the app (#901)

parent bb16d0f6
No related branches found
No related tags found
No related merge requests found
...@@ -8,8 +8,10 @@ import androidx.room.RoomDatabase ...@@ -8,8 +8,10 @@ import androidx.room.RoomDatabase
import androidx.room.TypeConverters import androidx.room.TypeConverters
import de.rki.coronawarnapp.storage.keycache.KeyCacheDao import de.rki.coronawarnapp.storage.keycache.KeyCacheDao
import de.rki.coronawarnapp.storage.keycache.KeyCacheEntity import de.rki.coronawarnapp.storage.keycache.KeyCacheEntity
import de.rki.coronawarnapp.storage.keycache.KeyCacheRepository
import de.rki.coronawarnapp.storage.tracing.TracingIntervalDao import de.rki.coronawarnapp.storage.tracing.TracingIntervalDao
import de.rki.coronawarnapp.storage.tracing.TracingIntervalEntity import de.rki.coronawarnapp.storage.tracing.TracingIntervalEntity
import de.rki.coronawarnapp.storage.tracing.TracingIntervalRepository
import de.rki.coronawarnapp.util.Converters import de.rki.coronawarnapp.util.Converters
import de.rki.coronawarnapp.util.security.SecurityHelper import de.rki.coronawarnapp.util.security.SecurityHelper
import net.sqlcipher.database.SupportFactory import net.sqlcipher.database.SupportFactory
...@@ -48,6 +50,11 @@ abstract class AppDatabase : RoomDatabase() { ...@@ -48,6 +50,11 @@ abstract class AppDatabase : RoomDatabase() {
SQLiteDatabase.deleteDatabase(dbFile) SQLiteDatabase.deleteDatabase(dbFile)
} }
resetInstance() resetInstance()
// reset also the repo instances
KeyCacheRepository.resetInstance()
TracingIntervalRepository.resetInstance()
ExposureSummaryRepository.resetInstance()
} }
private fun buildDatabase(context: Context): AppDatabase { private fun buildDatabase(context: Context): AppDatabase {
......
...@@ -14,6 +14,10 @@ class ExposureSummaryRepository(private val exposureSummaryDao: ExposureSummaryD ...@@ -14,6 +14,10 @@ class ExposureSummaryRepository(private val exposureSummaryDao: ExposureSummaryD
instance ?: ExposureSummaryRepository(exposureSummaryDao).also { instance = it } instance ?: ExposureSummaryRepository(exposureSummaryDao).also { instance = it }
} }
fun resetInstance() = synchronized(this) {
instance = null
}
fun getExposureSummaryRepository(): ExposureSummaryRepository { fun getExposureSummaryRepository(): ExposureSummaryRepository {
return getInstance( return getInstance(
AppDatabase.getInstance(CoronaWarnApplication.getAppContext()) AppDatabase.getInstance(CoronaWarnApplication.getAppContext())
......
...@@ -30,6 +30,16 @@ object RiskLevelRepository { ...@@ -30,6 +30,16 @@ object RiskLevelRepository {
setLastSuccessfullyCalculatedScore(riskLevel) setLastSuccessfullyCalculatedScore(riskLevel)
} }
/**
* Resets the data in the [RiskLevelRepository]
*
* @see de.rki.coronawarnapp.util.DataRetentionHelper
*
*/
fun reset() {
riskLevelScore.postValue(RiskLevelConstants.UNKNOWN_RISK_INITIAL)
}
/** /**
* Set the current risk level from the last calculated risk level. * Set the current risk level from the last calculated risk level.
* This is necessary if the app has no connectivity and the risk level transaction * This is necessary if the app has no connectivity and the risk level transaction
......
...@@ -37,6 +37,10 @@ class KeyCacheRepository(private val keyCacheDao: KeyCacheDao) { ...@@ -37,6 +37,10 @@ class KeyCacheRepository(private val keyCacheDao: KeyCacheDao) {
.also { instance = it } .also { instance = it }
} }
fun resetInstance() = synchronized(this) {
instance = null
}
fun getDateRepository(context: Context): KeyCacheRepository { fun getDateRepository(context: Context): KeyCacheRepository {
return getInstance( return getInstance(
AppDatabase.getInstance(context.applicationContext) AppDatabase.getInstance(context.applicationContext)
......
...@@ -39,6 +39,10 @@ class TracingIntervalRepository(private val tracingIntervalDao: TracingIntervalD ...@@ -39,6 +39,10 @@ class TracingIntervalRepository(private val tracingIntervalDao: TracingIntervalD
.also { instance = it } .also { instance = it }
} }
fun resetInstance() = synchronized(this) {
instance = null
}
fun getDateRepository(context: Context): TracingIntervalRepository { fun getDateRepository(context: Context): TracingIntervalRepository {
return getInstance( return getInstance(
AppDatabase.getInstance(context.applicationContext) AppDatabase.getInstance(context.applicationContext)
......
...@@ -23,6 +23,7 @@ import android.annotation.SuppressLint ...@@ -23,6 +23,7 @@ import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import de.rki.coronawarnapp.storage.AppDatabase import de.rki.coronawarnapp.storage.AppDatabase
import de.rki.coronawarnapp.storage.FileStorageHelper import de.rki.coronawarnapp.storage.FileStorageHelper
import de.rki.coronawarnapp.storage.RiskLevelRepository
import de.rki.coronawarnapp.util.security.SecurityHelper import de.rki.coronawarnapp.util.security.SecurityHelper
import timber.log.Timber import timber.log.Timber
...@@ -43,6 +44,8 @@ object DataRetentionHelper { ...@@ -43,6 +44,8 @@ object DataRetentionHelper {
AppDatabase.reset(context) AppDatabase.reset(context)
// Shared Preferences Reset // Shared Preferences Reset
SecurityHelper.resetSharedPrefs() SecurityHelper.resetSharedPrefs()
// Reset the current risk level stored in LiveData
RiskLevelRepository.reset()
// Export File Reset // Export File Reset
FileStorageHelper.getAllFilesInKeyExportDirectory().forEach { it.delete() } FileStorageHelper.getAllFilesInKeyExportDirectory().forEach { it.delete() }
Timber.w("CWA LOCAL DATA DELETION COMPLETED.") Timber.w("CWA LOCAL DATA DELETION COMPLETED.")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment