Commit 22ffcc53 authored by Mygod's avatar Mygod

Refine QR code decoding

parent b69c20d0
...@@ -35,6 +35,7 @@ import android.support.v4.app.TaskStackBuilder ...@@ -35,6 +35,7 @@ import android.support.v4.app.TaskStackBuilder
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.support.v7.widget.Toolbar import android.support.v7.widget.Toolbar
import android.util.Log
import android.view.MenuItem import android.view.MenuItem
import android.widget.Toast import android.widget.Toast
import com.github.shadowsocks.App.Companion.app import com.github.shadowsocks.App.Companion.app
...@@ -140,26 +141,26 @@ class ScannerActivity : AppCompatActivity(), ZXingScannerView.ResultHandler, Too ...@@ -140,26 +141,26 @@ class ScannerActivity : AppCompatActivity(), ZXingScannerView.ResultHandler, Too
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
when (requestCode) { when (requestCode) {
REQUEST_IMPORT, REQUEST_IMPORT_OR_FINISH -> if (resultCode == Activity.RESULT_OK) { REQUEST_IMPORT, REQUEST_IMPORT_OR_FINISH -> if (resultCode == Activity.RESULT_OK) {
var list = listOfNotNull(data?.data)
val clipData = data?.clipData
if (clipData != null) list += (0 until clipData.itemCount).map { clipData.getItemAt(it).uri }
val resolver = contentResolver
var success = false var success = false
val detector = BarcodeDetector.Builder(getApplicationContext()) val detector = BarcodeDetector.Builder(this)
.setBarcodeFormats(Barcode.DATA_MATRIX or Barcode.QR_CODE) .setBarcodeFormats(Barcode.QR_CODE)
.build() .build()
for (uri in list) try { if (detector.isOperational) {
val bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri)) var list = listOfNotNull(data?.data)
val frame = Frame.Builder().setBitmap(bitmap).build() val clipData = data?.clipData
val barcodes = detector.detect(frame) if (clipData != null) list += (0 until clipData.itemCount).map { clipData.getItemAt(it).uri }
val value = barcodes.valueAt(0).rawValue val resolver = contentResolver
Profile.findAll(value).forEach { for (uri in list) try {
ProfileManager.createProfile(it) val barcodes = detector.detect(Frame.Builder()
success = true .setBitmap(BitmapFactory.decodeStream(resolver.openInputStream(uri))).build())
for (i in 0 until barcodes.size()) Profile.findAll(barcodes.valueAt(i).rawValue).forEach {
ProfileManager.createProfile(it)
success = true
}
} catch (e: Exception) {
app.track(e)
} }
} catch (e: Exception) { } else Log.w("ScannerActivity", "Google vision isn't operational.")
app.track(e)
}
Toast.makeText(this, if (success) R.string.action_import_msg else R.string.action_import_err, Toast.makeText(this, if (success) R.string.action_import_msg else R.string.action_import_err,
Toast.LENGTH_SHORT).show() Toast.LENGTH_SHORT).show()
finish() finish()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment