diff --git a/app/build.gradle b/app/build.gradle
index 06d8497..fcc532c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,16 +1,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
+ minSdkVersion 23
+ targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -21,21 +18,36 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
+
+ viewBinding {
+ enabled true
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ kotlinOptions {
+ jvmTarget = "1.8"
+ }
}
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.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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index fcbf4c1..6be4061 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -3,7 +3,15 @@
xmlns:tools="http://schemas.android.com/tools"
package="com.shashankpednekar.imagepickercompression">
-
+
+
+
+
+
+
+
+
+
, 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 b450c83..3f4c706 100644
--- a/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt
+++ b/app/src/main/java/com/shashankpednekar/imagepickercompression/activity/MainActivity.kt
@@ -2,82 +2,53 @@ 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
import android.os.Parcelable
import android.provider.MediaStore
-import android.util.Log
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
-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
-private const val REQ_CAPTURE = 100
-private const val RES_IMAGE = 100
+class MainActivity : AppCompatActivity() {
-class MainActivity : ParentActivity(R.layout.activity_main) {
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 {
- if (isPermissionsAllowed(permissions, true, REQ_CAPTURE)) {
- chooseImage()
- }
- }
- }
+ binding = ActivityMainBinding.inflate(layoutInflater)
+ val view = binding.root
+ setContentView(view)
- override fun onRequestPermissionsResult(
- requestCode: Int,
- permissions: Array,
- grantResults: IntArray
- ) {
- super.onRequestPermissionsResult(requestCode, permissions, grantResults)
- when (requestCode) {
- REQ_CAPTURE -> {
- if (isAllPermissionsGranted(grantResults)) {
+ binding.btnCapture.setOnClickListener {
chooseImage()
- } else {
- Toast.makeText(
- this,
- getString(R.string.permission_not_granted),
- Toast.LENGTH_SHORT
- ).show()
- }
- }
}
}
- 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? {
@@ -124,7 +95,6 @@ class MainActivity : ParentActivity(R.layout.activity_main) {
return imageUri!!
}
-
private fun addIntentsToList(
context: Context,
list: MutableList,
@@ -143,7 +113,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,14 +122,14 @@ 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
queryImageUrl = imageUri?.path!!
queryImageUrl = compressImageFile(queryImageUrl, false, imageUri!!)
} else {
- queryImageUrl = imgPath ?: ""
+ queryImageUrl = imgPath
compressImageFile(queryImageUrl, uri = imageUri!!)
}
imageUri = Uri.fromFile(File(queryImageUrl))
@@ -171,11 +141,17 @@ 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
}
-
}
+ private val launchIntent =
+ registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == Activity.RESULT_OK) {
+ handleImageRequest(result.data)
+ }
+ }
+
}
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,
diff --git a/build.gradle b/build.gradle
index 4aec5d1..e8dac66 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.30'
+ 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..39ca0a2 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
+#Mon Feb 22 21:42:00 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