forked from shihaam/thijooree
handle camera permission for profile pic upload
This commit is contained in:
@@ -1,7 +1,10 @@
|
|||||||
package sh.sar.basedbank.ui.home
|
package sh.sar.basedbank.ui.home
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.content.pm.PackageManager
|
||||||
|
import android.provider.Settings as AndroidSettings
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
@@ -15,6 +18,7 @@ import android.widget.ImageView
|
|||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.content.FileProvider
|
import androidx.core.content.FileProvider
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
@@ -77,6 +81,29 @@ class SettingsLoginsFragment : Fragment() {
|
|||||||
handlePickedImage(bitmap)
|
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? {
|
private fun loadAndScaleBitmap(uri: Uri): Bitmap? {
|
||||||
return try {
|
return try {
|
||||||
val ctx = requireContext()
|
val ctx = requireContext()
|
||||||
@@ -159,7 +186,11 @@ class SettingsLoginsFragment : Fragment() {
|
|||||||
val photoFile = File(ctx.cacheDir, "profile_photo_tmp.jpg")
|
val photoFile = File(ctx.cacheDir, "profile_photo_tmp.jpg")
|
||||||
val uri = FileProvider.getUriForFile(ctx, "${ctx.packageName}.fileprovider", photoFile)
|
val uri = FileProvider.getUriForFile(ctx, "${ctx.packageName}.fileprovider", photoFile)
|
||||||
cameraPhotoUri = uri
|
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)) {
|
if (target is PendingImageTarget.Mib || currentBitmap != null || hasSavedImage(ctx, target)) {
|
||||||
items += Triple(R.drawable.ic_delete, getString(R.string.profile_image_remove)) {
|
items += Triple(R.drawable.ic_delete, getString(R.string.profile_image_remove)) {
|
||||||
|
|||||||
@@ -243,6 +243,7 @@
|
|||||||
<string name="transfer_qr_invalid">Invalid or unsupported QR code</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_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="qr_camera_permission_message">Camera access is needed to scan QR codes. Please grant the permission in Settings.</string>
|
||||||
|
<string name="camera_permission_profile_message">Camera access is needed to take a photo. Please grant the permission in Settings.</string>
|
||||||
<string name="go_to_settings">Go to 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_select_source_first">Select a source account first</string>
|
||||||
<string name="transfer_enter_account_first">Enter an account number first</string>
|
<string name="transfer_enter_account_first">Enter an account number first</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user