diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/ApiRequestState.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/ApiRequestState.kt similarity index 60% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/ApiRequestState.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/ApiRequestState.kt index edd4dde71b1..3043dcacf37 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/ApiRequestState.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/ApiRequestState.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.ui.register +package de.rki.coronawarnapp.ui.submission enum class ApiRequestState { IDLE, STARTED, FAILED, SUCCESS diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/ScanStatus.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/ScanStatus.kt similarity index 57% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/ScanStatus.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/ScanStatus.kt index 1c0a0ca350f..b3bd73f8a46 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/ScanStatus.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/ScanStatus.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.ui.register +package de.rki.coronawarnapp.ui.submission enum class ScanStatus { STARTED, INVALID, SUCCESS diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt index 5f5916104e8..b406ffa23c7 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionDispatcherFragment.kt @@ -34,12 +34,14 @@ class SubmissionDispatcherFragment : BaseFragment() { private fun setButtonOnClickListener() { binding.submissionDispatcherQr.dispatcherCard.setOnClickListener { doNavigate( - SubmissionDispatcherFragmentDirections.actionSubmissionDispatcherFragmentToRegisterQRCodeFragment() + SubmissionDispatcherFragmentDirections + .actionSubmissionDispatcherFragmentToSubmissionQRCodeScanFragment() ) } binding.submissionDispatcherTanCode.dispatcherCard.setOnClickListener { doNavigate( - SubmissionDispatcherFragmentDirections.actionSubmissionDispatcherFragmentToSubmissionTanFragment() + SubmissionDispatcherFragmentDirections + .actionSubmissionDispatcherFragmentToSubmissionTanFragment() ) } binding.submissionDispatcherTanTele.dispatcherCard.setOnClickListener { diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/RegisterQRCodeScanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt similarity index 66% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/RegisterQRCodeScanFragment.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt index de5ad319851..55d51d6f8e7 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/RegisterQRCodeScanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionQRCodeScanFragment.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.ui.register +package de.rki.coronawarnapp.ui.submission import android.Manifest import android.content.pm.PackageManager @@ -13,7 +13,7 @@ import com.google.zxing.BarcodeFormat import com.journeyapps.barcodescanner.BarcodeResult import com.journeyapps.barcodescanner.DefaultDecoderFactory import de.rki.coronawarnapp.R -import de.rki.coronawarnapp.databinding.FragmentRegisterQrCodeScanBinding +import de.rki.coronawarnapp.databinding.FragmentSubmissionQrCodeScanBinding import de.rki.coronawarnapp.ui.BaseFragment import de.rki.coronawarnapp.ui.viewmodel.SubmissionViewModel import de.rki.coronawarnapp.util.CameraPermissionHelper @@ -21,22 +21,22 @@ import de.rki.coronawarnapp.util.CameraPermissionHelper /** * A simple [BaseFragment] subclass. */ -class RegisterQRCodeScanFragment : BaseFragment() { +class SubmissionQRCodeScanFragment : BaseFragment() { companion object { - private val TAG: String? = RegisterQRCodeScanFragment::class.simpleName + private val TAG: String? = SubmissionQRCodeScanFragment::class.simpleName private const val REQUEST_CAMERA_PERMISSION_CODE = 1 } private val viewModel: SubmissionViewModel by viewModels() - private lateinit var binding: FragmentRegisterQrCodeScanBinding + private lateinit var binding: FragmentSubmissionQrCodeScanBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - binding = FragmentRegisterQrCodeScanBinding.inflate(inflater) + binding = FragmentSubmissionQrCodeScanBinding.inflate(inflater) binding.lifecycleOwner = this return binding.root } @@ -46,7 +46,7 @@ class RegisterQRCodeScanFragment : BaseFragment() { } private fun startDecode() { - binding.registerQrCodeScanPreview.decodeSingle { decodeCallback(it) } + binding.submissionQrCodeScanPreview.decodeSingle { decodeCallback(it) } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { @@ -54,21 +54,19 @@ class RegisterQRCodeScanFragment : BaseFragment() { checkForCameraPermission() - binding.registerQrCodeScanTorch.setOnCheckedChangeListener { _, isChecked -> - binding.registerQrCodeScanPreview.setTorch( + binding.submissionQrCodeScanTorch.setOnCheckedChangeListener { _, isChecked -> + binding.submissionQrCodeScanPreview.setTorch( isChecked ) } - binding.registerQrCodeScanClose.buttonIcon.setOnClickListener { - doNavigate( - RegisterQRCodeScanFragmentDirections.actionRegisterQRCodeFragmentToSubmissionDispatcherFragment() - ) + binding.submissionQrCodeScanClose.buttonIcon.setOnClickListener { + navigateToDispatchScreen() } - binding.registerQrCodeScanPreview.decoderFactory = + binding.submissionQrCodeScanPreview.decoderFactory = DefaultDecoderFactory(listOf(BarcodeFormat.QR_CODE)) - binding.registerQrCodeScanViewfinderView.setCameraPreview(binding.registerQrCodeScanPreview) + binding.submissionQrCodeScanViewfinderView.setCameraPreview(binding.submissionQrCodeScanPreview) viewModel.scanStatus.observe(viewLifecycleOwner, Observer { if (ScanStatus.SUCCESS == it) { @@ -85,24 +83,25 @@ class RegisterQRCodeScanFragment : BaseFragment() { private fun navigateToDispatchScreen() = doNavigate( - RegisterQRCodeScanFragmentDirections.actionRegisterQRCodeFragmentToSubmissionDispatcherFragment() + SubmissionQRCodeScanFragmentDirections.actionSubmissionQRCodeScanFragmentToSubmissionDispatcherFragment() ) private fun showSuccessfulScanDialog() { val alertDialog: AlertDialog = requireActivity().let { val builder = AlertDialog.Builder(it) builder.apply { - setTitle(R.string.register_qr_code_scan_successful_dialog_headline) - setMessage(R.string.register_qr_code_scan_successful_dialog_body) + setTitle(R.string.submission_qr_code_scan_successful_dialog_headline) + setMessage(R.string.submission_qr_code_scan_successful_dialog_body) setPositiveButton( - R.string.register_qr_code_scan_successful_dialog_button_positive + R.string.submission_qr_code_scan_successful_dialog_button_positive ) { _, _ -> doNavigate( - RegisterQRCodeScanFragmentDirections.actionRegisterQRCodeFragmentToDeviceRegistrationFragment() + SubmissionQRCodeScanFragmentDirections + .actionSubmissionQRCodeScanFragmentToSubmissionRegisterDeviceFragment() ) } setNegativeButton( - R.string.register_qr_code_scan_successful_dialog_button_negative + R.string.submission_qr_code_scan_successful_dialog_button_negative ) { _, _ -> viewModel.deleteTestGUID() navigateToDispatchScreen() @@ -117,15 +116,15 @@ class RegisterQRCodeScanFragment : BaseFragment() { val alertDialog: AlertDialog = requireActivity().let { val builder = AlertDialog.Builder(it) builder.apply { - setTitle(R.string.register_qr_code_scan_invalid_dialog_headline) - setMessage(R.string.register_qr_code_scan_invalid_dialog_body) + setTitle(R.string.submission_qr_code_scan_invalid_dialog_headline) + setMessage(R.string.submission_qr_code_scan_invalid_dialog_body) setPositiveButton( - R.string.register_qr_code_scan_invalid_dialog_button_positive + R.string.submission_qr_code_scan_invalid_dialog_button_positive ) { _, _ -> startDecode() } setNegativeButton( - R.string.register_qr_code_scan_invalid_dialog_button_negative + R.string.submission_qr_code_scan_invalid_dialog_button_negative ) { _, _ -> navigateToDispatchScreen() } @@ -151,7 +150,7 @@ class RegisterQRCodeScanFragment : BaseFragment() { } private fun cameraPermissionIsGranted() { - binding.registerQrCodeScanPreview.resume() + binding.submissionQrCodeScanPreview.resume() startDecode() } @@ -172,10 +171,10 @@ class RegisterQRCodeScanFragment : BaseFragment() { val alertDialog: AlertDialog = requireActivity().let { val builder = AlertDialog.Builder(it) builder.apply { - setTitle(R.string.register_qr_code_scan_permission_rationale_dialog_headline) - setMessage(R.string.register_qr_code_scan_permission_rationale_dialog_body) + setTitle(R.string.submission_qr_code_scan_permission_rationale_dialog_headline) + setMessage(R.string.submission_qr_code_scan_permission_rationale_dialog_body) setPositiveButton( - R.string.register_qr_code_scan_permission_rationale_dialog_button_positive + R.string.submission_qr_code_scan_permission_rationale_dialog_button_positive ) { _, _ -> requestPermissions( arrayOf(Manifest.permission.CAMERA), @@ -183,7 +182,7 @@ class RegisterQRCodeScanFragment : BaseFragment() { ) } setNegativeButton( - R.string.register_qr_code_scan_permission_rationale_dialog_button_negative + R.string.submission_qr_code_scan_permission_rationale_dialog_button_negative ) { _, _ -> navigateToDispatchScreen() } @@ -197,10 +196,10 @@ class RegisterQRCodeScanFragment : BaseFragment() { val alertDialog: AlertDialog = requireActivity().let { val builder = AlertDialog.Builder(it) builder.apply { - setTitle(R.string.register_qr_code_scan_permission_denied_dialog_headline) - setMessage(R.string.register_qr_code_scan_permission_denied_dialog_body) + setTitle(R.string.submission_qr_code_scan_permission_denied_dialog_headline) + setMessage(R.string.submission_qr_code_scan_permission_denied_dialog_body) setPositiveButton( - R.string.register_qr_code_scan_permission_denied_dialog_button_positive + R.string.submission_qr_code_scan_permission_denied_dialog_button_positive ) { _, _ -> navigateToDispatchScreen() } @@ -212,11 +211,11 @@ class RegisterQRCodeScanFragment : BaseFragment() { override fun onResume() { super.onResume() - binding.registerQrCodeScanPreview.resume() + binding.submissionQrCodeScanPreview.resume() } override fun onPause() { super.onPause() - binding.registerQrCodeScanPreview.pause() + binding.submissionQrCodeScanPreview.pause() } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/RegisterDeviceFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionRegisterDeviceFragment.kt similarity index 67% rename from Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/RegisterDeviceFragment.kt rename to Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionRegisterDeviceFragment.kt index 997a5e6778e..853c16b6e8b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/register/RegisterDeviceFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionRegisterDeviceFragment.kt @@ -1,4 +1,4 @@ -package de.rki.coronawarnapp.ui.register +package de.rki.coronawarnapp.ui.submission import android.os.Bundle import android.view.LayoutInflater @@ -6,20 +6,20 @@ import android.view.View import android.view.ViewGroup import androidx.fragment.app.activityViewModels import androidx.lifecycle.Observer -import de.rki.coronawarnapp.databinding.FragmentRegisterDeviceBinding +import de.rki.coronawarnapp.databinding.FragmentSubmissionRegisterDeviceBinding import de.rki.coronawarnapp.ui.BaseFragment import de.rki.coronawarnapp.ui.viewmodel.SubmissionViewModel -class RegisterDeviceFragment : BaseFragment() { +class SubmissionRegisterDeviceFragment : BaseFragment() { private val viewModel: SubmissionViewModel by activityViewModels() - private lateinit var binding: FragmentRegisterDeviceBinding + private lateinit var binding: FragmentSubmissionRegisterDeviceBinding override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { - binding = FragmentRegisterDeviceBinding.inflate(inflater) + binding = FragmentSubmissionRegisterDeviceBinding.inflate(inflater) binding.lifecycleOwner = this return binding.root } @@ -30,7 +30,8 @@ class RegisterDeviceFragment : BaseFragment() { viewModel.registrationState.observe(viewLifecycleOwner, Observer { if (ApiRequestState.SUCCESS == it) { doNavigate( - RegisterDeviceFragmentDirections.actionDeviceRegistrationFragmentToSubmissionResultFragment() + SubmissionRegisterDeviceFragmentDirections + .actionSubmissionRegisterDeviceFragmentToSubmissionResultFragment() ) } }) diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt index 18e7d982010..4f05de4597f 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/submission/SubmissionTanFragment.kt @@ -48,6 +48,6 @@ class SubmissionTanFragment : BaseFragment() { // store locally viewModel.storeTeletan() - doNavigate(SubmissionTanFragmentDirections.actionSubmissionTanFragmentToDeviceRegistrationFragment()) + doNavigate(SubmissionTanFragmentDirections.actionSubmissionTanFragmentToSubmissionRegisterDeviceFragment()) } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt index e470de14a82..7e161142394 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/viewmodel/SubmissionViewModel.kt @@ -10,8 +10,8 @@ import de.rki.coronawarnapp.exception.report import de.rki.coronawarnapp.service.submission.SubmissionService import de.rki.coronawarnapp.storage.LocalData import de.rki.coronawarnapp.storage.SubmissionRepository -import de.rki.coronawarnapp.ui.register.ApiRequestState -import de.rki.coronawarnapp.ui.register.ScanStatus +import de.rki.coronawarnapp.ui.submission.ApiRequestState +import de.rki.coronawarnapp.ui.submission.ScanStatus import de.rki.coronawarnapp.util.formatter.TestResult import kotlinx.coroutines.launch import java.util.Date diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt index 53ad88c011d..7f0fb240bb8 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterSubmissionHelper.kt @@ -6,7 +6,7 @@ import android.graphics.drawable.Drawable import android.view.View import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.R -import de.rki.coronawarnapp.ui.register.ApiRequestState +import de.rki.coronawarnapp.ui.submission.ApiRequestState import de.rki.coronawarnapp.ui.submission.TestResultStatus import de.rki.coronawarnapp.util.formatter.TestResult.INVALID import de.rki.coronawarnapp.util.formatter.TestResult.NEGATIVE diff --git a/Corona-Warn-App/src/main/res/layout/fragment_submission_dispatcher.xml b/Corona-Warn-App/src/main/res/layout/fragment_submission_dispatcher.xml index 24ab796e3d3..7909a029da7 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_submission_dispatcher.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_submission_dispatcher.xml @@ -45,6 +45,7 @@ app:illustration="@{@drawable/ic_submission_illustration_qr_code_card}" app:layout_constraintEnd_toStartOf="@+id/submission_guideline_end" app:layout_constraintStart_toStartOf="@+id/submission_guideline_start" + android:focusable="true" app:layout_constraintTop_toBottomOf="@+id/submission_dispatcher_subtitle" /> + app:layout_constraintGuide_end="@dimen/submission_guideline_button" /> + app:layout_constraintGuide_end="@dimen/submission_guideline_button" /> + app:zxing_framing_rect_height="@dimen/submission_scan_qr_code_viewfinder_size" + app:zxing_framing_rect_width="@dimen/submission_scan_qr_code_viewfinder_size"> + android:layout_marginTop="@dimen/spacing_small" + android:text="@string/submission_qr_code_scan_body" + app:layout_constraintEnd_toEndOf="@+id/submission_qr_code_scan_preview" + app:layout_constraintStart_toStartOf="@+id/submission_qr_code_scan_preview" + app:layout_constraintTop_toBottomOf="@+id/submission_qr_code_scan_viewfinder_view" /> + app:layout_constraintBottom_toTopOf="@+id/submission_qr_code_scan_guideline_top" + app:layout_constraintEnd_toStartOf="@+id/submission_qr_code_scan_guideline_start" + app:layout_constraintStart_toStartOf="@+id/submission_qr_code_scan_guideline_start" + app:layout_constraintTop_toTopOf="@+id/submission_qr_code_scan_guideline_top" /> + app:layout_constraintBottom_toTopOf="@+id/submission_qr_code_scan_guideline_top" + app:layout_constraintEnd_toStartOf="@+id/submission_qr_code_scan_guideline_end" + app:layout_constraintStart_toStartOf="@+id/submission_qr_code_scan_guideline_end" + app:layout_constraintTop_toTopOf="@+id/submission_qr_code_scan_guideline_top" /> + app:layout_constraintGuide_begin="@dimen/spacing_normal" /> + tools:context=".ui.submission.SubmissionRegisterDeviceFragment"> + android:text="@string/submission_register_device_headline" + app:layout_constraintEnd_toStartOf="@+id/submission_register_device_guideline_end" + app:layout_constraintStart_toStartOf="@+id/submission_register_device_guideline_start" + app:layout_constraintTop_toTopOf="@+id/submission_register_device_guideline_top" /> + android:text="@string/submission_register_device_body" + app:layout_constraintEnd_toStartOf="@+id/submission_register_device_guideline_end" + app:layout_constraintStart_toStartOf="@+id/submission_register_device_guideline_start" + app:layout_constraintTop_toBottomOf="@+id/submission_register_device_headline" /> + app:layout_constraintBottom_toTopOf="@+id/submission_register_device_guideline_bottom" + app:layout_constraintEnd_toStartOf="@+id/submission_register_device_guideline_end" + app:layout_constraintStart_toStartOf="@+id/submission_register_device_guideline_start" + app:layout_constraintTop_toBottomOf="@+id/submission_register_device_text" /> - + + android:id="@+id/action_submissionTanFragment_to_submissionRegisterDeviceFragment" + app:destination="@id/submissionRegisterDeviceFragment" /> - - - - - - - - - + + + + + + + - 200dp - @dimen/spacing_large + @dimen/spacing_large 84dp @@ -81,9 +80,6 @@ 36dp 50dp - - 200dp - @dimen/spacing_large - 14dp - 240dp + + 240dp diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index d2b1022ce85..10a04aeb67b 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -312,24 +312,57 @@ Submission TODO: rename if screens are available ###################################### --> + + Kamera Berechtigung benötigt + @string/lorem_ipsum + + Erlauben + Nicht erlauben + + Keine Kamera Berechtigung + @string/lorem_ipsum + + Zurück + + Scan erfolgreich + @string/lorem_ipsum + + Registrieren + Abbrechen + + Falscher QR Code + @string/lorem_ipsum + + Erneut versuchen + Abbrechen + + Positionieren Sie den QR Code in den Rahmen + + Gerät Registrieren + @string/lorem_ipsum Testergebnis Info zum Ablauf: Abschließen + Test erfolgreich hinzugefügt Ihr Test wurde in der Corona-Warn-App hinterlegt. + Testergebnis noch nicht verfügbar Ihr Testergebnis steht noch nicht zur Verfügung. Normalerweise dauert die Auswertung 1–3 Tage. Aktualisieren Test entfernen + Testergebnis Negativ Ihr Testergebnis wurde erfolgreich als “Negativ” verifiziert. Bitte entfernen Sie den Test wieder aus der Corona-Warn-App, damit Sie bei Bedarf einen neuen Test hinterlegen können. Test entfernen + Testergebnis Positiv Ihr Testergebnis wurde erfolgreich als “Positiv” verifiziert. Andere warnen Teilen Sie Ihre Zufallskennungen, damit andere gewarnt werden können. Weiter + Test fehlerhaft Es gab ein Problem bei der Auswertung Ihres Tests. Bitte kontaktieren Sie das Gesundheitsamt um Information zum weiteren Vorgehen zu erhalten. Bitte entfernen Sie den Test wieder aus der Corona-Warn-App, damit Sie bei Bedarf einen neuen Test hinterlegen können. Test entfernen @@ -343,10 +376,6 @@ Damit die Corona-Warn-App funktioniert, wird die freiwillige Mithilfe von allen Corona positiven Personen benötigt. @string/lorem_ipsum Weiter - - Positive Diagnose - @string/lorem_ipsum - Abschliessen Danke für die Mithilfe! Ihr verifizierter Befund wurde anonym übertragen. @@ -408,34 +437,4 @@ Other key Calculate Risk Level - - - - Kamera Berechtigung benötigt - @string/lorem_ipsum - Erlauben - Nicht erlauben - - Keine Kamera Berechtigung - @string/lorem_ipsum - Zurück - - Scan erfolgreich - @string/lorem_ipsum - Registrieren - Abbrechen - - Falscher QR Code - @string/lorem_ipsum - Erneut versuchen - Abbrechen - - QR Code Scannen - Positionieren Sie den QR Code in den Rahmen - - Gerät Registrieren - @string/lorem_ipsum -