diff --git a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt index 5f2f3a274e85e9c145fb7c1cab7cf55586869160..383ad820a7bc2d2ce99f9951c6d4e9cf23da06cb 100644 --- a/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt +++ b/Corona-Warn-App/src/androidTest/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentTest.kt @@ -30,7 +30,7 @@ import de.rki.coronawarnapp.tracing.ui.statusbar.TracingHeaderState import de.rki.coronawarnapp.ui.main.home.items.FAQCard import de.rki.coronawarnapp.ui.main.home.items.HomeItem import de.rki.coronawarnapp.ui.statistics.Statistics -import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool +import de.rki.coronawarnapp.util.encryptionmigration.EncryptionErrorResetTool import de.rki.coronawarnapp.util.shortcuts.AppShortcutsHelper import de.rki.coronawarnapp.util.ui.SingleLiveEvent import io.mockk.MockKAnnotations diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt index d57407ef4e48d7f63255544a925d6fdae4e261a8..1424f07424a203095617263ea68c00219f6c235d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/CoronaWarnApplication.kt @@ -21,9 +21,8 @@ import de.rki.coronawarnapp.exception.reporting.ErrorReportReceiver import de.rki.coronawarnapp.exception.reporting.ReportingConstants.ERROR_REPORT_LOCAL_BROADCAST_CHANNEL import de.rki.coronawarnapp.notification.NotificationHelper import de.rki.coronawarnapp.risk.RiskLevelChangeDetector -import de.rki.coronawarnapp.submission.SubmissionSettings import de.rki.coronawarnapp.storage.OnboardingSettings -import de.rki.coronawarnapp.storage.preferences.EncryptedPreferencesMigration +import de.rki.coronawarnapp.submission.SubmissionSettings import de.rki.coronawarnapp.submission.auto.AutoSubmission import de.rki.coronawarnapp.task.TaskController import de.rki.coronawarnapp.util.CWADebug @@ -62,7 +61,6 @@ class CoronaWarnApplication : Application(), HasAndroidInjector { @Inject lateinit var autoSubmission: AutoSubmission @Inject lateinit var submissionSettings: SubmissionSettings @Inject lateinit var onboardingSettings: OnboardingSettings - @Inject lateinit var encryptedPreferencesMigration: EncryptedPreferencesMigration @LogHistoryTree @Inject lateinit var rollingLogHistory: Timber.Tree @@ -71,12 +69,15 @@ class CoronaWarnApplication : Application(), HasAndroidInjector { super.onCreate() CWADebug.init(this) - Timber.v("onCreate(): Initializing Dagger") - AppInjector.init(this) + AppInjector.init(this).let { compPreview -> + Timber.v("Calling EncryptedPreferencesMigration.doMigration()") + compPreview.encryptedMigration.doMigration() - CWADebug.initAfterInjection(component) + CWADebug.initAfterInjection(compPreview) - encryptedPreferencesMigration.doMigration() + Timber.v("Completing application injection") + compPreview.inject(this) + } BackgroundWorkScheduler.init(component) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/preferences/EncryptedPreferencesHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/preferences/EncryptedPreferencesHelper.kt deleted file mode 100644 index 45b15c4d4b07e2cfc3fe60a6c82221d300dfbca1..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/preferences/EncryptedPreferencesHelper.kt +++ /dev/null @@ -1,51 +0,0 @@ -package de.rki.coronawarnapp.storage.preferences - -import android.content.SharedPreferences -import android.content.pm.ApplicationInfo -import androidx.core.content.edit -import de.rki.coronawarnapp.exception.CwaSecurityException -import de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory -import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool -import de.rki.coronawarnapp.util.security.SecurityConstants -import java.io.File -import javax.inject.Inject - -class EncryptedPreferencesHelper @Inject constructor( - private val applicationInfo: ApplicationInfo, - factory: EncryptedPreferencesFactory, - encryptionErrorResetTool: EncryptionErrorResetTool -) { - - private val encryptedPreferencesFile by lazy { - File(applicationInfo.dataDir) - .resolve("shared_prefs/${SecurityConstants.ENCRYPTED_SHARED_PREFERENCES_FILE}.xml") - } - - val encryptedSharedPreferencesInstance: SharedPreferences? by lazy { - withSecurityCatch { - try { - if (encryptedPreferencesFile.exists()) { - factory.create(SecurityConstants.ENCRYPTED_SHARED_PREFERENCES_FILE) - } else { - null - } - } catch (e: Exception) { - encryptionErrorResetTool.isResetNoticeToBeShown = true - null - } - } - } - - fun clean() { - encryptedSharedPreferencesInstance?.edit(true) { - clear() - } - encryptedPreferencesFile.delete() - } - - private fun <T> withSecurityCatch(doInCatch: () -> T) = try { - doInCatch.invoke() - } catch (e: Exception) { - throw CwaSecurityException(e) - } -} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt index 0c72da282baddaed96138f6756ab8620763cc3b6..6cdae10cfd0f093d0643cc4778a6102cd5a8a48c 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/home/HomeFragmentViewModel.kt @@ -54,7 +54,7 @@ import de.rki.coronawarnapp.ui.main.home.items.ReenableRiskCard import de.rki.coronawarnapp.util.DeviceUIState import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withSuccess import de.rki.coronawarnapp.util.coroutine.DispatcherProvider -import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool +import de.rki.coronawarnapp.util.encryptionmigration.EncryptionErrorResetTool import de.rki.coronawarnapp.util.shortcuts.AppShortcutsHelper import de.rki.coronawarnapp.util.ui.SingleLiveEvent import de.rki.coronawarnapp.util.viewmodel.CWAViewModel diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CWADebug.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CWADebug.kt index 9cfc42f4eb2fac80e98b96c934975aeb17e90f36..a008516956732dc82157556906387f2e4206b736 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CWADebug.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/CWADebug.kt @@ -36,6 +36,7 @@ object CWADebug { } fun initAfterInjection(component: ApplicationComponent) { + Timber.v("initAfterInjection(%s)", component) // TODO ¯\_(ツ)_/¯ if (isDeviceForTestersBuild) { debugLogger.setInjectionIsReady(component) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/AppInjector.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/AppInjector.kt index 2c63e6eff976b62809dffa04ffacb214778e37c2..12e80b7d71a2160007838ec7639c1c8136769b47 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/AppInjector.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/AppInjector.kt @@ -13,9 +13,11 @@ import timber.log.Timber object AppInjector { lateinit var component: ApplicationComponent - fun init(app: CoronaWarnApplication) { - component = DaggerApplicationComponent.factory().create(app) - component.inject(app) + fun init(app: CoronaWarnApplication): ApplicationComponent { + Timber.v("Initializing Dagger (%s)", app) + return DaggerApplicationComponent.factory().create(app).also { + component = it + } } fun setup(activity: Activity) { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/ApplicationComponent.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/ApplicationComponent.kt index 35ee578c350d1feeaaaf43f1a4a3e9852c896171..f4784f987a9f9de03c5fdf39dce4717ce95ea700 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/ApplicationComponent.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/di/ApplicationComponent.kt @@ -35,8 +35,9 @@ import de.rki.coronawarnapp.util.coroutine.AppCoroutineScope import de.rki.coronawarnapp.util.coroutine.AppScope import de.rki.coronawarnapp.util.coroutine.CoroutineModule import de.rki.coronawarnapp.util.device.DeviceModule -import de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory -import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool +import de.rki.coronawarnapp.util.encryptionmigration.EncryptedPreferencesFactory +import de.rki.coronawarnapp.util.encryptionmigration.EncryptedPreferencesMigration +import de.rki.coronawarnapp.util.encryptionmigration.EncryptionErrorResetTool import de.rki.coronawarnapp.util.security.SecurityModule import de.rki.coronawarnapp.util.serialization.SerializationModule import de.rki.coronawarnapp.util.worker.WorkerBinder @@ -100,6 +101,8 @@ interface ApplicationComponent : AndroidInjector<CoronaWarnApplication> { fun inject(backgroundWorkScheduler: BackgroundWorkScheduler) + val encryptedMigration: EncryptedPreferencesMigration + @Component.Factory interface Factory { fun create(@BindsInstance app: CoronaWarnApplication): ApplicationComponent diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/EncryptedPreferencesFactory.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesFactory.kt similarity index 96% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/EncryptedPreferencesFactory.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesFactory.kt index 317e3e765f7dd4fe0c60c33f9761ca9e4e2756fc..cd3ec57e86f27d00201f8815f2600f70622c58c1 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/EncryptedPreferencesFactory.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesFactory.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.util.security +package de.rki.coronawarnapp.util.encryptionmigration import android.content.Context import android.content.SharedPreferences diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesHelper.kt new file mode 100644 index 0000000000000000000000000000000000000000..b585815035c1daba44401b83b28b9f471a8572f3 --- /dev/null +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesHelper.kt @@ -0,0 +1,53 @@ +package de.rki.coronawarnapp.util.encryptionmigration + +import android.content.SharedPreferences +import android.content.pm.ApplicationInfo +import androidx.core.content.edit +import timber.log.Timber +import java.io.File +import javax.inject.Inject + +class EncryptedPreferencesHelper @Inject constructor( + private val applicationInfo: ApplicationInfo, + factory: EncryptedPreferencesFactory +) { + + private val preferenceFile by lazy { + File(applicationInfo.dataDir) + .resolve("shared_prefs/$ENCRYPTED_SHARED_PREFERENCES_FILE.xml") + } + + val instance: SharedPreferences? by lazy { + if (preferenceFile.exists()) { + factory.create(ENCRYPTED_SHARED_PREFERENCES_FILE) + } else { + null + } + } + + fun clean() { + try { + instance?.edit(true) { + Timber.d("Clearing all encrypted preference values.") + clear() + Timber.d("Preference values have been cleared.") + } + } catch (e: Exception) { + Timber.w("Failed to clear encrypted preferences.") + } + + if (preferenceFile.exists()) { + if (preferenceFile.delete()) { + Timber.i("Encrypted preference file deleted.") + } else { + Timber.e("Encrypted preference could not be deleted.") + } + } else { + Timber.d("Encrypted preference file did not exist.") + } + } + + companion object { + private const val ENCRYPTED_SHARED_PREFERENCES_FILE = "shared_preferences_cwa" + } +} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/preferences/EncryptedPreferencesMigration.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesMigration.kt similarity index 85% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/preferences/EncryptedPreferencesMigration.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesMigration.kt index cda45aade8aba1a42b5211b52bbfab33d807f92e..ae1cb42afbd8b5d96572b3b938207caba0593cb9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/preferences/EncryptedPreferencesMigration.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptedPreferencesMigration.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.storage.preferences +package de.rki.coronawarnapp.util.encryptionmigration import android.content.Context import android.content.SharedPreferences @@ -15,32 +15,38 @@ import javax.inject.Inject class EncryptedPreferencesMigration @Inject constructor( @AppContext private val context: Context, - private val encryptedPreferencesHelper: EncryptedPreferencesHelper, + private val encryptedPreferences: EncryptedPreferencesHelper, private val cwaSettings: CWASettings, private val submissionSettings: SubmissionSettings, private val tracingSettings: TracingSettings, - private val onboardingSettings: OnboardingSettings + private val onboardingSettings: OnboardingSettings, + private val errorResetTool: EncryptionErrorResetTool ) { fun doMigration() { Timber.d("Migration start") try { - copyData() - cleanData() + encryptedPreferences.instance?.let { copyData(it) } } catch (e: Exception) { - Timber.e(e, "Migration was not successful") + Timber.e(e, "Migration failed") + errorResetTool.isResetNoticeToBeShown = true + } finally { + try { + encryptedPreferences.clean() + } catch (e: Exception) { + Timber.e(e, "Encryption data clean up failed") + } } try { dropDatabase() } catch (e: Exception) { - Timber.e(e, "Database removing was not successful") + Timber.e(e, "Database removing failed") } Timber.d("Migration finish") } - private fun copyData() { - val encryptedSharedPreferences = encryptedPreferencesHelper.encryptedSharedPreferencesInstance ?: return - Timber.d("EncryptedPreferences are available") + private fun copyData(encryptedSharedPreferences: SharedPreferences) { + Timber.i("copyData(): EncryptedPreferences are available") SettingsLocalData(encryptedSharedPreferences).apply { cwaSettings.wasInteroperabilityShownAtLeastOnce = wasInteroperabilityShown() cwaSettings.isNotificationsRiskEnabled.update { isNotificationsRiskEnabled() } @@ -72,17 +78,21 @@ class EncryptedPreferencesMigration @Inject constructor( submissionSettings.isSubmissionSuccessful = numberOfSuccessfulSubmissions() >= 1 submissionSettings.isAllowedToSubmitKeys = isAllowedToSubmitDiagnosisKeys() } - } - - private fun cleanData() { - encryptedPreferencesHelper.clean() + Timber.i("copyData(): EncryptedPreferences have been copied.") } private fun dropDatabase() { val file = context.getDatabasePath("coronawarnapp-db") - if (file.exists()) { - Timber.d("Removing database $file") - SQLiteDatabase.deleteDatabase(file) + if (!file.exists()) { + Timber.d("Encrypted database does not exist.") + return + } + + Timber.i("Removing database $file") + if (SQLiteDatabase.deleteDatabase(file)) { + Timber.i("Legacy encrypted database was deleted.") + } else { + Timber.e("Legacy encrypted database could not be deleted.") } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/EncryptionErrorResetTool.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptionErrorResetTool.kt similarity index 69% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/EncryptionErrorResetTool.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptionErrorResetTool.kt index fd87b8a0ab525bacf7f0e9640088e7e87aedc36d..fd432a8b6191c943c72bf1af70ff82d1e29c3214 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/EncryptionErrorResetTool.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/encryptionmigration/EncryptionErrorResetTool.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.util.security +package de.rki.coronawarnapp.util.encryptionmigration import android.content.Context import android.content.SharedPreferences @@ -16,12 +16,12 @@ class EncryptionErrorResetTool @Inject constructor( } var isResetNoticeToBeShown: Boolean - get() = prefs.getBoolean(PKEY_EA1851_SHOW_RESET_NOTICE, false) + get() = prefs.getBoolean(PKEY_EA2850_SHOW_RESET_NOTICE, false) set(value) = prefs.edit { - putBoolean(PKEY_EA1851_SHOW_RESET_NOTICE, value) + putBoolean(PKEY_EA2850_SHOW_RESET_NOTICE, value) } companion object { - private const val PKEY_EA1851_SHOW_RESET_NOTICE = "ea1851.reset.shownotice" + private const val PKEY_EA2850_SHOW_RESET_NOTICE = "ea2850.reset.shownotice" } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/SecurityConstants.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/SecurityConstants.kt index 03bffdb2867296613d131f024afafeb9ffbe440d..61ec34895b73e83eb1400d283c0920d69ae7ce04 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/SecurityConstants.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/security/SecurityConstants.kt @@ -2,6 +2,5 @@ package de.rki.coronawarnapp.util.security object SecurityConstants { const val DIGEST_ALGORITHM = "SHA-256" - const val ENCRYPTED_SHARED_PREFERENCES_FILE = "shared_preferences_cwa" const val EXPORT_FILE_SIGNATURE_VERIFICATION_ALGORITHM = "SHA256withECDSA" } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/home/HomeFragmentViewModelTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/home/HomeFragmentViewModelTest.kt index fe35faf99c0c09ab909c1ce2a86c2edbd7a928b6..2dfc0688e88b7f1cc9f70dcf67b7b2da182359a6 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/home/HomeFragmentViewModelTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/main/home/HomeFragmentViewModelTest.kt @@ -22,7 +22,7 @@ import de.rki.coronawarnapp.ui.main.home.HomeFragmentViewModel import de.rki.coronawarnapp.util.DeviceUIState.PAIRED_POSITIVE import de.rki.coronawarnapp.util.DeviceUIState.PAIRED_POSITIVE_TELETAN import de.rki.coronawarnapp.util.NetworkRequestWrapper -import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool +import de.rki.coronawarnapp.util.encryptionmigration.EncryptionErrorResetTool import de.rki.coronawarnapp.util.shortcuts.AppShortcutsHelper import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/storage/SubmissionRepositoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/storage/SubmissionRepositoryTest.kt index 31f62170a700594e6b68beb6e7f3039da3154d4f..9dcfcba4413acba6fa00aff777ea91ea8431466b 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/storage/SubmissionRepositoryTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/storage/SubmissionRepositoryTest.kt @@ -14,9 +14,9 @@ import de.rki.coronawarnapp.util.NetworkRequestWrapper import de.rki.coronawarnapp.util.TimeStamper import de.rki.coronawarnapp.util.di.AppInjector import de.rki.coronawarnapp.util.di.ApplicationComponent +import de.rki.coronawarnapp.util.encryptionmigration.EncryptedPreferencesFactory +import de.rki.coronawarnapp.util.encryptionmigration.EncryptionErrorResetTool import de.rki.coronawarnapp.util.formatter.TestResult -import de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory -import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations import io.mockk.Runs diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/security/EncryptedPreferencesFactoryTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/security/EncryptedPreferencesFactoryTest.kt index dc37e11dfe7312d08cf5ae20eb12c9d8a6c1a77a..8ca6a803feab0998a0010866b371caa29c6ac1b2 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/security/EncryptedPreferencesFactoryTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/security/EncryptedPreferencesFactoryTest.kt @@ -1,6 +1,7 @@ package de.rki.coronawarnapp.util.security import android.content.Context +import de.rki.coronawarnapp.util.encryptionmigration.EncryptedPreferencesFactory import io.kotest.assertions.throwables.shouldNotThrowAny import io.mockk.Called import io.mockk.MockKAnnotations diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorkerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorkerTest.kt index 2547fd7543ba824ef0c7cb14acfe1036a2ae4343..6a9c9d4a7777a3e330104b772f6fba992888eeef 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorkerTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorkerTest.kt @@ -15,9 +15,9 @@ import de.rki.coronawarnapp.util.TimeAndDateExtensions.daysToMilliseconds import de.rki.coronawarnapp.util.TimeStamper import de.rki.coronawarnapp.util.di.AppInjector import de.rki.coronawarnapp.util.di.ApplicationComponent +import de.rki.coronawarnapp.util.encryptionmigration.EncryptedPreferencesFactory +import de.rki.coronawarnapp.util.encryptionmigration.EncryptionErrorResetTool import de.rki.coronawarnapp.util.formatter.TestResult -import de.rki.coronawarnapp.util.security.EncryptedPreferencesFactory -import de.rki.coronawarnapp.util.security.EncryptionErrorResetTool import de.rki.coronawarnapp.worker.BackgroundWorkScheduler.stop import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations