Created
December 21, 2025 09:02
-
-
Save Sprajapati123/f5207b47084d19bbade77034be666aca to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import android.Manifest | |
| import android.app.Activity | |
| import android.content.Intent | |
| import android.net.Uri | |
| import android.os.Build | |
| import android.provider.MediaStore | |
| import android.util.Log | |
| import androidx.activity.result.ActivityResultLauncher | |
| import androidx.activity.result.ActivityResultRegistryOwner | |
| import androidx.activity.result.contract.ActivityResultContracts | |
| import androidx.core.content.ContextCompat | |
| import android.content.pm.PackageManager | |
| class ImageUtils(private val activity: Activity, private val registryOwner: ActivityResultRegistryOwner) { | |
| private lateinit var galleryLauncher: ActivityResultLauncher<Intent> | |
| private lateinit var permissionLauncher: ActivityResultLauncher<String> | |
| private var onImageSelectedCallback: ((Uri?) -> Unit)? = null | |
| fun registerLaunchers(onImageSelected: (Uri?) -> Unit) { | |
| onImageSelectedCallback = onImageSelected | |
| // Register for selecting image from gallery | |
| galleryLauncher = registryOwner.activityResultRegistry.register( | |
| "galleryLauncher", ActivityResultContracts.StartActivityForResult() | |
| ) { result -> | |
| val uri = result.data?.data | |
| if (result.resultCode == Activity.RESULT_OK && uri != null) { | |
| onImageSelectedCallback?.invoke(uri) | |
| } else { | |
| Log.e("ImageUtils", "Image selection cancelled or failed") | |
| } | |
| } | |
| // Register permission request | |
| permissionLauncher = registryOwner.activityResultRegistry.register( | |
| "permissionLauncher", ActivityResultContracts.RequestPermission() | |
| ) { isGranted -> | |
| if (isGranted) { | |
| openGallery() | |
| } else { | |
| Log.e("ImageUtils", "Permission denied") | |
| } | |
| } | |
| } | |
| fun launchImagePicker() { | |
| val permission = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { | |
| Manifest.permission.READ_MEDIA_IMAGES | |
| } else { | |
| Manifest.permission.READ_EXTERNAL_STORAGE | |
| } | |
| if (ContextCompat.checkSelfPermission(activity, permission) != PackageManager.PERMISSION_GRANTED) { | |
| permissionLauncher.launch(permission) | |
| } else { | |
| openGallery() | |
| } | |
| } | |
| private fun openGallery() { | |
| val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI).apply { | |
| type = "image/*" | |
| } | |
| galleryLauncher.launch(intent) | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment