diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsLoginsFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsLoginsFragment.kt
index ce60267..f8080f6 100644
--- a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsLoginsFragment.kt
+++ b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsLoginsFragment.kt
@@ -1,7 +1,10 @@
package sh.sar.basedbank.ui.home
+import android.Manifest
import android.content.Context
import android.content.Intent
+import android.content.pm.PackageManager
+import android.provider.Settings as AndroidSettings
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.net.Uri
@@ -15,6 +18,7 @@ import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.core.content.ContextCompat
import androidx.core.content.FileProvider
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
@@ -77,6 +81,29 @@ class SettingsLoginsFragment : Fragment() {
handlePickedImage(bitmap)
}
+ private val cameraPermissionLauncher = registerForActivityResult(
+ ActivityResultContracts.RequestPermission()
+ ) { granted ->
+ if (granted) cameraLauncher.launch(cameraPhotoUri ?: return@registerForActivityResult)
+ else showCameraPermissionRationale()
+ }
+
+ private fun showCameraPermissionRationale() {
+ val ctx = requireContext()
+ MaterialAlertDialogBuilder(ctx)
+ .setTitle(R.string.qr_camera_permission_title)
+ .setMessage(R.string.camera_permission_profile_message)
+ .setNegativeButton(R.string.cancel) { dialog, _ -> dialog.dismiss() }
+ .setPositiveButton(R.string.go_to_settings) { _, _ ->
+ startActivity(
+ Intent(AndroidSettings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
+ data = Uri.fromParts("package", ctx.packageName, null)
+ }
+ )
+ }
+ .show()
+ }
+
private fun loadAndScaleBitmap(uri: Uri): Bitmap? {
return try {
val ctx = requireContext()
@@ -159,7 +186,11 @@ class SettingsLoginsFragment : Fragment() {
val photoFile = File(ctx.cacheDir, "profile_photo_tmp.jpg")
val uri = FileProvider.getUriForFile(ctx, "${ctx.packageName}.fileprovider", photoFile)
cameraPhotoUri = uri
- cameraLauncher.launch(uri)
+ if (ContextCompat.checkSelfPermission(ctx, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
+ cameraLauncher.launch(uri)
+ } else {
+ cameraPermissionLauncher.launch(Manifest.permission.CAMERA)
+ }
}
if (target is PendingImageTarget.Mib || currentBitmap != null || hasSavedImage(ctx, target)) {
items += Triple(R.drawable.ic_delete, getString(R.string.profile_image_remove)) {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8474159..b7f8007 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -243,6 +243,7 @@
Invalid or unsupported QR code
Camera permission required
Camera access is needed to scan QR codes. Please grant the permission in Settings.
+ Camera access is needed to take a photo. Please grant the permission in Settings.
Go to Settings
Select a source account first
Enter an account number first