From 6492707ee2dc59edf0225c4f88d69ea96d7a4e63 Mon Sep 17 00:00:00 2001
From: Oliver Zimmerman <oezimmerman@gmail.com>
Date: Tue, 21 Jul 2020 16:56:28 +0100
Subject: [PATCH] Added location state in tracing card screen
 (EXPOSUREAPP-1757) (#879)

* 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

* Create ic_illustration_location_off.xml

* Added location state in tracing card screen

- Edited FormatterSettingsHelper.kt to include a visibility formatter based on location state.
- Edited SettingsTracingFragment.kt included a listener for location settings button.
- Added illustration for location missing in tracing screen.
- Edited fragment_settings_tracing.xml so that if location isn't on, a card explaining it should be turned on appears.
- Edited strings values to include required strings for card.

* Update strings.xml

* Updated strings for translation, keeping only confirmed DE and blank base string values

Updated strings for translation, keeping only confirmed DE and blank base string values

Co-authored-by: Philipp Woessner <64482866+pwoessner@users.noreply.github.com>
---
 .../ui/settings/SettingsTracingFragment.kt    |   4 +
 .../util/formatter/FormatterSettingsHelper.kt |  28 ++
 .../ic_settings_illustration_location_off.xml | 266 ++++++++++++++++++
 .../res/layout/fragment_settings_tracing.xml  |  14 +
 .../src/main/res/values-de/strings.xml        |   8 +
 .../src/main/res/values/strings.xml           |  11 +-
 6 files changed, 330 insertions(+), 1 deletion(-)
 create mode 100644 Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_location_off.xml

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 449c85244..435bc96ea 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
@@ -101,6 +101,7 @@ class SettingsTracingFragment : Fragment(),
         val back = binding.settingsTracingHeader.headerButtonBack.buttonIcon
         val bluetooth = binding.settingsTracingStatusBluetooth.tracingStatusCardButton
         val connection = binding.settingsTracingStatusConnection.tracingStatusCardButton
+        val location = binding.settingsTracingStatusLocation.tracingStatusCardButton
         internalExposureNotificationPermissionHelper =
             InternalExposureNotificationPermissionHelper(this, this)
         switch.setOnCheckedChangeListener { _, _ ->
@@ -136,6 +137,9 @@ class SettingsTracingFragment : Fragment(),
         bluetooth.setOnClickListener {
             ExternalActionHelper.toMainSettings(requireContext())
         }
+        location.setOnClickListener {
+            ExternalActionHelper.toMainSettings(requireContext())
+        }
         connection.setOnClickListener {
             ExternalActionHelper.toConnections(requireContext())
         }
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 17a7a340c..9ab4d7e70 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
@@ -195,6 +195,8 @@ fun formatTracingIllustrationText(
             appContext.getString(R.string.settings_tracing_connection_illustration_description_inactive)
         TracingStatusHelper.BLUETOOTH ->
             appContext.getString(R.string.settings_tracing_bluetooth_illustration_description_inactive)
+        TracingStatusHelper.LOCATION ->
+            appContext.getString(R.string.settings_tracing_location_illustration_description_inactive)
         TracingStatusHelper.TRACING_ACTIVE ->
             appContext.getString(R.string.settings_tracing_illustration_description_active)
         TracingStatusHelper.TRACING_INACTIVE ->
@@ -424,6 +426,8 @@ fun formatTracingStatusImage(tracing: Boolean, bluetooth: Boolean, connection: B
             appContext.getDrawable(R.drawable.ic_settings_illustration_bluetooth_off)
         TracingStatusHelper.CONNECTION ->
             appContext.getDrawable(R.drawable.ic_settings_illustration_connection_off)
+        TracingStatusHelper.LOCATION ->
+            appContext.getDrawable(R.drawable.ic_settings_illustration_location_off)
         TracingStatusHelper.TRACING_ACTIVE ->
             appContext.getDrawable(R.drawable.ic_illustration_tracing_on)
         else ->
@@ -474,6 +478,30 @@ fun formatTracingStatusVisibilityBluetooth(
         ) == TracingStatusHelper.BLUETOOTH
     )
 
+/**
+ * Change the visibility of the location card based on the tracing status.
+ *
+ * @param tracing
+ * @param bluetooth
+ * @param connection
+ * @param location
+ * @return Int
+ */
+fun formatTracingStatusVisibilityLocation(
+    tracing: Boolean,
+    bluetooth: Boolean,
+    connection: Boolean,
+    location: Boolean
+): Int =
+    formatVisibility(
+        tracingStatusHelper(
+            tracing,
+            bluetooth,
+            connection,
+            location
+        ) == TracingStatusHelper.LOCATION
+    )
+
 /**
  * Change the visibility of the tracing text based on the tracing status.
  *
diff --git a/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_location_off.xml b/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_location_off.xml
new file mode 100644
index 000000000..8e885f982
--- /dev/null
+++ b/Corona-Warn-App/src/main/res/drawable/ic_settings_illustration_location_off.xml
@@ -0,0 +1,266 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="360dp"
+    android:height="220dp"
+    android:viewportWidth="360"
+    android:viewportHeight="220">
+  <group>
+    <clip-path
+        android:pathData="M0.25,0h359.75v220h-359.75z"/>
+    <path
+        android:pathData="M187.374,219.093C186.692,211.443 186.21,203.784 185.287,196.141C183.357,180.233 180.713,164.424 178.393,148.565C170.318,147.526 164.696,146.836 164.696,146.836C164.696,146.836 149.836,144.466 149.628,151.276C149.42,158.087 166.177,161.538 166.177,161.538L167.532,161.538L168.73,171.443C168.73,171.443 155.649,187.243 156.588,192.515C157.528,197.788 165.736,195.493 165.736,195.493C165.736,195.493 160.913,209.871 164.613,213.663C167.324,216.449 170.06,215.226 170.06,215.226C170.06,215.226 163.199,221.447 166.293,226.985C167.648,229.422 175.64,230.129 175.64,230.129L188.555,229.721C187.703,226.245 187.311,222.672 187.391,219.093"
+        android:strokeWidth="1"
+        android:fillColor="#F7B994"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M191.815,258.877C186.936,259.559 182.427,256.162 181.736,251.285L164.937,131.759C164.256,126.88 167.653,122.371 172.53,121.68L220.438,114.952C225.318,114.266 229.831,117.665 230.517,122.545L247.316,242.062C247.997,246.944 244.596,251.454 239.715,252.141L191.815,258.877Z"
+        android:strokeWidth="1"
+        android:fillColor="#FFFFFF"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M240.269,252.045L192.36,258.781C187.481,259.462 182.972,256.06 182.29,251.18L165.491,131.663C165.159,129.319 165.773,126.94 167.197,125.049C168.622,123.158 170.74,121.911 173.084,121.584L220.984,114.848C225.863,114.166 230.372,117.563 231.063,122.44L247.853,241.941C248.19,244.287 247.58,246.671 246.157,248.567C244.734,250.462 242.616,251.714 240.269,252.045Z"
+        android:strokeWidth="3.351348"
+        android:fillColor="#00000000"
+        android:strokeColor="#4A4A4A"
+        android:fillType="evenOdd"/>
+    <path
+        android:pathData="M284.397,207.775C284.397,207.775 278.035,206.112 271.54,196.416C265.046,186.719 259.066,163.459 254.784,160.973C254.784,160.973 253.212,140.657 242.784,139.127C242.784,139.127 239.457,124.416 238.376,124.382C237.295,124.349 231.607,124.208 229.894,131.384C228.181,138.561 230.393,151.742 237.204,155.567C237.204,155.567 249.137,239.742 249.154,239.991C249.486,246.769 248.813,246.42 247.898,248.732C256.014,250.777 299.274,263.825 334.85,274.636L334.85,219.11L284.397,207.775Z"
+        android:strokeWidth="1"
+        android:fillColor="#F7B994"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M273.65,57.454C273.547,59.088 272.138,60.311 270.528,60.214C268.919,60.117 267.674,58.734 267.777,57.1C267.88,55.467 269.289,54.244 270.899,54.34C272.509,54.437 273.753,55.82 273.65,57.454Z"
+        android:strokeWidth="1.47107172"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"/>
+    <path
+        android:pathData="M286.863,58.512C286.301,67.579 278.605,74.465 269.698,73.919C260.789,73.373 254.002,65.599 254.564,56.532C255.126,47.466 262.822,40.58 271.73,41.126C280.637,41.672 287.425,49.446 286.863,58.512Z"
+        android:strokeAlpha="0.35999998"
+        android:strokeWidth="1.47107172"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"
+        android:fillAlpha="0.35999998"/>
+    <path
+        android:pathData="M291.267,58.518C290.552,69.886 280.758,78.519 269.42,77.834C258.083,77.149 249.445,67.403 250.16,56.036C250.875,44.669 260.669,36.036 272.007,36.72C283.344,37.405 291.982,47.151 291.267,58.518Z"
+        android:strokeAlpha="0.14"
+        android:strokeWidth="1.47107172"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"
+        android:fillAlpha="0.14"/>
+    <path
+        android:pathData="M295.508,58.775C294.646,72.488 282.83,82.902 269.154,82.076C255.477,81.25 245.056,69.492 245.919,55.779C246.781,42.067 258.597,31.652 272.273,32.478C285.95,33.304 296.371,45.062 295.508,58.775Z"
+        android:strokeAlpha="0.04"
+        android:strokeWidth="1.47107172"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"
+        android:fillAlpha="0.04"/>
+    <path
+        android:pathData="M282.458,58.246C282.049,64.881 276.45,69.913 269.974,69.514C263.499,69.115 258.56,63.433 258.969,56.799C259.378,50.164 264.978,45.132 271.453,45.531C277.928,45.93 282.867,51.612 282.458,58.246Z"
+        android:strokeAlpha="0.5"
+        android:strokeWidth="1.47107172"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"
+        android:fillAlpha="0.5"/>
+    <path
+        android:pathData="M278.005,57.694C277.75,61.747 274.257,64.813 270.228,64.57C266.2,64.327 263.118,60.864 263.373,56.811C263.628,52.758 267.121,49.692 271.15,49.935C275.178,50.178 278.26,53.641 278.005,57.694Z"
+        android:strokeWidth="1.47107172"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"/>
+    <path
+        android:pathData="M319.23,65.532C317.22,68.19 316.905,74.736 320.64,74.489C323.81,74.28 321.956,67.366 321.608,65.931C321.224,64.348 321.134,65.693 320.801,64.798"
+        android:strokeWidth="1"
+        android:fillColor="#FFC1AF"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M306.395,19.746l0.675,8.585l-7.909,0.641l-1.376,-9.127z"
+        android:strokeWidth="1"
+        android:fillColor="#F6B893"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M296.165,12.665C296.007,26.659 309.449,26.227 309.946,12.796C309.896,-0.922 296.474,-1.048 296.165,12.665"
+        android:strokeWidth="1"
+        android:fillColor="#F6B893"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M314.955,67.154C320.875,89.327 316.041,121.398 314.729,147.1L310.692,147.295C310.692,147.295 307.708,105.582 306.575,96.103C306.23,93.225 305.157,87.074 304.617,84.401C304.576,84.198 304.131,83.32 304.096,84.355C303.872,90.908 301.041,98.157 300.501,105.369C299.239,122.224 299.763,133.935 299.321,147.836C299.321,147.836 294.682,150.682 294.673,150.652C293.633,146.79 290.502,114.901 290.425,110.114C290.409,109.132 288.808,88.702 293.681,67.821L314.955,67.154Z"
+        android:strokeWidth="1"
+        android:fillColor="#385460"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M274.37,61.957C272.746,62.537 269.653,58.459 271.905,57.367C277.153,54.821 281.584,47.159 282.096,46.599C285.585,42.489 288.116,33.63 292.069,29.029C295.27,26.445 295.396,27.276 298.807,26.544C301.37,29.941 305.758,27.966 307.02,26.598C307.17,26.436 307.582,26.629 307.649,26.588C313.221,27.275 316.275,30.67 319.134,36.104C321.044,39.734 322.285,45.623 322.418,49.7C322.647,56.684 322.566,61.948 322.199,66.807C322.164,67.264 320.14,67.137 318.096,66.823C318.085,66.821 316.836,50.441 316.828,50.436C316.154,46.668 314.673,41.334 313.988,38.985C314.204,46.021 314.402,57.552 315.374,66.484C315.421,66.921 315.356,67.75 314.96,67.71C314.96,67.71 302.143,69.52 296.916,68.475C296.168,68.325 293.617,68.056 293.565,67.51C292.706,58.631 295.247,48.873 294.67,38.985C292.999,45.244 282.294,59.131 274.37,61.957"
+        android:strokeWidth="1"
+        android:fillColor="#E8A5A1"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M312.971,28.399C312.332,28.078 312.679,28.136 310.777,27.417C309.236,26.834 307.419,27.063 306.961,26.627C305.998,25.712 305.538,23.888 305.886,22.255C306.074,21.372 306.419,21.009 306.609,20.785C310.876,15.767 308.204,7.663 308.204,7.663C308.204,7.663 305.78,12.617 296.821,15.921C296.821,15.921 297.162,18.242 298.452,19.896C298.546,20.016 299.518,20.917 299.536,22.308C299.553,23.672 299.538,25.055 298.582,27.135C297.414,29.676 294.517,30.256 292.334,29.352C290.705,28.677 290.07,27.032 290.014,25.417C290.014,25.417 294.473,25.733 293.482,20.737C292.741,16.982 291.903,8.79 295.656,4.103C295.71,4.039 295.763,3.974 295.816,3.909C295.853,3.86 295.896,3.812 295.939,3.767C296.016,3.678 296.096,3.591 296.175,3.507C296.251,3.43 296.327,3.352 296.403,3.274C297.577,2.113 299.113,1.247 301.112,0.839C301.112,0.839 308.733,-0.117 309.989,4.358C309.989,4.358 312.075,5.434 312.293,9.372C312.507,13.311 311.832,14.744 311.665,17.761C311.464,21.428 311.482,24.736 316.23,24.76C316.23,24.76 315.78,26.898 312.971,28.399"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M275.699,64.809C275.72,65.327 275.243,65.724 274.729,65.649C273.357,65.45 270.659,64.579 270.536,64.613C269.66,64.96 267.157,54.196 266.99,53.563C266.941,53.377 266.995,53.171 267.21,52.913C267.42,52.661 267.753,52.549 268.075,52.61C268.86,52.758 270.992,53.16 271.882,53.328C272.229,53.394 272.528,53.613 272.692,53.926C273.834,56.112 275.672,64.272 275.698,64.796C275.699,64.801 275.699,64.805 275.699,64.809"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M268.063,58.353C268.505,57.978 268.845,59.546 269.583,59.681C269.905,59.74 270.23,59.842 270.538,59.981C271.299,60.326 271.863,60.992 272.17,61.769C274.287,67.123 264.478,65.023 268.063,58.353"
+        android:strokeWidth="1"
+        android:fillColor="#F6B893"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M310.539,143.409L314.38,144.178C314.805,145.869 318.079,153.218 314.379,154.907C312.924,155.749 311.798,156.52 310.214,154.974C306.815,152.994 310.474,144.786 310.539,143.409"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M299.294,145.279C299.182,146.152 300.125,152.348 299.225,152.925C298.932,153.268 298.588,153.409 298.428,153.464C293.75,153.547 288.418,153.642 283.741,153.725C281.098,150.91 294.153,149.894 293.859,145.235C295.671,145.25 297.482,145.264 299.294,145.279"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M102.344,81.408C102.235,83.14 100.741,84.437 99.035,84.334C97.329,84.232 96.01,82.766 96.119,81.034C96.228,79.302 97.722,78.006 99.428,78.108C101.134,78.211 102.453,79.677 102.344,81.408Z"
+        android:strokeWidth="1.55933603"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"/>
+    <path
+        android:pathData="M116.35,82.53C115.754,92.141 107.597,99.44 98.154,98.861C88.712,98.282 81.518,90.042 82.113,80.431C82.709,70.821 90.866,63.522 100.308,64.101C109.751,64.679 116.945,72.92 116.35,82.53Z"
+        android:strokeAlpha="0.35999998"
+        android:strokeWidth="1.55933603"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"
+        android:fillAlpha="0.35999998"/>
+    <path
+        android:pathData="M121.018,82.537C120.26,94.586 109.878,103.737 97.861,103.011C85.843,102.286 76.686,91.954 77.445,79.905C78.202,67.856 88.585,58.705 100.602,59.431C112.62,60.156 121.776,70.488 121.018,82.537Z"
+        android:strokeAlpha="0.14"
+        android:strokeWidth="1.55933603"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"
+        android:fillAlpha="0.14"/>
+    <path
+        android:pathData="M125.514,82.808C124.6,97.344 112.075,108.383 97.578,107.508C83.08,106.632 72.034,94.169 72.949,79.633C73.863,65.098 86.388,54.059 100.885,54.934C115.382,55.81 126.429,68.273 125.514,82.808Z"
+        android:strokeAlpha="0.04"
+        android:strokeWidth="1.55933603"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"
+        android:fillAlpha="0.04"/>
+    <path
+        android:pathData="M111.681,82.248C111.248,89.281 105.312,94.615 98.448,94.192C91.584,93.769 86.348,87.746 86.782,80.714C87.215,73.681 93.152,68.347 100.015,68.77C106.879,69.193 112.115,75.216 111.681,82.248Z"
+        android:strokeAlpha="0.5"
+        android:strokeWidth="1.55933603"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"
+        android:fillAlpha="0.5"/>
+    <path
+        android:pathData="M106.96,81.663C106.69,85.959 102.987,89.209 98.717,88.951C94.447,88.694 91.18,85.023 91.45,80.727C91.721,76.431 95.423,73.181 99.694,73.439C103.964,73.696 107.231,77.367 106.96,81.663Z"
+        android:strokeWidth="1.55933603"
+        android:fillColor="#00000000"
+        android:strokeColor="#C2D6E1"
+        android:fillType="evenOdd"/>
+    <path
+        android:pathData="M80.863,50.059C80.863,50.059 89.991,64.711 95.676,74.96C96.077,75.683 98.442,79.288 98.567,80.024C98.567,80.024 98.128,85.089 95.957,83.853C88.81,75.795 77.518,57.473 74.133,53.953C70.353,49.97 80.863,50.059 80.863,50.059"
+        android:strokeWidth="1"
+        android:fillColor="#CB8E75"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M65.299,171.663L55.899,164.633C54.631,164.118 52.686,163.776 50.866,164.169C50.049,164.346 49.943,163.736 49.957,164.492L48.979,167.623C48.095,169.702 48.459,171.303 50.842,172.216C54.283,173.169 62.097,177.297 65.598,174.678C67.126,173.909 67.269,172.435 65.299,171.663"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M83.91,169.07L73.527,162.782C72.217,162.381 70.654,162.321 68.876,162.873C68.077,163.121 68.145,162.529 67.998,163.274L67.299,166.479C66.601,168.628 67.264,170.117 69.717,170.817L79.101,172.828C81.602,173.264 88.725,171.164 83.91,169.07"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M47.951,83.753C48.154,80.922 77.162,80.03 77.355,84.465C79.14,125.383 77.436,153.224 74.661,162.451C74.615,162.605 74.556,162.754 74.467,162.888C73.453,164.423 71.093,164.442 69.104,163.473C68.407,163.133 67.998,162.395 68.037,161.621C68.591,150.597 67.468,127.373 63.294,105.422C63.237,105.12 63.168,104.413 63.134,104.718C63.134,104.718 56.435,161.729 56.328,165.62C56.265,167.908 52.94,168.37 51.681,167.588C51.251,167.321 49.92,166.256 49.877,165.649C48.395,144.602 46.997,97.064 47.951,83.753"
+        android:strokeWidth="1"
+        android:fillColor="#8C8C99"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M73.325,21.408C74.041,6.479 46.85,12.335 57.871,28.491C59.455,30.879 60.851,34.474 64.368,35.29L65.483,25.073C68.96,22.599 72.125,20.681 73.325,21.408"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M58.444,24.488C56.386,23.412 56.019,25.92 56.868,27.629C57.498,28.953 59.343,30.642 59.618,28.742C59.346,28.019 59.21,24.973 58.444,24.488"
+        android:strokeWidth="1"
+        android:fillColor="#CB8E75"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M94.332,88.33C94.267,88.778 99.296,87.204 99.451,87.249C100.382,87.631 103.029,75.97 103.378,75.499C103.583,75.357 103.083,74.466 102.55,74.411L97.878,75.171C96.513,74.432 94.374,86.916 93.938,87.378C93.767,87.848 94.04,88.072 94.332,88.33"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M102.172,80.599C101.705,80.193 101.32,81.862 100.532,81.997C99.672,82.144 98.785,82.575 98.234,83.207C94.244,90.093 106.114,88.15 102.172,80.599"
+        android:strokeWidth="1"
+        android:fillColor="#CB8E75"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M48.24,90.654C47.133,89.236 45.078,86.597 43.215,84.169C36.871,75.953 47.685,63.636 52.74,57.542L44.743,53.067C34.837,73.93 29.018,79.136 45.628,93.633C46.143,97.617 53.848,99.922 55.443,95.595C55.972,92.503 51.389,90.108 48.24,90.654"
+        android:strokeWidth="1"
+        android:fillColor="#CB8E75"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M75.216,40.972C71.848,37.469 66.233,38.07 60.958,37.752C56.516,38.842 52.907,40.043 50.248,41.567C49.666,41.83 49.088,42.218 48.515,42.712C47.302,43.644 46.385,44.691 45.787,45.887C40.311,53.843 35.813,69.568 34.232,74.882C33.557,77.15 40.356,79.588 41.788,78.211C44.527,75.578 47.697,64.208 47.697,64.208L47.75,87.131C47.752,87.799 48.132,88.407 48.733,88.699C55.685,92.075 71.216,90.926 76.386,88.552C77.095,88.227 77.563,87.535 77.588,86.755L77.808,79.744C78.045,72.824 77.852,67.217 78.038,59.707L83,68.752C83.35,69.451 84.503,70.057 84.873,70.027C86.302,69.912 89.818,69.491 91.332,65.05C91.739,63.859 81.632,46.858 75.216,40.972"
+        android:strokeWidth="1"
+        android:fillColor="#B1DAEF"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M64.229,41.713C66.078,41.982 67.865,40.677 67.919,38.76C67.919,38.76 68.258,29.21 68.258,29.21C68.319,27.518 66.982,26.082 65.288,26.023C63.44,25.751 61.653,27.058 61.598,28.974L59.923,38.103C59.863,39.797 62.535,41.652 64.229,41.713"
+        android:strokeWidth="1"
+        android:fillColor="#CB8E75"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M73.338,21.389C72.786,15.549 64.889,16.089 60.013,19.727C59.723,20.726 59.234,22.566 58.487,24.093C58.902,26.15 59.142,29.406 59.885,31.355C61.11,33.279 65.264,36.856 68.015,36.584C72.793,34.655 73.867,24.885 73.338,21.389"
+        android:strokeWidth="1"
+        android:fillColor="#CB8E75"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M66.035,30.883C66.035,30.883 69.514,30.936 69.514,30.936C70.187,30.966 69.91,31.793 69.799,32.194C69.32,34.159 65.963,33.868 65.542,31.997C65.397,31.592 65.437,30.864 66.035,30.883M73.073,19.279C73.073,19.279 75.848,12.639 72.433,11.065C70.496,10.172 67.62,10.03 65.523,11.078C63.337,12.171 61.678,11.428 59.9,12.618C54.296,16.432 54.309,19.663 56.23,25.45C56.523,24.211 56.935,24.269 57.484,23.312C58.882,25.06 59.231,24.71 59.3,27.73C59.32,28.374 59.581,29.254 59.231,29.604C58.73,30.105 59.529,31.056 59.684,31.352C60.91,33.276 64.5,37.515 68.011,37.211C70.402,37.003 71.603,32.751 72.534,29.899C71.403,32.736 71.312,29.76 69.588,29.858C68.612,29.973 65.566,29.406 64.843,30.307C64.36,30.877 63.549,31.098 62.902,30.664C61.443,29.941 60.855,29.135 60.542,27.999C60.453,27.514 60.365,27.075 60.287,26.673C60.263,26.495 60.239,26.313 60.215,26.122L60.186,26.122C59.895,24.439 59.91,23.23 61.16,20.911C61.163,20.814 60.856,18.118 63.642,17.7C63.679,17.623 63.639,17.561 63.544,17.512C66.607,16.713 70.099,17.321 73.073,19.279"
+        android:strokeWidth="1"
+        android:fillColor="#4A4A4A"
+        android:fillType="evenOdd"
+        android:strokeColor="#00000000"/>
+    <path
+        android:pathData="M205.937,169.432C208.013,169.14 209.934,170.588 210.225,172.663C210.382,173.776 210.023,174.824 209.368,175.621L215.595,180.313C216.676,177.309 217.348,174.239 216.993,171.712C216.175,165.892 210.806,161.846 204.986,162.664C202.008,163.083 199.507,164.707 197.861,166.963L203.332,171.086C203.914,170.207 204.824,169.588 205.937,169.432ZM214.539,182.946L206.597,176.962L206.408,176.819L192.068,166.013L190.426,168.192L195.881,172.302C195.821,173.077 195.826,173.874 195.938,174.671C197.048,182.567 209.213,192.743 209.213,192.743C209.213,192.743 211.334,189.608 213.377,185.487L219.124,189.817L220.765,187.638L214.539,182.946Z"
+        android:strokeWidth="1"
+        android:fillColor="#C00F2D"
+        android:fillType="nonZero"
+        android:strokeColor="#00000000"/>
+  </group>
+</vector>
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 80e975524..72dcb4124 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
@@ -85,6 +85,20 @@
                     app:layout_constraintStart_toStartOf="parent"
                     app:layout_constraintTop_toBottomOf="@+id/settings_tracing_switch_row">
 
+                    <include
+                        android:id="@+id/settings_tracing_status_location"
+                        layout="@layout/include_tracing_status_card"
+                        android:layout_width="@dimen/match_constraint"
+                        android:layout_height="wrap_content"
+                        android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityLocation(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled(), settingsViewModel.isLocationEnabled())}"
+                        app:body="@{@string/settings_tracing_status_location_body}"
+                        app:buttonText="@{@string/settings_tracing_status_location_button}"
+                        app:headline="@{@string/settings_tracing_status_location_headline}"
+                        app:icon="@{@drawable/ic_location}"
+                        app:layout_constraintEnd_toStartOf="@+id/guideline_card_end"
+                        app:layout_constraintStart_toStartOf="@+id/guideline_card_start"
+                        app:layout_constraintTop_toTopOf="parent" />
+
                     <include
                         android:id="@+id/settings_tracing_status_bluetooth"
                         layout="@layout/include_tracing_status_card"
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 bd38e76d1..69bd5364f 100644
--- a/Corona-Warn-App/src/main/res/values-de/strings.xml
+++ b/Corona-Warn-App/src/main/res/values-de/strings.xml
@@ -485,6 +485,12 @@
     <!-- XBUT: settings(tracing) - go to operating system settings button on card -->
     <string name="settings_tracing_status_bluetooth_button">"Geräte-Einstellungen öffnen"</string>
     <!--XHED : settings(tracing) - headline on card about the current status and what to do -->
+    <string name="settings_tracing_status_location_headline">"Standort Verwendung erlauben"</string>
+    <!-- XTXT: settings(tracing) - explains user what to do on card if location is disabled -->
+    <string name="settings_tracing_status_location_body">"Auf Ihren Standort wird nicht zugegriffen. Die Standort Erlaubnis wird benötigt, da Google Android diese für die Verwendung von Bluetooth voraussetzt."</string>
+    <!-- XBUT: settings(tracing) - go to operating system settings button on card - location -->
+    <string name="settings_tracing_status_location_button">"Geräte-Einstellungen öffnen"</string>
+    <!--XHED : settings(tracing) - headline on card about the current status and what to do -->
     <string name="settings_tracing_status_connection_headline">"Internetverbindung herstellen"</string>
     <!-- XTXT: settings(tracing) - explains user what to do on card if connection is disabled -->
     <string name="settings_tracing_status_connection_body">"Die Risiko-Ermittlung benötigt eine Internetverbindung, um Risiko-Begegnungen berechnen zu können. Bitte aktivieren Sie WLAN oder mobile Daten in Ihren Geräte-Einstellungen."</string>
@@ -506,6 +512,8 @@
     <!-- XACT: settings(tracing) - describes illustration -->
     <string name="settings_tracing_bluetooth_illustration_description_inactive">"Eine Person hat Bluetooth auf ihrem Smartphone ausgeschaltet, eine Begegnung mit zwei weiteren Personen wird daher nicht aufgezeichnet."</string>
     <!-- XACT: settings(tracing) - describes illustration -->
+    <string name="settings_tracing_location_illustration_description_inactive">""</string>
+    <!-- XACT: settings(tracing) - describes illustration -->
     <string name="settings_tracing_connection_illustration_description_inactive">"Eine Person hat die Internetverbindung auf ihrem Smartphone ausgeschaltet, eine Begegnung mit zwei weiteren Personen wird daher nicht aufgezeichnet."</string>
 
     <!-- XHED: settings(notification) - notification page title -->
diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml
index 453f2ed5a..06e2aeba9 100644
--- a/Corona-Warn-App/src/main/res/values/strings.xml
+++ b/Corona-Warn-App/src/main/res/values/strings.xml
@@ -484,6 +484,12 @@
     <!-- XBUT: settings(tracing) - go to operating system settings button on card -->
     <string name="settings_tracing_status_bluetooth_button">"Open Device Settings"</string>
     <!--XHED : settings(tracing) - headline on card about the current status and what to do -->
+    <string name="settings_tracing_status_location_headline">""</string>
+    <!-- XTXT: settings(tracing) - explains user what to do on card if location is disabled -->
+    <string name="settings_tracing_status_location_body">""</string>
+    <!-- XBUT: settings(tracing) - go to operating system settings button on card - location -->
+    <string name="settings_tracing_status_location_button">""</string>
+    <!--XHED : settings(tracing) - headline on card about the current status and what to do -->
     <string name="settings_tracing_status_connection_headline">"Open Internet connection"</string>
     <!-- XTXT: settings(tracing) - explains user what to do on card if connection is disabled -->
     <string name="settings_tracing_status_connection_body">"Exposure logging requires an Internet connection to calculate exposures. Please turn on WIFI or mobile data in your device settings."</string>
@@ -505,7 +511,10 @@
     <!-- XACT: settings(tracing) - describes illustration -->
     <string name="settings_tracing_bluetooth_illustration_description_inactive">"A person has turned off Bluetooth on their smartphone, so an encounter with two other persons is not logged."</string>
     <!-- XACT: settings(tracing) - describes illustration -->
-    <string name="settings_tracing_connection_illustration_description_inactive">"A person has turned off the Internet connection on their smartphone, so an encounter with two other persons is not logged."</string>
+    <string name="settings_tracing_location_illustration_description_inactive">""</string>
+    <!-- XACT: settings(tracing) - describes illustration -->
+    <string name="settings_tracing_connection_illustration_description_inactive">"One person has turned off the Internet connection on their device, so an encounter with two other people is not logged."</string>
+
 
     <!-- XHED: settings(notification) - notification page title -->
     <string name="settings_notifications_title">"Notifications"</string>
-- 
GitLab