@@ -8,6 +8,7 @@ import com.example.textrecognizer.databinding.ActivityMainBinding
8
8
import com.google.mlkit.vision.text.TextRecognition
9
9
import com.google.mlkit.vision.text.TextRecognizer
10
10
import android.Manifest
11
+ import android.app.Activity
11
12
import android.content.ClipData
12
13
import android.content.ClipboardManager
13
14
import android.content.pm.PackageManager
@@ -22,24 +23,27 @@ import com.google.mlkit.vision.text.Text
22
23
import java.util.concurrent.ExecutorService
23
24
import java.util.concurrent.Executors
24
25
import android.content.Intent
26
+ import android.net.Uri
25
27
import android.text.util.Linkify
26
28
import android.view.Menu
27
29
import android.view.MenuItem
28
-
29
- const val PREVIEW_STATE = " PreviewState"
30
- const val IMAGE_STATE = " ImageState"
30
+ import androidx.core.graphics.drawable.toBitmap
31
+ import com.github.dhaval2404.imagepicker.ImagePicker
31
32
32
33
class MainActivity : AppCompatActivity () {
33
34
34
35
private lateinit var binding: ActivityMainBinding
35
36
private lateinit var recognizer: TextRecognizer
36
37
private val TAG = " Testing"
37
38
private val SAVED_TEXT_TAG = " SavedText"
39
+
40
+ // private val SAVED_IMAGE_BITMAP = "SavedImage"
38
41
private val REQUEST_CODE_PERMISSIONS = 10
39
42
private val REQUIRED_PERMISSIONS = arrayOf(Manifest .permission.CAMERA )
40
43
41
44
lateinit var camera: Camera
42
45
var state = " "
46
+ var savedBitmap: Bitmap ? = null
43
47
44
48
private lateinit var cameraExecutor: ExecutorService
45
49
@@ -49,12 +53,18 @@ class MainActivity : AppCompatActivity() {
49
53
50
54
if (savedInstanceState != null ) {
51
55
val savedText = savedInstanceState.getString(SAVED_TEXT_TAG )
52
- if (isTextValid(savedText)) {
53
- binding.scrollView.visibility = View .VISIBLE
54
- binding.textInImage.text = savedInstanceState.getString(SAVED_TEXT_TAG )
56
+ binding.apply {
57
+ if (isTextValid(savedText)) {
58
+ scrollView.visibility = View .VISIBLE
59
+ textInImage.text = savedInstanceState.getString(SAVED_TEXT_TAG )
60
+ }
61
+ if (savedBitmap != null ) {
62
+ previewImage.visibility = View .VISIBLE
63
+ previewImage.setImageBitmap(savedBitmap)
64
+ }
65
+ // previewImage.setImageBitmap(savedInstanceState.getParcelable(SAVED_IMAGE_BITMAP))
55
66
}
56
67
}
57
-
58
68
init ()
59
69
setContentView(binding.root)
60
70
}
@@ -76,7 +86,6 @@ class MainActivity : AppCompatActivity() {
76
86
}
77
87
78
88
private fun requestPermissions () {
79
- Log .d(" testing" , " got here" )
80
89
ActivityCompat .requestPermissions(
81
90
this , REQUIRED_PERMISSIONS , REQUEST_CODE_PERMISSIONS
82
91
)
@@ -113,31 +122,52 @@ class MainActivity : AppCompatActivity() {
113
122
}
114
123
}
115
124
116
- /* override fun onCreateOptionsMenu(menu: Menu?): Boolean {
125
+ override fun onCreateOptionsMenu (menu : Menu ? ): Boolean {
117
126
menuInflater.inflate(R .menu.main_menu, menu)
118
127
return true
119
128
}
120
129
121
130
override fun onOptionsItemSelected (item : MenuItem ): Boolean {
122
- if (item.itemId == R.id.input) {
123
- state = when (state) {
124
- PREVIEW_STATE -> {
125
- item.setIcon(R.drawable.ic_photo_camera)
126
- IMAGE_STATE
127
- }
128
- IMAGE_STATE -> {
129
- item.setIcon(R.drawable.ic_image)
130
- PREVIEW_STATE
131
- }
132
- else -> {
133
- item.setIcon(R.drawable.ic_photo_camera)
134
- IMAGE_STATE
135
- }
136
- }
131
+ if (item.itemId == R .id.gallery) {
132
+ binding.scrollView.visibility = View .GONE
133
+ ImagePicker .with (this )
134
+ .galleryOnly()
135
+ .crop()
136
+ .compress(1024 )
137
+ .maxResultSize(1080 , 1080 )
138
+ .start()
139
+
140
+ return true
141
+ } else if (item.itemId == R .id.refresh) {
142
+ binding.previewImage.visibility = View .GONE
143
+ savedBitmap = null
137
144
return true
138
145
}
139
146
return super .onOptionsItemSelected(item)
140
- }*/
147
+ }
148
+
149
+ override fun onActivityResult (requestCode : Int , resultCode : Int , data : Intent ? ) {
150
+ super .onActivityResult(requestCode, resultCode, data)
151
+ when (resultCode) {
152
+ Activity .RESULT_OK -> {
153
+ // Image Uri will not be null for RESULT_OK
154
+ val uri: Uri = data?.data!!
155
+
156
+ // Use Uri object instead of File to avoid storage permissions
157
+ binding.previewImage.apply {
158
+ visibility = View .VISIBLE
159
+ setImageURI(uri)
160
+ }
161
+ // runTextRecognition(binding.previewImage.drawable.toBitmap())
162
+ }
163
+ ImagePicker .RESULT_ERROR -> {
164
+ showToast(ImagePicker .getError(data))
165
+ }
166
+ else -> {
167
+ showToast(" Task Cancelled" )
168
+ }
169
+ }
170
+ }
141
171
142
172
private fun runTextRecognition (bitmap : Bitmap ) {
143
173
val inputImage = InputImage .fromBitmap(bitmap, 0 )
@@ -204,11 +234,21 @@ class MainActivity : AppCompatActivity() {
204
234
205
235
binding.apply {
206
236
// Set up the listener for take photo button
207
- cameraCaptureButton.setOnClickListener {
208
- if (viewFinder.bitmap != null ) {
209
- runTextRecognition(viewFinder.bitmap!! )
210
- } else {
211
- showToast(getString(R .string.camera_error_default_msg))
237
+ extractTextButton.setOnClickListener {
238
+ when {
239
+ previewImage.visibility == View .VISIBLE -> {
240
+ savedBitmap = previewImage.drawable.toBitmap()
241
+ runTextRecognition(savedBitmap!! )
242
+ }
243
+ viewFinder.bitmap != null -> {
244
+ previewImage.visibility = View .VISIBLE
245
+ savedBitmap = viewFinder.bitmap
246
+ previewImage.setImageBitmap(viewFinder.bitmap!! )
247
+ runTextRecognition(savedBitmap!! )
248
+ }
249
+ else -> {
250
+ showToast(getString(R .string.camera_error_default_msg))
251
+ }
212
252
}
213
253
}
214
254
@@ -299,10 +339,14 @@ class MainActivity : AppCompatActivity() {
299
339
300
340
override fun onSaveInstanceState (outState : Bundle ) {
301
341
super .onSaveInstanceState(outState)
342
+ outState.clear()
302
343
val textInImage = (binding.textInImage.text).toString()
303
344
if (isTextValid(textInImage)) {
304
345
outState.putString(SAVED_TEXT_TAG , textInImage)
305
346
}
347
+ /* if (binding.previewImage.visibility == View.VISIBLE) {
348
+ outState.putParcelable(SAVED_IMAGE_BITMAP, binding.previewImage.drawable.toBitmap())
349
+ }*/
306
350
}
307
351
308
352
}
0 commit comments