From 812a9422d5847a0a4955b03f17fc600ada1ea242 Mon Sep 17 00:00:00 2001 From: Raghunandan Kavi Date: Wed, 27 Jan 2021 20:41:49 +0530 Subject: [PATCH 1/6] Changes for android 11 and updating libs. --- app/build.gradle | 33 ++++++++++++------- app/src/main/AndroidManifest.xml | 10 ++++++ .../imagepickercompression/ParentActivity.kt | 5 +-- .../activity/MainActivity.kt | 25 +++++++------- build.gradle | 6 ++-- gradle/wrapper/gradle-wrapper.properties | 4 +-- 6 files changed, 51 insertions(+), 32 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 06d8497..4b7a35e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,15 +2,13 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' - android { - compileSdkVersion 29 - buildToolsVersion "29.0.2" + compileSdkVersion 30 + buildToolsVersion "30.0.3" defaultConfig { applicationId "com.shashankpednekar.imagepickercompression" minSdkVersion 21 - targetSdkVersion 29 + targetSdkVersion 30 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -21,21 +19,32 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + kotlinOptions { + jvmTarget = '1.8' + } + buildFeatures { + viewBinding true + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'androidx.test.ext:junit:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0' + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'androidx.core:core-ktx:1.3.2' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + testImplementation 'junit:junit:4.13.1' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' // Coroutines implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinerVer" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinerVer" - implementation "com.github.bumptech.glide:glide:4.10.0" + implementation "com.github.bumptech.glide:glide:4.11.0" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index fcbf4c1..9936e0f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,6 +3,16 @@ xmlns:tools="http://schemas.android.com/tools" package="com.shashankpednekar.imagepickercompression"> + + + + + + + + + + , shouldRequestIfNotAllowed: Boolean = false, requestCode: Int = -1): Boolean { var isGranted = true diff --git a/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt b/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt index b450c83..4f0d04f 100644 --- a/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt +++ b/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt @@ -9,17 +9,17 @@ import android.os.Bundle import android.os.Environment import android.os.Parcelable import android.provider.MediaStore -import android.util.Log import android.view.View import android.widget.Toast import androidx.core.content.FileProvider import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.shashankpednekar.imagepickercompression.BuildConfig +import com.shashankpednekar.imagepickercompression.BuildConfig.APPLICATION_ID import com.shashankpednekar.imagepickercompression.ParentActivity import com.shashankpednekar.imagepickercompression.R +import com.shashankpednekar.imagepickercompression.databinding.ActivityMainBinding import com.shashankpednekar.imagepickercompression.utils.compressImageFile -import kotlinx.android.synthetic.main.activity_main.* + import kotlinx.coroutines.* import java.io.File import java.util.ArrayList @@ -27,17 +27,20 @@ import java.util.ArrayList private const val REQ_CAPTURE = 100 private const val RES_IMAGE = 100 -class MainActivity : ParentActivity(R.layout.activity_main) { +class MainActivity : ParentActivity() { private var queryImageUrl: String = "" private val tag = javaClass.simpleName private var imgPath: String = "" private var imageUri: Uri? = null private val permissions = arrayOf(Manifest.permission.CAMERA) + private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - - btn_capture.setOnClickListener { + binding = ActivityMainBinding.inflate(layoutInflater) + val view = binding.root + setContentView(view) + binding.btnCapture.setOnClickListener { if (isPermissionsAllowed(permissions, true, REQ_CAPTURE)) { chooseImage() } @@ -117,7 +120,7 @@ class MainActivity : ParentActivity(R.layout.activity_main) { file.createNewFile() imageUri = FileProvider.getUriForFile( this, - BuildConfig.APPLICATION_ID + getString(R.string.file_provider_name), + APPLICATION_ID + getString(R.string.file_provider_name), file ) imgPath = file.absolutePath @@ -143,7 +146,7 @@ class MainActivity : ParentActivity(R.layout.activity_main) { private fun handleImageRequest(data: Intent?) { val exceptionHandler = CoroutineExceptionHandler { _, t -> t.printStackTrace() - progressBar.visibility = View.GONE + binding.progressBar.visibility = View.GONE Toast.makeText( this, t.localizedMessage ?: getString(R.string.some_err), @@ -152,7 +155,7 @@ class MainActivity : ParentActivity(R.layout.activity_main) { } GlobalScope.launch(Dispatchers.Main + exceptionHandler) { - progressBar.visibility = View.VISIBLE + binding.progressBar.visibility = View.VISIBLE if (data?.data != null) { //Photo from gallery imageUri = data.data @@ -171,9 +174,9 @@ class MainActivity : ParentActivity(R.layout.activity_main) { .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .load(queryImageUrl) - .into(iv_img) + .into(binding.ivImg) } - progressBar.visibility = View.GONE + binding.progressBar.visibility = View.GONE } } diff --git a/build.gradle b/build.gradle index 4aec5d1..e15cc3e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,15 +1,15 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.3.50' - ext.coroutinerVer = "1.1.1" + ext.kotlin_version = '1.4.21' + ext.coroutinerVer = "1.4.2" repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.5.1' + classpath 'com.android.tools.build:gradle:4.1.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index beded37..353b614 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Oct 23 14:59:16 IST 2019 +#Wed Jan 27 20:29:34 IST 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip From 937eb1c6e4308952ae9a19ba72c4538a759ed0ff Mon Sep 17 00:00:00 2001 From: Raghunandan Kavi Date: Mon, 22 Feb 2021 21:51:29 +0530 Subject: [PATCH 2/6] Use of activity results api for permissions. --- app/build.gradle | 18 ++-- .../imagepickercompression/ParentActivity.kt | 53 ---------- .../activity/MainActivity.kt | 97 ++++++++++--------- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 5 files changed, 65 insertions(+), 107 deletions(-) delete mode 100644 app/src/main/java/com/shashankpednekar/imagepickercompression/ParentActivity.kt diff --git a/app/build.gradle b/app/build.gradle index 4b7a35e..bd8e056 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,12 +2,14 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' + android { compileSdkVersion 30 buildToolsVersion "30.0.3" defaultConfig { applicationId "com.shashankpednekar.imagepickercompression" - minSdkVersion 21 + minSdkVersion 23 targetSdkVersion 30 versionCode 1 versionName "1.0" @@ -20,15 +22,17 @@ android { } } + viewBinding { + enabled true + } + compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + kotlinOptions { - jvmTarget = '1.8' - } - buildFeatures { - viewBinding true + jvmTarget = "1.8" } } @@ -46,5 +50,7 @@ dependencies { implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinerVer" implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutinerVer" - implementation "com.github.bumptech.glide:glide:4.11.0" + implementation "com.github.bumptech.glide:glide:4.12.0" + implementation 'androidx.activity:activity-ktx:1.3.0-alpha02' + implementation 'androidx.fragment:fragment-ktx:1.3.0' } diff --git a/app/src/main/java/com/shashankpednekar/imagepickercompression/ParentActivity.kt b/app/src/main/java/com/shashankpednekar/imagepickercompression/ParentActivity.kt deleted file mode 100644 index f16147a..0000000 --- a/app/src/main/java/com/shashankpednekar/imagepickercompression/ParentActivity.kt +++ /dev/null @@ -1,53 +0,0 @@ -package com.shashankpednekar.imagepickercompression - -import android.annotation.SuppressLint -import android.content.pm.PackageManager -import android.os.Build -import androidx.appcompat.app.AppCompatActivity -import androidx.core.content.ContextCompat - -@SuppressLint("Registered") -open class ParentActivity : AppCompatActivity() { - - fun isPermissionsAllowed(permissions: Array, shouldRequestIfNotAllowed: Boolean = false, requestCode: Int = -1): Boolean { - var isGranted = true - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - for (permission in permissions) { - isGranted = ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED - if (!isGranted) - break - } - } - if (!isGranted && shouldRequestIfNotAllowed) { - if (requestCode.equals(-1)) - throw RuntimeException("Send request code in third parameter") - requestRequiredPermissions(permissions, requestCode) - } - - return isGranted - } - - fun requestRequiredPermissions(permissions: Array, requestCode: Int) { - val pendingPermissions: ArrayList = ArrayList() - permissions.forEachIndexed { index, permission -> - if (ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_DENIED) - pendingPermissions.add(permission) - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - val array = arrayOfNulls(pendingPermissions.size) - pendingPermissions.toArray(array) - requestPermissions(array, requestCode) - } - } - - fun isAllPermissionsGranted(grantResults: IntArray): Boolean { - var isGranted = true - for (grantResult in grantResults) { - isGranted = grantResult.equals(PackageManager.PERMISSION_GRANTED) - if (!isGranted) - break - } - return isGranted - } -} \ No newline at end of file diff --git a/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt b/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt index 4f0d04f..73014bf 100644 --- a/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt +++ b/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt @@ -2,8 +2,10 @@ package com.shashankpednekar.imagepickercompression.activity import android.Manifest import android.app.Activity +import android.app.AlertDialog import android.content.Context import android.content.Intent +import android.content.pm.PackageManager import android.net.Uri import android.os.Bundle import android.os.Environment @@ -11,76 +13,52 @@ import android.os.Parcelable import android.provider.MediaStore import android.view.View import android.widget.Toast +import androidx.activity.result.contract.ActivityResultContracts +import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat import androidx.core.content.FileProvider import com.bumptech.glide.Glide import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.shashankpednekar.imagepickercompression.BuildConfig.APPLICATION_ID -import com.shashankpednekar.imagepickercompression.ParentActivity +import com.shashankpednekar.imagepickercompression.BuildConfig import com.shashankpednekar.imagepickercompression.R import com.shashankpednekar.imagepickercompression.databinding.ActivityMainBinding import com.shashankpednekar.imagepickercompression.utils.compressImageFile - +import kotlinx.android.synthetic.main.activity_main.* import kotlinx.coroutines.* import java.io.File import java.util.ArrayList -private const val REQ_CAPTURE = 100 -private const val RES_IMAGE = 100 +class MainActivity : AppCompatActivity() { -class MainActivity : ParentActivity() { private var queryImageUrl: String = "" - private val tag = javaClass.simpleName private var imgPath: String = "" private var imageUri: Uri? = null - private val permissions = arrayOf(Manifest.permission.CAMERA) private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + binding = ActivityMainBinding.inflate(layoutInflater) val view = binding.root setContentView(view) - binding.btnCapture.setOnClickListener { - if (isPermissionsAllowed(permissions, true, REQ_CAPTURE)) { - chooseImage() - } - } - } - override fun onRequestPermissionsResult( - requestCode: Int, - permissions: Array, - grantResults: IntArray - ) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults) - when (requestCode) { - REQ_CAPTURE -> { - if (isAllPermissionsGranted(grantResults)) { - chooseImage() - } else { - Toast.makeText( + binding.btnCapture.setOnClickListener { + when { + ContextCompat.checkSelfPermission( this, - getString(R.string.permission_not_granted), - Toast.LENGTH_SHORT - ).show() + Manifest.permission.CAMERA + ) == PackageManager.PERMISSION_GRANTED -> { + chooseImage() } + shouldShowRequestPermissionRationale(Manifest.permission.CAMERA) -> showRationale() + else -> requestCameraPermission.launch(Manifest.permission.CAMERA) } } } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) - when (requestCode) { - RES_IMAGE -> { - if (resultCode == Activity.RESULT_OK) { - handleImageRequest(data) - } - } - } - } private fun chooseImage() { - startActivityForResult(getPickImageIntent(), RES_IMAGE) + launchIntent.launch(getPickImageIntent()) } private fun getPickImageIntent(): Intent? { @@ -120,7 +98,7 @@ class MainActivity : ParentActivity() { file.createNewFile() imageUri = FileProvider.getUriForFile( this, - APPLICATION_ID + getString(R.string.file_provider_name), + BuildConfig.APPLICATION_ID + getString(R.string.file_provider_name), file ) imgPath = file.absolutePath @@ -146,7 +124,7 @@ class MainActivity : ParentActivity() { private fun handleImageRequest(data: Intent?) { val exceptionHandler = CoroutineExceptionHandler { _, t -> t.printStackTrace() - binding.progressBar.visibility = View.GONE + progressBar.visibility = View.GONE Toast.makeText( this, t.localizedMessage ?: getString(R.string.some_err), @@ -155,14 +133,14 @@ class MainActivity : ParentActivity() { } GlobalScope.launch(Dispatchers.Main + exceptionHandler) { - binding.progressBar.visibility = View.VISIBLE + progressBar.visibility = View.VISIBLE if (data?.data != null) { //Photo from gallery imageUri = data.data queryImageUrl = imageUri?.path!! queryImageUrl = compressImageFile(queryImageUrl, false, imageUri!!) } else { - queryImageUrl = imgPath ?: "" + queryImageUrl = imgPath compressImageFile(queryImageUrl, uri = imageUri!!) } imageUri = Uri.fromFile(File(queryImageUrl)) @@ -174,11 +152,38 @@ class MainActivity : ParentActivity() { .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .load(queryImageUrl) - .into(binding.ivImg) + .into(iv_img) } - binding.progressBar.visibility = View.GONE + progressBar.visibility = View.GONE } + } + private fun showRationale() { + AlertDialog.Builder(this) + .setMessage("Permission required for Bluetooth") + .setPositiveButton( + "Allow" + ) { dialog, button -> + requestCameraPermission.launch(Manifest.permission.BLUETOOTH) + } + .setNegativeButton( + "Deny" + ) { dialog, button -> } + .show() } + private val requestCameraPermission = + registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> + if (isGranted) { + chooseImage() + } + } + + private val launchIntent = + registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> + if (result.resultCode == Activity.RESULT_OK) { + handleImageRequest(result.data) + } + } + } diff --git a/build.gradle b/build.gradle index e15cc3e..e8dac66 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.4.21' + ext.kotlin_version = '1.4.30' ext.coroutinerVer = "1.4.2" repositories { google() diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 353b614..39ca0a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,4 +1,4 @@ -#Wed Jan 27 20:29:34 IST 2021 +#Mon Feb 22 21:42:00 IST 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From 2686a922bb8cfee245b407b6a308968824004789 Mon Sep 17 00:00:00 2001 From: Raghunandan Kavi Date: Tue, 23 Feb 2021 09:26:22 +0530 Subject: [PATCH 3/6] Use of view binding and use of camera permission. --- .../activity/MainActivity.kt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt b/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt index 73014bf..40837e3 100644 --- a/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt +++ b/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt @@ -23,7 +23,6 @@ import com.shashankpednekar.imagepickercompression.BuildConfig import com.shashankpednekar.imagepickercompression.R import com.shashankpednekar.imagepickercompression.databinding.ActivityMainBinding import com.shashankpednekar.imagepickercompression.utils.compressImageFile -import kotlinx.android.synthetic.main.activity_main.* import kotlinx.coroutines.* import java.io.File import java.util.ArrayList @@ -105,7 +104,6 @@ class MainActivity : AppCompatActivity() { return imageUri!! } - private fun addIntentsToList( context: Context, list: MutableList, @@ -124,7 +122,7 @@ class MainActivity : AppCompatActivity() { private fun handleImageRequest(data: Intent?) { val exceptionHandler = CoroutineExceptionHandler { _, t -> t.printStackTrace() - progressBar.visibility = View.GONE + binding.progressBar.visibility = View.GONE Toast.makeText( this, t.localizedMessage ?: getString(R.string.some_err), @@ -133,7 +131,7 @@ class MainActivity : AppCompatActivity() { } GlobalScope.launch(Dispatchers.Main + exceptionHandler) { - progressBar.visibility = View.VISIBLE + binding.progressBar.visibility = View.VISIBLE if (data?.data != null) { //Photo from gallery imageUri = data.data @@ -152,19 +150,19 @@ class MainActivity : AppCompatActivity() { .diskCacheStrategy(DiskCacheStrategy.NONE) .skipMemoryCache(true) .load(queryImageUrl) - .into(iv_img) + .into(binding.ivImg) } - progressBar.visibility = View.GONE + binding.progressBar.visibility = View.GONE } } private fun showRationale() { AlertDialog.Builder(this) - .setMessage("Permission required for Bluetooth") + .setMessage("Permission required for Camera") .setPositiveButton( "Allow" ) { dialog, button -> - requestCameraPermission.launch(Manifest.permission.BLUETOOTH) + requestCameraPermission.launch(Manifest.permission.CAMERA) } .setNegativeButton( "Deny" From 47ac0078f09d9470f82feec8ffc9ae8c31d4e981 Mon Sep 17 00:00:00 2001 From: Raghunandan Kavi Date: Tue, 23 Feb 2021 09:30:06 +0530 Subject: [PATCH 4/6] Remove android extensions. --- app/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index bd8e056..fcc532c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,9 +1,6 @@ apply plugin: 'com.android.application' - apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' - android { compileSdkVersion 30 buildToolsVersion "30.0.3" From 835865cae27324305da0fcc2083afa30dbd6c69a Mon Sep 17 00:00:00 2001 From: Raghunandan Kavi Date: Tue, 23 Feb 2021 13:39:54 +0530 Subject: [PATCH 5/6] There is no need for camera permission if you are just taking photos from a external camera app. --- app/src/main/AndroidManifest.xml | 2 -- .../activity/MainActivity.kt | 30 ------------------- 2 files changed, 32 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9936e0f..6be4061 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,8 +13,6 @@ - - { chooseImage() - } - shouldShowRequestPermissionRationale(Manifest.permission.CAMERA) -> showRationale() - else -> requestCameraPermission.launch(Manifest.permission.CAMERA) - } } } @@ -156,27 +147,6 @@ class MainActivity : AppCompatActivity() { } } - private fun showRationale() { - AlertDialog.Builder(this) - .setMessage("Permission required for Camera") - .setPositiveButton( - "Allow" - ) { dialog, button -> - requestCameraPermission.launch(Manifest.permission.CAMERA) - } - .setNegativeButton( - "Deny" - ) { dialog, button -> } - .show() - } - - private val requestCameraPermission = - registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted -> - if (isGranted) { - chooseImage() - } - } - private val launchIntent = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> if (result.resultCode == Activity.RESULT_OK) { From 46f029cc220dcd7611fd94edec8c0e575e693e10 Mon Sep 17 00:00:00 2001 From: Raghunandan Kavi Date: Tue, 23 Feb 2021 14:02:10 +0530 Subject: [PATCH 6/6] Suppress inappropriate blocking method call. We are use Dispatchers.IO() and we are doing io operation. --- .../shashankpednekar/imagepickercompression/utils/FileUtils.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/shashankpednekar/imagepickercompression/utils/FileUtils.kt b/app/src/main/java/com/shashankpednekar/imagepickercompression/utils/FileUtils.kt index ef59d0f..9e7f67f 100644 --- a/app/src/main/java/com/shashankpednekar/imagepickercompression/utils/FileUtils.kt +++ b/app/src/main/java/com/shashankpednekar/imagepickercompression/utils/FileUtils.kt @@ -17,6 +17,7 @@ import java.util.* private const val tag = "FileUtils" +@Suppress("BlockingMethodInNonBlockingContext") suspend fun Activity.compressImageFile( path: String, shouldOverride: Boolean = true,