From 1ffd132651c9899aa0b8a4c1e0cb5faca6afe7a9 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Thu, 29 Dec 2016 12:43:10 +0800 Subject: [PATCH] Use internal scanner as fallback --- build.sbt | 1 + .../github/shadowsocks/ScannerActivity.scala | 40 +++++++++++++++---- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/build.sbt b/build.sbt index f763ed15..0c3fd856 100644 --- a/build.sbt +++ b/build.sbt @@ -51,6 +51,7 @@ libraryDependencies ++= "com.twofortyfouram" % "android-plugin-api-for-locale" % "1.0.2" :: "dnsjava" % "dnsjava" % "2.1.7" :: "eu.chainfire" % "libsuperuser" % "1.0.0.201608240809" :: + "com.google.zxing" % "android-integration" % "3.2.1" :: "me.dm7.barcodescanner" % "zxing" % "1.9" :: "net.glxn.qrgen" % "android" % "2.0" :: Nil diff --git a/src/main/scala/com/github/shadowsocks/ScannerActivity.scala b/src/main/scala/com/github/shadowsocks/ScannerActivity.scala index 51cb1d63..e31195b5 100644 --- a/src/main/scala/com/github/shadowsocks/ScannerActivity.scala +++ b/src/main/scala/com/github/shadowsocks/ScannerActivity.scala @@ -21,6 +21,7 @@ package com.github.shadowsocks import android.app.TaskStackBuilder +import android.content.Intent import android.content.pm.{PackageManager, ShortcutManager} import android.os.{Build, Bundle} import android.support.v4.app.ActivityCompat @@ -32,6 +33,7 @@ import android.widget.Toast import com.github.shadowsocks.ShadowsocksApplication.app import com.github.shadowsocks.utils.Parser import com.google.zxing.Result +import com.google.zxing.integration.android.IntentIntegrator import me.dm7.barcodescanner.zxing.ZXingScannerView object ScannerActivity { @@ -71,14 +73,21 @@ class ScannerActivity extends AppCompatActivity with ZXingScannerView.ResultHand override def onResume() { super.onResume() - val permissionCheck = ContextCompat.checkSelfPermission(this, - android.Manifest.permission.CAMERA) - if (permissionCheck == PackageManager.PERMISSION_GRANTED) { - scannerView.setResultHandler(this) // Register ourselves as a handler for scan results. - scannerView.startCamera() // Start camera on resume - } else { - ActivityCompat.requestPermissions(this, - Array(android.Manifest.permission.CAMERA), MY_PERMISSIONS_REQUEST_CAMERA) + val integrator = new IntentIntegrator(ScannerActivity.this) + val list = new java.util.ArrayList(IntentIntegrator.TARGET_ALL_KNOWN) + list.add("tw.com.quickmark") + integrator.setTargetApplications(list) + val dialog = integrator.initiateScan() + if (dialog != null) { + val permissionCheck = ContextCompat.checkSelfPermission(this, + android.Manifest.permission.CAMERA) + if (permissionCheck == PackageManager.PERMISSION_GRANTED) { + scannerView.setResultHandler(this) // Register ourselves as a handler for scan results. + scannerView.startCamera() // Start camera on resume + } else { + ActivityCompat.requestPermissions(this, + Array(android.Manifest.permission.CAMERA), MY_PERMISSIONS_REQUEST_CAMERA) + } } } @@ -87,6 +96,21 @@ class ScannerActivity extends AppCompatActivity with ZXingScannerView.ResultHand scannerView.stopCamera() // Stop camera on pause } + override def onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { + val scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data) + if (scanResult != null) { + val contents = scanResult.getContents + if (!TextUtils.isEmpty(contents)) + Parser.findAll(contents).foreach(app.profileManager.createProfile) + val intent = getParentActivityIntent + if (shouldUpRecreateTask(intent) || isTaskRoot) + TaskStackBuilder.create(this).addNextIntentWithParentStack(intent).startActivities() + else finish() + } else { + super.onActivityResult(resultCode, resultCode, data) + } + } + override def handleResult(rawResult: Result) { val uri = rawResult.getText if (!TextUtils.isEmpty(uri))