show notice when camera permission rejected
All checks were successful
Auto Tag on Version Change / check-version (push) Successful in 3s
All checks were successful
Auto Tag on Version Change / check-version (push) Successful in 3s
This commit is contained in:
@@ -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 {
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user