Skip to content

Commit c35b1d4

Browse files
author
Giovanni Nic
committed
- fix: close buttons now working
- fix: returned bitmap - feat: moved to gradle 6.3
1 parent 9eac2fc commit c35b1d4

File tree

6 files changed

+58
-72
lines changed

6 files changed

+58
-72
lines changed

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

+27-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)
@@ -100,8 +109,25 @@ abstract class BaseScannerActivity : AppCompatActivity() {
100109
}
101110

102111
private fun closePreview() {
103-
previewWrap.visibility = View.GONE
112+
root_view.visibility = View.GONE
104113
viewModel.onClosePreview()
114+
finish()
115+
}
116+
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+
}
105131
}
106132

107133
abstract fun onError(throwable: Throwable)

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

+28-20
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,30 +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-
val intent = Intent(this, ScannerActivity::class.java)
64-
finish()
65-
this.startActivity(intent)
66-
}
67-
6862
closeResultPreview.setOnClickListener {
69-
val intent = Intent(this, ScannerActivity::class.java)
70-
finish()
71-
this.startActivity(intent)
63+
closeActivity()
7264
}
7365

7466
closeCropPreview.setOnClickListener {
75-
val intent = Intent(this, ScannerActivity::class.java)
76-
finish()
77-
this.startActivity(intent)
67+
closeActivity()
7868
}
7969

8070
confirmCropPreview.setOnClickListener {
@@ -85,9 +75,16 @@ class CropperActivity : AppCompatActivity() {
8575
}
8676

8777
confirmCropResult.setOnClickListener {
88-
cropResultWrap.visibility = View.GONE
89-
cropModel.onAcceptResult()
90-
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()
9188
}
9289

9390
cropPreview.setOnTouchListener { _, motionEvent ->
@@ -113,6 +110,17 @@ class CropperActivity : AppCompatActivity() {
113110
v.draw(c)
114111
return b
115112
}
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+
}
116124
}
117125

118126
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

+3-10
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(
@@ -189,7 +182,7 @@ class ScannerViewModel : ViewModel() {
189182
}
190183

191184
fun onClosePreview() {
192-
lastUri?.let {
185+
lastUri.value?.let {
193186
val file = File(it.path!!)
194187
if (file.exists()) {
195188
file.delete()

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"

0 commit comments

Comments
 (0)