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
import androidx.room.TypeConverters
import de.rki.coronawarnapp.storage.keycache.KeyCacheDao
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.TracingIntervalEntity
import de.rki.coronawarnapp.storage.tracing.TracingIntervalRepository
import de.rki.coronawarnapp.util.Converters
import de.rki.coronawarnapp.util.security.SecurityHelper
import net.sqlcipher.database.SupportFactory
......@@ -48,6 +50,11 @@ abstract class AppDatabase : RoomDatabase() {
SQLiteDatabase.deleteDatabase(dbFile)
}
resetInstance()
// reset also the repo instances
KeyCacheRepository.resetInstance()
TracingIntervalRepository.resetInstance()
ExposureSummaryRepository.resetInstance()
}
private fun buildDatabase(context: Context): AppDatabase {
......
......@@ -14,6 +14,10 @@ class ExposureSummaryRepository(private val exposureSummaryDao: ExposureSummaryD
instance ?: ExposureSummaryRepository(exposureSummaryDao).also { instance = it }
}
fun resetInstance() = synchronized(this) {
instance = null
}
fun getExposureSummaryRepository(): ExposureSummaryRepository {
return getInstance(
AppDatabase.getInstance(CoronaWarnApplication.getAppContext())
......
......@@ -30,6 +30,16 @@ object RiskLevelRepository {
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.
* This is necessary if the app has no connectivity and the risk level transaction
......
......@@ -37,6 +37,10 @@ class KeyCacheRepository(private val keyCacheDao: KeyCacheDao) {
.also { instance = it }
}
fun resetInstance() = synchronized(this) {
instance = null
}
fun getDateRepository(context: Context): KeyCacheRepository {
return getInstance(
AppDatabase.getInstance(context.applicationContext)
......
......@@ -39,6 +39,10 @@ class TracingIntervalRepository(private val tracingIntervalDao: TracingIntervalD
.also { instance = it }
}
fun resetInstance() = synchronized(this) {
instance = null
}
fun getDateRepository(context: Context): TracingIntervalRepository {
return getInstance(
AppDatabase.getInstance(context.applicationContext)
......
......@@ -23,6 +23,7 @@ import android.annotation.SuppressLint
import android.content.Context
import de.rki.coronawarnapp.storage.AppDatabase
import de.rki.coronawarnapp.storage.FileStorageHelper
import de.rki.coronawarnapp.storage.RiskLevelRepository
import de.rki.coronawarnapp.util.security.SecurityHelper
import timber.log.Timber
......@@ -43,6 +44,8 @@ object DataRetentionHelper {
AppDatabase.reset(context)
// Shared Preferences Reset
SecurityHelper.resetSharedPrefs()
// Reset the current risk level stored in LiveData
RiskLevelRepository.reset()
// Export File Reset
FileStorageHelper.getAllFilesInKeyExportDirectory().forEach { it.delete() }
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