Skip to content
Snippets Groups Projects
Unverified Commit 5b34c403 authored by Fabian-K's avatar Fabian-K Committed by GitHub
Browse files

add privacy permission dialog to SubmissionDispatcherFragment.kt (#133)


- allow non-cancelable dialogs (defaulting to true)
- move camera permission dialog to SubmissionQRCodeScanFragment.kt
- remove extra dialog for camera permission denied

Co-authored-by: default avatarharambasicluka <64483219+harambasicluka@users.noreply.github.com>
parent 2a86d855
No related branches found
No related tags found
No related merge requests found
......@@ -82,6 +82,7 @@ class OnboardingTracingFragment : BaseFragment(),
R.string.onboarding_tracing_dialog_body,
R.string.onboarding_tracing_dialog_button_positive,
R.string.onboarding_tracing_dialog_button_negative,
true,
{
navigate()
})
......
package de.rki.coronawarnapp.ui.submission
import android.Manifest
import android.content.pm.PackageManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
......@@ -9,13 +7,11 @@ import android.view.ViewGroup
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentSubmissionDispatcherBinding
import de.rki.coronawarnapp.ui.BaseFragment
import de.rki.coronawarnapp.util.CameraPermissionHelper
import de.rki.coronawarnapp.util.DialogHelper
class SubmissionDispatcherFragment : BaseFragment() {
companion object {
private const val REQUEST_CAMERA_PERMISSION_CODE = 1
private val TAG: String? = SubmissionDispatcherFragment::class.simpleName
}
......@@ -38,7 +34,7 @@ class SubmissionDispatcherFragment : BaseFragment() {
private fun setButtonOnClickListener() {
binding.submissionDispatcherQr.dispatcherCard.setOnClickListener {
checkForCameraPermission()
checkForDataPrivacyPermission()
}
binding.submissionDispatcherTanCode.dispatcherCard.setOnClickListener {
doNavigate(
......@@ -54,64 +50,23 @@ class SubmissionDispatcherFragment : BaseFragment() {
}
}
private fun checkForCameraPermission() {
if (!CameraPermissionHelper.hasCameraPermission(requireActivity())) {
if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
showCameraPermissionRationaleDialog()
} else {
requestPermissions(
arrayOf(Manifest.permission.CAMERA),
REQUEST_CAMERA_PERMISSION_CODE
)
}
} else {
cameraPermissionIsGranted()
}
}
private fun showCameraPermissionRationaleDialog() {
private fun checkForDataPrivacyPermission() {
val cameraPermissionRationaleDialogInstance = DialogHelper.DialogInstance(
requireActivity(),
R.string.submission_qr_code_scan_permission_rationale_dialog_headline,
R.string.submission_qr_code_scan_permission_rationale_dialog_body,
R.string.submission_qr_code_scan_permission_rationale_dialog_button_positive,
R.string.submission_qr_code_scan_permission_rationale_dialog_button_negative,
R.string.submission_dispatcher_qr_privacy_dialog_headline,
R.string.submission_dispatcher_qr_privacy_dialog_body,
R.string.submission_dispatcher_qr_privacy_dialog_button_positive,
R.string.submission_dispatcher_qr_privacy_dialog_button_negative,
true,
{
requestPermissions(
arrayOf(Manifest.permission.CAMERA),
REQUEST_CAMERA_PERMISSION_CODE
)
privacyPermissionIsGranted()
}
)
DialogHelper.showDialog(cameraPermissionRationaleDialogInstance)
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
cameraPermissionIsGranted()
} else {
showCameraPermissionDeniedDialog()
}
}
private fun showCameraPermissionDeniedDialog() {
val cameraPermissionDeniedDialogInstance = DialogHelper.DialogInstance(
requireActivity(),
R.string.submission_qr_code_scan_permission_denied_dialog_headline,
R.string.submission_qr_code_scan_permission_denied_dialog_body,
R.string.submission_qr_code_scan_permission_denied_dialog_button_positive
)
DialogHelper.showDialog(cameraPermissionDeniedDialogInstance)
}
private fun cameraPermissionIsGranted() {
private fun privacyPermissionIsGranted() {
doNavigate(
SubmissionDispatcherFragmentDirections
.actionSubmissionDispatcherFragmentToSubmissionQRCodeScanFragment()
......
package de.rki.coronawarnapp.ui.submission
import android.Manifest
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
......@@ -12,7 +13,9 @@ import com.journeyapps.barcodescanner.DefaultDecoderFactory
import de.rki.coronawarnapp.R
import de.rki.coronawarnapp.databinding.FragmentSubmissionQrCodeScanBinding
import de.rki.coronawarnapp.ui.BaseFragment
import de.rki.coronawarnapp.ui.main.MainActivity
import de.rki.coronawarnapp.ui.viewmodel.SubmissionViewModel
import de.rki.coronawarnapp.util.CameraPermissionHelper
import de.rki.coronawarnapp.util.DialogHelper
/**
......@@ -21,6 +24,7 @@ import de.rki.coronawarnapp.util.DialogHelper
class SubmissionQRCodeScanFragment : BaseFragment() {
companion object {
private const val REQUEST_CAMERA_PERMISSION_CODE = 1
private val TAG: String? = SubmissionQRCodeScanFragment::class.simpleName
}
......@@ -86,6 +90,7 @@ class SubmissionQRCodeScanFragment : BaseFragment() {
R.string.submission_qr_code_scan_successful_dialog_body,
R.string.submission_qr_code_scan_successful_dialog_button_positive,
R.string.submission_qr_code_scan_successful_dialog_button_negative,
true,
{
doNavigate(
SubmissionQRCodeScanFragmentDirections
......@@ -108,6 +113,7 @@ class SubmissionQRCodeScanFragment : BaseFragment() {
R.string.submission_qr_code_scan_invalid_dialog_body,
R.string.submission_qr_code_scan_invalid_dialog_button_positive,
R.string.submission_qr_code_scan_invalid_dialog_button_negative,
true,
::startDecode,
::navigateToDispatchScreen
)
......@@ -117,10 +123,45 @@ class SubmissionQRCodeScanFragment : BaseFragment() {
override fun onResume() {
super.onResume()
binding.submissionQrCodeScanPreview.resume()
startDecode()
if (!CameraPermissionHelper.hasCameraPermission(requireActivity())) {
if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
showCameraPermissionRationaleDialog()
} else {
requestCameraPermission()
}
} else {
binding.submissionQrCodeScanPreview.resume()
startDecode()
}
}
private fun showCameraPermissionRationaleDialog() {
val cameraPermissionRationaleDialogInstance = DialogHelper.DialogInstance(
requireActivity(),
R.string.submission_qr_code_scan_permission_rationale_dialog_headline,
R.string.submission_qr_code_scan_permission_rationale_dialog_body,
R.string.submission_qr_code_scan_permission_rationale_dialog_button_positive,
R.string.submission_qr_code_scan_permission_rationale_dialog_button_negative,
false,
{
requestCameraPermission()
},
{
goBack()
}
)
DialogHelper.showDialog(cameraPermissionRationaleDialogInstance)
}
private fun goBack() = (activity as MainActivity).goBack()
private fun requestCameraPermission() = requestPermissions(
arrayOf(Manifest.permission.CAMERA),
REQUEST_CAMERA_PERMISSION_CODE
)
override fun onPause() {
super.onPause()
binding.submissionQrCodeScanPreview.pause()
......
......@@ -11,18 +11,20 @@ object DialogHelper {
val message: Int,
val positiveButton: Int,
val negativeButton: Int? = null,
val cancelable: Boolean = true,
val positiveButtonFunction: () -> Unit? = {},
val negativeButtonFunction: () -> Unit? = {}
)
fun showDialog(
dialogInstance: DialogInstance
) {
): AlertDialog {
val alertDialog: AlertDialog = dialogInstance.activity.let {
val builder = AlertDialog.Builder(it)
builder.apply {
setTitle(dialogInstance.title)
setMessage(dialogInstance.message)
setCancelable(dialogInstance.cancelable)
setPositiveButton(
dialogInstance.positiveButton
) { _, _ ->
......@@ -39,5 +41,6 @@ object DialogHelper {
builder.create()
}
alertDialog.show()
return alertDialog
}
}
......@@ -364,11 +364,7 @@
<string name="submission_qr_code_scan_permission_rationale_dialog_button_positive">Erlauben</string>
<string name="submission_qr_code_scan_permission_rationale_dialog_button_negative">Nicht erlauben</string>
<!-- Permission Denied Dialog -->
<string name="submission_qr_code_scan_permission_denied_dialog_headline">Keine Kamera Berechtigung</string>
<string name="submission_qr_code_scan_permission_denied_dialog_body">Bitte erlauben Sie die Autorisierung der Kamera für das Scannen von QR-Codes.</string>
<string name="submission_qr_code_scan_permission_denied_dialog_button_positive">Zurück</string>
<!-- QR Code Scan Successful Dialog -->
<string name="submission_qr_code_scan_successful_dialog_headline">Scan erfolgreich</string>
<string name="submission_qr_code_scan_successful_dialog_body">Der QR-Code wurde erfolgreich gescannt</string>
......@@ -433,6 +429,11 @@
<string name="submission_dispatcher_card_qr">Dokument mit QR-Code</string> <!-- final -->
<string name="submission_dispatcher_qr_card_text">Registrieren Sie Ihren Test, indem Sie den QR-Code ihres Test-Dokument scannen</string> <!-- final -->
<string name="submission_dispatcher_qr_privacy_dialog_headline">Datenschutz</string>
<string name="submission_dispatcher_qr_privacy_dialog_body">@string/lorem_ipsum</string>
<string name="submission_dispatcher_qr_privacy_dialog_button_positive">Erlauben</string>
<string name="submission_dispatcher_qr_privacy_dialog_button_negative">Nicht Erlauben</string>
<string name="submission_dispatcher_card_tan_code">TAN-Code</string> <!-- final -->
<string name="submission_dispatcher_tan_code_card_text">Registrieren Sie Ihren Test per manuekker TAN Eingabe</string> <!-- final -->
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment