From 93d5ba91d95d8213740bed073015e3ef4af1b37d Mon Sep 17 00:00:00 2001 From: Oliver Zimmerman <oezimmerman@gmail.com> Date: Tue, 14 Jul 2020 15:55:14 +0100 Subject: [PATCH] Added home screen implementation for location state (EXPOSUREAPP-1756) (#869) * Implemented state check for location * formatting * removed duplicate manifest item * Update ConnectivityHelper.kt * Update ConnectivityHelper.kt * Added location type to TracingStatusHelper Added location type to TracingStatusHelper as well as relevant String values * added location paramater to TracingStatusHelper utilizing methods added location paramater to TracingStatusHelper utilizing methods. Implementation including location not yet included. * Finalized TracingStatusHelper to include the location value Finalized TracingStatusHelper to include the location value to be returned to Formatters in FormatterSettingsHelper * formatting * Update FormatterSettingsHelper.kt * Update FormatterSettingsHelper.kt * Added home screen implementation for location state - Added logic to formatters adjust home screen tracing state based on location setting. - Adjusted existing state tests to include location boolean value and results. - Added location inactive icon. * Update FormatterSettingsHelper.kt * test changes to match formatter/helper changes Co-authored-by: Philipp Woessner <64482866+pwoessner@users.noreply.github.com> --- .../res/layout/fragment_main.xml | 6 +- .../ui/settings/SettingsTracingFragment.kt | 6 +- .../util/formatter/FormatterSettingsHelper.kt | 89 +++-- .../util/formatter/TracingStatusHelper.kt | 19 +- .../ic_settings_location_inactive_small.xml | 12 + .../src/main/res/layout/fragment_main.xml | 8 +- .../src/main/res/layout/fragment_settings.xml | 6 +- .../res/layout/fragment_settings_tracing.xml | 16 +- .../src/main/res/values-de/strings.xml | 2 + .../src/main/res/values-en/strings.xml | 2 + .../src/main/res/values-tr/strings.xml | 2 + .../src/main/res/values/strings.xml | 2 + .../formatter/FormatterSettingsHelperTest.kt | 324 +++++++++++++----- .../util/formatter/TracingStatusHelperTest.kt | 30 +- 14 files changed, 371 insertions(+), 153 deletions(-) create mode 100644 Corona-Warn-App/src/main/res/drawable/ic_settings_location_inactive_small.xml diff --git a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_main.xml b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_main.xml index b6e0b96a7..c9ea631a2 100644 --- a/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_main.xml +++ b/Corona-Warn-App/src/deviceForTesters/res/layout/fragment_main.xml @@ -97,7 +97,7 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:focusable="false" - android:text="@{FormatterSettingsHelper.formatTracingDescription(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + android:text="@{FormatterSettingsHelper.formatTracingDescription(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -107,8 +107,8 @@ android:layout_width="@dimen/icon_size_main_card" android:layout_height="@dimen/icon_size_main_card" android:importantForAccessibility="no" - app:animation="@{FormatterSettingsHelper.formatTracingIcon(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" - app:animation_tint="@{FormatterSettingsHelper.formatTracingIconColor(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + app:animation="@{FormatterSettingsHelper.formatTracingIcon(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" + app:animation_tint="@{FormatterSettingsHelper.formatTracingIconColor(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt index 41410d237..c14ac3879 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/settings/SettingsTracingFragment.kt @@ -16,6 +16,7 @@ import de.rki.coronawarnapp.exception.reporting.report import de.rki.coronawarnapp.nearby.InternalExposureNotificationClient import de.rki.coronawarnapp.nearby.InternalExposureNotificationPermissionHelper import de.rki.coronawarnapp.storage.LocalData +import de.rki.coronawarnapp.storage.SettingsRepository.isLocationEnabled import de.rki.coronawarnapp.ui.main.MainActivity import de.rki.coronawarnapp.ui.viewmodel.SettingsViewModel import de.rki.coronawarnapp.ui.viewmodel.TracingViewModel @@ -114,11 +115,14 @@ class SettingsTracingFragment : Fragment(), settingsViewModel.isBluetoothEnabled.value ?: throw IllegalArgumentException() val isConnectionEnabled = settingsViewModel.isConnectionEnabled.value ?: throw IllegalArgumentException() + val isLocationEnabled = + settingsViewModel.isLocationEnabled.value ?: throw IllegalArgumentException() // check if the row is clickable, this adds the switch behaviour val isEnabled = formatTracingSwitchEnabled( isTracingEnabled, isBluetoothEnabled, - isConnectionEnabled + isConnectionEnabled, + isLocationEnabled ) if (isEnabled) startStopTracing() } 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 index a55eb0dc6..17a7a340c 100644 --- 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 @@ -72,16 +72,17 @@ fun formatNotificationIllustrationText(notifications: Boolean): String = * @param tracing * @param bluetooth * @param connection + * @param location * @return String */ -fun formatTracingStatusText(tracing: Boolean, bluetooth: Boolean, connection: Boolean): String { +fun formatTracingStatusText(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): String { val appContext = CoronaWarnApplication.getAppContext() - return when (tracingStatusHelper(tracing, bluetooth, connection)) { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.CONNECTION, TracingStatusHelper.BLUETOOTH -> appContext.getString(R.string.settings_tracing_status_restricted) TracingStatusHelper.TRACING_ACTIVE -> appContext.getString(R.string.settings_tracing_status_active) - TracingStatusHelper.TRACING_INACTIVE -> + TracingStatusHelper.TRACING_INACTIVE, TracingStatusHelper.LOCATION -> appContext.getString(R.string.settings_tracing_status_inactive) else -> "" } @@ -102,15 +103,18 @@ fun formatSwitchContentDescription(subtitle: String, status: String): String = " * @param tracing * @param bluetooth * @param connection + * @param location * @return String */ -fun formatTracingDescription(tracing: Boolean, bluetooth: Boolean, connection: Boolean): String { +fun formatTracingDescription(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): String { val appContext = CoronaWarnApplication.getAppContext() - return when (tracingStatusHelper(tracing, bluetooth, connection)) { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.CONNECTION -> appContext.getString(R.string.settings_tracing_body_connection_inactive) TracingStatusHelper.BLUETOOTH -> appContext.getString(R.string.settings_tracing_body_bluetooth_inactive) + TracingStatusHelper.LOCATION -> + appContext.getString(R.string.settings_tracing_body_inactive_location) TracingStatusHelper.TRACING_ACTIVE -> appContext.getString(R.string.settings_tracing_body_active) TracingStatusHelper.TRACING_INACTIVE -> @@ -126,21 +130,26 @@ fun formatTracingDescription(tracing: Boolean, bluetooth: Boolean, connection: B * @param tracing * @param bluetooth * @param connection + * @param location * @return String */ fun formatTracingContentDescription( tracing: Boolean, bluetooth: Boolean, - connection: Boolean + connection: Boolean, + location: Boolean ): String { val appContext = CoronaWarnApplication.getAppContext() - return when (tracingStatusHelper(tracing, bluetooth, connection)) { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.CONNECTION -> appContext.getString(R.string.settings_tracing_body_connection_inactive) + " " + appContext.getString(R.string.accessibility_button) TracingStatusHelper.BLUETOOTH -> appContext.getString(R.string.settings_tracing_body_bluetooth_inactive) + " " + appContext.getString(R.string.accessibility_button) + TracingStatusHelper.LOCATION -> + appContext.getString(R.string.settings_tracing_body_inactive_location) + + " " + appContext.getString(R.string.accessibility_button) TracingStatusHelper.TRACING_ACTIVE -> appContext.getString(R.string.settings_tracing_body_active) + " " + appContext.getString(R.string.accessibility_button) @@ -171,15 +180,17 @@ fun formatTracingStatusBody(activeTracingDaysInRetentionPeriod: Long): String { * @param tracing * @param bluetooth * @param connection + * @param location * @return String */ fun formatTracingIllustrationText( tracing: Boolean, bluetooth: Boolean, - connection: Boolean + connection: Boolean, + location: Boolean ): String { val appContext = CoronaWarnApplication.getAppContext() - return when (tracingStatusHelper(tracing, bluetooth, connection)) { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.CONNECTION -> appContext.getString(R.string.settings_tracing_connection_illustration_description_inactive) TracingStatusHelper.BLUETOOTH -> @@ -259,16 +270,17 @@ fun formatNotificationImage(notifications: Boolean): Drawable? = * @param tracing * @param bluetooth * @param connection + * @param location * @return */ -fun formatSettingsTracingIconColor(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Int { +fun formatSettingsTracingIconColor(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): Int { val appContext = CoronaWarnApplication.getAppContext() - return when (tracingStatusHelper(tracing, bluetooth, connection)) { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.CONNECTION, TracingStatusHelper.BLUETOOTH -> appContext.getColor(R.color.colorTextPrimary3) TracingStatusHelper.TRACING_ACTIVE -> appContext.getColor(R.color.colorAccentTintIcon) - TracingStatusHelper.TRACING_INACTIVE -> + TracingStatusHelper.TRACING_INACTIVE, TracingStatusHelper.LOCATION -> appContext.getColor(R.color.colorTextSemanticRed) else -> appContext.getColor(R.color.colorTextSemanticRed) } @@ -280,19 +292,23 @@ fun formatSettingsTracingIconColor(tracing: Boolean, bluetooth: Boolean, connect * @param tracing * @param bluetooth * @param connection + * @param location * @return */ fun formatSettingsTracingIcon( tracing: Boolean, bluetooth: Boolean, - connection: Boolean + connection: Boolean, + location: Boolean ): Drawable? { val appContext = CoronaWarnApplication.getAppContext() - return when (tracingStatusHelper(tracing, bluetooth, connection)) { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.CONNECTION, TracingStatusHelper.BLUETOOTH, TracingStatusHelper.TRACING_ACTIVE -> appContext.getDrawable(R.drawable.ic_settings_tracing_active_small) + TracingStatusHelper.LOCATION -> + appContext.getDrawable(R.drawable.ic_settings_location_inactive_small) TracingStatusHelper.TRACING_INACTIVE -> appContext.getDrawable(R.drawable.ic_settings_tracing_inactive_small) else -> appContext.getDrawable(R.drawable.ic_settings_tracing_inactive_small) @@ -328,10 +344,11 @@ fun formatSettingsBackgroundPriorityIconColor( * @param tracing * @param bluetooth * @param connection + * @param location * @return Boolean */ -fun formatTracingSwitch(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Boolean { - return when (tracingStatusHelper(tracing, bluetooth, connection)) { +fun formatTracingSwitch(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): Boolean { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.TRACING_ACTIVE -> true else -> false } @@ -343,10 +360,11 @@ fun formatTracingSwitch(tracing: Boolean, bluetooth: Boolean, connection: Boolea * @param tracing * @param bluetooth * @param connection + * @param location * @return Boolean */ -fun formatTracingSwitchEnabled(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Boolean { - return when (tracingStatusHelper(tracing, bluetooth, connection)) { +fun formatTracingSwitchEnabled(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): Boolean { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.TRACING_ACTIVE, TracingStatusHelper.TRACING_INACTIVE -> true else -> false } @@ -358,12 +376,14 @@ fun formatTracingSwitchEnabled(tracing: Boolean, bluetooth: Boolean, connection: * @param tracing * @param bluetooth * @param connection + * @param location * @return Drawable */ -fun formatTracingIcon(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Int? { - return when (tracingStatusHelper(tracing, bluetooth, connection)) { +fun formatTracingIcon(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): Int? { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.BLUETOOTH -> R.drawable.ic_settings_tracing_bluetooth_inactive TracingStatusHelper.CONNECTION -> R.drawable.ic_settings_tracing_connection_inactive + TracingStatusHelper.LOCATION -> R.drawable.ic_settings_location_inactive_small TracingStatusHelper.TRACING_ACTIVE -> R.raw.ic_settings_tracing_animated else -> R.drawable.ic_settings_tracing_inactive } @@ -375,11 +395,12 @@ fun formatTracingIcon(tracing: Boolean, bluetooth: Boolean, connection: Boolean) * @param tracing * @param bluetooth * @param connection + * @param location * @return Int */ -fun formatTracingIconColor(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Int { +fun formatTracingIconColor(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): Int { val appContext = CoronaWarnApplication.getAppContext() - return when (tracingStatusHelper(tracing, bluetooth, connection)) { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.TRACING_ACTIVE -> appContext.getColor(R.color.colorAccentTintIcon) else -> @@ -393,11 +414,12 @@ fun formatTracingIconColor(tracing: Boolean, bluetooth: Boolean, connection: Boo * @param tracing * @param bluetooth * @param connection + * @param location * @return Drawable */ -fun formatTracingStatusImage(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Drawable? { +fun formatTracingStatusImage(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): Drawable? { val appContext = CoronaWarnApplication.getAppContext() - return when (tracingStatusHelper(tracing, bluetooth, connection)) { + return when (tracingStatusHelper(tracing, bluetooth, connection, location)) { TracingStatusHelper.BLUETOOTH -> appContext.getDrawable(R.drawable.ic_settings_illustration_bluetooth_off) TracingStatusHelper.CONNECTION -> @@ -415,14 +437,16 @@ fun formatTracingStatusImage(tracing: Boolean, bluetooth: Boolean, connection: B * @param tracing * @param bluetooth * @param connection + * @param location * @return Int */ -fun formatTracingStatusConnection(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Int = +fun formatTracingStatusConnection(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): Int = formatVisibility( tracingStatusHelper( tracing, bluetooth, - connection + connection, + location ) == TracingStatusHelper.CONNECTION ) @@ -432,18 +456,21 @@ fun formatTracingStatusConnection(tracing: Boolean, bluetooth: Boolean, connecti * @param tracing * @param bluetooth * @param connection + * @param location * @return Int */ fun formatTracingStatusVisibilityBluetooth( tracing: Boolean, bluetooth: Boolean, - connection: Boolean + connection: Boolean, + location: Boolean ): Int = formatVisibility( tracingStatusHelper( tracing, bluetooth, - connection + connection, + location ) == TracingStatusHelper.BLUETOOTH ) @@ -453,14 +480,16 @@ fun formatTracingStatusVisibilityBluetooth( * @param tracing * @param bluetooth * @param connection + * @param location * @return Int */ fun formatTracingStatusVisibilityTracing( tracing: Boolean, bluetooth: Boolean, - connection: Boolean + connection: Boolean, + location: Boolean ): Int { - val tracingStatus = tracingStatusHelper(tracing, bluetooth, connection) + val tracingStatus = tracingStatusHelper(tracing, bluetooth, connection, location) return formatVisibility( tracingStatus == TracingStatusHelper.TRACING_ACTIVE || tracingStatus == TracingStatusHelper.TRACING_INACTIVE diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelper.kt index f7328e1aa..419fecc8d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelper.kt @@ -9,13 +9,15 @@ object TracingStatusHelper { const val TRACING_INACTIVE = 1 const val BLUETOOTH = 2 const val CONNECTION = 3 + const val LOCATION = 4 } /** * The following table explains the different stati which can appear in the ui. - * This follows this prioritization: Tracing, Bluetooth, Connection + * This follows this prioritization: Tracing, Bluetooth, Connection, Location * Connection will only be relevant in one exact case, Bluetooth is relevant in two different cases, - * but independently from the Connection status. And in every other case Tracing will be shown. + * but independently from the Connection status. And in every other case Tracing will be shown + * except when location is disabled in which case a location related warning will always be shown as it is required for bluetooth tracing. * * | Tracing | Bluetooth | Connection | Result | * |---------|-----------|------------|------------| @@ -29,16 +31,25 @@ object TracingStatusHelper { * | ON | ON | OFF | CONNECTION | * *circle has to be disabled via another formatter * + * NB --- If location is disabled, the status will always show a location related warning, regardless of the other connectivity states. + * * @param tracing * @param bluetooth * @param connection + * @param location * @return Int */ -fun tracingStatusHelper(tracing: Boolean, bluetooth: Boolean, connection: Boolean): Int { +fun tracingStatusHelper(tracing: Boolean, bluetooth: Boolean, connection: Boolean, location: Boolean): Int { return if (tracing && bluetooth && !connection) { TracingStatusHelper.CONNECTION - } else if (tracing && !bluetooth) { + } else if (tracing && location && !connection) { + TracingStatusHelper.CONNECTION + } else if (tracing && location && !bluetooth) { TracingStatusHelper.BLUETOOTH + } else if (tracing && !location) { + TracingStatusHelper.LOCATION + } else if (!location) { + TracingStatusHelper.LOCATION } else if (tracing) { TracingStatusHelper.TRACING_ACTIVE } else { diff --git a/Corona-Warn-App/src/main/res/drawable/ic_settings_location_inactive_small.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_location_inactive_small.xml new file mode 100644 index 000000000..83082663f --- /dev/null +++ b/Corona-Warn-App/src/main/res/drawable/ic_settings_location_inactive_small.xml @@ -0,0 +1,12 @@ +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="41dp" + android:height="40dp" + android:viewportWidth="41" + android:viewportHeight="40"> + <path + android:pathData="M20.5,14.5C21.88,14.5 23,15.62 23,17C23,17.74 22.67,18.39 22.17,18.85L25.8,22.48C26.78,20.62 27.5,18.68 27.5,17C27.5,13.13 24.37,10 20.5,10C18.52,10 16.74,10.83 15.46,12.15L18.65,15.34C19.11,14.82 19.76,14.5 20.5,14.5ZM24.87,24.1L20.24,19.47L20.13,19.36L11.77,11L10.5,12.27L13.68,15.45C13.57,15.95 13.5,16.47 13.5,17C13.5,22.25 20.5,30 20.5,30C20.5,30 22.17,28.15 23.88,25.65L27.23,29L28.5,27.73L24.87,24.1Z" + android:strokeWidth="1" + android:fillColor="#C00F2D" + android:fillType="nonZero" + android:strokeColor="#00000000"/> +</vector> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_main.xml b/Corona-Warn-App/src/main/res/layout/fragment_main.xml index db25a3b62..35dc3600f 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_main.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_main.xml @@ -102,8 +102,8 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:focusable="false" - android:contentDescription="@{FormatterSettingsHelper.formatTracingContentDescription(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" - android:text="@{FormatterSettingsHelper.formatTracingDescription(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + android:contentDescription="@{FormatterSettingsHelper.formatTracingContentDescription(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" + android:text="@{FormatterSettingsHelper.formatTracingDescription(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -113,8 +113,8 @@ android:layout_width="@dimen/icon_size_main_card" android:layout_height="@dimen/icon_size_main_card" android:importantForAccessibility="no" - app:animation="@{FormatterSettingsHelper.formatTracingIcon(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" - app:animation_tint="@{FormatterSettingsHelper.formatTracingIconColor(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + app:animation="@{FormatterSettingsHelper.formatTracingIcon(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" + app:animation_tint="@{FormatterSettingsHelper.formatTracingIconColor(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> 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 3051209a2..4df42821d 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings.xml @@ -54,13 +54,13 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" app:body="@{@string/settings_tracing_body_description}" - app:color="@{FormatterSettingsHelper.formatSettingsTracingIconColor(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" - app:icon="@{FormatterSettingsHelper.formatSettingsTracingIcon(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + app:color="@{FormatterSettingsHelper.formatSettingsTracingIconColor(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" + app:icon="@{FormatterSettingsHelper.formatSettingsTracingIcon(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:showDivider="@{true}" - app:statusText="@{FormatterSettingsHelper.formatTracingStatusText(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + app:statusText="@{FormatterSettingsHelper.formatTracingStatusText(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:subtitle="@{@string/settings_tracing_title}" app:tracingViewModel="@{tracingViewModel}" /> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml index a177b0e9e..151d9c42b 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml @@ -55,8 +55,8 @@ android:layout_width="0dp" android:layout_height="wrap_content" app:headline="@{@string/settings_tracing_headline}" - app:illustration="@{FormatterSettingsHelper.formatTracingStatusImage(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" - app:illustrationDescription="@{FormatterSettingsHelper.formatTracingIllustrationText(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + app:illustration="@{FormatterSettingsHelper.formatTracingStatusImage(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" + app:illustrationDescription="@{FormatterSettingsHelper.formatTracingIllustrationText(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -67,13 +67,13 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" - app:enabled="@{FormatterSettingsHelper.formatTracingSwitchEnabled(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + app:enabled="@{FormatterSettingsHelper.formatTracingSwitchEnabled(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/settings_tracing_header_details" app:showDivider="@{true}" - app:status="@{FormatterSettingsHelper.formatTracingSwitch(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" - app:statusText="@{FormatterSettingsHelper.formatTracingStatusText(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + app:status="@{FormatterSettingsHelper.formatTracingSwitch(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" + app:statusText="@{FormatterSettingsHelper.formatTracingStatusText(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:subtitle="@{@string/settings_tracing_title}" /> <androidx.constraintlayout.widget.ConstraintLayout @@ -90,7 +90,7 @@ layout="@layout/include_tracing_status_card" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" - android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityBluetooth(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityBluetooth(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:body="@{@string/settings_tracing_status_bluetooth_body}" app:buttonText="@{@string/settings_tracing_status_bluetooth_button}" app:headline="@{@string/settings_tracing_status_bluetooth_headline}" @@ -104,7 +104,7 @@ layout="@layout/include_tracing_status_card" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" - android:visibility="@{FormatterSettingsHelper.formatTracingStatusConnection(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + android:visibility="@{FormatterSettingsHelper.formatTracingStatusConnection(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" app:body="@{@string/settings_tracing_status_connection_body}" app:buttonText="@{@string/settings_tracing_status_connection_button}" app:headline="@{@string/settings_tracing_status_connection_headline}" @@ -118,7 +118,7 @@ android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_tiny" - android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityTracing(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" + android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityTracing(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}" android:focusable="true" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/values-de/strings.xml b/Corona-Warn-App/src/main/res/values-de/strings.xml index 3c1105176..f66dd130a 100644 --- a/Corona-Warn-App/src/main/res/values-de/strings.xml +++ b/Corona-Warn-App/src/main/res/values-de/strings.xml @@ -439,6 +439,8 @@ <string name="settings_tracing_body_active">"Risiko-Ermittlung aktiv"</string> <!-- XTXT: settings(tracing) - shows status under header in home, inactive --> <string name="settings_tracing_body_inactive">"Risiko-Ermittlung gestoppt"</string> + <!-- XTXT: settings(tracing) - shows status under header in home, inactive location --> + <string name="settings_tracing_body_inactive_location">"Ortungsdienste deaktiviert"</string> <!-- YTXT: settings(tracing) - explains tracings --> <string name="settings_tracing_body_text">"Um zu erkennen, ob für Sie ein Infektionsrisiko vorliegt, müssen Sie die Risiko-Ermittlung aktivieren. Die Risiko-Ermittlung funktioniert, indem Ihr Handy per Bluetooth verschlüsselte Zufallscodes anderer Nutzerinnen und Nutzer empfängt und Ihren eigenen Zufallscode an deren Smartphones weitergibt. Die Funktion lässt sich jederzeit wieder deaktivieren."<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"Die verschlüsselten Zufallscodes geben nur Auskunft über das Datum, die Dauer und die anhand der Signalstärke berechnete Entfernung zu Ihren Mitmenschen. Persönliche Daten wie Name, Adresse oder Aufenthaltsort werden zu keiner Zeit erfasst. Konkrete Rückschlüsse auf Personen sind nicht möglich."</string> <!-- XTXT: settings(tracing) - status next to switch under title --> diff --git a/Corona-Warn-App/src/main/res/values-en/strings.xml b/Corona-Warn-App/src/main/res/values-en/strings.xml index e8caff2c8..6ac5e473c 100644 --- a/Corona-Warn-App/src/main/res/values-en/strings.xml +++ b/Corona-Warn-App/src/main/res/values-en/strings.xml @@ -431,6 +431,8 @@ <string name="settings_tracing_body_active">"Exposure Logging Active"</string> <!-- XTXT: settings(tracing) - shows status under header in home, inactive --> <string name="settings_tracing_body_inactive">"Exposure logging stopped"</string> + <!-- XTXT: settings(tracing) - shows status under header in home, inactive location --> + <string name="settings_tracing_body_inactive_location">"Location services disabled"</string> <!-- YTXT: settings(tracing) - explains tracings --> <string name="settings_tracing_body_text">"Exposure logging works by your device receiving, via Bluetooth, encrypted random IDs of other users and passing your random ID to their devices. This feature can be deactivated at any time. "<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"Encrypted random IDs only pass information about date, duration, and proximity (calculated using signal strength) to other people. Personal data such as name, address, and location is never recorded. Individuals cannot be identified."</string> <!-- XTXT: settings(tracing) - status next to switch under title --> diff --git a/Corona-Warn-App/src/main/res/values-tr/strings.xml b/Corona-Warn-App/src/main/res/values-tr/strings.xml index 34934ab8f..e206399a8 100644 --- a/Corona-Warn-App/src/main/res/values-tr/strings.xml +++ b/Corona-Warn-App/src/main/res/values-tr/strings.xml @@ -429,6 +429,8 @@ <string name="settings_tracing_status_active">"Etkin"</string> <!-- XTXT: settings(tracing) - status next to switch under title --> <string name="settings_tracing_status_inactive">"Durduruldu"</string> + <!-- XTXT: settings(tracing) - shows status under header in home, inactive location --> + <string name="settings_tracing_body_inactive_location">"Konum hizmetleri devre dışı"</string> <!-- XTXT: settings(tracing) - status next to switch under title --> <string name="settings_tracing_status_restricted">"Sınırlı"</string> <!-- XTXT: settings(tracing) - shows status under header in home, no internet --> diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index 8a5cd8cf4..243a484df 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -427,6 +427,8 @@ <string name="settings_tracing_body_active">"Exposure logging active"</string> <!-- XTXT: settings(tracing) - shows status under header in home, inactive --> <string name="settings_tracing_body_inactive">"Exposure logging stopped"</string> + <!-- XTXT: settings(tracing) - shows status under header in home, inactive location --> + <string name="settings_tracing_body_inactive_location">"Location services disabled"</string> <!-- YTXT: settings(tracing) - explains tracings --> <string name="settings_tracing_body_text">"Exposure logging works by your device receiving, via Bluetooth, encrypted random IDs of other users and passing your random ID to their devices. This feature can be deactivated at any time. "<xliff:g id="line_break">"\n"</xliff:g><xliff:g id="line_break">"\n"</xliff:g>"Encrypted random IDs only pass information about date, duration, and proximity (calculated using signal strength) to other people. Personal data such as name, address, and location is never recorded. Individuals cannot be identified."</string> <!-- XTXT: settings(tracing) - status next to switch under title --> diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelperTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelperTest.kt index cc70f7911..386d94615 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelperTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/FormatterSettingsHelperTest.kt @@ -72,6 +72,7 @@ class FormatterSettingsHelperTest { bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, + bLocation: Boolean, iValue: Int ) { every { context.getString(R.string.settings_tracing_status_restricted) } returns R.string.settings_tracing_status_restricted.toString() @@ -81,7 +82,8 @@ class FormatterSettingsHelperTest { val result = formatTracingStatusText( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat(result, `is`((context.getString(iValue)))) } @@ -90,17 +92,21 @@ class FormatterSettingsHelperTest { bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, + bLocation: Boolean, iValue: Int ) { every { context.getString(R.string.settings_tracing_body_bluetooth_inactive) } returns R.string.settings_tracing_body_bluetooth_inactive.toString() every { context.getString(R.string.settings_tracing_body_connection_inactive) } returns R.string.settings_tracing_body_connection_inactive.toString() every { context.getString(R.string.settings_tracing_body_active) } returns R.string.settings_tracing_body_active.toString() every { context.getString(R.string.settings_tracing_body_inactive) } returns R.string.settings_tracing_body_inactive.toString() + every { context.getString(R.string.settings_tracing_body_inactive_location) } returns R.string.settings_tracing_body_inactive_location.toString() val result = formatTracingDescription( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation + ) assertThat(result, `is`((context.getString(iValue)))) } @@ -109,18 +115,21 @@ class FormatterSettingsHelperTest { bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, + bLocation: Boolean, sValue: String ) { every { context.getString(R.string.settings_tracing_body_bluetooth_inactive) } returns R.string.settings_tracing_body_bluetooth_inactive.toString() every { context.getString(R.string.settings_tracing_body_connection_inactive) } returns R.string.settings_tracing_body_connection_inactive.toString() every { context.getString(R.string.settings_tracing_body_active) } returns R.string.settings_tracing_body_active.toString() every { context.getString(R.string.settings_tracing_body_inactive) } returns R.string.settings_tracing_body_inactive.toString() + every { context.getString(R.string.settings_tracing_body_inactive_location) } returns R.string.settings_tracing_body_inactive_location.toString() every { context.getString(R.string.accessibility_button) } returns R.string.accessibility_button.toString() val result = formatTracingContentDescription( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat( result, `is`(sValue) @@ -166,12 +175,14 @@ class FormatterSettingsHelperTest { bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, + bLocation: Boolean, bValue: Boolean ) { val result = formatTracingSwitch( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat( result, `is`(bValue) @@ -182,12 +193,14 @@ class FormatterSettingsHelperTest { bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, + bLocation: Boolean, bValue: Boolean ) { val result = formatTracingSwitchEnabled( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat( result, `is`(bValue) @@ -197,15 +210,16 @@ class FormatterSettingsHelperTest { private fun formatTracingIconBase( bTracing: Boolean, bBluetooth: Boolean, - bConnection: Boolean - ) { + bConnection: Boolean, + bLocation: Boolean + ) { every { context.getDrawable(R.drawable.ic_settings_tracing_bluetooth_inactive) } returns drawable every { context.getDrawable(R.drawable.ic_settings_tracing_connection_inactive) } returns drawable every { context.getDrawable(R.drawable.ic_settings_tracing_active) } returns drawable every { context.getDrawable(R.drawable.ic_settings_tracing_inactive) } returns drawable val result = - formatTracingIcon(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection) + formatTracingIcon(tracing = bTracing, bluetooth = bBluetooth, connection = bConnection, location = bLocation) assertThat( result, CoreMatchers.isA(Int::class.java) ) @@ -215,6 +229,7 @@ class FormatterSettingsHelperTest { bTracing: Boolean, bBluetooth: Boolean, bConnection: Boolean, + bLocation: Boolean, iColor: Int ) { every { context.getColor(R.color.colorAccentTintIcon) } returns R.color.colorAccentTintIcon @@ -223,7 +238,8 @@ class FormatterSettingsHelperTest { val result = formatTracingIconColor( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat( result, `is`(context.getColor(iColor)) @@ -233,8 +249,9 @@ class FormatterSettingsHelperTest { private fun formatTracingStatusImageBase( bTracing: Boolean, bBluetooth: Boolean, - bConnection: Boolean - ) { + bConnection: Boolean, + bLocation: Boolean + ) { every { context.getDrawable(R.drawable.ic_settings_illustration_bluetooth_off) } returns drawable every { context.getDrawable(R.drawable.ic_settings_illustration_connection_off) } returns drawable every { context.getDrawable(R.drawable.ic_illustration_tracing_on) } returns drawable @@ -243,7 +260,8 @@ class FormatterSettingsHelperTest { val result = formatTracingStatusImage( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat( result, `is`(CoreMatchers.equalTo(drawable)) @@ -253,12 +271,14 @@ class FormatterSettingsHelperTest { private fun formatTracingStatusConnectionBase( bTracing: Boolean, bBluetooth: Boolean, - bConnection: Boolean - ) { + bConnection: Boolean, + bLocation: Boolean + ) { val result = formatTracingStatusConnection( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat(true, `is`(result > -1)) } @@ -266,13 +286,15 @@ class FormatterSettingsHelperTest { private fun formatTracingStatusVisibilityTracingBase( bTracing: Boolean, bBluetooth: Boolean, - bConnection: Boolean - ) { + bConnection: Boolean, + bLocation: Boolean + ) { val result = formatTracingStatusVisibilityTracing( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat(true, `is`(result > -1)) } @@ -280,13 +302,15 @@ class FormatterSettingsHelperTest { private fun formatTracingStatusVisibilityBluetoothBase( bTracing: Boolean, bBluetooth: Boolean, - bConnection: Boolean - ) { + bConnection: Boolean, + bLocation: Boolean + ) { val result = formatTracingStatusVisibilityBluetooth( tracing = bTracing, bluetooth = bBluetooth, - connection = bConnection + connection = bConnection, + location = bLocation ) assertThat(true, `is`(result > -1)) } @@ -382,203 +406,263 @@ class FormatterSettingsHelperTest { @Test fun formatTracingStatusText() { - // When tracing is true, bluetooth is true, connection is true + // When tracing is true, bluetooth is true, connection is true, location is true formatTracingStatusBase( bTracing = true, bBluetooth = true, bConnection = true, + bLocation = true, iValue = R.string.settings_tracing_status_active ) - // When tracing is false, bluetooth is false, connection is false + // When tracing is false, bluetooth is false, connection is false, location is false formatTracingStatusBase( bTracing = false, bBluetooth = false, bConnection = false, + bLocation = false, iValue = R.string.settings_tracing_status_inactive ) - // When tracing is true, bluetooth is false, connection is false + // When tracing is true, bluetooth is false, connection is false, location is true formatTracingStatusBase( bTracing = true, bBluetooth = false, bConnection = false, + bLocation = true, iValue = R.string.settings_tracing_status_restricted ) - // When tracing is true, bluetooth is true, connection is false + // When tracing is true, bluetooth is true, connection is false, location is true formatTracingStatusBase( bTracing = true, bBluetooth = true, bConnection = false, + bLocation = true, iValue = R.string.settings_tracing_status_restricted ) - // When tracing is false, bluetooth is true, connection is false + // When tracing is false, bluetooth is true, connection is false, location is false formatTracingStatusBase( bTracing = false, bBluetooth = true, bConnection = false, + bLocation = false, iValue = R.string.settings_tracing_status_inactive ) - // When tracing is false, bluetooth is true, connection is true + // When tracing is false, bluetooth is true, connection is true, location is true formatTracingStatusBase( bTracing = false, bBluetooth = true, bConnection = true, + bLocation = true, iValue = R.string.settings_tracing_status_inactive ) - // When tracing is true, bluetooth is false, connection is true + // When tracing is true, bluetooth is false, connection is true, location is true formatTracingStatusBase( bTracing = true, bBluetooth = false, bConnection = true, + bLocation = true, iValue = R.string.settings_tracing_status_restricted ) - // When tracing is false, bluetooth is false, connection is true + // When tracing is false, bluetooth is false, connection is true, location is true formatTracingStatusBase( bTracing = false, bBluetooth = false, bConnection = true, + bLocation = true, iValue = R.string.settings_tracing_status_inactive ) } @Test fun formatTracingDescription() { - // When tracing is true, bluetooth is true, connection is true + // When tracing is true, bluetooth is true, connection is true, location is true formatTracingDescriptionBase( bTracing = true, bBluetooth = true, bConnection = true, + bLocation = true, iValue = R.string.settings_tracing_body_active ) - // When tracing is false, bluetooth is false, connection is false + // When tracing is false, bluetooth is false, connection is false, location is false formatTracingDescriptionBase( bTracing = false, bBluetooth = false, bConnection = false, - iValue = R.string.settings_tracing_body_inactive + bLocation = false, + iValue = R.string.settings_tracing_body_inactive_location ) - // When tracing is true, bluetooth is false, connection is false + // When tracing is true, bluetooth is false, connection is false, location is true formatTracingDescriptionBase( bTracing = true, bBluetooth = false, bConnection = false, - iValue = R.string.settings_tracing_body_bluetooth_inactive + bLocation = true, + iValue = R.string.settings_tracing_body_connection_inactive ) - // When tracing is true, bluetooth is true, connection is false + // When tracing is true, bluetooth is true, connection is false, location is true formatTracingDescriptionBase( bTracing = true, bBluetooth = true, bConnection = false, + bLocation = true, iValue = R.string.settings_tracing_body_connection_inactive ) - // When tracing is false, bluetooth is true, connection is false + // When tracing is false, bluetooth is true, connection is false, location is true formatTracingDescriptionBase( bTracing = false, bBluetooth = true, bConnection = false, + bLocation = true, iValue = R.string.settings_tracing_body_inactive ) - // When tracing is false, bluetooth is true, connection is true + // When tracing is false, bluetooth is true, connection is true, location is true formatTracingDescriptionBase( bTracing = false, bBluetooth = true, bConnection = true, + bLocation = true, iValue = R.string.settings_tracing_body_inactive ) - // When tracing is true, bluetooth is false, connection is true + // When tracing is true, bluetooth is false, connection is true, location is true formatTracingDescriptionBase( bTracing = true, bBluetooth = false, bConnection = true, + bLocation = true, iValue = R.string.settings_tracing_body_bluetooth_inactive ) - // When tracing is false, bluetooth is false, connection is true + // When tracing is false, bluetooth is false, connection is true, location is true formatTracingDescriptionBase( bTracing = false, bBluetooth = false, bConnection = true, + bLocation = true, iValue = R.string.settings_tracing_body_inactive ) + + // When tracing is true, bluetooth is true, connection is true, location is false + formatTracingDescriptionBase( + bTracing = true, + bBluetooth = true, + bConnection = true, + bLocation = false, + iValue = R.string.settings_tracing_body_inactive_location + ) + + // When tracing is false, bluetooth is true, connection is true, location is false + formatTracingDescriptionBase( + bTracing = false, + bBluetooth = true, + bConnection = true, + bLocation = false, + iValue = R.string.settings_tracing_body_inactive_location + ) } @Test fun formatTracingContentDescription() { - // When tracing is true, bluetooth is true, connection is true + // When tracing is true, bluetooth is true, connection is true, location is true formatTracingContentDescriptionBase( bTracing = true, bBluetooth = true, bConnection = true, + bLocation = true, sValue = R.string.settings_tracing_body_active.toString() + " " + R.string.accessibility_button.toString() ) - // When tracing is false, bluetooth is false, connection is false + // When tracing is false, bluetooth is false, connection is false, location is true formatTracingContentDescriptionBase( bTracing = false, bBluetooth = false, bConnection = false, + bLocation = true, sValue = R.string.settings_tracing_body_inactive.toString() + " " + R.string.accessibility_button.toString() ) - // When tracing is true, bluetooth is false, connection is false + // When tracing is true, bluetooth is false, connection is false, location is true formatTracingContentDescriptionBase( bTracing = true, bBluetooth = false, bConnection = false, - sValue = R.string.settings_tracing_body_bluetooth_inactive.toString() + " " + R.string.accessibility_button.toString() + bLocation = true, + sValue = R.string.settings_tracing_body_connection_inactive.toString() + " " + R.string.accessibility_button.toString() ) - // When tracing is true, bluetooth is true, connection is false + // When tracing is true, bluetooth is true, connection is false, location is true formatTracingContentDescriptionBase( bTracing = true, bBluetooth = true, bConnection = false, + bLocation = true, sValue = R.string.settings_tracing_body_connection_inactive.toString() + " " + R.string.accessibility_button.toString() ) - // When tracing is false, bluetooth is true, connection is false + // When tracing is false, bluetooth is true, connection is false, location is true formatTracingContentDescriptionBase( bTracing = false, bBluetooth = true, bConnection = false, + bLocation = true, sValue = R.string.settings_tracing_body_inactive.toString() + " " + R.string.accessibility_button.toString() ) - // When tracing is false, bluetooth is true, connection is true + // When tracing is false, bluetooth is true, connection is true, location is true formatTracingContentDescriptionBase( bTracing = false, bBluetooth = true, bConnection = true, + bLocation = true, sValue = R.string.settings_tracing_body_inactive.toString() + " " + R.string.accessibility_button.toString() ) - // When tracing is true, bluetooth is false, connection is true + // When tracing is true, bluetooth is false, connection is true, location is true formatTracingContentDescriptionBase( bTracing = true, bBluetooth = false, bConnection = true, + bLocation = true, sValue = R.string.settings_tracing_body_bluetooth_inactive.toString() + " " + R.string.accessibility_button.toString() ) - // When tracing is false, bluetooth is false, connection is true + // When tracing is false, bluetooth is false, connection is true, location is true formatTracingContentDescriptionBase( bTracing = false, bBluetooth = false, bConnection = true, + bLocation = true, sValue = R.string.settings_tracing_body_inactive.toString() + " " + R.string.accessibility_button.toString() ) + + // When tracing is false, bluetooth is true, connection is true, location is false + formatTracingContentDescriptionBase( + bTracing = false, + bBluetooth = true, + bConnection = true, + bLocation = false, + sValue = R.string.settings_tracing_body_inactive_location.toString() + " " + R.string.accessibility_button.toString() + ) + + // When tracing is true, bluetooth is true, connection is true, location is false + formatTracingContentDescriptionBase( + bTracing = true, + bBluetooth = true, + bConnection = true, + bLocation = false, + sValue = R.string.settings_tracing_body_inactive_location.toString() + " " + R.string.accessibility_button.toString() + ) } @Test @@ -614,6 +698,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = true, bConnection = true, + bLocation = true, bValue = true ) @@ -621,6 +706,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = false, bConnection = false, + bLocation = true, bValue = false ) @@ -628,6 +714,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = false, bConnection = true, + bLocation = true, bValue = false ) @@ -635,6 +722,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = true, bConnection = false, + bLocation = true, bValue = false ) @@ -642,6 +730,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = true, bConnection = true, + bLocation = true, bValue = false ) @@ -649,6 +738,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = false, bConnection = false, + bLocation = true, bValue = false ) @@ -656,6 +746,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = false, bConnection = true, + bLocation = true, bValue = false ) @@ -663,6 +754,23 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = true, bConnection = false, + bLocation = true, + bValue = false + ) + + formatTracingSwitchBase( + bTracing = false, + bBluetooth = true, + bConnection = true, + bLocation = false, + bValue = false + ) + + formatTracingSwitchBase( + bTracing = true, + bBluetooth = true, + bConnection = true, + bLocation = false, bValue = false ) } @@ -674,6 +782,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = true, bConnection = true, + bLocation = true, bValue = true ) @@ -681,6 +790,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = false, bConnection = false, + bLocation = true, bValue = true ) @@ -688,6 +798,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = false, bConnection = true, + bLocation = true, bValue = true ) @@ -695,6 +806,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = true, bConnection = false, + bLocation = true, bValue = true ) @@ -702,6 +814,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = true, bConnection = true, + bLocation = true, bValue = true ) @@ -709,6 +822,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = false, bConnection = false, + bLocation = true, bValue = false ) @@ -716,6 +830,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = false, bConnection = true, + bLocation = true, bValue = false ) @@ -723,27 +838,30 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = true, bConnection = false, + bLocation = true, bValue = false ) } @Test fun formatTracingIcon() { - formatTracingIconBase(bTracing = true, bBluetooth = true, bConnection = true) + formatTracingIconBase(bTracing = true, bBluetooth = true, bConnection = true, bLocation = true) + + formatTracingIconBase(bTracing = false, bBluetooth = false, bConnection = false, bLocation = true) - formatTracingIconBase(bTracing = false, bBluetooth = false, bConnection = false) + formatTracingIconBase(bTracing = false, bBluetooth = false, bConnection = true, bLocation = true) - formatTracingIconBase(bTracing = false, bBluetooth = false, bConnection = true) + formatTracingIconBase(bTracing = false, bBluetooth = true, bConnection = false, bLocation = true) - formatTracingIconBase(bTracing = false, bBluetooth = true, bConnection = false) + formatTracingIconBase(bTracing = false, bBluetooth = true, bConnection = true, bLocation = true) - formatTracingIconBase(bTracing = false, bBluetooth = true, bConnection = true) + formatTracingIconBase(bTracing = true, bBluetooth = false, bConnection = false, bLocation = true) - formatTracingIconBase(bTracing = true, bBluetooth = false, bConnection = false) + formatTracingIconBase(bTracing = true, bBluetooth = false, bConnection = true, bLocation = true) - formatTracingIconBase(bTracing = true, bBluetooth = false, bConnection = true) + formatTracingIconBase(bTracing = true, bBluetooth = true, bConnection = false, bLocation = true) - formatTracingIconBase(bTracing = true, bBluetooth = true, bConnection = false) + formatTracingIconBase(bTracing = true, bBluetooth = true, bConnection = true, bLocation = false) } @Test @@ -753,6 +871,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = true, bConnection = true, + bLocation = true, iColor = R.color.colorAccentTintIcon ) @@ -760,6 +879,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = false, bConnection = false, + bLocation = true, iColor = R.color.colorTextSemanticRed ) @@ -767,6 +887,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = false, bConnection = true, + bLocation = true, iColor = R.color.colorTextSemanticRed ) @@ -774,6 +895,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = true, bConnection = false, + bLocation = true, iColor = R.color.colorTextSemanticRed ) @@ -781,6 +903,7 @@ class FormatterSettingsHelperTest { bTracing = false, bBluetooth = true, bConnection = true, + bLocation = true, iColor = R.color.colorTextSemanticRed ) @@ -788,6 +911,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = false, bConnection = false, + bLocation = true, iColor = R.color.colorTextSemanticRed ) @@ -795,6 +919,7 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = false, bConnection = true, + bLocation = true, iColor = R.color.colorTextSemanticRed ) @@ -802,46 +927,55 @@ class FormatterSettingsHelperTest { bTracing = true, bBluetooth = true, bConnection = false, + bLocation = true, + iColor = R.color.colorTextSemanticRed + ) + + formatTracingIconColorBase( + bTracing = true, + bBluetooth = true, + bConnection = true, + bLocation = false, iColor = R.color.colorTextSemanticRed ) } @Test fun formatTracingStatusImage() { - formatTracingStatusImageBase(bTracing = true, bBluetooth = true, bConnection = true) + formatTracingStatusImageBase(bTracing = true, bBluetooth = true, bConnection = true, bLocation = true) - formatTracingStatusImageBase(bTracing = false, bBluetooth = false, bConnection = false) + formatTracingStatusImageBase(bTracing = false, bBluetooth = false, bConnection = false, bLocation = true) - formatTracingStatusImageBase(bTracing = false, bBluetooth = false, bConnection = true) + formatTracingStatusImageBase(bTracing = false, bBluetooth = false, bConnection = true, bLocation = true) - formatTracingStatusImageBase(bTracing = false, bBluetooth = true, bConnection = false) + formatTracingStatusImageBase(bTracing = false, bBluetooth = true, bConnection = false, bLocation = true) - formatTracingStatusImageBase(bTracing = false, bBluetooth = true, bConnection = true) + formatTracingStatusImageBase(bTracing = false, bBluetooth = true, bConnection = true, bLocation = true) - formatTracingStatusImageBase(bTracing = true, bBluetooth = false, bConnection = false) + formatTracingStatusImageBase(bTracing = true, bBluetooth = false, bConnection = false, bLocation = true) - formatTracingStatusImageBase(bTracing = true, bBluetooth = false, bConnection = true) + formatTracingStatusImageBase(bTracing = true, bBluetooth = false, bConnection = true, bLocation = true) - formatTracingStatusImageBase(bTracing = true, bBluetooth = true, bConnection = false) + formatTracingStatusImageBase(bTracing = true, bBluetooth = true, bConnection = false, bLocation = true) } @Test fun formatTracingStatusConnection() { - formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = true) + formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = true, bLocation = true) - formatTracingStatusConnectionBase(bTracing = false, bBluetooth = false, bConnection = false) + formatTracingStatusConnectionBase(bTracing = false, bBluetooth = false, bConnection = false, bLocation = true) - formatTracingStatusConnectionBase(bTracing = false, bBluetooth = false, bConnection = true) + formatTracingStatusConnectionBase(bTracing = false, bBluetooth = false, bConnection = true, bLocation = true) - formatTracingStatusConnectionBase(bTracing = false, bBluetooth = true, bConnection = false) + formatTracingStatusConnectionBase(bTracing = false, bBluetooth = true, bConnection = false, bLocation = true) - formatTracingStatusConnectionBase(bTracing = false, bBluetooth = true, bConnection = true) + formatTracingStatusConnectionBase(bTracing = false, bBluetooth = true, bConnection = true, bLocation = true) - formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = false) + formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = false, bLocation = true) - formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = true) + formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = true, bLocation = true) - formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = false) + formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = false, bLocation = true) } @Test @@ -849,42 +983,48 @@ class FormatterSettingsHelperTest { formatTracingStatusVisibilityBluetoothBase( bTracing = true, bBluetooth = true, - bConnection = true + bConnection = true, + bLocation = true ) formatTracingStatusVisibilityBluetoothBase( bTracing = false, bBluetooth = false, - bConnection = false + bConnection = false, + bLocation = true ) formatTracingStatusVisibilityBluetoothBase( bTracing = false, bBluetooth = false, - bConnection = true + bConnection = true, + bLocation = true ) formatTracingStatusVisibilityBluetoothBase( bTracing = false, bBluetooth = true, - bConnection = false + bConnection = false, + bLocation = true ) formatTracingStatusVisibilityBluetoothBase( bTracing = false, bBluetooth = true, - bConnection = true + bConnection = true, + bLocation = true ) formatTracingStatusVisibilityBluetoothBase( bTracing = true, bBluetooth = false, - bConnection = false + bConnection = false, + bLocation = true ) - formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = true) + formatTracingStatusConnectionBase(bTracing = true, bBluetooth = false, bConnection = true, bLocation = true) - formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = false) + formatTracingStatusConnectionBase(bTracing = true, bBluetooth = true, bConnection = false, bLocation = true) } @Test @@ -892,49 +1032,57 @@ class FormatterSettingsHelperTest { formatTracingStatusVisibilityTracingBase( bTracing = true, bBluetooth = true, - bConnection = true + bConnection = true, + bLocation = true ) formatTracingStatusVisibilityTracingBase( bTracing = false, bBluetooth = false, - bConnection = false + bConnection = false, + bLocation = true ) formatTracingStatusVisibilityTracingBase( bTracing = false, bBluetooth = false, - bConnection = true + bConnection = true, + bLocation = true ) formatTracingStatusVisibilityTracingBase( bTracing = false, bBluetooth = true, - bConnection = false + bConnection = false, + bLocation = true ) formatTracingStatusVisibilityTracingBase( bTracing = false, bBluetooth = true, - bConnection = true + bConnection = true, + bLocation = true ) formatTracingStatusVisibilityTracingBase( bTracing = true, bBluetooth = false, - bConnection = false + bConnection = false, + bLocation = true ) formatTracingStatusVisibilityTracingBase( bTracing = true, bBluetooth = false, - bConnection = true + bConnection = true, + bLocation = true ) formatTracingStatusVisibilityTracingBase( bTracing = true, bBluetooth = true, - bConnection = false + bConnection = false, + bLocation = true ) } diff --git a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelperTest.kt b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelperTest.kt index 203c77231..ddebea547 100644 --- a/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelperTest.kt +++ b/Corona-Warn-App/src/test/java/de/rki/coronawarnapp/util/formatter/TracingStatusHelperTest.kt @@ -8,49 +8,55 @@ class TracingStatusHelperTest { @Test fun testTracingActiveAllOn() { - val result = tracingStatusHelper(tracing = true, bluetooth = true, connection = true) + val result = tracingStatusHelper(tracing = true, bluetooth = true, connection = true, location = true) assertThat(result, `is`((TracingStatusHelper.TRACING_ACTIVE))) } @Test fun testTracingInactiveWhenAllOff() { - val result = tracingStatusHelper(tracing = false, bluetooth = false, connection = false) + val result = tracingStatusHelper(tracing = false, bluetooth = false, connection = false, location = true) assertThat(result, `is`((TracingStatusHelper.TRACING_INACTIVE))) } @Test fun testTracingInactiveWhenTracingOffBluetoothOffConnectionOn() { - val result = tracingStatusHelper(tracing = false, bluetooth = false, connection = true) + val result = tracingStatusHelper(tracing = false, bluetooth = false, connection = true, location = true) assertThat(result, `is`((TracingStatusHelper.TRACING_INACTIVE))) } @Test fun testTracingInactiveWhenTracingOffBluetoothOnConnectionOff() { - val result = tracingStatusHelper(tracing = false, bluetooth = true, connection = false) + val result = tracingStatusHelper(tracing = false, bluetooth = true, connection = false, location = true) assertThat(result, `is`((TracingStatusHelper.TRACING_INACTIVE))) } @Test fun testTracingInactiveWhenTracingOffBluetoothOnConnectionOn() { - val result = tracingStatusHelper(tracing = false, bluetooth = true, connection = true) + val result = tracingStatusHelper(tracing = false, bluetooth = true, connection = true, location = true) assertThat(result, `is`((TracingStatusHelper.TRACING_INACTIVE))) } @Test fun testBluetoothInactiveWhenTracingOnBluetoothOffConnectionOn() { - val result = tracingStatusHelper(tracing = true, bluetooth = false, connection = true) + val result = tracingStatusHelper(tracing = true, bluetooth = false, connection = true, location = true) assertThat(result, `is`((TracingStatusHelper.BLUETOOTH))) } @Test - fun testBluetoothInactiveWhenTracingOnBluetoothOffConnectionOff() { - val result = tracingStatusHelper(tracing = true, bluetooth = false, connection = false) - assertThat(result, `is`((TracingStatusHelper.BLUETOOTH))) + fun testConnectionInactiveWhenTracingOnBluetoothOffConnectionOff() { + val result = tracingStatusHelper(tracing = true, bluetooth = true, connection = false, location = true) + assertThat(result, `is`((TracingStatusHelper.CONNECTION))) } @Test - fun testConnectionInactiveWhenTracingOnBluetoothOffConnectionOff() { - val result = tracingStatusHelper(tracing = true, bluetooth = true, connection = false) - assertThat(result, `is`((TracingStatusHelper.CONNECTION))) + fun testConnectionInactiveWhenTracingOffBluetoothOnConnectionOnLocationOff() { + val result = tracingStatusHelper(tracing = false, bluetooth = true, connection = true, location = false) + assertThat(result, `is`((TracingStatusHelper.LOCATION))) + } + + @Test + fun testConnectionInactiveWhenTracingOnBluetoothOnConnectionOnLocationOff() { + val result = tracingStatusHelper(tracing = true, bluetooth = true, connection = true, location = false) + assertThat(result, `is`((TracingStatusHelper.LOCATION))) } } -- GitLab