diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/crash.ui/SettingsCrashReportViewModel.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/crash.ui/SettingsCrashReportViewModel.kt index 234022907e2c603253e6ac70c8abffa1dd72143d..44d3e0cd08a2688511a8c20589bfe3b428659d36 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/crash.ui/SettingsCrashReportViewModel.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/crash.ui/SettingsCrashReportViewModel.kt @@ -4,7 +4,6 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.asLiveData import androidx.lifecycle.map -import androidx.lifecycle.viewModelScope import com.squareup.inject.assisted.AssistedInject import de.rki.coronawarnapp.bugreporting.event.BugEvent import de.rki.coronawarnapp.bugreporting.reportProblem @@ -12,9 +11,7 @@ import de.rki.coronawarnapp.bugreporting.storage.repository.BugRepository import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import timber.log.Timber -import java.lang.Exception class SettingsCrashReportViewModel @AssistedInject constructor( private val crashReportRepository: BugRepository @@ -28,7 +25,7 @@ class SettingsCrashReportViewModel @AssistedInject constructor( createBugEventFormattedText(it) } - fun deleteAllCrashReports() = viewModelScope.launch(Dispatchers.IO) { + fun deleteAllCrashReports() = launch(Dispatchers.IO) { crashReportRepository.clear() } diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModel.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModel.kt index c58e64556e2a35b1f6604de20ecaee41ba75638e..dd054268560c8e752ee4d50ac7136de08f43c54c 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModel.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModel.kt @@ -1,7 +1,6 @@ package de.rki.coronawarnapp.test.debugoptions.ui import android.content.Context -import androidx.lifecycle.viewModelScope import com.squareup.inject.assisted.AssistedInject import de.rki.coronawarnapp.environment.EnvironmentSetup import de.rki.coronawarnapp.environment.EnvironmentSetup.Type.Companion.toEnvironmentType @@ -19,8 +18,6 @@ import de.rki.coronawarnapp.util.ui.SingleLiveEvent import de.rki.coronawarnapp.util.ui.smartLiveData import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.launch import java.io.File class DebugOptionsFragmentViewModel @AssistedInject constructor( @@ -79,7 +76,7 @@ class DebugOptionsFragmentViewModel @AssistedInject constructor( fun shareLogFile() { CWADebug.fileLogger?.let { - viewModelScope.launch(context = Dispatchers.Default) { + launch { if (!it.logFile.exists()) return@launch val externalPath = File( diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt index d0a85e7f0f7f54678a5258bb921b8bca8595726b..765ac237e902619383d9f0e03d352c5d4e65996a 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/risklevel/ui/TestRiskLevelCalculationFragmentCWAViewModel.kt @@ -4,7 +4,6 @@ import android.content.Context import androidx.lifecycle.MutableLiveData import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.asLiveData -import androidx.lifecycle.viewModelScope import com.google.android.gms.nearby.exposurenotification.ExposureInformation import com.squareup.inject.assisted.Assisted import com.squareup.inject.assisted.AssistedInject @@ -37,7 +36,6 @@ import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactory import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.sample -import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import timber.log.Timber import java.io.File @@ -90,7 +88,7 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor( } fun resetRiskLevel() { - viewModelScope.launch { + launch { withContext(Dispatchers.IO) { try { // Preference reset @@ -122,7 +120,7 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor( ) fun startENFObserver() { - viewModelScope.launch { + launch { try { var workState = riskScoreState.value!! @@ -263,7 +261,7 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor( dir.mkdirs() var googleFileList: List<File> - viewModelScope.launch { + launch { googleFileList = KeyFileHelper.asyncCreateExportFiles(appleFiles, dir) Timber.i("Provide ${googleFileList.count()} files with ${appleKeyList.size} keys with token $token") @@ -291,7 +289,7 @@ class TestRiskLevelCalculationFragmentCWAViewModel @AssistedInject constructor( } fun clearKeyCache() { - viewModelScope.launch { keyCacheRepository.clear() } + launch { keyCacheRepository.clear() } } @AssistedInject.Factory diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentViewModel.kt index 9d996c01ebf7532defd6ebd9235a603fa05040d7..a710675c0b0b106baf0222a0ccc1355063e5c3ec 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingTracingFragmentViewModel.kt @@ -1,6 +1,5 @@ package de.rki.coronawarnapp.ui.onboarding -import androidx.lifecycle.viewModelScope import com.squareup.inject.assisted.AssistedInject import de.rki.coronawarnapp.exception.ExceptionCategory import de.rki.coronawarnapp.exception.reporting.report @@ -10,7 +9,6 @@ import de.rki.coronawarnapp.storage.interoperability.InteroperabilityRepository import de.rki.coronawarnapp.ui.SingleLiveEvent import de.rki.coronawarnapp.util.viewmodel.CWAViewModel import de.rki.coronawarnapp.util.viewmodel.SimpleCWAViewModelFactory -import kotlinx.coroutines.launch class OnboardingTracingFragmentViewModel @AssistedInject constructor( private val interoperabilityRepository: InteroperabilityRepository @@ -25,7 +23,7 @@ class OnboardingTracingFragmentViewModel @AssistedInject constructor( // Reset tracing state in onboarding fun resetTracing() { - viewModelScope.launch { + launch { try { if (InternalExposureNotificationClient.asyncIsEnabled()) { InternalExposureNotificationClient.asyncStop() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/viewmodel/CWAViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/viewmodel/CWAViewModel.kt index 9f3eddff208662fb70a1996c9756b4fcec245f27..40cd6f7685f0ef272a58f763ef318c676be1d5c2 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/viewmodel/CWAViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/viewmodel/CWAViewModel.kt @@ -5,8 +5,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import de.rki.coronawarnapp.util.coroutine.DefaultDispatcherProvider import de.rki.coronawarnapp.util.coroutine.DispatcherProvider +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Job import kotlinx.coroutines.launch import timber.log.Timber import kotlin.coroutines.CoroutineContext @@ -29,7 +29,13 @@ abstract class CWAViewModel constructor( fun launch( context: CoroutineContext = dispatcherProvider.Default, block: suspend CoroutineScope.() -> Unit - ): Job = viewModelScope.launch(context = context, block = block) + ) { + try { + viewModelScope.launch(context = context, block = block) + } catch (e: CancellationException) { + Timber.w(e, "launch()ed coroutine was canceled.") + } + } @CallSuper override fun onCleared() {