diff --git a/Corona-Warn-App/build.gradle b/Corona-Warn-App/build.gradle index d6470f8b2db4313fe720bcf7517f8a0ce818c2ad..b30614bd0b0f9e9775aab644ff9aae73a791d853 100644 --- a/Corona-Warn-App/build.gradle +++ b/Corona-Warn-App/build.gradle @@ -38,13 +38,13 @@ android { println("Current VERSION_PATCH: ${VERSION_PATCH}") println("Current VERSION_BUILD: ${VERSION_BUILD}") - compileSdkVersion 29 + compileSdkVersion 30 buildToolsVersion "29.0.3" defaultConfig { applicationId 'de.rki.coronawarnapp' minSdkVersion 23 - targetSdkVersion 29 + targetSdkVersion 30 ndkVersion "21.2.6472646" @@ -309,17 +309,16 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutineVersion" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutineVersion" testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:$coroutineVersion" - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // ANDROID STANDARD - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.3.0' - implementation 'com.google.android.material:material:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - implementation 'androidx.navigation:navigation-fragment-ktx:2.2.2' - implementation 'androidx.navigation:navigation-ui-ktx:2.2.2' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.core:core-ktx:1.3.2' + implementation 'com.google.android.material:material:1.2.1' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.2' + implementation 'androidx.navigation:navigation-ui-ktx:2.3.2' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - implementation 'androidx.preference:preference:1.1.1' + implementation 'androidx.preference:preference-ktx:1.1.1' implementation 'androidx.work:work-runtime-ktx:2.5.0-beta02' implementation 'androidx.lifecycle:lifecycle-common-java8:2.2.0' @@ -330,19 +329,21 @@ dependencies { implementation 'androidx.annotation:annotation:1.1.0' implementation "androidx.recyclerview:recyclerview:1.1.0" - implementation "androidx.recyclerview:recyclerview-selection:1.1.0-rc02" + implementation "androidx.recyclerview:recyclerview-selection:1.1.0-rc03" // DAGGER - implementation 'com.google.dagger:dagger:2.28.1' - implementation 'com.google.dagger:dagger-android:2.28.1' - implementation 'com.google.dagger:dagger-android-support:2.28.1' - kapt 'com.google.dagger:dagger-compiler:2.28.1' - kapt 'com.google.dagger:dagger-android-processor:2.28.1' - kaptTest 'com.google.dagger:dagger-compiler:2.28.1' - kaptAndroidTest 'com.google.dagger:dagger-compiler:2.28.1' - - compileOnly 'com.squareup.inject:assisted-inject-annotations-dagger2:0.5.2' - kapt 'com.squareup.inject:assisted-inject-processor-dagger2:0.5.2' + def dagger_version = "2.30.1" + implementation "com.google.dagger:dagger:$dagger_version" + implementation "com.google.dagger:dagger-android:$dagger_version" + implementation "com.google.dagger:dagger-android-support:$dagger_version" + kapt "com.google.dagger:dagger-compiler:$dagger_version" + kapt "com.google.dagger:dagger-android-processor:$dagger_version" + kaptTest "com.google.dagger:dagger-compiler:$dagger_version" + kaptAndroidTest "com.google.dagger:dagger-compiler:$dagger_version" + + def assisted_injection_version = "0.6.0" + compileOnly "com.squareup.inject:assisted-inject-annotations-dagger2:$assisted_injection_version" + kapt "com.squareup.inject:assisted-inject-processor-dagger2:$assisted_injection_version" // QR implementation('com.journeyapps:zxing-android-embedded:4.1.0') { transitive = false } @@ -357,10 +358,9 @@ dependencies { testImplementation('org.robolectric:robolectric:4.4') { exclude group: 'com.google.protobuf' } - testImplementation "io.mockk:mockk:1.10.2" + testImplementation "io.mockk:mockk:1.10.4" testImplementation "com.squareup.okhttp3:mockwebserver:4.9.0" testImplementation 'org.hamcrest:hamcrest-library:2.2' - testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.9' // Testing - jUnit4 testImplementation 'junit:junit:4.13.1' @@ -369,14 +369,17 @@ dependencies { // Testing - jUnit5 - testImplementation "org.junit.jupiter:junit-jupiter-api:5.7.0" - testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:5.7.0" - testImplementation "org.junit.jupiter:junit-jupiter-params:5.7.0" - testImplementation "io.kotest:kotest-runner-junit5:4.3.0" - testImplementation "io.kotest:kotest-assertions-core-jvm:4.3.0" - testImplementation "io.kotest:kotest-property-jvm:4.3.0" - androidTestImplementation "io.kotest:kotest-assertions-core-jvm:4.3.0" - androidTestImplementation "io.kotest:kotest-property-jvm:4.3.0" + def jupiter_version = "5.7.0" + testImplementation "org.junit.jupiter:junit-jupiter-api:$jupiter_version" + testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:$jupiter_version" + testImplementation "org.junit.jupiter:junit-jupiter-params:$jupiter_version" + + def kotest_version = "4.3.2" + testImplementation "io.kotest:kotest-runner-junit5:$kotest_version" + testImplementation "io.kotest:kotest-assertions-core-jvm:$kotest_version" + testImplementation "io.kotest:kotest-property-jvm:$kotest_version" + androidTestImplementation "io.kotest:kotest-assertions-core-jvm:$kotest_version" + androidTestImplementation "io.kotest:kotest-property-jvm:$kotest_version" testImplementation "io.github.classgraph:classgraph:4.8.90" @@ -389,17 +392,17 @@ dependencies { androidTestImplementation 'androidx.test.ext:truth:1.3.0' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.work:work-testing:2.5.0-beta02' - androidTestImplementation "io.mockk:mockk-android:1.10.2" + androidTestImplementation "io.mockk:mockk-android:1.10.4" debugImplementation 'androidx.fragment:fragment-testing:1.2.5' androidTestImplementation 'tools.fastlane:screengrab:2.0.0' // Play Services - implementation 'com.google.android.play:core:1.7.3' - implementation 'com.google.android.gms:play-services-base:17.3.0' - implementation 'com.google.android.gms:play-services-basement:17.3.0' + implementation 'com.google.android.play:core:1.9.0' + implementation 'com.google.android.gms:play-services-base:17.5.0' + implementation 'com.google.android.gms:play-services-basement:17.5.0' implementation 'com.google.android.gms:play-services-safetynet:17.0.0' - implementation 'com.google.android.gms:play-services-tasks:17.1.0' + implementation 'com.google.android.gms:play-services-tasks:17.2.0' // HTTP implementation 'com.squareup.retrofit2:retrofit:2.9.0' @@ -411,12 +414,12 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.0' // PERSISTENCE - def room_version = "2.2.5" + def room_version = "2.2.6" + implementation "androidx.sqlite:sqlite-ktx:2.1.0" implementation "androidx.room:room-runtime:$room_version" implementation "androidx.room:room-ktx:$room_version" implementation "androidx.room:room-guava:$room_version" kapt "androidx.room:room-compiler:$room_version" - implementation "androidx.sqlite:sqlite:2.1.0" androidTestImplementation "androidx.room:room-testing:$room_version" // UTILS @@ -428,11 +431,11 @@ dependencies { // SECURITY implementation "androidx.security:security-crypto:1.0.0-rc03" implementation 'net.zetetic:android-database-sqlcipher:4.4.0' - implementation 'org.conscrypt:conscrypt-android:2.4.0' + implementation 'org.conscrypt:conscrypt-android:2.5.1' // LOGGING - implementation 'com.jakewharton.timber:timber:4.7.1@aar' + implementation 'com.jakewharton.timber:timber:4.7.1' // ANIMATIONS - implementation "com.airbnb.android:lottie:3.4.1" + implementation "com.airbnb.android:lottie:3.5.0" } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorReportReceiver.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorReportReceiver.kt index ae10898ca7053737daefa9f76076a0befcf509cd..a5f57cd1fe098506cf0b6a8ebcb89a8fc4f32113 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorReportReceiver.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/exception/reporting/ErrorReportReceiver.kt @@ -47,7 +47,7 @@ class ErrorReportReceiver(private val activity: Activity) : BroadcastReceiver() } val dialogTitle = if (intent.getStringExtra(ReportingConstants.ERROR_REPORT_TITLE_EXTRA) != null) { - intent.getStringExtra(ReportingConstants.ERROR_REPORT_TITLE_EXTRA) + intent.getStringExtra(ReportingConstants.ERROR_REPORT_TITLE_EXTRA).orEmpty() } else { val errorTitle = context.resources.getString(R.string.errors_generic_details_headline) .toUpperCase(Locale.ROOT) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/TracingSettingsState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/TracingSettingsState.kt index 5ccb79f417bf4017ad09c1cdc9ca4d3a8b6c2c01..798a19e773ed9fac3519cffb4fabf59a292714bf 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/TracingSettingsState.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/tracing/ui/settings/TracingSettingsState.kt @@ -4,18 +4,19 @@ import android.content.Context import android.graphics.drawable.Drawable import de.rki.coronawarnapp.R import de.rki.coronawarnapp.tracing.GeneralTracingStatus +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat sealed class TracingSettingsState { /** * Formats the settings tracing details illustration depending on tracing status */ - abstract fun getTracingStatusImage(c: Context): Drawable? + abstract fun getTracingStatusImage(context: Context): Drawable? /** * Format the settings tracing content description for the header illustration */ - abstract fun getTracingIllustrationText(c: Context): String + abstract fun getTracingIllustrationText(context: Context): String /** * Formats the tracing switch enabled status based on the tracing status @@ -30,7 +31,7 @@ sealed class TracingSettingsState { /** * Change the tracing text in the row based on the tracing status. */ - abstract fun getTracingStatusText(c: Context): String + abstract fun getTracingStatusText(context: Context): String /** * Change the visibility of the location card based on the tracing status. @@ -48,18 +49,18 @@ sealed class TracingSettingsState { abstract fun isTracingStatusTextVisible(): Boolean object BluetoothDisabled : TracingSettingsState() { - override fun getTracingStatusImage(c: Context): Drawable? = - c.getDrawable(R.drawable.ic_settings_illustration_bluetooth_off) + override fun getTracingStatusImage(context: Context): Drawable? = + context.getDrawableCompat(R.drawable.ic_settings_illustration_bluetooth_off) - override fun getTracingIllustrationText(c: Context): String = - c.getString(R.string.settings_tracing_bluetooth_illustration_description_inactive) + override fun getTracingIllustrationText(context: Context): String = + context.getString(R.string.settings_tracing_bluetooth_illustration_description_inactive) override fun isTracingSwitchEnabled(): Boolean = false override fun isTracingSwitchChecked(): Boolean = false - override fun getTracingStatusText(c: Context): String = - c.getString(R.string.settings_tracing_status_restricted) + override fun getTracingStatusText(context: Context): String = + context.getString(R.string.settings_tracing_status_restricted) override fun isLocationCardVisible(): Boolean = false @@ -69,18 +70,18 @@ sealed class TracingSettingsState { } object LocationDisabled : TracingSettingsState() { - override fun getTracingStatusImage(c: Context): Drawable? = - c.getDrawable(R.drawable.ic_settings_illustration_location_off) + override fun getTracingStatusImage(context: Context): Drawable? = + context.getDrawableCompat(R.drawable.ic_settings_illustration_location_off) - override fun getTracingIllustrationText(c: Context): String = - c.getString(R.string.settings_tracing_location_illustration_description_inactive) + override fun getTracingIllustrationText(context: Context): String = + context.getString(R.string.settings_tracing_location_illustration_description_inactive) override fun isTracingSwitchEnabled(): Boolean = false override fun isTracingSwitchChecked(): Boolean = false - override fun getTracingStatusText(c: Context): String = - c.getString(R.string.settings_tracing_status_inactive) + override fun getTracingStatusText(context: Context): String = + context.getString(R.string.settings_tracing_status_inactive) override fun isLocationCardVisible(): Boolean = true @@ -90,18 +91,18 @@ sealed class TracingSettingsState { } object TracingInactive : TracingSettingsState() { - override fun getTracingStatusImage(c: Context): Drawable? = - c.getDrawable(R.drawable.ic_settings_illustration_tracing_off) + override fun getTracingStatusImage(context: Context): Drawable? = + context.getDrawableCompat(R.drawable.ic_settings_illustration_tracing_off) - override fun getTracingIllustrationText(c: Context): String = - c.getString(R.string.settings_tracing_illustration_description_inactive) + override fun getTracingIllustrationText(context: Context): String = + context.getString(R.string.settings_tracing_illustration_description_inactive) override fun isTracingSwitchEnabled(): Boolean = true override fun isTracingSwitchChecked(): Boolean = false - override fun getTracingStatusText(c: Context): String = - c.getString(R.string.settings_tracing_status_inactive) + override fun getTracingStatusText(context: Context): String = + context.getString(R.string.settings_tracing_status_inactive) override fun isLocationCardVisible(): Boolean = false @@ -111,18 +112,18 @@ sealed class TracingSettingsState { } object TracingActive : TracingSettingsState() { - override fun getTracingStatusImage(c: Context): Drawable? = - c.getDrawable(R.drawable.ic_illustration_tracing_on) + override fun getTracingStatusImage(context: Context): Drawable? = + context.getDrawableCompat(R.drawable.ic_illustration_tracing_on) - override fun getTracingIllustrationText(c: Context): String = - c.getString(R.string.settings_tracing_illustration_description_active) + override fun getTracingIllustrationText(context: Context): String = + context.getString(R.string.settings_tracing_illustration_description_active) override fun isTracingSwitchEnabled(): Boolean = true override fun isTracingSwitchChecked(): Boolean = true - override fun getTracingStatusText(c: Context): String = - c.getString(R.string.settings_tracing_status_active) + override fun getTracingStatusText(context: Context): String = + context.getString(R.string.settings_tracing_status_active) override fun isLocationCardVisible(): Boolean = false diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt index 33108fb54abd0b44f8ca33434cc709976e9f27cf..053520fcdf03846d17fb0fd564e4650806d80e12 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/main/MainActivity.kt @@ -9,7 +9,6 @@ import android.widget.Toast import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager -import androidx.lifecycle.observe import dagger.android.AndroidInjector import dagger.android.DispatchingAndroidInjector import dagger.android.HasAndroidInjector diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsState.kt index 212a286e514be7e014100374608469638d2259ed..18f5a4d0a24e6ab393df325b7a5f00837eb34083 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsState.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/notifications/NotificationSettingsState.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.ui.settings.notifications import android.content.Context import android.graphics.drawable.Drawable import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat data class NotificationSettingsState( val isNotificationsEnabled: Boolean, @@ -31,7 +32,7 @@ data class NotificationSettingsState( /** * Formats the settings notifications details illustration depending on notifications status */ - fun getNotificationsImage(c: Context): Drawable? = c.getDrawable( + fun getNotificationsImage(context: Context): Drawable? = context.getDrawableCompat( if (isNotificationsEnabled) R.drawable.ic_illustration_notification_on else R.drawable.ic_settings_illustration_notification_off ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsBackgroundState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsBackgroundState.kt index c484045725f8507569e35b2964e80a236fb5f34f..470cf323458ff6951634072f284800d2dbd6a843 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsBackgroundState.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsBackgroundState.kt @@ -5,6 +5,7 @@ import android.graphics.drawable.Drawable import androidx.annotation.ColorInt import de.rki.coronawarnapp.R import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat data class SettingsBackgroundState( val isEnabled: Boolean @@ -22,7 +23,7 @@ data class SettingsBackgroundState( /** * Formats the settings icon for background priority */ - fun getBackgroundPriorityIcon(c: Context): Drawable? = c.getDrawable( + fun getBackgroundPriorityIcon(context: Context): Drawable? = context.getDrawableCompat( if (isEnabled) R.drawable.ic_settings_background_priority_enabled else R.drawable.ic_settings_background_priority_disabled ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsNotificationState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsNotificationState.kt index 7969efcada37560d624aa4d0a54629f5a8ff145c..316465ca9aacea0243c0ccddf6d926047b8b9314 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsNotificationState.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsNotificationState.kt @@ -5,6 +5,7 @@ import android.graphics.drawable.Drawable import androidx.annotation.ColorInt import de.rki.coronawarnapp.R import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat data class SettingsNotificationState( val isNotificationsEnabled: Boolean, @@ -27,7 +28,7 @@ data class SettingsNotificationState( /** * Formats settings icon color for notifications depending on notification values */ - fun getNotificationIcon(c: Context): Drawable? = c.getDrawable( + fun getNotificationIcon(context: Context): Drawable? = context.getDrawableCompat( if (isEnabled) R.drawable.ic_settings_notification_active else R.drawable.ic_settings_notification_inactive ) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsTracingState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsTracingState.kt index 3760ac4efe78d327d2351987b3a1b154b225a13d..b8be9cb6793a43e86522557f7d38327699bd0099 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsTracingState.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/start/SettingsTracingState.kt @@ -6,6 +6,7 @@ import androidx.annotation.ColorInt import de.rki.coronawarnapp.R import de.rki.coronawarnapp.tracing.GeneralTracingStatus import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat sealed class SettingsTracingState { @@ -19,7 +20,7 @@ sealed class SettingsTracingState { context.getColorCompat(R.color.colorTextSemanticRed) override fun getTracingIcon(context: Context): Drawable? = - context.getDrawable(R.drawable.ic_settings_tracing_bluetooth_inactive) + context.getDrawableCompat(R.drawable.ic_settings_tracing_bluetooth_inactive) override fun getTracingStatusText(context: Context): String = context.getString(R.string.settings_tracing_status_restricted) @@ -30,7 +31,7 @@ sealed class SettingsTracingState { context.getColorCompat(R.color.colorTextSemanticRed) override fun getTracingIcon(context: Context): Drawable? = - context.getDrawable(R.drawable.ic_settings_location_inactive_small) + context.getDrawableCompat(R.drawable.ic_settings_location_inactive_small) override fun getTracingStatusText(context: Context): String = context.getString(R.string.settings_tracing_status_inactive) @@ -41,7 +42,7 @@ sealed class SettingsTracingState { context.getColorCompat(R.color.colorAccentTintIcon) override fun getTracingIcon(context: Context): Drawable? = - context.getDrawable(R.drawable.ic_settings_tracing_active_small) + context.getDrawableCompat(R.drawable.ic_settings_tracing_active_small) override fun getTracingStatusText(context: Context): String = context.getString(R.string.settings_tracing_status_active) @@ -52,7 +53,7 @@ sealed class SettingsTracingState { context.getColorCompat(R.color.colorTextSemanticRed) override fun getTracingIcon(context: Context): Drawable? = - context.getDrawable(R.drawable.ic_settings_tracing_inactive_small) + context.getDrawableCompat(R.drawable.ic_settings_tracing_inactive_small) override fun getTracingStatusText(context: Context): String = context.getString(R.string.settings_tracing_status_inactive) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/TanInput.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/TanInput.kt index a83715de6529bde14c14a68240ad1381683859fa..70ceed8db075032a7a58a2900e5b42e549bfdfa7 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/TanInput.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/tan/TanInput.kt @@ -2,6 +2,7 @@ package de.rki.coronawarnapp.ui.submission.tan import android.content.Context import android.os.Handler +import android.os.Looper import android.text.InputFilter import android.util.AttributeSet import android.view.ViewGroup @@ -13,6 +14,7 @@ import androidx.annotation.DimenRes import androidx.core.view.children import androidx.core.widget.doOnTextChanged import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.util.getDrawableCompat import java.util.Locale import kotlin.math.max @@ -65,7 +67,7 @@ class TanInput(context: Context, attrs: AttributeSet) : ViewGroup(context, attrs setOnClickListener { showKeyboard() } // initially show the keyboard - Handler().postDelayed( + Handler(Looper.getMainLooper()).postDelayed( { showKeyboard() }, KEYBOARD_TRIGGER_DELAY ) @@ -98,12 +100,9 @@ class TanInput(context: Context, attrs: AttributeSet) : ViewGroup(context, attrs val text = digitAtIndex(i) tanDigit.text = text tanDigit.background = when { - text == EMPTY_STRING -> resources.getDrawable(R.drawable.tan_input_digit, null) - Tan.isTanCharacterValid(text) -> resources.getDrawable( - R.drawable.tan_input_digit_entered, - null - ) - else -> resources.getDrawable(R.drawable.tan_input_digit_error, null) + text == EMPTY_STRING -> resources.getDrawableCompat(R.drawable.tan_input_digit) + Tan.isTanCharacterValid(text) -> resources.getDrawableCompat(R.drawable.tan_input_digit_entered) + else -> resources.getDrawableCompat(R.drawable.tan_input_digit_error) } tanDigit.setTextColor( diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/LocationTracingStatusCardBodyTextView.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/LocationTracingStatusCardBodyTextView.kt index cf71bbc226196247918ebbada091a5a8887791b4..64d204a0c12a0b8c21ee28e95a735415c3271239 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/LocationTracingStatusCardBodyTextView.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/view/LocationTracingStatusCardBodyTextView.kt @@ -6,25 +6,13 @@ import androidx.appcompat.widget.AppCompatTextView import de.rki.coronawarnapp.R import de.rki.coronawarnapp.util.setUrl -class LocationTracingStatusCardBodyTextView : AppCompatTextView { +class LocationTracingStatusCardBodyTextView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : AppCompatTextView(context, attrs, defStyleAttr) { - constructor(context: Context?) : super(context) { - setUrl() - } - - constructor(context: Context?, attrs: AttributeSet) : super(context, attrs) { - setUrl() - } - - constructor( - context: Context?, - attrs: AttributeSet, - defStyleAttr: Int - ) : super(context, attrs, defStyleAttr) { - setUrl() - } - - private fun setUrl() { + init { setUrl( R.string.settings_tracing_status_location_body, "FAQ", 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 f7432d233ea83e209bad8ffae5d61fa8f6a61bd5..2170fe780f40ff8847bb557fc3d63aaad4e3904f 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 @@ -10,6 +10,7 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.content.withStyledAttributes import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.ViewTestResultSectionBinding +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import de.rki.coronawarnapp.util.DeviceUIState import de.rki.coronawarnapp.util.NetworkRequestWrapper import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withSuccess @@ -67,7 +68,7 @@ constructor( DeviceUIState.PAIRED_REDEEMED -> R.drawable.ic_test_result_illustration_invalid else -> R.drawable.ic_test_result_illustration_invalid } - }.let { context.getDrawable(it) } + }.let { context.getDrawableCompat(it) } } private fun formatTestResultRegisteredAtText(registeredAt: Date?): String { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt index f5531f590b831bcbccc3eca440bbe633f6377ea9..246ca1e5acfd8991fec7e8cb07c8e36d1d680584 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ConnectivityHelper.kt @@ -98,7 +98,7 @@ object ConnectivityHelper { */ abstract fun onNetworkUnavailable() - override fun onAvailable(network: Network?) { + override fun onAvailable(network: Network) { onNetworkAvailable() } @@ -106,7 +106,7 @@ object ConnectivityHelper { onNetworkUnavailable() } - override fun onLost(network: Network?) { + override fun onLost(network: Network) { onNetworkUnavailable() } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ContextExtensions.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ContextExtensions.kt index 2c2ca6229c101c0094aa9d7d87adfcf77f8ceb8d..1360f7724c4703a700a3c2d5c9aa4520da84aabf 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ContextExtensions.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/ContextExtensions.kt @@ -1,8 +1,11 @@ package de.rki.coronawarnapp.util import android.content.Context +import android.content.res.Resources import androidx.annotation.ColorRes +import androidx.annotation.DrawableRes import androidx.core.content.ContextCompat +import androidx.core.content.res.ResourcesCompat /** * These context extensions provide easier access to the ContextCompat calls that we want @@ -16,4 +19,10 @@ object ContextExtensions { fun Context.getColorCompat(@ColorRes id: Int) = ContextCompat.getColor(this, id) fun Context.getColorStateListCompat(@ColorRes id: Int) = ContextCompat.getColorStateList(this, id) + + fun Context.getDrawableCompat(@DrawableRes id: Int) = ContextCompat.getDrawable(this, id) } + +@Throws(Resources.NotFoundException::class) +fun Resources.getDrawableCompat(@DrawableRes id: Int, theme: Resources.Theme? = null) = + ResourcesCompat.getDrawable(this, id, theme) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataBindingAdapters.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataBindingAdapters.kt index 66e55ff3c21a93b75b4d9fe48302a8bf333de330..5147b479bd9c2cbd70fdd398953d726b5687afed 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataBindingAdapters.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/DataBindingAdapters.kt @@ -1,13 +1,17 @@ package de.rki.coronawarnapp.util +import android.content.res.ColorStateList import android.graphics.PorterDuff import android.graphics.PorterDuffColorFilter +import android.widget.ImageView import android.widget.Switch +import androidx.core.widget.ImageViewCompat import androidx.databinding.BindingAdapter import com.airbnb.lottie.LottieAnimationView import com.airbnb.lottie.LottieDrawable import com.airbnb.lottie.LottieProperty import com.airbnb.lottie.model.KeyPath +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat const val IGNORE_CHANGE_TAG = "ignore" const val DRAWABLE_TYPE = "drawable" @@ -28,7 +32,7 @@ fun setAnimation(view: LottieAnimationView, animation: Int?) { val type = context.resources.getResourceTypeName(animation) if (type == DRAWABLE_TYPE) { - view.setImageDrawable(context.getDrawable(animation)) + view.setImageDrawable(context.getDrawableCompat(animation)) } else { view.setAnimation(animation) view.repeatCount = LottieDrawable.INFINITE @@ -48,3 +52,8 @@ fun setAnimationColor(view: LottieAnimationView, color: Int?) { ) { PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP) } } } + +@BindingAdapter("app:tint") +fun setTint(view: ImageView, color: Int) { + ImageViewCompat.setImageTintList(view, ColorStateList.valueOf(color)) +} 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 fe7a2558a06dcc4ed2f05e5a7b6b68c7c25c7f3a..d31fc126c6a18ec6f7e483a1075778eec457cde6 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 @@ -45,7 +45,7 @@ fun formatVisibility(value: Boolean): Int { * @param drawable * @return */ -fun formatVisibilityIcon(drawable: Any?): Int? { +fun formatVisibilityIcon(drawable: Any?): Int { return if (drawable != null) { View.VISIBLE } else { 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 9202734af4d9b772ce35d1847f151aa8cc4e490a..9957c98680e872732a2d0bdde917a15bb0a8c5f6 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 @@ -12,6 +12,7 @@ import android.view.View import de.rki.coronawarnapp.R import de.rki.coronawarnapp.submission.Symptoms import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import de.rki.coronawarnapp.util.DeviceUIState import de.rki.coronawarnapp.util.NetworkRequestWrapper import de.rki.coronawarnapp.util.NetworkRequestWrapper.Companion.withSuccess @@ -132,7 +133,7 @@ fun formatTestStatusIcon(context: Context, uiState: NetworkRequestWrapper<Device DeviceUIState.PAIRED_REDEEMED -> R.drawable.ic_test_result_illustration_invalid else -> R.drawable.ic_test_result_illustration_invalid } - }.let { context.getDrawable(it) } + }.let { context.getDrawableCompat(it) } } fun formatTestResultRegisteredAtText(context: Context, registeredAt: Date?): String { @@ -168,9 +169,9 @@ fun formatCountryIsoTagToFlagDrawable(context: Context, isoTag: String?): Drawab countryName?.let { resolveNameToDrawableId("ic_submission_country_flag_$it", context) } return if (countryId != null) - context.getDrawable(countryId) + context.getDrawableCompat(countryId) else - context.getDrawable(R.drawable.ic_submission_country_flag_ireland) + context.getDrawableCompat(R.drawable.ic_submission_country_flag_ireland) } fun formatCountrySelectCardColor(context: Context, isActive: Boolean?): Int = diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml index 98934eed2f6aa477fb1d0ed4043f9428b21558cb..6d499f499fb8954bc69e14f0cd7f21b844d47f34 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml @@ -51,7 +51,7 @@ app:layout_constraintBottom_toTopOf="@+id/onboarding_button_next" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/onboarding_button_back" + app:layout_constraintTop_toBottomOf="@id/onboarding_header" app:subtitle="@{@string/onboarding_notifications_subtitle}" /> <Button diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml index 5a73d2835b999dd33953235dd6e73b65d74cb462..9c6224677c0a2a189a2844c1370a5e0f7de65f24 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml @@ -50,7 +50,7 @@ app:layout_constraintBottom_toTopOf="@+id/onboarding_button_next" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/onboarding_button_back" + app:layout_constraintTop_toBottomOf="@id/onboarding_header" app:subtitle="@{@string/onboarding_test_subtitle}" /> <Button diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml index 07f2ea6b9343f7a9d90235899e4e6fecea6a7e23..00f4baece7db030815615d59ed3036943e0a9f69 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml @@ -63,7 +63,7 @@ app:countryData="@{countryData}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/onboarding_button_back" + app:layout_constraintTop_toBottomOf="@id/onboarding_header" app:subtitle="@{@string/onboarding_tracing_subtitle}" /> <Button diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_positive_no_consent.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_positive_no_consent.xml index 55e6be3cdde6d85fbe12e3b331ca30562d136809..d320ca471a02a0d43ce56a4e6af72d956acdfcef 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_positive_no_consent.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_test_result_positive_no_consent.xml @@ -3,8 +3,6 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> - <data></data> - <androidx.constraintlayout.widget.ConstraintLayout android:id="@+id/submission_test_result_layout" android:contentDescription="@string/submission_test_result_headline" @@ -69,14 +67,14 @@ android:layout_width="@dimen/circle_icon_big" android:layout_height="@dimen/circle_icon_big" android:layout_marginTop="@dimen/spacing_normal" - android:src="@drawable/ic_submission_share" - android:tint="@color/colorStableLight" android:background="@drawable/circle" android:backgroundTint="@color/button_red" - android:padding="@dimen/circle_icon_padding" android:importantForAccessibility="no" + android:padding="@dimen/circle_icon_padding" + android:src="@drawable/ic_submission_share" + app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/submission_test_result_positive_no_consent_subtitle" - app:layout_constraintStart_toStartOf="parent"/> + app:tint="@color/colorStableLight" /> <TextView android:id="@+id/submission_test_result_positive_no_consent_text_1" diff --git a/Corona-Warn-App/src/main/res/layout/include_dispatcher_card.xml b/Corona-Warn-App/src/main/res/layout/include_dispatcher_card.xml index c5da5315daa951ae9073dc4b5a3cc783e98efd00..968a7b08957fc02c7274e65190138e541dcad47a 100644 --- a/Corona-Warn-App/src/main/res/layout/include_dispatcher_card.xml +++ b/Corona-Warn-App/src/main/res/layout/include_dispatcher_card.xml @@ -49,11 +49,11 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_small" android:layout_marginEnd="@dimen/spacing_normal" - android:src="@drawable/ic_forward" - android:tint="@color/colorTextPrimary1" android:importantForAccessibility="no" + android:src="@drawable/ic_forward" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" /> + app:layout_constraintTop_toTopOf="parent" + app:tint="@color/colorTextPrimary1" /> <TextView android:id="@+id/submission_dispatcher_card_text" 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 92a9e4363fc18134c10ea4ef967818d137c7b164..3a88cdaf40194ff257286caeba17e56b8d88dd99 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,11 +43,11 @@ android:layout_height="@dimen/icon_size_main_card" android:importantForAccessibility="no" android:src="@{icon}" - 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" - app:layout_constraintTop_toTopOf="@+id/main_overview_row_subtitle" /> + app:layout_constraintTop_toTopOf="@+id/main_overview_row_subtitle" + app:tint="@{(iconTint != 0) ? iconTint : @color/colorAccentTintIcon}" /> <TextView android:id="@+id/main_overview_row_subtitle" 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 518db34a13df01be350a5a6c9326d0b6ceb76a2b..ee5722cfd265f82dfcd75ce9058d8d6f1dd98ba8 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 @@ -50,7 +50,7 @@ android:layout_height="@dimen/icon_size_settings" android:importantForAccessibility="no" android:src="@{icon}" - android:tint="@{color}" + app:tint="@{color}" app:layout_constraintBottom_toBottomOf="@id/settings_row_header" app:layout_constraintStart_toStartOf="@+id/guideline_icon" app:layout_constraintTop_toTopOf="@id/settings_row_header" /> diff --git a/Corona-Warn-App/src/main/res/layout/include_submission_behaviour_row.xml b/Corona-Warn-App/src/main/res/layout/include_submission_behaviour_row.xml index f59cfeb3898ad9b22aa6755224230c808f4d9de3..fe0e972da7646460094ae25b08f9c9de09f94f95 100644 --- a/Corona-Warn-App/src/main/res/layout/include_submission_behaviour_row.xml +++ b/Corona-Warn-App/src/main/res/layout/include_submission_behaviour_row.xml @@ -34,7 +34,7 @@ android:focusable="false" android:importantForAccessibility="no" android:src="@{icon}" - android:tint="@color/colorStableLight" + app:tint="@color/colorStableLight" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/tracing_content_disabled_view.xml b/Corona-Warn-App/src/main/res/layout/tracing_content_disabled_view.xml index 631d5d4495e2d6e4e19c71b60c24ef7d84e19b27..994e7984e880c49daa434ed96ed270726a9948f6 100644 --- a/Corona-Warn-App/src/main/res/layout/tracing_content_disabled_view.xml +++ b/Corona-Warn-App/src/main/res/layout/tracing_content_disabled_view.xml @@ -35,7 +35,7 @@ android:layout_height="@dimen/icon_size_risk_card" android:importantForAccessibility="no" android:src="@drawable/ic_forward" - android:tint="@color/colorTextPrimary1" + app:tint="@color/colorTextPrimary1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/layout/tracing_content_failed_view.xml b/Corona-Warn-App/src/main/res/layout/tracing_content_failed_view.xml index 162b1b20b361e236027044e501092736a21deb69..8cd918e4d5afa7f952fdf6b9251bbe8ccb7bee1d 100644 --- a/Corona-Warn-App/src/main/res/layout/tracing_content_failed_view.xml +++ b/Corona-Warn-App/src/main/res/layout/tracing_content_failed_view.xml @@ -34,7 +34,7 @@ android:layout_height="@dimen/icon_size_risk_card" android:importantForAccessibility="no" android:src="@drawable/ic_forward" - android:tint="@color/colorTextPrimary1" + app:tint="@color/colorTextPrimary1" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/layout/tracing_content_increased_view.xml b/Corona-Warn-App/src/main/res/layout/tracing_content_increased_view.xml index e6407d6f255d3ff074d0db26a12a92e1fd0d4503..3041ca8fb3c8d9055420ab016a38d877407212be 100644 --- a/Corona-Warn-App/src/main/res/layout/tracing_content_increased_view.xml +++ b/Corona-Warn-App/src/main/res/layout/tracing_content_increased_view.xml @@ -36,7 +36,7 @@ android:layout_height="@dimen/icon_size_risk_card" android:importantForAccessibility="no" android:src="@drawable/ic_forward" - android:tint="@color/colorStableLight" + app:tint="@color/colorStableLight" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/layout/tracing_content_low_view.xml b/Corona-Warn-App/src/main/res/layout/tracing_content_low_view.xml index 9f5ad6708776b2eb60851a5cee672f3c78ae0d31..8ef03ec4033370b19d1ce907975ed56d68da5092 100644 --- a/Corona-Warn-App/src/main/res/layout/tracing_content_low_view.xml +++ b/Corona-Warn-App/src/main/res/layout/tracing_content_low_view.xml @@ -38,7 +38,7 @@ android:layout_height="@dimen/icon_size_risk_card" android:importantForAccessibility="no" android:src="@drawable/ic_forward" - android:tint="@color/colorStableLight" + app:tint="@color/colorStableLight" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" tools:tint="@color/colorStableLight" /> diff --git a/Corona-Warn-App/src/main/res/layout/tracing_content_progress_view.xml b/Corona-Warn-App/src/main/res/layout/tracing_content_progress_view.xml index f6c398a6bd0e82413f2c022b1ec23ccc452db04c..38c3404db2513f7c1ea1d4efcce80b3c3cb5cf0e 100644 --- a/Corona-Warn-App/src/main/res/layout/tracing_content_progress_view.xml +++ b/Corona-Warn-App/src/main/res/layout/tracing_content_progress_view.xml @@ -36,7 +36,7 @@ android:layout_height="@dimen/icon_size_risk_card" android:importantForAccessibility="no" android:src="@drawable/ic_forward" - android:tint="@{state.getStableIconColor(context)}" + app:tint="@{state.getStableIconColor(context)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/layout/tracing_details_fragment_layout.xml b/Corona-Warn-App/src/main/res/layout/tracing_details_fragment_layout.xml index 454abe494ee28c82b0e87d90a40d175900a506c9..c63966995fdfbd07eb8d97d86473a9373a7bda16 100644 --- a/Corona-Warn-App/src/main/res/layout/tracing_details_fragment_layout.xml +++ b/Corona-Warn-App/src/main/res/layout/tracing_details_fragment_layout.xml @@ -43,7 +43,7 @@ android:layout_height="@dimen/icon_size_button" bind:cwaContentDescription="@{@string/accessibility_back}" android:src="@{@drawable/ic_close}" - android:tint="@{tracingDetailsState.getStableTextColor(context)}" + app:tint="@{tracingDetailsState.getStableTextColor(context)}" 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/tracing_details_item_behavior_increased_view.xml b/Corona-Warn-App/src/main/res/layout/tracing_details_item_behavior_increased_view.xml index b74b3522c94a328b78efe37e219e238b263bca90..f26f124084a0c960d3c83c0665110af5faa7effc 100644 --- a/Corona-Warn-App/src/main/res/layout/tracing_details_item_behavior_increased_view.xml +++ b/Corona-Warn-App/src/main/res/layout/tracing_details_item_behavior_increased_view.xml @@ -69,7 +69,7 @@ android:layout_marginTop="@dimen/spacing_mega_tiny" android:importantForAccessibility="no" android:src="@drawable/bullet_point" - android:tint="@color/colorSemanticHighRisk" + app:tint="@color/colorSemanticHighRisk" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/risk_details_behavior_bullet_point_1" /> @@ -95,7 +95,7 @@ android:layout_marginTop="@dimen/spacing_mega_tiny" android:importantForAccessibility="no" android:src="@drawable/bullet_point" - android:tint="@color/colorSemanticHighRisk" + app:tint="@color/colorSemanticHighRisk" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/risk_details_behavior_bullet_point_2" /> @@ -122,7 +122,7 @@ android:layout_marginTop="@dimen/spacing_mega_tiny" android:importantForAccessibility="no" android:src="@drawable/bullet_point" - android:tint="@color/colorSemanticHighRisk" + app:tint="@color/colorSemanticHighRisk" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="@id/risk_details_behavior_bullet_point_3" /> diff --git a/Corona-Warn-App/src/main/res/layout/tracing_details_item_behavior_row_view.xml b/Corona-Warn-App/src/main/res/layout/tracing_details_item_behavior_row_view.xml index f438908c7c80b46d9fd52640acf020267c5c6d20..165523cf979ad30a34d38ccf95af5f5b1bce5d84 100644 --- a/Corona-Warn-App/src/main/res/layout/tracing_details_item_behavior_row_view.xml +++ b/Corona-Warn-App/src/main/res/layout/tracing_details_item_behavior_row_view.xml @@ -30,7 +30,7 @@ android:layout_margin="@dimen/icon_margin_risk_details_behavior" android:focusable="false" android:importantForAccessibility="no" - android:tint="@color/colorStableLight" + app:tint="@color/colorStableLight" tools:src="@drawable/common_full_open_on_phone" /> </FrameLayout> diff --git a/Corona-Warn-App/src/main/res/layout/view_circle_progress.xml b/Corona-Warn-App/src/main/res/layout/view_circle_progress.xml index 4858e8c18c740c96868177f5dcfc85e4f9854f7e..209542e7621e609b83451ce49d1c0ab4b3d1f4cf 100644 --- a/Corona-Warn-App/src/main/res/layout/view_circle_progress.xml +++ b/Corona-Warn-App/src/main/res/layout/view_circle_progress.xml @@ -23,7 +23,7 @@ android:layout_height="wrap_content" android:importantForAccessibility="no" android:src="@drawable/ic_risk_card_saved_days" - android:tint="@color/colorAccentTintIcon" + app:tint="@color/colorAccentTintIcon" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/tracing/ui/settings/TracingSettingsStateTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/tracing/ui/settings/TracingSettingsStateTest.kt index 86927d25a8718f370c94c7423b2670c6cd9918a6..61f9e453c8650a14cab6ece81fb9e71077605e82 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/tracing/ui/settings/TracingSettingsStateTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/tracing/ui/settings/TracingSettingsStateTest.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.tracing.ui.settings import android.content.Context import de.rki.coronawarnapp.R import de.rki.coronawarnapp.tracing.GeneralTracingStatus +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations import io.mockk.clearAllMocks @@ -39,7 +40,7 @@ class TracingSettingsStateTest : BaseTest() { fun `bluetooth disabled`() { TracingSettingsState.BluetoothDisabled.apply { getTracingStatusImage(context) - verify { context.getDrawable(R.drawable.ic_settings_illustration_bluetooth_off) } + verify { context.getDrawableCompat(R.drawable.ic_settings_illustration_bluetooth_off) } getTracingIllustrationText(context) verify { context.getString(R.string.settings_tracing_bluetooth_illustration_description_inactive) } @@ -60,7 +61,7 @@ class TracingSettingsStateTest : BaseTest() { fun `location disabled`() { TracingSettingsState.LocationDisabled.apply { getTracingStatusImage(context) - verify { context.getDrawable(R.drawable.ic_settings_illustration_location_off) } + verify { context.getDrawableCompat(R.drawable.ic_settings_illustration_location_off) } getTracingIllustrationText(context) verify { context.getString(R.string.settings_tracing_location_illustration_description_inactive) } @@ -81,7 +82,7 @@ class TracingSettingsStateTest : BaseTest() { fun `tracing inactive`() { TracingSettingsState.TracingInactive.apply { getTracingStatusImage(context) - verify { context.getDrawable(R.drawable.ic_settings_illustration_tracing_off) } + verify { context.getDrawableCompat(R.drawable.ic_settings_illustration_tracing_off) } getTracingIllustrationText(context) verify { context.getString(R.string.settings_tracing_illustration_description_inactive) } @@ -102,7 +103,7 @@ class TracingSettingsStateTest : BaseTest() { fun `tracing active`() { TracingSettingsState.TracingActive.apply { getTracingStatusImage(context) - verify { context.getDrawable(R.drawable.ic_illustration_tracing_on) } + verify { context.getDrawableCompat(R.drawable.ic_illustration_tracing_on) } getTracingIllustrationText(context) verify { context.getString(R.string.settings_tracing_illustration_description_active) } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/notification/NotificationSettingsStateTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/notification/NotificationSettingsStateTest.kt index caa6fe494550d8e43071be9955ebac7b94aa3524..0e1222d587c397957898758b31e65e8757ce0b4f 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/notification/NotificationSettingsStateTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/notification/NotificationSettingsStateTest.kt @@ -3,12 +3,15 @@ package de.rki.coronawarnapp.ui.settings.notification import android.content.Context import de.rki.coronawarnapp.R import de.rki.coronawarnapp.ui.settings.notifications.NotificationSettingsState +import de.rki.coronawarnapp.util.ContextExtensions +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations import io.mockk.clearAllMocks import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.mockk +import io.mockk.mockkObject import io.mockk.verify import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.BeforeEach @@ -22,9 +25,12 @@ class NotificationSettingsStateTest : BaseTest() { @BeforeEach fun setup() { MockKAnnotations.init(this) - every { context.getString(any()) } returns "" - every { context.getColor(any()) } returns 0 - every { context.getDrawable(any()) } returns mockk() + mockkObject(ContextExtensions) + with(context) { + every { getString(any()) } returns "" + every { getColor(any()) } returns 0 + every { getDrawableCompat(any()) } returns mockk() + } } @AfterEach @@ -63,10 +69,10 @@ class NotificationSettingsStateTest : BaseTest() { @Test fun getNotificationsImage() { createInstance().getNotificationsImage(context) - verify(exactly = 1) { context.getDrawable(R.drawable.ic_illustration_notification_on) } + verify(exactly = 1) { context.getDrawableCompat(R.drawable.ic_illustration_notification_on) } createInstance(isNotificationsEnabled = false).getNotificationsImage(context) - verify(exactly = 1) { context.getDrawable(R.drawable.ic_settings_illustration_notification_off) } + verify(exactly = 1) { context.getDrawableCompat(R.drawable.ic_settings_illustration_notification_off) } } @Test diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsBackgroundStateTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsBackgroundStateTest.kt index 078f63e2650143753a4b748d4a219a564b1ea272..2a461f487fdf7d39edb6fab0ed9c468f399aef47 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsBackgroundStateTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsBackgroundStateTest.kt @@ -3,6 +3,7 @@ package de.rki.coronawarnapp.ui.settings.start import android.content.Context import de.rki.coronawarnapp.R import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import io.mockk.MockKAnnotations import io.mockk.clearAllMocks import io.mockk.impl.annotations.MockK @@ -46,11 +47,11 @@ class SettingsBackgroundStateTest : BaseTest() { fun getBackgroindPriorityIcon() { createInstance(isEnabled = true).apply { getBackgroundPriorityIcon(context) - verify { context.getDrawable(R.drawable.ic_settings_background_priority_enabled) } + verify { context.getDrawableCompat(R.drawable.ic_settings_background_priority_enabled) } } createInstance(isEnabled = false).apply { getBackgroundPriorityIcon(context) - verify { context.getDrawable(R.drawable.ic_settings_background_priority_disabled) } + verify { context.getDrawableCompat(R.drawable.ic_settings_background_priority_disabled) } } } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsNotificationStateTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsNotificationStateTest.kt index 10d4fcfc23922bfa7fa69004adc3a1c22920ccb7..69dcba26c940eabe5921a4efab80b66534373ad7 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsNotificationStateTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsNotificationStateTest.kt @@ -2,13 +2,16 @@ package de.rki.coronawarnapp.ui.settings.start import android.content.Context import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.util.ContextExtensions import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations import io.mockk.clearAllMocks import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.mockk +import io.mockk.mockkObject import io.mockk.verify import kotlinx.coroutines.test.runBlockingTest import org.junit.jupiter.api.AfterEach @@ -23,9 +26,10 @@ class SettingsNotificationStateTest : BaseTest() { @BeforeEach fun setup() { MockKAnnotations.init(this) + mockkObject(ContextExtensions) every { context.getString(any()) } returns "" every { context.getColorCompat(any()) } returns 0 - every { context.getDrawable(any()) } returns mockk() + every { context.getDrawableCompat(any()) } returns mockk() } @AfterEach @@ -90,14 +94,18 @@ class SettingsNotificationStateTest : BaseTest() { isNotificationsRiskEnabled = true, isNotificationsTestEnabled = true ).getNotificationIcon(context) - verify { context.getDrawable(R.drawable.ic_settings_notification_active) } + verify { context.getDrawableCompat(R.drawable.ic_settings_notification_active) } SettingsNotificationState( isNotificationsEnabled = false, isNotificationsRiskEnabled = true, isNotificationsTestEnabled = true ).getNotificationIcon(context) - verify { context.getDrawable(R.drawable.ic_settings_notification_inactive) } + verify { + context.getDrawableCompat( + R.drawable.ic_settings_notification_inactive + ) + } } @Test diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsTracingStateTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsTracingStateTest.kt index 554a4bfb90a5d48eadef36d9956859dea2c07483..74c061f1428bb085ba96f02419e51979644e3a8e 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsTracingStateTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/ui/settings/start/SettingsTracingStateTest.kt @@ -4,6 +4,7 @@ import android.content.Context import de.rki.coronawarnapp.R import de.rki.coronawarnapp.tracing.GeneralTracingStatus import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import io.kotest.matchers.shouldBe import io.mockk.MockKAnnotations import io.mockk.clearAllMocks @@ -43,7 +44,7 @@ class SettingsTracingStateTest : BaseTest() { verify { context.getColorCompat(R.color.colorTextSemanticRed) } getTracingIcon(context) - verify { context.getDrawable(R.drawable.ic_settings_tracing_bluetooth_inactive) } + verify { context.getDrawableCompat(R.drawable.ic_settings_tracing_bluetooth_inactive) } getTracingStatusText(context) verify { context.getString(R.string.settings_tracing_status_restricted) } @@ -57,7 +58,7 @@ class SettingsTracingStateTest : BaseTest() { verify { context.getColorCompat(R.color.colorTextSemanticRed) } getTracingIcon(context) - verify { context.getDrawable(R.drawable.ic_settings_location_inactive_small) } + verify { context.getDrawableCompat(R.drawable.ic_settings_location_inactive_small) } getTracingStatusText(context) verify { context.getString(R.string.settings_tracing_status_inactive) } @@ -71,7 +72,7 @@ class SettingsTracingStateTest : BaseTest() { verify { context.getColorCompat(R.color.colorTextSemanticRed) } getTracingIcon(context) - verify { context.getDrawable(R.drawable.ic_settings_tracing_inactive_small) } + verify { context.getDrawableCompat(R.drawable.ic_settings_tracing_inactive_small) } getTracingStatusText(context) verify { context.getString(R.string.settings_tracing_status_inactive) } @@ -85,7 +86,7 @@ class SettingsTracingStateTest : BaseTest() { verify { context.getColorCompat(R.color.colorAccentTintIcon) } getTracingIcon(context) - verify { context.getDrawable(R.drawable.ic_settings_tracing_active_small) } + verify { context.getDrawableCompat(R.drawable.ic_settings_tracing_active_small) } getTracingStatusText(context) verify { context.getString(R.string.settings_tracing_status_active) } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/DataBindingAdaptersTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/DataBindingAdaptersTest.kt index 3612eb9a38fd3ff0e7952a1307bd26678d29291d..ef75a50d41ecb235fac8d6ebb2288293096b0a1a 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/DataBindingAdaptersTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/DataBindingAdaptersTest.kt @@ -7,10 +7,12 @@ import android.widget.Switch import com.airbnb.lottie.LottieAnimationView import com.airbnb.lottie.LottieDrawable import de.rki.coronawarnapp.R +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.mockk +import io.mockk.mockkObject import io.mockk.spyk import io.mockk.verify import io.mockk.verifySequence @@ -28,6 +30,7 @@ class DataBindingAdaptersTest { @Before fun setUp() { MockKAnnotations.init(this) + mockkObject(ContextExtensions) } private fun setChecked(status: Boolean?) { @@ -114,7 +117,7 @@ class DataBindingAdaptersTest { every { resources } returns mockk<Resources>().apply { every { getResourceTypeName(any()) } returns DRAWABLE_TYPE } - every { getDrawable(any()) } returns this@DataBindingAdaptersTest.drawable + every { getDrawableCompat(any()) } returns this@DataBindingAdaptersTest.drawable } } 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 ac20d28c39ea966cfd3843e785ff97e2a28ea1cf..96c471a63c55606f9dff4ca322b6de8b0d895457 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 @@ -10,7 +10,6 @@ import io.mockk.MockKAnnotations import io.mockk.every import io.mockk.impl.annotations.MockK import io.mockk.mockkObject -import io.mockk.mockkStatic import io.mockk.unmockkAll import org.hamcrest.CoreMatchers.`is` import org.hamcrest.MatcherAssert.assertThat @@ -30,7 +29,7 @@ class FormatterHelperTest { fun setUp() { MockKAnnotations.init(this) mockkObject(CoronaWarnApplication.Companion) - mockkStatic(ContextExtensions::class) + mockkObject(ContextExtensions) every { CoronaWarnApplication.getAppContext() } returns context } 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 287e0f47d3fac08d6d14819c220e179d03a73ea4..320a4683509e3c54bd361490de1c1f90b1e2e8a9 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 @@ -10,6 +10,7 @@ import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.R import de.rki.coronawarnapp.util.ContextExtensions import de.rki.coronawarnapp.util.ContextExtensions.getColorCompat +import de.rki.coronawarnapp.util.ContextExtensions.getDrawableCompat import de.rki.coronawarnapp.util.DeviceUIState import de.rki.coronawarnapp.util.NetworkRequestWrapper import io.mockk.MockKAnnotations @@ -38,9 +39,9 @@ class FormatterSubmissionHelperTest { fun setUp() { MockKAnnotations.init(this) mockkObject(CoronaWarnApplication.Companion) + mockkObject(ContextExtensions) mockkStatic(SpannableStringBuilder::class) mockkStatic(Spannable::class) - mockkStatic(ContextExtensions::class) every { CoronaWarnApplication.getAppContext() } returns context @@ -51,13 +52,20 @@ class FormatterSubmissionHelperTest { every { context.getString(R.string.test_result_card_status_pending) } returns R.string.test_result_card_status_pending.toString() every { context.getString(R.string.test_result_card_status_invalid) } returns R.string.test_result_card_status_invalid.toString() - every { context.getColorCompat(R.color.colorTextSemanticGreen) } returns R.color.colorTextSemanticGreen - every { context.getColorCompat(R.color.colorTextSemanticRed) } returns R.color.colorTextSemanticRed + with(context) { + every { getColorCompat(R.color.colorTextSemanticGreen) } returns R.color.colorTextSemanticGreen + every { getColorCompat(R.color.colorTextSemanticRed) } returns R.color.colorTextSemanticRed - every { context.getDrawable(R.drawable.ic_test_result_illustration_invalid) } returns drawable - every { context.getDrawable(R.drawable.ic_test_result_illustration_pending) } returns drawable - every { context.getDrawable(R.drawable.ic_test_result_illustration_positive) } returns drawable - every { context.getDrawable(R.drawable.ic_main_illustration_negative) } returns drawable + every { getDrawableCompat(R.drawable.ic_test_result_illustration_invalid) } returns drawable + every { getDrawableCompat(R.drawable.ic_test_result_illustration_pending) } returns drawable + every { getDrawableCompat(R.drawable.ic_test_result_illustration_positive) } returns drawable + every { getDrawableCompat(R.drawable.ic_main_illustration_negative) } returns drawable + every { getDrawableCompat(R.drawable.ic_main_illustration_pending) } returns drawable + every { getDrawableCompat(R.drawable.ic_main_illustration_negative) } returns drawable + every { getDrawableCompat(R.drawable.ic_main_illustration_invalid) } returns drawable + every { getDrawableCompat(R.drawable.ic_main_illustration_invalid) } returns drawable + every { getDrawableCompat(R.drawable.ic_test_result_illustration_negative) } returns drawable + } every { context.getString(R.string.submission_status_card_title_available) } returns R.string.submission_status_card_title_available.toString() every { context.getString(R.string.submission_status_card_title_pending) } returns R.string.submission_status_card_title_pending.toString() @@ -68,13 +76,6 @@ class FormatterSubmissionHelperTest { every { context.getString(R.string.submission_status_card_body_pending) } returns R.string.submission_status_card_body_pending.toString() every { context.getString(R.string.submission_status_card_button_show_results) } returns R.string.submission_status_card_button_show_results.toString() - - every { context.getDrawable(R.drawable.ic_main_illustration_pending) } returns drawable - every { context.getDrawable(R.drawable.ic_main_illustration_negative) } returns drawable - every { context.getDrawable(R.drawable.ic_main_illustration_invalid) } returns drawable - every { context.getDrawable(R.drawable.ic_main_illustration_invalid) } returns drawable - - every { context.getDrawable(R.drawable.ic_test_result_illustration_negative) } returns drawable } private fun formatTestResultStatusTextBase( diff --git a/build.gradle b/build.gradle index 74e5b5cc43eacb2f7d63db9d8b49c2df3d22cc77..c48f250a4ab7fd6f7da34de98dee174cff316c73 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.4.20' + ext.kotlin_version = '1.4.21' ext.protobufVersion = '0.8.12' ext.navVersion = "2.2.2"