Skip to content

Commit

Permalink
Merge pull request #7 from kuamanet/fix-close-buttons
Browse files Browse the repository at this point in the history
fix: close button now fixed
  • Loading branch information
kuamanet authored Mar 26, 2021
2 parents e111e6e + c35b1d4 commit ce59419
Show file tree
Hide file tree
Showing 8 changed files with 76 additions and 71 deletions.
9 changes: 8 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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() {
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -99,10 +108,28 @@ abstract class BaseScannerActivity : AppCompatActivity() {
viewModel.onViewCreated(Loader(this), this, viewFinder)
}

fun closePreview() {
private fun closePreview() {
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)
abstract fun onDocumentAccepted(bitmap: Bitmap)
abstract fun onClose()
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand Down Expand Up @@ -51,28 +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 {
finish()
}

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 {
Expand All @@ -83,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 ->
Expand All @@ -111,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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,6 @@ class CropperModel : ViewModel() {
}
}

fun onAcceptResult() {
finalDocument.value = bitmapToCrop.value
}

fun onCornersAccepted(bitmap: Bitmap) {
perspectiveTransform(
PerspectiveTransform.Params(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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<Uri> = MutableLiveData()

@SuppressLint("RestrictedApi", "UnsafeExperimentalUsageError")
private fun setupCamera(
Expand Down Expand Up @@ -187,4 +180,13 @@ class ScannerViewModel : ViewModel() {
errors.value = failure.origin
isBusy.value = false
}

fun onClosePreview() {
lastUri.value?.let {
val file = File(it.path!!)
if (file.exists()) {
file.delete()
}
}
}
}
26 changes: 0 additions & 26 deletions app/src/main/res/layout/activity_cropper.xml
Original file line number Diff line number Diff line change
Expand Up @@ -86,32 +86,6 @@

</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/finalResultWrap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:visibility="gone">

<com.github.chrisbanes.photoview.PhotoView
android:id="@+id/finalResult"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

<ImageButton
android:id="@+id/acceptFinalResult"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_margin="0dp"
android:background="@color/white"
android:contentDescription="@string/confirm_document"
android:padding="0dp"
android:src="@drawable/ic_baseline_arrow_back_24"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

<net.kuama.documentscanner.presentation.PaperRectangle
android:id="@+id/cropHud"
android:layout_width="match_parent"
Expand Down
11 changes: 0 additions & 11 deletions app/src/main/res/layout/activity_scanner.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,17 +64,6 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />


<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/previewWrap"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:visibility="gone">


</androidx.constraintlayout.widget.ConstraintLayout>

<ProgressBar
android:id="@+id/progress"
android:layout_width="wrap_content"
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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
version_name=0.1.7

0 comments on commit ce59419

Please sign in to comment.