diff --git a/.circleci/config.yml b/.circleci/config.yml index c7f849574c738faf6e15a279719c7bcb4de631c0..3e7d9b10cbbc2210e2db04ff498f4665902f7e5b 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -223,9 +223,6 @@ jobs: - run-gradle-cmd: desc: JaCoCo report cmd: ":Corona-Warn-App:jacocoTestReportDeviceRelease -i" - - run: - name: Skip SonarCloud for external Pull Requests - command: '[[ -v CIRCLE_PR_REPONAME ]] && circleci-agent step halt || true' - scan-sonar quick_build_device_for_testers_signed: executor: android/android diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt index a8ffbb7e2fab13a8e84351ff1809f1bf3e832af5..47f43dae0edf5cf59621975f0923cd8b83f15cee 100644 --- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt +++ b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragment.kt @@ -32,18 +32,6 @@ class DebugOptionsFragment : Fragment(R.layout.fragment_test_debugoptions), Auto override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - // Debug card - binding.backgroundNotificationsToggle.apply { - setOnClickListener { vm.setBackgroundNotifications(isChecked) } - } - vm.backgroundNotificationsToggleEvent.observe2(this@DebugOptionsFragment) { - showSnackBar("Background Notifications are activated: $it") - } - vm.debugOptionsState.observe2(this) { state -> - binding.apply { - backgroundNotificationsToggle.isChecked = state.areNotificationsEnabled - } - } binding.testLogfileToggle.apply { setOnClickListener { vm.setLoggerEnabled(isChecked) } } 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 e976d87f84dc5205795dd6f1fcde9786c7d67a80..0c654b99f52600578c531ccdbe98c181a332ee81 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 @@ -4,7 +4,6 @@ import android.content.Context import com.squareup.inject.assisted.AssistedInject import de.rki.coronawarnapp.environment.EnvironmentSetup import de.rki.coronawarnapp.environment.EnvironmentSetup.Type.Companion.toEnvironmentType -import de.rki.coronawarnapp.storage.LocalData import de.rki.coronawarnapp.test.api.ui.EnvironmentState.Companion.toEnvironmentState import de.rki.coronawarnapp.test.api.ui.LoggerState.Companion.toLoggerState import de.rki.coronawarnapp.util.CWADebug @@ -22,12 +21,6 @@ class DebugOptionsFragmentViewModel @AssistedInject constructor( dispatcherProvider: DispatcherProvider ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { - val debugOptionsState by smartLiveData { - DebugOptionsState( - areNotificationsEnabled = LocalData.backgroundNotification() - ) - } - val environmentState by smartLiveData { envSetup.toEnvironmentState() } @@ -41,16 +34,6 @@ class DebugOptionsFragmentViewModel @AssistedInject constructor( } } - val backgroundNotificationsToggleEvent = SingleLiveEvent<Boolean>() - - fun setBackgroundNotifications(enabled: Boolean) { - debugOptionsState.update { - LocalData.backgroundNotification(enabled) - it.copy(areNotificationsEnabled = enabled) - } - backgroundNotificationsToggleEvent.postValue(enabled) - } - val loggerState by smartLiveData { CWADebug.toLoggerState() } diff --git a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsState.kt b/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsState.kt deleted file mode 100644 index da57e399eaf9c4caf03c07a9e2fa719d3375fa17..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/deviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsState.kt +++ /dev/null @@ -1,5 +0,0 @@ -package de.rki.coronawarnapp.test.debugoptions.ui - -data class DebugOptionsState( - val areNotificationsEnabled: Boolean -) diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml index 867b86569315d89fa9c080b0944a56deee7970cb..bd1eeb247b6ff2ef4c04476c71df6cdda8331671 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_test_debugoptions.xml @@ -32,18 +32,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - <Switch - android:id="@+id/background_notifications_toggle" - style="@style/body1" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_tiny" - android:text="@string/test_api_switch_background_notifications" - android:theme="@style/switchBase" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/debug_container_title" /> - <Switch android:id="@+id/test_logfile_toggle" style="@style/body1" @@ -55,7 +43,7 @@ android:theme="@style/switchBase" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/background_notifications_toggle" /> + app:layout_constraintTop_toBottomOf="@+id/debug_container_title" /> <Button android:id="@+id/test_logfile_share" 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 4f6ca66e84a6002ed43c19c30350c392a816ff63..941a2b4e1890e8c0f69d4804f7c9f454313a7242 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 @@ -24,7 +24,6 @@ import de.rki.coronawarnapp.util.ForegroundState import de.rki.coronawarnapp.util.WatchdogService import de.rki.coronawarnapp.util.di.AppInjector import de.rki.coronawarnapp.util.di.ApplicationComponent -import de.rki.coronawarnapp.worker.BackgroundWorkHelper import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -68,10 +67,6 @@ class CoronaWarnApplication : Application(), HasAndroidInjector { registerActivityLifecycleCallbacks(activityLifecycleCallback) - // notification to test the WakeUpService from Google when the app was force stopped - BackgroundWorkHelper.sendDebugNotification( - "Application onCreate", "App was woken up" - ) watchdogService.launch() foregroundState.isInForeground diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt index c7d72d7de6cdf26d7439c70cb24c2eeec79dd203..f8a0ea1ba9b071b79fa8cee41c0785dd76600598 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/storage/LocalData.kt @@ -685,19 +685,6 @@ object LocalData { CoronaWarnApplication.getAppContext().getString(R.string.preference_teletan), null ) - fun backgroundNotification(value: Boolean) = getSharedPreferenceInstance().edit(true) { - putBoolean( - CoronaWarnApplication.getAppContext() - .getString(R.string.preference_background_notification), - value - ) - } - - fun backgroundNotification(): Boolean = getSharedPreferenceInstance().getBoolean( - CoronaWarnApplication.getAppContext() - .getString(R.string.preference_background_notification), false - ) - /**************************************************** * ENCRYPTED SHARED PREFERENCES HANDLING ****************************************************/ diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/WatchdogService.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/WatchdogService.kt index cd3eccf6fce55cb8dc4bcdd7f1df52c544f3a8f3..8a5729554f5166ee7d9eb192d72e899374ca2bcf 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/WatchdogService.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/WatchdogService.kt @@ -11,7 +11,6 @@ import de.rki.coronawarnapp.task.TaskController import de.rki.coronawarnapp.task.common.DefaultTaskRequest import de.rki.coronawarnapp.task.submitBlocking import de.rki.coronawarnapp.util.di.AppContext -import de.rki.coronawarnapp.worker.BackgroundWorkHelper import de.rki.coronawarnapp.worker.BackgroundWorkScheduler import kotlinx.coroutines.launch import timber.log.Timber @@ -45,9 +44,9 @@ class WatchdogService @Inject constructor( val wakeLock = createWakeLock() // A wifi lock to wake up the wifi connection in case the device is dozing val wifiLock = createWifiLock() - BackgroundWorkHelper.sendDebugNotification( - "Automatic mode is on", "Check if we have downloaded keys already today" - ) + + Timber.d("Automatic mode is on, check if we have downloaded keys already today") + val state = taskController.submitBlocking( DefaultTaskRequest( DownloadDiagnosisKeysTask::class, @@ -56,12 +55,7 @@ class WatchdogService @Inject constructor( ) ) if (state.isFailed) { - BackgroundWorkHelper.sendDebugNotification( - "RetrieveDiagnosisKeysTransaction failed", - (state.error?.localizedMessage - ?: "Unknown exception occurred in onCreate") + "\n\n" + (state.error?.cause - ?: "Cause is unknown").toString() - ) + Timber.e(state.error, "RetrieveDiagnosisKeysTransaction failed") // retry the key retrieval in case of an error with a scheduled work BackgroundWorkScheduler.scheduleDiagnosisKeyOneTimeWork() } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkHelper.kt index 2b8f2cebec6728c11a56ad81194fdb577c10720d..8f1569b31291269029d022e4da11633af2177d4b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkHelper.kt @@ -2,9 +2,6 @@ package de.rki.coronawarnapp.worker import androidx.work.Constraints import androidx.work.NetworkType -import de.rki.coronawarnapp.notification.NotificationHelper -import de.rki.coronawarnapp.storage.LocalData -import timber.log.Timber import kotlin.random.Random /** @@ -57,18 +54,4 @@ object BackgroundWorkHelper { .Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() - - /** - * Send debug notification to check background jobs execution - * - * @param title: String - * @param content: String - * - * @see LocalData.backgroundNotification() - */ - fun sendDebugNotification(title: String, content: String) { - Timber.d("sendDebugNotification(title=%s, content=%s)", title, content) - if (!LocalData.backgroundNotification()) return - NotificationHelper.sendNotification(title, content, true) - } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt index 59631fb84cbdf88ac69cf8dd916eb2412224fb68..cc7b277a69444e7cb9dd6298fa1c612cf75a477a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/BackgroundWorkScheduler.kt @@ -3,9 +3,8 @@ package de.rki.coronawarnapp.worker import androidx.work.ExistingPeriodicWorkPolicy import androidx.work.ExistingWorkPolicy import androidx.work.Operation -import androidx.work.WorkManager import androidx.work.WorkInfo -import de.rki.coronawarnapp.BuildConfig +import androidx.work.WorkManager import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.storage.LocalData import timber.log.Timber @@ -91,8 +90,7 @@ object BackgroundWorkScheduler { LocalData.initialPollingForTestResultTimeStamp(System.currentTimeMillis()) notificationBody.append("[DIAGNOSIS_TEST_RESULT_PERIODIC_WORKER]") } - BackgroundWorkHelper.sendDebugNotification( - "Background Job Starting", notificationBody.toString()) + Timber.d("Background Job Starting: %s", notificationBody) } /** @@ -144,8 +142,7 @@ object BackgroundWorkScheduler { workManager.cancelAllWorkByTag(workTag.tag) .also { it.logOperationCancelByTag(workTag) } } - BackgroundWorkHelper.sendDebugNotification( - "All Background Jobs Stopped", "All Background Jobs Stopped") + Timber.d("All Background Jobs Stopped") } /** @@ -277,28 +274,24 @@ object BackgroundWorkScheduler { * Log operation schedule */ private fun Operation.logOperationSchedule(workType: WorkType) = - this.result.addListener({ - Timber.d("${workType.uniqueName} completed.") - BackgroundWorkHelper.sendDebugNotification( - "Background Job Started", "${workType.uniqueName} scheduled") - }, { it.run() }) - .also { if (BuildConfig.DEBUG) Timber.d("${workType.uniqueName} scheduled.") } + this.result.addListener( + { Timber.d("${workType.uniqueName} completed.") }, + { it.run() } + ).also { Timber.d("${workType.uniqueName} scheduled.") } /** * Log operation cancellation */ private fun Operation.logOperationCancelByTag(workTag: WorkTag) = - this.result.addListener({ - Timber.d("All work with tag ${workTag.tag} canceled.") - BackgroundWorkHelper.sendDebugNotification( - "Background Job canceled", "${workTag.tag} canceled") - }, { it.run() }) - .also { if (BuildConfig.DEBUG) Timber.d("Canceling all work with tag ${workTag.tag}") } + this.result.addListener( + { Timber.d("All work with tag ${workTag.tag} canceled.") }, + { it.run() } + ).also { Timber.d("Canceling all work with tag ${workTag.tag}") } /** * Log work active status */ private fun logWorkActiveStatus(tag: String, active: Boolean) { - if (BuildConfig.DEBUG) Timber.d("Work type $tag is active: $active") + Timber.d("Work type $tag is active: $active") } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisKeyRetrievalOneTimeWorker.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisKeyRetrievalOneTimeWorker.kt index 421d8d872b385bdb76c2b786fc30456053bab6de..5546e8947deebec1c3536ed4e206da4e22fbfbc3 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisKeyRetrievalOneTimeWorker.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisKeyRetrievalOneTimeWorker.kt @@ -32,10 +32,6 @@ class DiagnosisKeyRetrievalOneTimeWorker @AssistedInject constructor( override suspend fun doWork(): Result { Timber.d("$id: doWork() started. Run attempt: $runAttemptCount") - BackgroundWorkHelper.sendDebugNotification( - "KeyOneTime Executing: Start", "KeyOneTime started. Run attempt: $runAttemptCount " - ) - var result = Result.success() taskController.submitBlocking( DefaultTaskRequest( @@ -49,11 +45,6 @@ class DiagnosisKeyRetrievalOneTimeWorker @AssistedInject constructor( if (runAttemptCount > BackgroundConstants.WORKER_RETRY_COUNT_THRESHOLD) { Timber.w(error, "$id: Retry attempts exceeded.") - BackgroundWorkHelper.sendDebugNotification( - "KeyOneTime Executing: Failure", - "KeyOneTime failed with $runAttemptCount attempts" - ) - return Result.failure() } else { Timber.d(error, "$id: Retrying.") @@ -61,10 +52,6 @@ class DiagnosisKeyRetrievalOneTimeWorker @AssistedInject constructor( } } - BackgroundWorkHelper.sendDebugNotification( - "KeyOneTime Executing: End", "KeyOneTime result: $result " - ) - Timber.d("$id: doWork() finished with %s", result) return result } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisKeyRetrievalPeriodicWorker.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisKeyRetrievalPeriodicWorker.kt index f0dc4742ce5993b5425f8feabb4d67173df09538..4bcd5bc8f1a684461d0a1e0d92cf290487c4741e 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisKeyRetrievalPeriodicWorker.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisKeyRetrievalPeriodicWorker.kt @@ -31,10 +31,6 @@ class DiagnosisKeyRetrievalPeriodicWorker @AssistedInject constructor( override suspend fun doWork(): Result { Timber.d("$id: doWork() started. Run attempt: $runAttemptCount") - BackgroundWorkHelper.sendDebugNotification( - "KeyPeriodic Executing: Start", "KeyPeriodic started. Run attempt: $runAttemptCount" - ) - var result = Result.success() try { BackgroundWorkScheduler.scheduleDiagnosisKeyOneTimeWork() @@ -46,11 +42,6 @@ class DiagnosisKeyRetrievalPeriodicWorker @AssistedInject constructor( if (runAttemptCount > BackgroundConstants.WORKER_RETRY_COUNT_THRESHOLD) { Timber.w(e, "$id: Retry attempts exceeded.") - BackgroundWorkHelper.sendDebugNotification( - "KeyPeriodic Executing: Failure", - "KeyPeriodic failed with $runAttemptCount attempts" - ) - return Result.failure() } else { Timber.d(e, "$id: Retrying.") @@ -58,10 +49,6 @@ class DiagnosisKeyRetrievalPeriodicWorker @AssistedInject constructor( } } - BackgroundWorkHelper.sendDebugNotification( - "KeyPeriodic Executing: End", "KeyPeriodic result: $result " - ) - Timber.d("$id: doWork() finished with %s", result) return result } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorker.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorker.kt index 60dc57174abac3d7ed941ad2dd3d7662da4066e6..33eb975e64fa80d20fc2ee29a213be215a2396ba 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorker.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/worker/DiagnosisTestResultRetrievalPeriodicWorker.kt @@ -26,10 +26,6 @@ class DiagnosisTestResultRetrievalPeriodicWorker @AssistedInject constructor( @Assisted workerParams: WorkerParameters ) : CoroutineWorker(context, workerParams) { - companion object { - private val TAG: String? = DiagnosisTestResultRetrievalPeriodicWorker::class.simpleName - } - /** * Work execution * @@ -44,16 +40,10 @@ class DiagnosisTestResultRetrievalPeriodicWorker @AssistedInject constructor( override suspend fun doWork(): Result { Timber.d("$id: doWork() started. Run attempt: $runAttemptCount") - BackgroundWorkHelper.sendDebugNotification( - "TestResult Executing: Start", "TestResult started. Run attempt: $runAttemptCount " - ) if (runAttemptCount > BackgroundConstants.WORKER_RETRY_COUNT_THRESHOLD) { Timber.d("$id doWork() failed after $runAttemptCount attempts. Rescheduling") - BackgroundWorkHelper.sendDebugNotification( - "TestResult Executing: Failure", "TestResult failed with $runAttemptCount attempts" - ) BackgroundWorkScheduler.scheduleDiagnosisKeyPeriodicWork() Timber.d("$id Rescheduled background worker") @@ -78,9 +68,6 @@ class DiagnosisTestResultRetrievalPeriodicWorker @AssistedInject constructor( result = Result.retry() } - BackgroundWorkHelper.sendDebugNotification( - "TestResult Executing: End", "TestResult result: $result " - ) Timber.d("$id: doWork() finished with %s", result) return result @@ -130,9 +117,6 @@ class DiagnosisTestResultRetrievalPeriodicWorker @AssistedInject constructor( LocalData.initialPollingForTestResultTimeStamp(0L) BackgroundWorkScheduler.WorkType.DIAGNOSIS_TEST_RESULT_PERIODIC_WORKER.stop() Timber.d("$id: Background worker stopped") - BackgroundWorkHelper.sendDebugNotification( - "TestResult Stopped", "TestResult Stopped" - ) } @AssistedInject.Factory diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index 403af63265f1f6c69c28ffbba7d8962711407c2c..d120c2c1a4bc91089abbbf63710b9e9091829397 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -65,8 +65,6 @@ <!-- NOTR --> <string name="preference_risk_days_explanation_shown"><xliff:g id="preference">"preference_risk_days_explanation_shown"</xliff:g></string> <!-- NOTR --> - <string name="preference_background_notification"><xliff:g id="preference">"preference_background_notification"</xliff:g></string> - <!-- NOTR --> <string name="preference_interoperability_selected_country_codes"><xliff:g id="preference">"preference_interoperability_selected_country_codes"</xliff:g></string> <!-- NOTR --> <string name="preference_interoperability_all_countries_selected">preference_interoperability_all_countries_selected</string> @@ -1282,8 +1280,6 @@ <string name="test_api_body_other_keys">"Other key"</string> <!-- NOTR --> <string name="test_api_calculate_risk_level">"Calculate Risk Level"</string> - <!-- NOTR --> - <string name="test_api_switch_background_notifications">"Background Notifications"</string> <!-- XHED: Country Entry for Austria --> <string name="country_name_at">"Austria"</string>