From 0813b7d0df988412afc9a6640399bce07d8ac65b Mon Sep 17 00:00:00 2001 From: Giovanni Nic Date: Fri, 26 Mar 2021 09:46:26 +0100 Subject: [PATCH 1/3] fix: close button now fixed --- .../documentscanner/presentation/BaseScannerActivity.kt | 5 +++-- .../documentscanner/presentation/CropperActivity.kt | 2 ++ .../documentscanner/presentation/ScannerViewModel.kt | 9 +++++++++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt b/app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt index 782d9a0..14a9ee3 100644 --- a/app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt +++ b/app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt @@ -99,8 +99,9 @@ abstract class BaseScannerActivity : AppCompatActivity() { viewModel.onViewCreated(Loader(this), this, viewFinder) } - fun closePreview() { - finish() + private fun closePreview() { + previewWrap.visibility = View.GONE + viewModel.onClosePreview() } abstract fun onError(throwable: Throwable) diff --git a/app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt b/app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt index db8b048..a324e6a 100644 --- a/app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt +++ b/app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt @@ -60,7 +60,9 @@ class CropperActivity : AppCompatActivity() { }) acceptFinalResult.setOnClickListener { + val intent = Intent(this, ScannerActivity::class.java) finish() + this.startActivity(intent) } closeResultPreview.setOnClickListener { diff --git a/app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt b/app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt index 3088fde..f047ae1 100644 --- a/app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt +++ b/app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt @@ -187,4 +187,13 @@ class ScannerViewModel : ViewModel() { errors.value = failure.origin isBusy.value = false } + + fun onClosePreview() { + lastUri?.let { + val file = File(it.path!!) + if (file.exists()) { + file.delete() + } + } + } } From 9eac2fc786b0b9fd7d9de4dfaa0bb692780113b2 Mon Sep 17 00:00:00 2001 From: Giovanni Nic Date: Fri, 26 Mar 2021 09:52:40 +0100 Subject: [PATCH 2/3] -feat: updated version --- CHANGELOG.md | 9 ++++++++- gradle.properties | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0aefbfd..e77a5c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Not Released -# 0.1.5 +# 0.1.7 +- fixed close buttons + +# 0.1.6 +> 2021-3-25 +- see 0.1.5 + +# 0.1.5 > 2021-3-25 - Moved from CameraX to LifecycleCameraController - Enhanced image preprocessing before contours extraction diff --git a/gradle.properties b/gradle.properties index b8e9c24..276d598 100644 --- a/gradle.properties +++ b/gradle.properties @@ -20,4 +20,4 @@ android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official version_code=6 -version_name=0.1.5 \ No newline at end of file +version_name=0.1.7 \ No newline at end of file From c35b1d452d6186c51d3a129949bcba675ed07167 Mon Sep 17 00:00:00 2001 From: Giovanni Nic Date: Fri, 26 Mar 2021 16:56:57 +0100 Subject: [PATCH 3/3] - fix: close buttons now working - fix: returned bitmap - feat: moved to gradle 6.3 --- .../presentation/BaseScannerActivity.kt | 28 ++++++++++- .../presentation/CropperActivity.kt | 48 +++++++++++-------- .../presentation/CropperModel.kt | 4 -- .../presentation/ScannerViewModel.kt | 13 ++--- app/src/main/res/layout/activity_cropper.xml | 26 ---------- app/src/main/res/layout/activity_scanner.xml | 11 ----- 6 files changed, 58 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt b/app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt index 14a9ee3..f8ce4c4 100644 --- a/app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt +++ b/app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt @@ -1,6 +1,8 @@ package net.kuama.documentscanner.presentation import android.annotation.SuppressLint +import android.app.Activity +import android.content.Intent import android.graphics.Bitmap import android.os.Bundle import android.util.Log @@ -14,6 +16,7 @@ import net.kuama.documentscanner.data.Loader import net.kuama.documentscanner.domain.Failure import net.kuama.documentscanner.domain.PerspectiveTransform import java.io.File +import android.graphics.BitmapFactory @androidx.camera.core.ExperimentalGetImage abstract class BaseScannerActivity : AppCompatActivity() { @@ -42,6 +45,12 @@ abstract class BaseScannerActivity : AppCompatActivity() { } }) + viewModel.lastUri.observe(this, Observer { + val intent = Intent(this, CropperActivity::class.java) + intent.putExtra("lastUri", it.toString()) + this.startActivityForResult(intent, 0) + }) + viewModel.errors.observe(this, Observer { onError(it) Log.e(ScannerActivity::class.java.simpleName, it.message, it) @@ -100,8 +109,25 @@ abstract class BaseScannerActivity : AppCompatActivity() { } private fun closePreview() { - previewWrap.visibility = View.GONE + root_view.visibility = View.GONE viewModel.onClosePreview() + finish() + } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == Activity.RESULT_OK) { + val bitmapUri = data?.extras?.getString("croppedPath") ?: error("invalid path") + + val image: File = File(bitmapUri) + val bmOptions = BitmapFactory.Options() + val bitmap = BitmapFactory.decodeFile(image.absolutePath, bmOptions) + onDocumentAccepted(bitmap) + + image.delete() + } else { + viewModel.onViewCreated(Loader(this), this, viewFinder) + } } abstract fun onError(throwable: Throwable) diff --git a/app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt b/app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt index a324e6a..cc285a5 100644 --- a/app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt +++ b/app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt @@ -1,7 +1,7 @@ package net.kuama.documentscanner.presentation import android.annotation.SuppressLint -import android.content.Intent +import android.app.Activity import android.graphics.Bitmap import android.graphics.Canvas import android.net.Uri @@ -14,6 +14,10 @@ import androidx.core.net.toUri import androidx.lifecycle.Observer import kotlinx.android.synthetic.main.activity_cropper.* import net.kuama.documentscanner.R +import java.io.ByteArrayOutputStream +import android.content.Intent +import java.io.File +import java.io.FileOutputStream class CropperActivity : AppCompatActivity() { private lateinit var cropModel: CropperModel @@ -51,30 +55,16 @@ class CropperActivity : AppCompatActivity() { } }) - cropModel.finalDocument.observe(this, Observer { - finalResult.setImageBitmap(cropModel.finalDocument.value) - }) - cropModel.bitmapToCrop.observe(this, Observer { cropResultPreview.setImageBitmap(cropModel.bitmapToCrop.value) }) - acceptFinalResult.setOnClickListener { - val intent = Intent(this, ScannerActivity::class.java) - finish() - this.startActivity(intent) - } - closeResultPreview.setOnClickListener { - val intent = Intent(this, ScannerActivity::class.java) - finish() - this.startActivity(intent) + closeActivity() } closeCropPreview.setOnClickListener { - val intent = Intent(this, ScannerActivity::class.java) - finish() - this.startActivity(intent) + closeActivity() } confirmCropPreview.setOnClickListener { @@ -85,9 +75,16 @@ class CropperActivity : AppCompatActivity() { } confirmCropResult.setOnClickListener { - cropResultWrap.visibility = View.GONE - cropModel.onAcceptResult() - finalResultWrap.visibility = View.VISIBLE + val file = File("/storage/emulated/0/Documents/croppedDoc.jpg") + val outputStream = FileOutputStream(file) + outputStream.write(cropModel.bitmapToCrop.value?.toByteArray()) + outputStream.close() + + val resultIntent = Intent() + resultIntent.putExtra("croppedPath", "/storage/emulated/0/Documents/croppedDoc.jpg") + setResult(RESULT_OK, resultIntent) + // this.setResult(Activity.RESULT_OK) + finish() } cropPreview.setOnTouchListener { _, motionEvent -> @@ -113,6 +110,17 @@ class CropperActivity : AppCompatActivity() { v.draw(c) return b } + + private fun closeActivity() { + this.setResult(Activity.RESULT_CANCELED) + finish() + } +} +fun Bitmap.toByteArray(): ByteArray { + ByteArrayOutputStream().apply { + compress(Bitmap.CompressFormat.JPEG, 100, this) + return toByteArray() + } } private inline fun View.waitForLayout(crossinline yourAction: () -> Unit) { diff --git a/app/src/main/java/net/kuama/documentscanner/presentation/CropperModel.kt b/app/src/main/java/net/kuama/documentscanner/presentation/CropperModel.kt index b667662..21e2dc3 100644 --- a/app/src/main/java/net/kuama/documentscanner/presentation/CropperModel.kt +++ b/app/src/main/java/net/kuama/documentscanner/presentation/CropperModel.kt @@ -39,10 +39,6 @@ class CropperModel : ViewModel() { } } - fun onAcceptResult() { - finalDocument.value = bitmapToCrop.value - } - fun onCornersAccepted(bitmap: Bitmap) { perspectiveTransform( PerspectiveTransform.Params( diff --git a/app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt b/app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt index f047ae1..7ef58a2 100644 --- a/app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt +++ b/app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt @@ -2,8 +2,6 @@ package net.kuama.documentscanner.presentation import android.annotation.SuppressLint import android.content.Context -import android.content.Intent -import android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK import android.graphics.* import android.net.Uri import androidx.appcompat.app.AppCompatActivity @@ -112,18 +110,13 @@ class ScannerViewModel : ViewModel() { errors.value = exc } override fun onImageSaved(output: ImageCapture.OutputFileResults) { - lastUri = Uri.fromFile(photoFile) - - val intent = Intent(context, CropperActivity::class.java) - intent.putExtra("lastUri", lastUri.toString()) - intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK - context.startActivity(intent) + lastUri.value = Uri.fromFile(photoFile) } }) } // CameraX setup - private var lastUri: Uri? = null + var lastUri: MutableLiveData = MutableLiveData() @SuppressLint("RestrictedApi", "UnsafeExperimentalUsageError") private fun setupCamera( @@ -189,7 +182,7 @@ class ScannerViewModel : ViewModel() { } fun onClosePreview() { - lastUri?.let { + lastUri.value?.let { val file = File(it.path!!) if (file.exists()) { file.delete() diff --git a/app/src/main/res/layout/activity_cropper.xml b/app/src/main/res/layout/activity_cropper.xml index ff6dc8d..d4cad82 100644 --- a/app/src/main/res/layout/activity_cropper.xml +++ b/app/src/main/res/layout/activity_cropper.xml @@ -86,32 +86,6 @@ - - - - - - - - - - - - - -