Commit b69c20d0 authored by Max Lv's avatar Max Lv

Use mobile vision APIs for QR code from files

parent c71c6ffe
...@@ -60,6 +60,7 @@ dependencies { ...@@ -60,6 +60,7 @@ dependencies {
implementation 'com.evernote:android-job:1.2.2' implementation 'com.evernote:android-job:1.2.2'
implementation "com.google.android.gms:play-services-ads:$playServicesVersion" implementation "com.google.android.gms:play-services-ads:$playServicesVersion"
implementation "com.google.android.gms:play-services-analytics:$playServicesVersion" implementation "com.google.android.gms:play-services-analytics:$playServicesVersion"
implementation "com.google.android.gms:play-services-vision:$playServicesVersion"
implementation "com.google.firebase:firebase-config:$playServicesVersion" implementation "com.google.firebase:firebase-config:$playServicesVersion"
implementation 'com.j256.ormlite:ormlite-android:5.0' implementation 'com.j256.ormlite:ormlite-android:5.0'
implementation 'com.mikepenz:crossfader:1.5.2' implementation 'com.mikepenz:crossfader:1.5.2'
......
...@@ -41,8 +41,11 @@ import com.github.shadowsocks.App.Companion.app ...@@ -41,8 +41,11 @@ import com.github.shadowsocks.App.Companion.app
import com.github.shadowsocks.database.Profile import com.github.shadowsocks.database.Profile
import com.github.shadowsocks.database.ProfileManager import com.github.shadowsocks.database.ProfileManager
import com.github.shadowsocks.utils.resolveResourceId import com.github.shadowsocks.utils.resolveResourceId
import com.google.zxing.* import com.google.zxing.Result
import com.google.zxing.common.HybridBinarizer import com.google.android.gms.vision.Frame
import com.google.android.gms.vision.barcode.Barcode
import com.google.android.gms.vision.barcode.BarcodeDetector
import me.dm7.barcodescanner.zxing.ZXingScannerView import me.dm7.barcodescanner.zxing.ZXingScannerView
class ScannerActivity : AppCompatActivity(), ZXingScannerView.ResultHandler, Toolbar.OnMenuItemClickListener { class ScannerActivity : AppCompatActivity(), ZXingScannerView.ResultHandler, Toolbar.OnMenuItemClickListener {
...@@ -50,8 +53,6 @@ class ScannerActivity : AppCompatActivity(), ZXingScannerView.ResultHandler, Too ...@@ -50,8 +53,6 @@ class ScannerActivity : AppCompatActivity(), ZXingScannerView.ResultHandler, Too
private const val MY_PERMISSIONS_REQUEST_CAMERA = 1 private const val MY_PERMISSIONS_REQUEST_CAMERA = 1
private const val REQUEST_IMPORT = 2 private const val REQUEST_IMPORT = 2
private const val REQUEST_IMPORT_OR_FINISH = 3 private const val REQUEST_IMPORT_OR_FINISH = 3
private val hints by lazy { mapOf(Pair(DecodeHintType.TRY_HARDER, true)) }
} }
private lateinit var scannerView: ZXingScannerView private lateinit var scannerView: ZXingScannerView
...@@ -143,14 +144,16 @@ class ScannerActivity : AppCompatActivity(), ZXingScannerView.ResultHandler, Too ...@@ -143,14 +144,16 @@ class ScannerActivity : AppCompatActivity(), ZXingScannerView.ResultHandler, Too
val clipData = data?.clipData val clipData = data?.clipData
if (clipData != null) list += (0 until clipData.itemCount).map { clipData.getItemAt(it).uri } if (clipData != null) list += (0 until clipData.itemCount).map { clipData.getItemAt(it).uri }
val resolver = contentResolver val resolver = contentResolver
val reader = MultiFormatReader()
var success = false var success = false
val detector = BarcodeDetector.Builder(getApplicationContext())
.setBarcodeFormats(Barcode.DATA_MATRIX or Barcode.QR_CODE)
.build()
for (uri in list) try { for (uri in list) try {
val bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri)) val bitmap = BitmapFactory.decodeStream(resolver.openInputStream(uri))
val pixels = IntArray(bitmap.width * bitmap.height) val frame = Frame.Builder().setBitmap(bitmap).build()
bitmap.getPixels(pixels, 0, bitmap.width, 0, 0, bitmap.width, bitmap.height) val barcodes = detector.detect(frame)
Profile.findAll(reader.decode(BinaryBitmap(HybridBinarizer( val value = barcodes.valueAt(0).rawValue
RGBLuminanceSource(bitmap.width, bitmap.height, pixels))), hints).text).forEach { Profile.findAll(value).forEach {
ProfileManager.createProfile(it) ProfileManager.createProfile(it)
success = true success = true
} }
......
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