Skip to content

Commit ce59419

Browse files
authored
Merge pull request #7 from kuamanet/fix-close-buttons
fix: close button now fixed
2 parents e111e6e + c35b1d4 commit ce59419

File tree

8 files changed

+76
-71
lines changed

8 files changed

+76
-71
lines changed

CHANGELOG.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
# Not Released
22

3-
# 0.1.5
3+
# 0.1.7
4+
- fixed close buttons
5+
6+
# 0.1.6
7+
> 2021-3-25
8+
- see 0.1.5
9+
10+
# 0.1.5
411
> 2021-3-25
512
- Moved from CameraX to LifecycleCameraController
613
- Enhanced image preprocessing before contours extraction

app/src/main/java/net/kuama/documentscanner/presentation/BaseScannerActivity.kt

+28-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package net.kuama.documentscanner.presentation
22

33
import android.annotation.SuppressLint
4+
import android.app.Activity
5+
import android.content.Intent
46
import android.graphics.Bitmap
57
import android.os.Bundle
68
import android.util.Log
@@ -14,6 +16,7 @@ import net.kuama.documentscanner.data.Loader
1416
import net.kuama.documentscanner.domain.Failure
1517
import net.kuama.documentscanner.domain.PerspectiveTransform
1618
import java.io.File
19+
import android.graphics.BitmapFactory
1720

1821
@androidx.camera.core.ExperimentalGetImage
1922
abstract class BaseScannerActivity : AppCompatActivity() {
@@ -42,6 +45,12 @@ abstract class BaseScannerActivity : AppCompatActivity() {
4245
}
4346
})
4447

48+
viewModel.lastUri.observe(this, Observer {
49+
val intent = Intent(this, CropperActivity::class.java)
50+
intent.putExtra("lastUri", it.toString())
51+
this.startActivityForResult(intent, 0)
52+
})
53+
4554
viewModel.errors.observe(this, Observer {
4655
onError(it)
4756
Log.e(ScannerActivity::class.java.simpleName, it.message, it)
@@ -99,10 +108,28 @@ abstract class BaseScannerActivity : AppCompatActivity() {
99108
viewModel.onViewCreated(Loader(this), this, viewFinder)
100109
}
101110

102-
fun closePreview() {
111+
private fun closePreview() {
112+
root_view.visibility = View.GONE
113+
viewModel.onClosePreview()
103114
finish()
104115
}
105116

117+
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
118+
super.onActivityResult(requestCode, resultCode, data)
119+
if (resultCode == Activity.RESULT_OK) {
120+
val bitmapUri = data?.extras?.getString("croppedPath") ?: error("invalid path")
121+
122+
val image: File = File(bitmapUri)
123+
val bmOptions = BitmapFactory.Options()
124+
val bitmap = BitmapFactory.decodeFile(image.absolutePath, bmOptions)
125+
onDocumentAccepted(bitmap)
126+
127+
image.delete()
128+
} else {
129+
viewModel.onViewCreated(Loader(this), this, viewFinder)
130+
}
131+
}
132+
106133
abstract fun onError(throwable: Throwable)
107134
abstract fun onDocumentAccepted(bitmap: Bitmap)
108135
abstract fun onClose()

app/src/main/java/net/kuama/documentscanner/presentation/CropperActivity.kt

+28-18
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package net.kuama.documentscanner.presentation
22

33
import android.annotation.SuppressLint
4-
import android.content.Intent
4+
import android.app.Activity
55
import android.graphics.Bitmap
66
import android.graphics.Canvas
77
import android.net.Uri
@@ -14,6 +14,10 @@ import androidx.core.net.toUri
1414
import androidx.lifecycle.Observer
1515
import kotlinx.android.synthetic.main.activity_cropper.*
1616
import net.kuama.documentscanner.R
17+
import java.io.ByteArrayOutputStream
18+
import android.content.Intent
19+
import java.io.File
20+
import java.io.FileOutputStream
1721

1822
class CropperActivity : AppCompatActivity() {
1923
private lateinit var cropModel: CropperModel
@@ -51,28 +55,16 @@ class CropperActivity : AppCompatActivity() {
5155
}
5256
})
5357

54-
cropModel.finalDocument.observe(this, Observer {
55-
finalResult.setImageBitmap(cropModel.finalDocument.value)
56-
})
57-
5858
cropModel.bitmapToCrop.observe(this, Observer {
5959
cropResultPreview.setImageBitmap(cropModel.bitmapToCrop.value)
6060
})
6161

62-
acceptFinalResult.setOnClickListener {
63-
finish()
64-
}
65-
6662
closeResultPreview.setOnClickListener {
67-
val intent = Intent(this, ScannerActivity::class.java)
68-
finish()
69-
this.startActivity(intent)
63+
closeActivity()
7064
}
7165

7266
closeCropPreview.setOnClickListener {
73-
val intent = Intent(this, ScannerActivity::class.java)
74-
finish()
75-
this.startActivity(intent)
67+
closeActivity()
7668
}
7769

7870
confirmCropPreview.setOnClickListener {
@@ -83,9 +75,16 @@ class CropperActivity : AppCompatActivity() {
8375
}
8476

8577
confirmCropResult.setOnClickListener {
86-
cropResultWrap.visibility = View.GONE
87-
cropModel.onAcceptResult()
88-
finalResultWrap.visibility = View.VISIBLE
78+
val file = File("/storage/emulated/0/Documents/croppedDoc.jpg")
79+
val outputStream = FileOutputStream(file)
80+
outputStream.write(cropModel.bitmapToCrop.value?.toByteArray())
81+
outputStream.close()
82+
83+
val resultIntent = Intent()
84+
resultIntent.putExtra("croppedPath", "/storage/emulated/0/Documents/croppedDoc.jpg")
85+
setResult(RESULT_OK, resultIntent)
86+
// this.setResult(Activity.RESULT_OK)
87+
finish()
8988
}
9089

9190
cropPreview.setOnTouchListener { _, motionEvent ->
@@ -111,6 +110,17 @@ class CropperActivity : AppCompatActivity() {
111110
v.draw(c)
112111
return b
113112
}
113+
114+
private fun closeActivity() {
115+
this.setResult(Activity.RESULT_CANCELED)
116+
finish()
117+
}
118+
}
119+
fun Bitmap.toByteArray(): ByteArray {
120+
ByteArrayOutputStream().apply {
121+
compress(Bitmap.CompressFormat.JPEG, 100, this)
122+
return toByteArray()
123+
}
114124
}
115125

116126
private inline fun View.waitForLayout(crossinline yourAction: () -> Unit) {

app/src/main/java/net/kuama/documentscanner/presentation/CropperModel.kt

-4
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,6 @@ class CropperModel : ViewModel() {
3939
}
4040
}
4141

42-
fun onAcceptResult() {
43-
finalDocument.value = bitmapToCrop.value
44-
}
45-
4642
fun onCornersAccepted(bitmap: Bitmap) {
4743
perspectiveTransform(
4844
PerspectiveTransform.Params(

app/src/main/java/net/kuama/documentscanner/presentation/ScannerViewModel.kt

+11-9
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package net.kuama.documentscanner.presentation
22

33
import android.annotation.SuppressLint
44
import android.content.Context
5-
import android.content.Intent
6-
import android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK
75
import android.graphics.*
86
import android.net.Uri
97
import androidx.appcompat.app.AppCompatActivity
@@ -112,18 +110,13 @@ class ScannerViewModel : ViewModel() {
112110
errors.value = exc
113111
}
114112
override fun onImageSaved(output: ImageCapture.OutputFileResults) {
115-
lastUri = Uri.fromFile(photoFile)
116-
117-
val intent = Intent(context, CropperActivity::class.java)
118-
intent.putExtra("lastUri", lastUri.toString())
119-
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or FLAG_ACTIVITY_CLEAR_TASK
120-
context.startActivity(intent)
113+
lastUri.value = Uri.fromFile(photoFile)
121114
}
122115
})
123116
}
124117

125118
// CameraX setup
126-
private var lastUri: Uri? = null
119+
var lastUri: MutableLiveData<Uri> = MutableLiveData()
127120

128121
@SuppressLint("RestrictedApi", "UnsafeExperimentalUsageError")
129122
private fun setupCamera(
@@ -187,4 +180,13 @@ class ScannerViewModel : ViewModel() {
187180
errors.value = failure.origin
188181
isBusy.value = false
189182
}
183+
184+
fun onClosePreview() {
185+
lastUri.value?.let {
186+
val file = File(it.path!!)
187+
if (file.exists()) {
188+
file.delete()
189+
}
190+
}
191+
}
190192
}

app/src/main/res/layout/activity_cropper.xml

-26
Original file line numberDiff line numberDiff line change
@@ -86,32 +86,6 @@
8686

8787
</androidx.constraintlayout.widget.ConstraintLayout>
8888

89-
<androidx.constraintlayout.widget.ConstraintLayout
90-
android:id="@+id/finalResultWrap"
91-
android:layout_width="match_parent"
92-
android:layout_height="match_parent"
93-
android:background="@color/black"
94-
android:visibility="gone">
95-
96-
<com.github.chrisbanes.photoview.PhotoView
97-
android:id="@+id/finalResult"
98-
android:layout_width="match_parent"
99-
android:layout_height="match_parent"/>
100-
101-
<ImageButton
102-
android:id="@+id/acceptFinalResult"
103-
android:layout_width="60dp"
104-
android:layout_height="60dp"
105-
android:layout_margin="0dp"
106-
android:background="@color/white"
107-
android:contentDescription="@string/confirm_document"
108-
android:padding="0dp"
109-
android:src="@drawable/ic_baseline_arrow_back_24"
110-
app:layout_constraintBottom_toBottomOf="parent"
111-
app:layout_constraintEnd_toEndOf="parent" />
112-
113-
</androidx.constraintlayout.widget.ConstraintLayout>
114-
11589
<net.kuama.documentscanner.presentation.PaperRectangle
11690
android:id="@+id/cropHud"
11791
android:layout_width="match_parent"

app/src/main/res/layout/activity_scanner.xml

-11
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,6 @@
6464
app:layout_constraintEnd_toEndOf="parent"
6565
app:layout_constraintTop_toTopOf="parent" />
6666

67-
68-
<androidx.constraintlayout.widget.ConstraintLayout
69-
android:id="@+id/previewWrap"
70-
android:layout_width="match_parent"
71-
android:layout_height="match_parent"
72-
android:background="@color/black"
73-
android:visibility="gone">
74-
75-
76-
</androidx.constraintlayout.widget.ConstraintLayout>
77-
7867
<ProgressBar
7968
android:id="@+id/progress"
8069
android:layout_width="wrap_content"

gradle.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,4 @@ android.enableJetifier=true
2020
# Kotlin code style for this project: "official" or "obsolete":
2121
kotlin.code.style=official
2222
version_code=6
23-
version_name=0.1.5
23+
version_name=0.1.7

0 commit comments

Comments
 (0)