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 47f43dae0edf5cf59621975f0923cd8b83f15cee..07bfd4404b3f7c606c6a15b1c64b415fd6f15063 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 @@ -2,20 +2,19 @@ package de.rki.coronawarnapp.test.debugoptions.ui import android.annotation.SuppressLint import android.os.Bundle -import android.text.format.Formatter import android.view.View import android.widget.RadioButton import android.widget.RadioGroup import androidx.core.view.ViewCompat import androidx.core.view.children import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController import com.google.android.material.snackbar.Snackbar import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentTestDebugoptionsBinding import de.rki.coronawarnapp.test.menu.ui.TestMenuItem import de.rki.coronawarnapp.util.di.AutoInject import de.rki.coronawarnapp.util.ui.observe2 -import de.rki.coronawarnapp.util.ui.setGone import de.rki.coronawarnapp.util.ui.viewBindingLazy import de.rki.coronawarnapp.util.viewmodel.CWAViewModelFactoryProvider import de.rki.coronawarnapp.util.viewmodel.cwaViewModels @@ -32,19 +31,9 @@ class DebugOptionsFragment : Fragment(R.layout.fragment_test_debugoptions), Auto override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - binding.testLogfileToggle.apply { - setOnClickListener { vm.setLoggerEnabled(isChecked) } + binding.showDebugLogScreen.setOnClickListener { + findNavController().navigate(R.id.debuglogFragment) } - vm.loggerState.observe2(this) { state -> - binding.apply { - testLogfileToggle.isChecked = state.isLogging - val logSize = Formatter.formatShortFileSize(requireContext(), state.logsize) - testLogfileToggle.text = "Logfile enabled ($logSize)" - testLogfileShare.setGone(!state.isLogging) - } - } - binding.testLogfileShare.setOnClickListener { vm.shareLogFile() } - vm.logShareEvent.observe2(this) { showSnackBar("Logfile copied to $it") } // Server environment card binding.environmentToggleGroup.apply { 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 9f6bfb7ad391b69671ecd2448dfbe9a8102946d0..e9b4bda7f7e71be71c837acb467adb246991fadb 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,22 +1,16 @@ package de.rki.coronawarnapp.test.debugoptions.ui -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.test.debugoptions.ui.EnvironmentState.Companion.toEnvironmentState -import de.rki.coronawarnapp.util.CWADebug import de.rki.coronawarnapp.util.coroutine.DispatcherProvider -import de.rki.coronawarnapp.util.debug.LoggerState.Companion.toLoggerState -import de.rki.coronawarnapp.util.di.AppContext 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 java.io.File class DebugOptionsFragmentViewModel @AssistedInject constructor( - @AppContext private val context: Context, private val envSetup: EnvironmentSetup, dispatcherProvider: DispatcherProvider ) : CWAViewModel(dispatcherProvider = dispatcherProvider) { @@ -34,36 +28,6 @@ class DebugOptionsFragmentViewModel @AssistedInject constructor( } } - val loggerState by smartLiveData { - CWADebug.toLoggerState() - } - - fun setLoggerEnabled(enable: Boolean) { - CWADebug.fileLogger?.let { - if (enable) it.start() else it.stop() - } - loggerState.update { CWADebug.toLoggerState() } - } - - val logShareEvent = SingleLiveEvent<File?>() - - fun shareLogFile() { - CWADebug.fileLogger?.let { - launch { - if (!it.logFile.exists()) return@launch - - val externalPath = File( - context.getExternalFilesDir(null), - "LogFile-${System.currentTimeMillis()}.log" - ) - - it.logFile.copyTo(externalPath) - - logShareEvent.postValue(externalPath) - } - } - } - @AssistedInject.Factory interface Factory : SimpleCWAViewModelFactory<DebugOptionsFragmentViewModel> } 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 92afdbf89c73d87c4cff4ea27b794c145db9a5c9..cca12450d9fee3eafa2d51795b793186606cf4b7 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,27 +32,26 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - <Switch - android:id="@+id/test_logfile_toggle" - style="@style/body1" + <TextView + android:id="@+id/new_debuglog_screen_explanation" + style="@style/body2" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_tiny" + android:layout_marginTop="@dimen/spacing_small" android:layout_weight="1" - android:text="Logfile enabled" - android:theme="@style/switchBase" + android:text="The debuglog option has moved. It's now available for all builds. For test builds it's started automatically on each app start." app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/debug_container_title" /> <Button - android:id="@+id/test_logfile_share" + android:id="@+id/show_debug_log_screen" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_tiny" - android:text="Share log" + android:text="Open new debug log screen" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toBottomOf="@+id/test_logfile_toggle" /> + app:layout_constraintTop_toBottomOf="@+id/new_debuglog_screen_explanation" /> </androidx.constraintlayout.widget.ConstraintLayout> <androidx.constraintlayout.widget.ConstraintLayout diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/debuglog/DebugLogger.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/debuglog/DebugLogger.kt index 2cdd042ea0c4f9e160ff32fb0896dd0ecc8e0653..da7e345ccacd4f4f88a8c5fd4a938f8dd7827fbb 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/debuglog/DebugLogger.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/bugreporting/debuglog/DebugLogger.kt @@ -4,6 +4,7 @@ import android.annotation.SuppressLint import android.app.Application import android.content.Context import android.util.Log +import de.rki.coronawarnapp.util.CWADebug import de.rki.coronawarnapp.util.di.ApplicationComponent import kotlinx.coroutines.CancellationException import kotlinx.coroutines.Job @@ -44,8 +45,19 @@ object DebugLogger : DebugLoggerBase() { context = application try { - if (triggerFile.exists()) { - Timber.tag(TAG).i("Trigger file exists, starting debug log.") + val startLogger = when { + triggerFile.exists() -> { + Timber.tag(TAG).i("Trigger file exists, starting debug log.") + true + } + CWADebug.isDeviceForTestersBuild -> { + Timber.tag(TAG).i("Trigger file does not exist, but it's a tester build, starting debug log.") + true + } + else -> false + } + + if (startLogger) { runBlocking { start() } } } catch (e: Exception) { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarFragment.kt index 3e8aa519347dcde3e817bfd6a15b3ff9e840126b..b19672226cdc2f0f6c55daf7ddfd36d286c8fbb3 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/calendar/SubmissionSymptomCalendarFragment.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.ui.submission.symptoms.calendar import android.content.res.ColorStateList import android.os.Bundle import android.view.View +import android.widget.Button import androidx.fragment.app.Fragment import androidx.navigation.fragment.navArgs import de.rki.coronawarnapp.R @@ -75,39 +76,21 @@ class SubmissionSymptomCalendarFragment : Fragment(R.layout.fragment_submission_ private fun updateButtons(symptomStart: Symptoms.StartOf?) { binding.apply { calendarButtonSevenDays.apply { - setTextColor( - formatSymptomButtonTextStyleByState(symptomStart, Symptoms.StartOf.LastSevenDays) - ) - backgroundTintList = ColorStateList.valueOf( - formatSymptomBackgroundButtonStyleByState(symptomStart, Symptoms.StartOf.LastSevenDays) - ) + handleColors(symptomStart, Symptoms.StartOf.LastSevenDays) setOnClickListener { viewModel.onLastSevenDaysStart() } } calendarButtonOneTwoWeeks.apply { - setTextColor( - formatSymptomButtonTextStyleByState(symptomStart, Symptoms.StartOf.OneToTwoWeeksAgo) - ) - backgroundTintList = ColorStateList.valueOf( - formatSymptomBackgroundButtonStyleByState(symptomStart, Symptoms.StartOf.OneToTwoWeeksAgo) - ) + handleColors(symptomStart, Symptoms.StartOf.OneToTwoWeeksAgo) setOnClickListener { viewModel.onOneToTwoWeeksAgoStart() } } calendarButtonMoreThanTwoWeeks.apply { - setTextColor( - formatSymptomButtonTextStyleByState(symptomStart, Symptoms.StartOf.MoreThanTwoWeeks) - ) - backgroundTintList = ColorStateList.valueOf( - formatSymptomBackgroundButtonStyleByState(symptomStart, Symptoms.StartOf.MoreThanTwoWeeks) - ) + handleColors(symptomStart, Symptoms.StartOf.MoreThanTwoWeeks) setOnClickListener { viewModel.onMoreThanTwoWeeksStart() } } targetButtonVerify.apply { - setTextColor(formatSymptomButtonTextStyleByState(symptomStart, Symptoms.StartOf.NoInformation)) - backgroundTintList = ColorStateList.valueOf( - formatSymptomBackgroundButtonStyleByState(symptomStart, Symptoms.StartOf.NoInformation) - ) + handleColors(symptomStart, Symptoms.StartOf.NoInformation) setOnClickListener { viewModel.onNoInformationStart() } } @@ -118,6 +101,13 @@ class SubmissionSymptomCalendarFragment : Fragment(R.layout.fragment_submission_ } } + private fun Button.handleColors(symptomStart: Symptoms.StartOf?, state: Symptoms.StartOf) { + setTextColor(formatSymptomButtonTextStyleByState(context, symptomStart, state)) + backgroundTintList = ColorStateList.valueOf( + formatSymptomBackgroundButtonStyleByState(context, symptomStart, state) + ) + } + override fun onResume() { super.onResume() viewModel.onNewUserActivity() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionFragment.kt index 849f519a166cc336c518914ef03ce0b88bcfb763..c44abf570ebfe4b3f044569e9294018bcec869c0 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/symptoms/introduction/SubmissionSymptomIntroductionFragment.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.ui.submission.symptoms.introduction import android.content.res.ColorStateList import android.os.Bundle import android.view.View +import android.widget.Button import androidx.fragment.app.Fragment import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentSubmissionSymptomIntroBinding @@ -59,26 +60,15 @@ class SubmissionSymptomIntroductionFragment : Fragment(R.layout.fragment_submiss private fun updateButtons(symptomIndication: Symptoms.Indication?) { binding.targetButtonApply.apply { - setTextColor(formatSymptomButtonTextStyleByState(symptomIndication, Symptoms.Indication.POSITIVE)) - backgroundTintList = ColorStateList.valueOf( - formatSymptomBackgroundButtonStyleByState(symptomIndication, Symptoms.Indication.POSITIVE) - ) + handleColors(symptomIndication, Symptoms.Indication.POSITIVE) setOnClickListener { viewModel.onPositiveSymptomIndication() } } binding.targetButtonReject.apply { - setTextColor(formatSymptomButtonTextStyleByState(symptomIndication, Symptoms.Indication.NEGATIVE)) - backgroundTintList = ColorStateList.valueOf( - formatSymptomBackgroundButtonStyleByState(symptomIndication, Symptoms.Indication.NEGATIVE) - ) + handleColors(symptomIndication, Symptoms.Indication.NEGATIVE) setOnClickListener { viewModel.onNegativeSymptomIndication() } } binding.targetButtonVerify.apply { - setTextColor(formatSymptomButtonTextStyleByState(symptomIndication, Symptoms.Indication.NO_INFORMATION)) - backgroundTintList = - ColorStateList.valueOf( - formatSymptomBackgroundButtonStyleByState(symptomIndication, Symptoms.Indication.NO_INFORMATION) - ) - + handleColors(symptomIndication, Symptoms.Indication.NO_INFORMATION) setOnClickListener { viewModel.onNoInformationSymptomIndication() } } @@ -95,6 +85,12 @@ class SubmissionSymptomIntroductionFragment : Fragment(R.layout.fragment_submiss } } + private fun Button.handleColors(symptomIndication: Symptoms.Indication?, state: Symptoms.Indication) { + setTextColor(formatSymptomButtonTextStyleByState(context, symptomIndication, state)) + backgroundTintList = + ColorStateList.valueOf(formatSymptomBackgroundButtonStyleByState(context, symptomIndication, state)) + } + override fun onResume() { super.onResume() viewModel.onNewUserActivity() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt index 967fa630a6d859290095d9c66c4e9c44ce929f12..f7432d233ea83e209bad8ffae5d61fa8f6a61bd5 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/TestResultSectionView.kt @@ -86,7 +86,7 @@ constructor( DeviceUIState.PAIRED_POSITIVE, DeviceUIState.PAIRED_POSITIVE_TELETAN, - DeviceUIState.PAIRED_NEGATIVE -> SpannableString(formatTestResult(uiState)) + DeviceUIState.PAIRED_NEGATIVE -> SpannableString(formatTestResult(context, uiState)) else -> SpannableString("") } } 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 15f4ffa545e810b2f56e68134bf624d9e9a60c47..c794c54b9521708e3cf4e11237e7f81d65ef935f 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 @@ -5,13 +5,11 @@ import android.os.Build import androidx.annotation.VisibleForTesting import de.rki.coronawarnapp.BuildConfig import de.rki.coronawarnapp.bugreporting.debuglog.DebugLogger -import de.rki.coronawarnapp.util.debug.FileLogger import de.rki.coronawarnapp.util.debug.UncaughtExceptionLogger import de.rki.coronawarnapp.util.di.ApplicationComponent import timber.log.Timber object CWADebug { - var fileLogger: FileLogger? = null fun init(application: Application) { if (isDebugBuildOrMode) System.setProperty("kotlinx.coroutines.debug", "on") @@ -19,9 +17,6 @@ object CWADebug { if (isDeviceForTestersBuild) { Timber.plant(Timber.DebugTree()) } - if (isDeviceForTestersBuild) { - fileLogger = FileLogger(application) - } setupExceptionHandler() diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/FileLogger.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/FileLogger.kt deleted file mode 100644 index e8d283d9c7695095ffa9995d76aa3cb2c232873a..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/FileLogger.kt +++ /dev/null @@ -1,46 +0,0 @@ -package de.rki.coronawarnapp.util.debug - -import android.content.Context -import de.rki.coronawarnapp.util.CWADebug -import timber.log.Timber -import java.io.File - -class FileLogger constructor(context: Context) { - - val logFile = File(context.cacheDir, "FileLoggerTree.log") - - private val blockerFile = File(context.filesDir, "FileLoggerTree.blocker") - private var loggerTree: FileLoggerTree? = null - - val isLogging: Boolean - get() = loggerTree != null - - init { - if (!blockerFile.exists()) { - start() - } - } - - fun start() { - if (!CWADebug.isDeviceForTestersBuild) return - - if (loggerTree != null) return - - loggerTree = FileLoggerTree(logFile).also { - Timber.plant(it) - it.start() - blockerFile.delete() - } - } - - fun stop() { - if (!CWADebug.isDeviceForTestersBuild) return - - loggerTree?.let { - it.stop() - logFile.delete() - blockerFile.createNewFile() - loggerTree = null - } - } -} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/FileLoggerTree.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/FileLoggerTree.kt deleted file mode 100644 index c3f50042c4c57701603af3c29fe10bf2782b6604..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/FileLoggerTree.kt +++ /dev/null @@ -1,87 +0,0 @@ -package de.rki.coronawarnapp.util.debug - -import android.annotation.SuppressLint -import android.util.Log -import org.joda.time.Instant -import timber.log.Timber -import java.io.File -import java.io.FileOutputStream -import java.io.IOException -import java.io.OutputStreamWriter - -@SuppressLint("LogNotTimber") -class FileLoggerTree(private val logFile: File) : Timber.DebugTree() { - private var logWriter: OutputStreamWriter? = null - - @SuppressLint("SetWorldReadable") - @Synchronized - fun start() { - if (logWriter != null) return - - logFile.parentFile.mkdirs() - if (logFile.createNewFile()) { - Log.i(TAG, "File logger writing to " + logFile.path) - } - if (logFile.setReadable(true, false)) { - Log.i(TAG, "Debug run log read permission set") - } - - try { - logWriter = OutputStreamWriter(FileOutputStream(logFile, true)) - logWriter!!.write("=== BEGIN ===\n") - logWriter!!.write("Logfile: $logFile\n") - logWriter!!.flush() - Log.i(TAG, "File logger started.") - } catch (e: IOException) { - e.printStackTrace() - - logFile.delete() - if (logWriter != null) logWriter!!.close() - } - } - - @Synchronized - fun stop() { - logWriter?.let { - logWriter = null - try { - it.write("=== END ===\n") - it.close() - } catch (ignore: IOException) { - } - Log.i(TAG, "File logger stopped.") - } - } - - override fun log(priority: Int, tag: String?, message: String, t: Throwable?) { - logWriter?.let { - try { - it.write("${Instant.now()} ${priorityToString(priority)}/$tag: $message\n") - it.flush() - } catch (e: IOException) { - Timber.tag(TAG).e(e) - try { - it.close() - } catch (ignore: Exception) { - } - logWriter = null - } - } - } - - override fun toString(): String { - return "FileLoggerTree(file=$logFile)" - } - - companion object { - private const val TAG = "FileLoggerTree" - private fun priorityToString(priority: Int): String = when (priority) { - Log.ERROR -> "E" - Log.WARN -> "W" - Log.INFO -> "I" - Log.DEBUG -> "D" - Log.VERBOSE -> "V" - else -> priority.toString() - } - } -} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/LoggerState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/LoggerState.kt deleted file mode 100644 index 7f47800109c15da775967f2f25739361a3950406..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/debug/LoggerState.kt +++ /dev/null @@ -1,15 +0,0 @@ -package de.rki.coronawarnapp.util.debug - -import de.rki.coronawarnapp.util.CWADebug - -data class LoggerState( - val isLogging: Boolean, - val logsize: Long -) { - companion object { - internal fun CWADebug.toLoggerState() = LoggerState( - isLogging = fileLogger?.isLogging ?: false, - logsize = fileLogger?.logFile?.length() ?: 0L - ) - } -} diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterHelper.kt index 13fee0bf01ce9125776deb20f21dc625a8229dd3..fe7a2558a06dcc4ed2f05e5a7b6b68c7c25c7f3a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterHelper.kt @@ -3,32 +3,12 @@ package de.rki.coronawarnapp.util.formatter import android.content.Context -import android.graphics.drawable.Drawable import android.text.Spanned import android.view.View -import de.rki.coronawarnapp.CoronaWarnApplication -import de.rki.coronawarnapp.R import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat import de.rki.coronawarnapp.util.html.HtmlParser /*Style*/ -/** - * Formats drawable resource of item to be displayed depending on flag provided - * - * @param value - * @param drawableTrue - * @param drawableFalse - * @return - */ -fun formatDrawable(value: Boolean, drawableTrue: Int, drawableFalse: Int): Drawable? { - val appContext = CoronaWarnApplication.getAppContext() - return if (value) { - appContext.getDrawable(drawableTrue) - } else { - appContext.getDrawable(drawableFalse) - } -} - /** * Formats color resource of item to be displayed depending on flag provided * @@ -37,12 +17,11 @@ fun formatDrawable(value: Boolean, drawableTrue: Int, drawableFalse: Int): Drawa * @param colorFalse * @return */ -fun formatColor(value: Boolean, colorTrue: Int, colorFalse: Int): Int { - val appContext = CoronaWarnApplication.getAppContext() +fun formatColor(context: Context, value: Boolean, colorTrue: Int, colorFalse: Int): Int { return if (value) { - appContext.getColorCompat(colorTrue) + context.getColorCompat(colorTrue) } else { - appContext.getColorCompat(colorFalse) + context.getColorCompat(colorFalse) } } @@ -99,56 +78,6 @@ fun formatVisibilityText(text: String?): Int = formatVisibility(text != null && */ fun formatVisibilityText(text: CharSequence?): Int = formatVisibility(text != null && text != "") -/*Text*/ -/** - * Formats text resource to be displayed depending on flag provided - * - * @param value - * @param stringTrue - * @param stringFalse - * @return - */ -fun formatText(value: Boolean?, stringTrue: Int, stringFalse: Int?): String { - val appContext = CoronaWarnApplication.getAppContext() - return if (value == true) { - appContext.getString(stringTrue) - } else { - if (stringFalse != null) { - appContext.getString(stringFalse) - } else "" - } -} - -/** - * Formats color to be displayed depending on color id provided with default option - * - * @param color - * @return - */ -fun formatColorIcon(color: Int?): Int { - val appContext = CoronaWarnApplication.getAppContext() - return color ?: appContext.getColorCompat(R.color.colorAccentTintIcon) -} - fun parseHtmlFromAssets(context: Context, path: String): Spanned { return HtmlParser(context.assets).parseByAssetPath(path) } - -/** - * Formats divider color depending on resource value - * Returns colorHairline as default - * - * @param color - * @return - */ -fun formatColorDivider(context: Context, color: Int?): Int { - return color ?: context.getColorCompat(R.color.colorHairline) -} - -/** - * Returns string if it isn't null, otherwise it returns an empty String - * - * @param string - * @return String - */ -fun formatEmptyString(string: String?): String = string ?: "" diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterInformationLegalHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterInformationLegalHelper.kt index a7097681ebde17b1e9320dcc50066f7e93a8eefa..6a8e220b8486603651dae1ec54f7ad6f67ef1a33 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterInformationLegalHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterInformationLegalHelper.kt @@ -2,8 +2,8 @@ package de.rki.coronawarnapp.util.formatter +import android.content.Context import android.view.View -import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.ui.information.InformationLegalPresentation import de.rki.coronawarnapp.util.device.DefaultSystemInfoProvider @@ -15,9 +15,10 @@ import de.rki.coronawarnapp.util.device.DefaultSystemInfoProvider */ fun formatVisibilityLanguageBased( + context: Context, isContactFormView: Boolean? ): Int { - InformationLegalPresentation(DefaultSystemInfoProvider(CoronaWarnApplication.getAppContext())).apply { + InformationLegalPresentation(DefaultSystemInfoProvider(context)).apply { if (!showBackupLinkToContactForm) { return if (isContactFormView == true) { View.VISIBLE diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt deleted file mode 100644 index a71078e1178a2079abe8471ea3e0226dcc4c8228..0000000000000000000000000000000000000000 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelper.kt +++ /dev/null @@ -1,11 +0,0 @@ -@file:JvmName("FormatterSettingsHelper") - -package de.rki.coronawarnapp.util.formatter - -import de.rki.coronawarnapp.R - -fun formatStatus(value: Boolean): String = formatText( - value, - R.string.settings_on, - R.string.settings_off -) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt index 469b2cd4d39d1655ac7342d1a68c02b606d58fdf..9202734af4d9b772ce35d1847f151aa8cc4e490a 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt @@ -9,7 +9,6 @@ import android.text.SpannableString import android.text.SpannableStringBuilder import android.text.style.ForegroundColorSpan import android.view.View -import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.R import de.rki.coronawarnapp.submission.Symptoms import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat @@ -21,38 +20,54 @@ import java.util.Date import java.util.Locale fun formatSymptomButtonTextStyleByState( + context: Context, currentState: Symptoms.Indication?, state: Symptoms.Indication? ): Int = - formatColor(currentState == state, + formatColor( + context, + currentState == state, R.color.colorCalendarTextSelected, - R.color.colorCalendarTextUnselected) + R.color.colorCalendarTextUnselected + ) fun formatSymptomButtonTextStyleByState( + context: Context, currentState: Symptoms.StartOf?, state: Symptoms.StartOf? ): Int = - formatColor(currentState == state, + formatColor( + context, + currentState == state, R.color.colorCalendarTextSelected, - R.color.colorCalendarTextUnselected) + R.color.colorCalendarTextUnselected + ) fun formatSymptomBackgroundButtonStyleByState( + context: Context, currentState: Symptoms.Indication?, state: Symptoms.Indication? ): Int = - formatColor(currentState == state, + formatColor( + context, + currentState == state, R.color.colorCalendarBackgroundSelected, - R.color.colorCalendarBackgroundUnselected) + R.color.colorCalendarBackgroundUnselected + ) fun formatSymptomBackgroundButtonStyleByState( + context: Context, currentState: Symptoms.StartOf?, state: Symptoms.StartOf? ): Int = - formatColor(currentState == state, + formatColor( + context, + currentState == state, R.color.colorCalendarBackgroundSelected, - R.color.colorCalendarBackgroundUnselected) + R.color.colorCalendarBackgroundUnselected + ) -fun formatTestResultStatusText(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): String = +fun formatTestResultStatusText(context: Context, uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): String = uiState.withSuccess(R.string.test_result_card_status_invalid) { when (it) { DeviceUIState.PAIRED_NEGATIVE -> R.string.test_result_card_status_negative @@ -60,9 +75,9 @@ fun formatTestResultStatusText(uiState: NetworkRequestWrapper<DeviceUIState, Thr DeviceUIState.PAIRED_POSITIVE_TELETAN -> R.string.test_result_card_status_positive else -> R.string.test_result_card_status_invalid } - }.let { CoronaWarnApplication.getAppContext().getString(it) } + }.let { context.getString(it) } -fun formatTestResultStatusColor(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Int = +fun formatTestResultStatusColor(context: Context, uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Int = uiState.withSuccess(R.color.colorTextSemanticRed) { when (it) { DeviceUIState.PAIRED_NEGATIVE -> R.color.colorTextSemanticGreen @@ -70,39 +85,43 @@ fun formatTestResultStatusColor(uiState: NetworkRequestWrapper<DeviceUIState, Th DeviceUIState.PAIRED_POSITIVE_TELETAN -> R.color.colorTextSemanticRed else -> R.color.colorTextSemanticRed } - }.let { CoronaWarnApplication.getAppContext().getColorCompat(it) } + }.let { context.getColorCompat(it) } -fun formatTestResult(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Spannable { - val appContext = CoronaWarnApplication.getAppContext() +fun formatTestResult( + context: Context, + uiState: NetworkRequestWrapper<DeviceUIState, Throwable>? +): Spannable { return SpannableStringBuilder() - .append(appContext.getString(R.string.test_result_card_virus_name_text)) + .append(context.getString(R.string.test_result_card_virus_name_text)) .append("\n") .append( - formatTestResultStatusText(uiState), - ForegroundColorSpan(formatTestResultStatusColor(uiState)), + formatTestResultStatusText(context, uiState), + ForegroundColorSpan(formatTestResultStatusColor(context, uiState)), Spannable.SPAN_EXCLUSIVE_INCLUSIVE ) } -fun formatTestResultCardContent(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Spannable { +fun formatTestResultCardContent( + context: Context, + uiState: NetworkRequestWrapper<DeviceUIState, Throwable>? +): Spannable { return uiState.withSuccess(SpannableString("")) { - val appContext = CoronaWarnApplication.getAppContext() when (it) { DeviceUIState.PAIRED_NO_RESULT -> - SpannableString(appContext.getString(R.string.test_result_card_status_pending)) + SpannableString(context.getString(R.string.test_result_card_status_pending)) DeviceUIState.PAIRED_ERROR, DeviceUIState.PAIRED_REDEEMED -> - SpannableString(appContext.getString(R.string.test_result_card_status_invalid)) + SpannableString(context.getString(R.string.test_result_card_status_invalid)) DeviceUIState.PAIRED_POSITIVE, DeviceUIState.PAIRED_POSITIVE_TELETAN, - DeviceUIState.PAIRED_NEGATIVE -> SpannableString(formatTestResult(uiState)) + DeviceUIState.PAIRED_NEGATIVE -> SpannableString(formatTestResult(context, uiState)) else -> SpannableString("") } } } -fun formatTestStatusIcon(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Drawable? { +fun formatTestStatusIcon(context: Context, uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Drawable? { return uiState.withSuccess(R.drawable.ic_test_result_illustration_invalid) { when (it) { DeviceUIState.PAIRED_NO_RESULT -> R.drawable.ic_test_result_illustration_pending @@ -113,13 +132,12 @@ fun formatTestStatusIcon(uiState: NetworkRequestWrapper<DeviceUIState, Throwable DeviceUIState.PAIRED_REDEEMED -> R.drawable.ic_test_result_illustration_invalid else -> R.drawable.ic_test_result_illustration_invalid } - }.let { CoronaWarnApplication.getAppContext().getDrawable(it) } + }.let { context.getDrawable(it) } } -fun formatTestResultRegisteredAtText(registeredAt: Date?): String { - val appContext = CoronaWarnApplication.getAppContext() - return appContext.getString(R.string.test_result_card_registered_at_text) - .format(registeredAt?.toUIFormat(appContext)) +fun formatTestResultRegisteredAtText(context: Context, registeredAt: Date?): String { + return context.getString(R.string.test_result_card_registered_at_text) + .format(registeredAt?.toUIFormat(context)) } fun formatTestResultPendingStepsVisible(uiState: NetworkRequestWrapper<DeviceUIState, Throwable>?): Int = @@ -141,24 +159,22 @@ private fun resolveNameToDrawableId(drawableName: String, ctx: Context): Int? { return if (drawableId == 0) null else drawableId } -fun formatCountryIsoTagToFlagDrawable(isoTag: String?): Drawable? { - val appContext = CoronaWarnApplication.getAppContext() - +fun formatCountryIsoTagToFlagDrawable(context: Context, isoTag: String?): Drawable? { val countryName = isoTag?.let { Locale("", it).getDisplayCountry(Locale.ENGLISH).toLowerCase(Locale.ENGLISH) } val countryId = - countryName?.let { resolveNameToDrawableId("ic_submission_country_flag_$it", appContext) } + countryName?.let { resolveNameToDrawableId("ic_submission_country_flag_$it", context) } return if (countryId != null) - appContext.getDrawable(countryId) + context.getDrawable(countryId) else - appContext.getDrawable(R.drawable.ic_submission_country_flag_ireland) + context.getDrawable(R.drawable.ic_submission_country_flag_ireland) } -fun formatCountrySelectCardColor(isActive: Boolean?): Int = - formatColor(isActive == true, R.color.colorTextSemanticNeutral, R.color.card_dark) +fun formatCountrySelectCardColor(context: Context, isActive: Boolean?): Int = + formatColor(context, isActive == true, R.color.colorTextSemanticNeutral, R.color.card_dark) -fun formatCountrySelectCardTextColor(isActive: Boolean?): Int = - formatColor(isActive == true, R.color.colorTextEmphasizedButton, R.color.colorTextPrimary1) +fun formatCountrySelectCardTextColor(context: Context, isActive: Boolean?): Int = + formatColor(context, isActive == true, R.color.colorTextEmphasizedButton, R.color.colorTextPrimary1) diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings.xml index ef1a77ba6efac198d149805bdba3e126b46ae6fa..7ecd203b6b2a293e9cb0c33c4814f52fa3817d5b 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings.xml @@ -3,9 +3,6 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> <data> - - <import type="de.rki.coronawarnapp.util.formatter.FormatterSettingsHelper" /> - <variable name="tracingState" type="de.rki.coronawarnapp.ui.settings.start.SettingsTracingState" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_contact_form.xml b/Corona-Warn-App/src/main/res/layout/include_contact_form.xml index 0af8211cc6d358a0b26c03d88cbfbc6cf44749e9..0f3654c19de12d7e5f914941da5ed8361c447bc5 100644 --- a/Corona-Warn-App/src/main/res/layout/include_contact_form.xml +++ b/Corona-Warn-App/src/main/res/layout/include_contact_form.xml @@ -28,7 +28,7 @@ android:linksClickable="true" android:text="@string/information_legal_subtitle_contact_label" android:textColorLink="@color/colorTextTint" - android:visibility="@{FormatterInformationLegalHelper.formatVisibilityLanguageBased(true)}" + android:visibility="@{FormatterInformationLegalHelper.formatVisibilityLanguageBased(context, true)}" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -42,7 +42,7 @@ android:linksClickable="true" android:text="@string/information_legal_subtitle_contact_form_non_en_de" android:textColorLink="@color/colorTextTint" - android:visibility="@{FormatterInformationLegalHelper.formatVisibilityLanguageBased(false)}" + android:visibility="@{FormatterInformationLegalHelper.formatVisibilityLanguageBased(context, false)}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/information_legal_contact_form" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_divider.xml b/Corona-Warn-App/src/main/res/layout/include_divider.xml index fdea557251fee9757db3ccdd8469cdaac4b6cd85..770870abacf64c27ec165242a20f2109b4e5484c 100644 --- a/Corona-Warn-App/src/main/res/layout/include_divider.xml +++ b/Corona-Warn-App/src/main/res/layout/include_divider.xml @@ -22,7 +22,7 @@ <View android:layout_width="match_parent" android:layout_height="@dimen/card_divider" - android:background="@{FormatterHelper.formatColorDivider(context,dividerColor)}" + android:background="@{(dividerColor != 0) ? dividerColor : @color/colorHairline}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_main_overview_row.xml b/Corona-Warn-App/src/main/res/layout/include_main_overview_row.xml index 15111ca19797157ffe7303882ca0aca139422a09..92a9e4363fc18134c10ea4ef967818d137c7b164 100644 --- a/Corona-Warn-App/src/main/res/layout/include_main_overview_row.xml +++ b/Corona-Warn-App/src/main/res/layout/include_main_overview_row.xml @@ -43,7 +43,7 @@ android:layout_height="@dimen/icon_size_main_card" android:importantForAccessibility="no" android:src="@{icon}" - android:tint="@{FormatterHelper.formatColorIcon(iconTint)}" + android:tint="@{(iconTint != 0) ? iconTint : @color/colorAccentTintIcon}" android:visibility="@{FormatterHelper.formatVisibilityIcon(icon)}" app:layout_constraintBottom_toBottomOf="@+id/main_overview_row_subtitle" app:layout_constraintStart_toStartOf="@+id/guideline_icon" diff --git a/Corona-Warn-App/src/main/res/layout/include_setting_row.xml b/Corona-Warn-App/src/main/res/layout/include_setting_row.xml index dd85e35a4c939e073abb74aa730c2907a90a53ca..518db34a13df01be350a5a6c9326d0b6ceb76a2b 100644 --- a/Corona-Warn-App/src/main/res/layout/include_setting_row.xml +++ b/Corona-Warn-App/src/main/res/layout/include_setting_row.xml @@ -6,8 +6,6 @@ <import type="de.rki.coronawarnapp.util.formatter.FormatterHelper" /> - <import type="de.rki.coronawarnapp.util.formatter.FormatterSettingsHelper" /> - <variable name="icon" type="android.graphics.drawable.Drawable" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_country_item.xml b/Corona-Warn-App/src/main/res/layout/include_submission_country_item.xml index c630f0f7d21e6b252d0b4598e27c6bc522567bad..473c57b56eab7fd70e9a7793f96867f174c974fd 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_country_item.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_country_item.xml @@ -25,7 +25,7 @@ android:layout_marginStart="@dimen/spacing_small" android:importantForAccessibility="no" android:scaleType="centerInside" - android:src="@{FormatterSubmissionHelper.formatCountryIsoTagToFlagDrawable(submissionCountry.countryCode), default=@drawable/ic_submission_country_flag_ireland}" + android:src="@{FormatterSubmissionHelper.formatCountryIsoTagToFlagDrawable(context, submissionCountry.countryCode), default=@drawable/ic_submission_country_flag_ireland}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_country_no_selection.xml b/Corona-Warn-App/src/main/res/layout/include_submission_country_no_selection.xml index f1738b390fb565cf7ed7d23029862877c22bb6b8..507fd3e07aecee13132e38de0c51749197550818 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_country_no_selection.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_country_no_selection.xml @@ -16,7 +16,7 @@ style="@style/GreyCard" android:layout_width="match_parent" android:layout_height="wrap_content" - android:backgroundTint="@{FormatterSubmissionHelper.formatCountrySelectCardColor(active)}" + android:backgroundTint="@{FormatterSubmissionHelper.formatCountrySelectCardColor(context, active)}" android:focusable="true"> <TextView @@ -27,7 +27,7 @@ android:layout_marginVertical="@dimen/spacing_normal" android:focusable="true" android:text="@string/submission_country_no_selection_headline" - android:textColor="@{FormatterSubmissionHelper.formatCountrySelectCardTextColor(active)}" + android:textColor="@{FormatterSubmissionHelper.formatCountrySelectCardTextColor(context, active)}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_country_selector.xml b/Corona-Warn-App/src/main/res/layout/include_submission_country_selector.xml index b083159cb27e52665c8df74144c4c52e73cf5393..b5d1e495d46834abe9f3916d67edbafbd7ca9bb5 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_country_selector.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_country_selector.xml @@ -24,7 +24,7 @@ style="@style/GreyCard" android:layout_width="match_parent" android:layout_height="wrap_content" - android:backgroundTint="@{FormatterSubmissionHelper.formatCountrySelectCardColor(active)}" + android:backgroundTint="@{FormatterSubmissionHelper.formatCountrySelectCardColor(context, active)}" android:focusable="true"> <TextView @@ -35,7 +35,7 @@ android:layout_marginTop="@dimen/spacing_normal" android:focusable="true" android:text="@string/submission_country_selector_headline" - android:textColor="@{FormatterSubmissionHelper.formatCountrySelectCardTextColor(active)}" + android:textColor="@{FormatterSubmissionHelper.formatCountrySelectCardTextColor(context, active)}" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml b/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml index 002e980085a85e252dbe1eef75ea392c8c09295c..54e8aaf5becc0597eb9667956d84bd4633243a29 100644 --- a/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml +++ b/Corona-Warn-App/src/main/res/layout/include_test_result_card.xml @@ -41,7 +41,7 @@ android:layout_height="wrap_content" android:layout_marginEnd="@dimen/spacing_small" android:layout_marginBottom="@dimen/spacing_normal" - android:text="@{FormatterSubmissionHelper.formatTestResultCardContent(deviceUIState)}" + android:text="@{FormatterSubmissionHelper.formatTestResultCardContent(context, deviceUIState)}" app:layout_constraintBottom_toTopOf="@id/test_result_card_registered_at_text" app:layout_constraintEnd_toStartOf="@id/test_result_card_status_icon" app:layout_constraintStart_toStartOf="parent" @@ -52,7 +52,7 @@ android:id="@+id/test_result_card_status_icon" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:background="@{FormatterSubmissionHelper.formatTestStatusIcon(deviceUIState)}" + android:background="@{FormatterSubmissionHelper.formatTestStatusIcon(context, deviceUIState)}" android:importantForAccessibility="no" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" @@ -65,7 +65,7 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:layout_marginEnd="@dimen/spacing_small" - android:text="@{FormatterSubmissionHelper.formatTestResultRegisteredAtText(registerDate)}" + android:text="@{FormatterSubmissionHelper.formatTestResultRegisteredAtText(context, registerDate)}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toStartOf="@id/test_result_card_status_icon" app:layout_constraintStart_toStartOf="parent" diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/debuglog/DebugLoggerTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/debuglog/DebugLoggerTest.kt index 99678b82732651514deb19468f0a5eb673214a3f..addaad19d1a7f7fad078a00a646082be36867d40 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/debuglog/DebugLoggerTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/bugreporting/debuglog/DebugLoggerTest.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.bugreporting.debuglog import android.app.Application import dagger.Lazy import de.rki.coronawarnapp.bugreporting.censors.RegistrationTokenCensor +import de.rki.coronawarnapp.util.CWADebug import de.rki.coronawarnapp.util.di.ApplicationComponent import io.kotest.matchers.shouldBe import io.kotest.matchers.shouldNotBe @@ -10,6 +11,7 @@ import io.mockk.MockKAnnotations import io.mockk.clearAllMocks import io.mockk.every import io.mockk.impl.annotations.MockK +import io.mockk.mockkObject import kotlinx.coroutines.runBlocking import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach @@ -36,6 +38,9 @@ class DebugLoggerTest : BaseIOTest() { @BeforeEach fun setup() { MockKAnnotations.init(this) + mockkObject(CWADebug) + every { CWADebug.isDeviceForTestersBuild } returns false + testDir.mkdirs() testDir.exists() shouldBe true @@ -80,6 +85,16 @@ class DebugLoggerTest : BaseIOTest() { runningLog.exists() shouldBe true } + @Test + fun `init calls start if it is a tester build`() { + every { CWADebug.isDeviceForTestersBuild } returns true + createInstance().apply { + init(application) + isLogging shouldBe true + } + runningLog.exists() shouldBe true + } + @Test fun `start plants a tree and starts a logging coroutine`() { val instance = createInstance().apply { diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterHelperTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterHelperTest.kt index dcd531d5c2b9bce3f5fda4566d322cf4850d16c9..f5ac06d0c7201774cf32cabedb31d2053f24ea96 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterHelperTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterHelperTest.kt @@ -56,27 +56,11 @@ class FormatterHelperTest { assertThat(result, `is`((formatVisibility(bValue)))) } - private fun formatTextBase(bValue: Boolean?, iResult: Int) { - every { context.getString(1) } returns "true string" - every { context.getString(2) } returns "false string" - - val result = formatText(value = bValue, stringTrue = 1, stringFalse = 2) - assertThat(result, `is`((CoronaWarnApplication.getAppContext().getString(iResult)))) - } - - private fun formatDrawableBase(bValue: Boolean) { - every { context.getDrawable(1) } returns drawable - every { context.getDrawable(2) } returns drawable - - val result = formatDrawable(value = bValue, drawableTrue = 1, drawableFalse = 2) - assertThat(result, `is`((equalTo(drawable)))) - } - private fun formatColorBase(bValue: Boolean, iColor: Int) { every { context.getColorCompat(1) } returns 1 every { context.getColorCompat(2) } returns 2 - val result = formatColor(value = bValue, colorTrue = 1, colorFalse = 2) + val result = formatColor(context = context, value = bValue, colorTrue = 1, colorFalse = 2) assertThat(result, `is`((context.getColorCompat(iColor)))) } @@ -119,27 +103,6 @@ class FormatterHelperTest { formatVisibilityTextBase(bValue = false, sText = "") } - @Test - fun formatText() { - // Check formatText when value true - formatTextBase(bValue = true, iResult = 1) - - // Check formatText when value false - formatTextBase(bValue = false, iResult = 2) - - // Check formatText when value false - formatTextBase(bValue = null, iResult = 2) - } - - @Test - fun formatDrawable() { - // Check formatDrawable when value true - formatDrawableBase(bValue = true) - - // Check formatDrawable when value false - formatDrawableBase(bValue = false) - } - @Test fun formatColorFalse() { // Check formatColor when value true diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelperTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelperTest.kt index cca5bb6e77e064daaf850a45e64b1c1301ff96d6..287e0f47d3fac08d6d14819c220e179d03a73ea4 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelperTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelperTest.kt @@ -81,7 +81,7 @@ class FormatterSubmissionHelperTest { oUiState: NetworkRequestWrapper<DeviceUIState, Throwable>?, iResult: String ) { - val result = formatTestResultStatusText(uiState = oUiState) + val result = formatTestResultStatusText(context = context, uiState = oUiState) assertThat(result, `is`(iResult)) } @@ -89,12 +89,12 @@ class FormatterSubmissionHelperTest { oUiState: NetworkRequestWrapper<DeviceUIState, Throwable>?, iResult: Int ) { - val result = formatTestResultStatusColor(uiState = oUiState) + val result = formatTestResultStatusColor(context = context, uiState = oUiState) assertThat(result, `is`(iResult)) } private fun formatTestStatusIconBase(oUiState: NetworkRequestWrapper.RequestSuccessful<DeviceUIState, Throwable>?) { - val result = formatTestStatusIcon(uiState = oUiState) + val result = formatTestStatusIcon(context = context, uiState = oUiState) assertThat(result, `is`(drawable)) } @@ -134,7 +134,7 @@ class FormatterSubmissionHelperTest { ) } returns spannableStringBuilder3 - val result = formatTestResult(uiState = oUiState) + val result = formatTestResult(context = context, uiState = oUiState) assertThat(result, `is`(spannableStringBuilder3 as Spannable?)) } diff --git a/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt b/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt index 7272bbc481705a1418c822223ce30cb48345000e..4883ed9049aadf384f6dbd79469f450eb464397b 100644 --- a/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt +++ b/Corona-Warn-App/src/testDeviceForTesters/java/de/rki/coronawarnapp/test/debugoptions/ui/DebugOptionsFragmentViewModelTest.kt @@ -55,7 +55,6 @@ class DebugOptionsFragmentViewModelTest : BaseTest() { } private fun createViewModel(): DebugOptionsFragmentViewModel = DebugOptionsFragmentViewModel( - context = context, envSetup = environmentSetup, dispatcherProvider = TestDispatcherProvider )