show notice when camera permission rejected
All checks were successful
Auto Tag on Version Change / check-version (push) Successful in 3s

This commit is contained in:
2026-05-17 19:11:26 +05:00
parent 36ab100aa7
commit 7782ac57f1
2 changed files with 33 additions and 1 deletions

View File

@@ -7,7 +7,9 @@ import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Rect
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
@@ -19,12 +21,14 @@ import androidx.camera.core.resolutionselector.ResolutionSelector
import androidx.camera.core.resolutionselector.ResolutionStrategy
import androidx.camera.lifecycle.ProcessCameraProvider
import androidx.core.content.ContextCompat
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import de.markusfisch.android.zxingcpp.ZxingCpp
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import sh.sar.basedbank.R
import sh.sar.basedbank.databinding.ActivityQrScannerBinding
import java.util.concurrent.Executors
@@ -45,9 +49,11 @@ class QrScannerActivity : AppCompatActivity() {
textMode = ZxingCpp.TextMode.PLAIN
)
private var cameraStarted = false
private val permissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { granted -> if (granted) startCamera() else finish() }
) { granted -> if (granted) startCamera() else showPermissionRationale() }
private val pickImageLauncher = registerForActivityResult(
ActivityResultContracts.GetContent()
@@ -89,7 +95,30 @@ class QrScannerActivity : AppCompatActivity() {
else permissionLauncher.launch(Manifest.permission.CAMERA)
}
override fun onResume() {
super.onResume()
if (!cameraStarted && ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
== PackageManager.PERMISSION_GRANTED
) startCamera()
}
private fun showPermissionRationale() {
MaterialAlertDialogBuilder(this)
.setTitle(R.string.qr_camera_permission_title)
.setMessage(R.string.qr_camera_permission_message)
.setNegativeButton(R.string.cancel) { dialog, _ -> dialog.dismiss() }
.setPositiveButton(R.string.go_to_settings) { _, _ ->
startActivity(
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
data = Uri.fromParts("package", packageName, null)
}
)
}
.show()
}
private fun startCamera() {
cameraStarted = true
val future = ProcessCameraProvider.getInstance(this)
future.addListener({
val provider = try {

View File

@@ -159,6 +159,9 @@
<string name="transfer_scan_qr">Scan QR</string>
<string name="qr_pick_image">Pick image</string>
<string name="transfer_qr_invalid">Invalid or unsupported QR code</string>
<string name="qr_camera_permission_title">Camera permission required</string>
<string name="qr_camera_permission_message">Camera access is needed to scan QR codes. Please grant the permission in Settings.</string>
<string name="go_to_settings">Go to Settings</string>
<string name="transfer_select_source_first">Select a source account first</string>
<string name="transfer_enter_account_first">Enter an account number first</string>
<string name="transfer_account_not_found">Account not found</string>