diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/AppDatabase.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/AppDatabase.kt index 632fef208855f1e9cdb7400887612c0b6ed387f4..df9ff72967b703742197b3d639ccbfcc6e303648 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/AppDatabase.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/AppDatabase.kt @@ -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 { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/ExposureSummaryRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/ExposureSummaryRepository.kt index de6c051e3806c1f709e5a660db9479ff09ce3756..60eb7bae15005e4f8d9e26013966e856729ba541 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/ExposureSummaryRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/ExposureSummaryRepository.kt @@ -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()) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/RiskLevelRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/RiskLevelRepository.kt index 17c0a5ef5b8505e9ba567e72c574262b457cc79f..4fcb0f09ba853355e8c30faa302c863f65820ec0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/RiskLevelRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/RiskLevelRepository.kt @@ -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 diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/keycache/KeyCacheRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/keycache/KeyCacheRepository.kt index 243a5b3004b408239381fe0a9ab06547fecb48f9..9e3ce000310077d2827eefe94fb3ee4e5b2f4ecf 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/keycache/KeyCacheRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/keycache/KeyCacheRepository.kt @@ -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) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt index 2b6ea7515d8c981d487a9ba17e56cadd8c023ba8..478e580bfec8ee9ffcc61d27896a23bb06d1c46a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/tracing/TracingIntervalRepository.kt @@ -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) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataRetentionHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataRetentionHelper.kt index 2ffe2d1e6332f31fd99339be4de95f1f085f77bc..46343586783c5c9f28c5b71d5bb6825aa0d14ef4 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataRetentionHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataRetentionHelper.kt @@ -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.")