Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
398db4f407 | ||
|
|
8208ac1510 | ||
|
|
5542f463a6 | ||
|
|
095f4831db | ||
|
|
ba75b7af75 | ||
|
|
d5dc3a8379 | ||
|
|
89ddc2f7c9 | ||
|
|
f721b57e00 | ||
|
|
3a785ab75e | ||
|
|
b68689f731 |
+19
-4
@@ -4,18 +4,19 @@ enablePlugins(AndroidGms)
|
|||||||
android.useSupportVectors
|
android.useSupportVectors
|
||||||
|
|
||||||
name := "shadowsocks"
|
name := "shadowsocks"
|
||||||
version := "4.1.7"
|
version := "4.1.8"
|
||||||
versionCode := Some(187)
|
versionCode := Some(188)
|
||||||
|
|
||||||
proguardOptions ++=
|
proguardOptions ++=
|
||||||
"-dontwarn com.google.android.gms.internal.**" ::
|
"-dontwarn com.google.android.gms.internal.**" ::
|
||||||
"-dontwarn com.j256.ormlite.**" ::
|
"-dontwarn com.j256.ormlite.**" ::
|
||||||
|
"-dontwarn okhttp3.**" ::
|
||||||
"-dontwarn okio.**" ::
|
"-dontwarn okio.**" ::
|
||||||
"-dontwarn org.xbill.**" ::
|
"-dontwarn org.xbill.**" ::
|
||||||
"-keep class com.github.shadowsocks.JniHelper { *; }" ::
|
"-keep class com.github.shadowsocks.JniHelper { *; }" ::
|
||||||
Nil
|
Nil
|
||||||
|
|
||||||
val playServicesVersion = "10.2.4"
|
val playServicesVersion = "10.2.6"
|
||||||
resolvers += Resolver.jcenterRepo
|
resolvers += Resolver.jcenterRepo
|
||||||
libraryDependencies ++=
|
libraryDependencies ++=
|
||||||
"com.futuremind.recyclerfastscroll" % "fastscroll" % "0.2.5" ::
|
"com.futuremind.recyclerfastscroll" % "fastscroll" % "0.2.5" ::
|
||||||
@@ -31,13 +32,27 @@ libraryDependencies ++=
|
|||||||
"com.mikepenz" % "iconics-core" % "2.8.4" ::
|
"com.mikepenz" % "iconics-core" % "2.8.4" ::
|
||||||
"com.mikepenz" % "materialdrawer" % "5.9.1" ::
|
"com.mikepenz" % "materialdrawer" % "5.9.1" ::
|
||||||
"com.mikepenz" % "materialize" % "1.0.1" ::
|
"com.mikepenz" % "materialize" % "1.0.1" ::
|
||||||
"com.squareup.okhttp3" % "okhttp" % "3.7.0" ::
|
"com.squareup.okhttp3" % "okhttp" % "3.8.0" ::
|
||||||
"com.twofortyfouram" % "android-plugin-api-for-locale" % "1.0.2" ::
|
"com.twofortyfouram" % "android-plugin-api-for-locale" % "1.0.2" ::
|
||||||
"dnsjava" % "dnsjava" % "2.1.8" ::
|
"dnsjava" % "dnsjava" % "2.1.8" ::
|
||||||
"eu.chainfire" % "libsuperuser" % "1.0.0.201704021214" ::
|
"eu.chainfire" % "libsuperuser" % "1.0.0.201704021214" ::
|
||||||
|
"me.dm7.barcodescanner" % "zxing" % "1.9.3" ::
|
||||||
"net.glxn.qrgen" % "android" % "2.0" ::
|
"net.glxn.qrgen" % "android" % "2.0" ::
|
||||||
Nil
|
Nil
|
||||||
|
|
||||||
|
packagingOptions := PackagingOptions(excludes =
|
||||||
|
"META-INF/maven/com.squareup.okio/okio/pom.properties" ::
|
||||||
|
"META-INF/maven/com.squareup.okio/okio/pom.xml" ::
|
||||||
|
"META-INF/maven/com.squareup.okhttp3/okhttp/pom.properties" ::
|
||||||
|
"META-INF/maven/com.squareup.okhttp3/okhttp/pom.xml" ::
|
||||||
|
Nil)
|
||||||
|
|
||||||
|
lazy val goClean = TaskKey[Unit]("go-clean", "Clean go build dependencies")
|
||||||
|
goClean := {
|
||||||
|
IO.delete(baseDirectory(base => base / "src/overture/.deps").value)
|
||||||
|
IO.delete(baseDirectory(base => base / "src/main/jni/overture").value)
|
||||||
|
}
|
||||||
|
|
||||||
lazy val goBuild = TaskKey[Unit]("go-build", "Build go and overture")
|
lazy val goBuild = TaskKey[Unit]("go-build", "Build go and overture")
|
||||||
goBuild := {
|
goBuild := {
|
||||||
Process(Seq("mobile/src/overture/make.bash", minSdkVersion.value)) ! streams.value.log match {
|
Process(Seq("mobile/src/overture/make.bash", minSdkVersion.value)) ! streams.value.log match {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
|
||||||
<uses-permission android:name="android.permission.NFC" />
|
<uses-permission android:name="android.permission.NFC" />
|
||||||
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.touchscreen"
|
<uses-feature android:name="android.hardware.touchscreen"
|
||||||
android:required="false"/>
|
android:required="false"/>
|
||||||
@@ -11,6 +12,8 @@
|
|||||||
android:required="false"/>
|
android:required="false"/>
|
||||||
<uses-feature android:name="android.software.leanback"
|
<uses-feature android:name="android.software.leanback"
|
||||||
android:required="false"/>
|
android:required="false"/>
|
||||||
|
<uses-feature android:name="android.hardware.camera"
|
||||||
|
android:required="false"/>
|
||||||
|
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="19"
|
android:minSdkVersion="19"
|
||||||
@@ -75,6 +78,12 @@
|
|||||||
android:excludeFromRecents="true"
|
android:excludeFromRecents="true"
|
||||||
android:launchMode="singleTask"/>
|
android:launchMode="singleTask"/>
|
||||||
|
|
||||||
|
<activity
|
||||||
|
android:name=".ScannerActivity"
|
||||||
|
android:label="@string/add_profile_methods_scan_qr_code"
|
||||||
|
android:parentActivityName=".MainActivity"
|
||||||
|
android:excludeFromRecents="true"/>
|
||||||
|
|
||||||
<activity android:name=".TaskerActivity"
|
<activity android:name=".TaskerActivity"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ SHADOWSOCKS_SOURCES := local.c \
|
|||||||
LOCAL_MODULE := ss-local
|
LOCAL_MODULE := ss-local
|
||||||
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
|
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
|
||||||
LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_LOCAL \
|
LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_LOCAL \
|
||||||
-DUSE_CRYPTO_MBEDTLS -DANDROID -DHAVE_CONFIG_H \
|
-DUSE_CRYPTO_MBEDTLS -DHAVE_CONFIG_H \
|
||||||
-DCONNECT_IN_PROGRESS=EINPROGRESS \
|
-DCONNECT_IN_PROGRESS=EINPROGRESS \
|
||||||
-I$(LOCAL_PATH)/include/shadowsocks-libev \
|
-I$(LOCAL_PATH)/include/shadowsocks-libev \
|
||||||
-I$(LOCAL_PATH)/include \
|
-I$(LOCAL_PATH)/include \
|
||||||
@@ -294,7 +294,7 @@ SHADOWSOCKS_SOURCES := tunnel.c \
|
|||||||
LOCAL_MODULE := ss-tunnel
|
LOCAL_MODULE := ss-tunnel
|
||||||
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
|
LOCAL_SRC_FILES := $(addprefix shadowsocks-libev/src/, $(SHADOWSOCKS_SOURCES))
|
||||||
LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_TUNNEL \
|
LOCAL_CFLAGS := -Wall -O2 -fno-strict-aliasing -DMODULE_TUNNEL \
|
||||||
-DUSE_CRYPTO_MBEDTLS -DANDROID -DHAVE_CONFIG_H -DSSTUNNEL_JNI \
|
-DUSE_CRYPTO_MBEDTLS -DHAVE_CONFIG_H -DSSTUNNEL_JNI \
|
||||||
-DCONNECT_IN_PROGRESS=EINPROGRESS \
|
-DCONNECT_IN_PROGRESS=EINPROGRESS \
|
||||||
-I$(LOCAL_PATH)/libancillary \
|
-I$(LOCAL_PATH)/libancillary \
|
||||||
-I$(LOCAL_PATH)/include \
|
-I$(LOCAL_PATH)/include \
|
||||||
|
|||||||
Submodule mobile/src/main/jni/badvpn updated: af4a5647ea...e5abe7048d
Submodule mobile/src/main/jni/libev updated: 981fb847e1...5213419011
Submodule mobile/src/main/jni/libevent updated: 5d5914f00b...359ca847a6
Submodule mobile/src/main/jni/redsocks updated: 3bc3f03c18...274334f148
Submodule mobile/src/main/jni/shadowsocks-libev updated: 33fe5adc19...72622a3e3d
@@ -0,0 +1,12 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:orientation="vertical">
|
||||||
|
<include layout="@layout/toolbar_light_dark" />
|
||||||
|
<me.dm7.barcodescanner.zxing.ZXingScannerView android:id="@+id/scanner"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
</LinearLayout>
|
||||||
@@ -91,6 +91,7 @@
|
|||||||
<string name="add_profile_methods_scan_qr_code">"QR コードを読み取る"</string>
|
<string name="add_profile_methods_scan_qr_code">"QR コードを読み取る"</string>
|
||||||
<string name="add_profile_methods_manual_settings">"手動設定"</string>
|
<string name="add_profile_methods_manual_settings">"手動設定"</string>
|
||||||
<string name="add_profile_scanner_not_installed">"Zxingに準拠したQRコードスキャンアプリをインストールして下さい"</string>
|
<string name="add_profile_scanner_not_installed">"Zxingに準拠したQRコードスキャンアプリをインストールして下さい"</string>
|
||||||
|
<string name="add_profile_scanner_permission_required">QRコードを読み取るにはカメラの使用権限が必要です。</string>
|
||||||
<plurals name="removed">
|
<plurals name="removed">
|
||||||
<item quantity="other">"削除済み"</item>
|
<item quantity="other">"削除済み"</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
@@ -132,4 +133,4 @@
|
|||||||
<string name="plugin_unknown">"不明なプラグイン"</string>
|
<string name="plugin_unknown">"不明なプラグイン"</string>
|
||||||
<string name="plugin_untrusted">"警告:このプラグインは信頼されていないソースからの可能性があります"</string>
|
<string name="plugin_untrusted">"警告:このプラグインは信頼されていないソースからの可能性があります"</string>
|
||||||
<string name="profile_plugin">"プラグイン"</string>
|
<string name="profile_plugin">"プラグイン"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -96,6 +96,7 @@
|
|||||||
<string name="add_profile_methods_scan_qr_code">"Сканировать QR-код"</string>
|
<string name="add_profile_methods_scan_qr_code">"Сканировать QR-код"</string>
|
||||||
<string name="add_profile_methods_manual_settings">"Ручные настройки"</string>
|
<string name="add_profile_methods_manual_settings">"Ручные настройки"</string>
|
||||||
<string name="add_profile_scanner_not_installed">"Пожалуйста, установите любое ZXing-совместимое приложение для сканирования QR-кодов."</string>
|
<string name="add_profile_scanner_not_installed">"Пожалуйста, установите любое ZXing-совместимое приложение для сканирования QR-кодов."</string>
|
||||||
|
<string name="add_profile_scanner_permission_required">Разрешение камеры требуется для сканирования QR код.</string>
|
||||||
<plurals name="removed">
|
<plurals name="removed">
|
||||||
<item quantity="one">"Удалено"</item>
|
<item quantity="one">"Удалено"</item>
|
||||||
<item quantity="few">"Удалено %d элемента"</item>
|
<item quantity="few">"Удалено %d элемента"</item>
|
||||||
@@ -140,4 +141,4 @@
|
|||||||
<string name="plugin_unknown">"Неизвестный плагин %s"</string>
|
<string name="plugin_unknown">"Неизвестный плагин %s"</string>
|
||||||
<string name="plugin_untrusted">"Предупреждение: этот плагин получен из недоверенного источника."</string>
|
<string name="plugin_untrusted">"Предупреждение: этот плагин получен из недоверенного источника."</string>
|
||||||
<string name="profile_plugin">"Плагин: %s"</string>
|
<string name="profile_plugin">"Плагин: %s"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -92,6 +92,7 @@
|
|||||||
<string name="add_profile_methods_scan_qr_code">"扫描二维码"</string>
|
<string name="add_profile_methods_scan_qr_code">"扫描二维码"</string>
|
||||||
<string name="add_profile_methods_manual_settings">"手动设置"</string>
|
<string name="add_profile_methods_manual_settings">"手动设置"</string>
|
||||||
<string name="add_profile_scanner_not_installed">"请安装任意兼容 ZXing 的二维码扫描应用。"</string>
|
<string name="add_profile_scanner_not_installed">"请安装任意兼容 ZXing 的二维码扫描应用。"</string>
|
||||||
|
<string name="add_profile_scanner_permission_required">扫描二维码需要相机权限。</string>
|
||||||
<plurals name="removed">
|
<plurals name="removed">
|
||||||
<item quantity="other">"已删除 %d 项"</item>
|
<item quantity="other">"已删除 %d 项"</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
@@ -133,4 +134,4 @@
|
|||||||
<string name="plugin_unknown">"未知插件 %s"</string>
|
<string name="plugin_unknown">"未知插件 %s"</string>
|
||||||
<string name="plugin_untrusted">"警告:该插件似乎并非来自已知的可信源。"</string>
|
<string name="plugin_untrusted">"警告:该插件似乎并非来自已知的可信源。"</string>
|
||||||
<string name="profile_plugin">"插件:%s"</string>
|
<string name="profile_plugin">"插件:%s"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -90,6 +90,7 @@
|
|||||||
<string name="add_profile_methods_scan_qr_code">"掃描 QR 碼"</string>
|
<string name="add_profile_methods_scan_qr_code">"掃描 QR 碼"</string>
|
||||||
<string name="add_profile_methods_manual_settings">"手動設定"</string>
|
<string name="add_profile_methods_manual_settings">"手動設定"</string>
|
||||||
<string name="add_profile_scanner_not_installed">"請安裝任何相容 ZXing 的 QR 碼掃描應用程式。"</string>
|
<string name="add_profile_scanner_not_installed">"請安裝任何相容 ZXing 的 QR 碼掃描應用程式。"</string>
|
||||||
|
<string name="add_profile_scanner_permission_required">掃描 QR 碼需要相機權限。</string>
|
||||||
<plurals name="removed">
|
<plurals name="removed">
|
||||||
<item quantity="other">"已移除 %d 項"</item>
|
<item quantity="other">"已移除 %d 項"</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|||||||
@@ -104,6 +104,7 @@
|
|||||||
<string name="add_profile_methods_scan_qr_code">Scan QR code</string>
|
<string name="add_profile_methods_scan_qr_code">Scan QR code</string>
|
||||||
<string name="add_profile_methods_manual_settings">Manual Settings</string>
|
<string name="add_profile_methods_manual_settings">Manual Settings</string>
|
||||||
<string name="add_profile_scanner_not_installed">Please install any ZXing-compliant QR code scanning app.</string>
|
<string name="add_profile_scanner_not_installed">Please install any ZXing-compliant QR code scanning app.</string>
|
||||||
|
<string name="add_profile_scanner_permission_required">Camera permission is required for scanning QR code.</string>
|
||||||
<plurals name="removed">
|
<plurals name="removed">
|
||||||
<item quantity="one">Removed</item>
|
<item quantity="one">Removed</item>
|
||||||
<item quantity="other">%d items removed</item>
|
<item quantity="other">%d items removed</item>
|
||||||
|
|||||||
@@ -33,9 +33,9 @@ import com.github.shadowsocks.ShadowsocksApplication.app
|
|||||||
import scala.collection.JavaConversions._
|
import scala.collection.JavaConversions._
|
||||||
import scala.collection.immutable.Stream
|
import scala.collection.immutable.Stream
|
||||||
|
|
||||||
class StreamLogger(is: InputStream, tag: String) extends Thread {
|
class StreamLogger(is: InputStream, tag: String, logger: (String, String) => Int) extends Thread {
|
||||||
override def run(): Unit = autoClose(new BufferedReader(new InputStreamReader(is)))(br =>
|
override def run(): Unit = autoClose(new BufferedReader(new InputStreamReader(is)))(br =>
|
||||||
try Stream.continually(br.readLine()).takeWhile(_ != null).foreach(Log.i(tag, _)) catch {
|
try Stream.continually(br.readLine()).takeWhile(_ != null).foreach(logger(tag, _)) catch {
|
||||||
case _: IOException =>
|
case _: IOException =>
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@@ -68,8 +68,8 @@ class GuardedProcess(cmd: String*) {
|
|||||||
.directory(app.getFilesDir)
|
.directory(app.getFilesDir)
|
||||||
.start()
|
.start()
|
||||||
|
|
||||||
val is = process.getInputStream
|
new StreamLogger(process.getInputStream(), TAG, Log.i).start()
|
||||||
new StreamLogger(is, TAG).start()
|
new StreamLogger(process.getErrorStream(), TAG, Log.e).start()
|
||||||
|
|
||||||
if (callback == null) callback = onRestartCallback else callback()
|
if (callback == null) callback = onRestartCallback else callback()
|
||||||
|
|
||||||
|
|||||||
@@ -352,21 +352,16 @@ final class ProfilesFragment extends ToolbarFragment with Toolbar.OnMenuItemClic
|
|||||||
|
|
||||||
def onMenuItemClick(item: MenuItem): Boolean = item.getItemId match {
|
def onMenuItemClick(item: MenuItem): Boolean = item.getItemId match {
|
||||||
case R.id.action_scan_qr_code =>
|
case R.id.action_scan_qr_code =>
|
||||||
def installScanner() = {
|
|
||||||
Toast.makeText(getActivity, R.string.add_profile_scanner_not_installed, Toast.LENGTH_LONG).show()
|
|
||||||
try startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=tw.com.quickmark"))) catch {
|
|
||||||
case exc: ActivityNotFoundException => exc.printStackTrace()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try startActivityForResult(new Intent("com.google.zxing.client.android.SCAN")
|
try startActivityForResult(new Intent("com.google.zxing.client.android.SCAN")
|
||||||
.addCategory(Intent.CATEGORY_DEFAULT)
|
.addCategory(Intent.CATEGORY_DEFAULT)
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_DOCUMENT),
|
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_DOCUMENT),
|
||||||
REQUEST_SCAN_QR_CODE) catch {
|
REQUEST_SCAN_QR_CODE) catch {
|
||||||
case _: ActivityNotFoundException => installScanner()
|
case _: ActivityNotFoundException =>
|
||||||
|
startActivity(new Intent(getActivity, classOf[ScannerActivity]))
|
||||||
case e: SecurityException =>
|
case e: SecurityException =>
|
||||||
e.printStackTrace()
|
e.printStackTrace()
|
||||||
app.track(e)
|
app.track(e)
|
||||||
installScanner()
|
startActivity(new Intent(getActivity, classOf[ScannerActivity]))
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
case R.id.action_import =>
|
case R.id.action_import =>
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
/*******************************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Copyright (C) 2016 by Max Lv <max.c.lv@gmail.com> */
|
||||||
|
/* Copyright (C) 2016 by Mygod Studio <contact-shadowsocks-android@mygod.be> */
|
||||||
|
/* */
|
||||||
|
/* This program is free software: you can redistribute it and/or modify */
|
||||||
|
/* it under the terms of the GNU General Public License as published by */
|
||||||
|
/* the Free Software Foundation, either version 3 of the License, or */
|
||||||
|
/* (at your option) any later version. */
|
||||||
|
/* */
|
||||||
|
/* This program is distributed in the hope that it will be useful, */
|
||||||
|
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
|
||||||
|
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
|
||||||
|
/* GNU General Public License for more details. */
|
||||||
|
/* */
|
||||||
|
/* You should have received a copy of the GNU General Public License */
|
||||||
|
/* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
/* */
|
||||||
|
/*******************************************************************************/
|
||||||
|
|
||||||
|
package com.github.shadowsocks
|
||||||
|
|
||||||
|
import android.app.{Activity, TaskStackBuilder}
|
||||||
|
import android.content.Intent
|
||||||
|
import android.content.pm.{PackageManager, ShortcutManager}
|
||||||
|
import android.os.{Build, Bundle}
|
||||||
|
import android.support.v4.app.ActivityCompat
|
||||||
|
import android.support.v4.content.ContextCompat
|
||||||
|
import android.support.v7.app.AppCompatActivity
|
||||||
|
import android.support.v7.widget.Toolbar
|
||||||
|
import android.text.TextUtils
|
||||||
|
import android.widget.Toast
|
||||||
|
import com.google.zxing.Result
|
||||||
|
import com.github.shadowsocks.ShadowsocksApplication.app
|
||||||
|
import com.github.shadowsocks.utils.Parser
|
||||||
|
import me.dm7.barcodescanner.zxing.ZXingScannerView
|
||||||
|
|
||||||
|
object ScannerActivity {
|
||||||
|
private final val MY_PERMISSIONS_REQUEST_CAMERA = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
class ScannerActivity extends AppCompatActivity with ZXingScannerView.ResultHandler {
|
||||||
|
import ScannerActivity._
|
||||||
|
|
||||||
|
private var scannerView: ZXingScannerView = _
|
||||||
|
|
||||||
|
override def onRequestPermissionsResult(requestCode: Int, permissions: Array[String],
|
||||||
|
grantResults: Array[Int]) {
|
||||||
|
if (requestCode == MY_PERMISSIONS_REQUEST_CAMERA) {
|
||||||
|
// If request is cancelled, the result arrays are empty.
|
||||||
|
if (grantResults.length > 0
|
||||||
|
&& grantResults(0) == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
scannerView.setResultHandler(this)
|
||||||
|
scannerView.startCamera()
|
||||||
|
} else {
|
||||||
|
Toast.makeText(this, R.string.add_profile_scanner_permission_required, Toast.LENGTH_SHORT).show()
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
def navigateUp() {
|
||||||
|
val intent = getParentActivityIntent
|
||||||
|
if (shouldUpRecreateTask(intent) || isTaskRoot)
|
||||||
|
TaskStackBuilder.create(this).addNextIntentWithParentStack(intent).startActivities()
|
||||||
|
else finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
override def onCreate(state: Bundle) {
|
||||||
|
super.onCreate(state)
|
||||||
|
setContentView(R.layout.layout_scanner)
|
||||||
|
val toolbar = findViewById(R.id.toolbar).asInstanceOf[Toolbar]
|
||||||
|
toolbar.setTitle(getTitle)
|
||||||
|
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_material)
|
||||||
|
toolbar.setNavigationOnClickListener(_ => navigateUp())
|
||||||
|
scannerView = findViewById(R.id.scanner).asInstanceOf[ZXingScannerView]
|
||||||
|
if (Build.VERSION.SDK_INT >= 25) getSystemService(classOf[ShortcutManager]).reportShortcutUsed("scan")
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override def onPause() {
|
||||||
|
super.onPause()
|
||||||
|
scannerView.stopCamera() // Stop camera on pause
|
||||||
|
}
|
||||||
|
|
||||||
|
override def handleResult(rawResult: Result) = {
|
||||||
|
val uri = rawResult.getText
|
||||||
|
if (!TextUtils.isEmpty(uri))
|
||||||
|
Parser.findAll(uri).foreach(app.profileManager.createProfile)
|
||||||
|
navigateUp()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -4,7 +4,7 @@ function try () {
|
|||||||
"$@" || exit -1
|
"$@" || exit -1
|
||||||
}
|
}
|
||||||
|
|
||||||
[ -z "$ANDROID_NDK_HOME" ] && ANDROID_NDK_HOME=~/android-ndk-r12b
|
[ -z "$ANDROID_NDK_HOME" ] && ANDROID_NDK_HOME=$ANDROID_HOME/ndk-bundle
|
||||||
|
|
||||||
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
MIN_API=$1
|
MIN_API=$1
|
||||||
@@ -15,13 +15,13 @@ ANDROID_ARM_TOOLCHAIN=$DEPS/android-toolchain-${MIN_API}-arm
|
|||||||
ANDROID_ARM64_TOOLCHAIN=$DEPS/android-toolchain-21-arm64
|
ANDROID_ARM64_TOOLCHAIN=$DEPS/android-toolchain-21-arm64
|
||||||
ANDROID_X86_TOOLCHAIN=$DEPS/android-toolchain-${MIN_API}-x86
|
ANDROID_X86_TOOLCHAIN=$DEPS/android-toolchain-${MIN_API}-x86
|
||||||
|
|
||||||
ANDROID_ARM_CC=$ANDROID_ARM_TOOLCHAIN/bin/arm-linux-androideabi-gcc
|
ANDROID_ARM_CC=$ANDROID_ARM_TOOLCHAIN/bin/arm-linux-androideabi-clang
|
||||||
ANDROID_ARM_STRIP=$ANDROID_ARM_TOOLCHAIN/bin/arm-linux-androideabi-strip
|
ANDROID_ARM_STRIP=$ANDROID_ARM_TOOLCHAIN/bin/arm-linux-androideabi-strip
|
||||||
|
|
||||||
ANDROID_ARM64_CC=$ANDROID_ARM64_TOOLCHAIN/bin/aarch64-linux-android-gcc
|
ANDROID_ARM64_CC=$ANDROID_ARM64_TOOLCHAIN/bin/aarch64-linux-android-clang
|
||||||
ANDROID_ARM64_STRIP=$ANDROID_ARM64_TOOLCHAIN/bin/aarch64-linux-android-strip
|
ANDROID_ARM64_STRIP=$ANDROID_ARM64_TOOLCHAIN/bin/aarch64-linux-android-strip
|
||||||
|
|
||||||
ANDROID_X86_CC=$ANDROID_X86_TOOLCHAIN/bin/i686-linux-android-gcc
|
ANDROID_X86_CC=$ANDROID_X86_TOOLCHAIN/bin/i686-linux-android-clang
|
||||||
ANDROID_X86_STRIP=$ANDROID_X86_TOOLCHAIN/bin/i686-linux-android-strip
|
ANDROID_X86_STRIP=$ANDROID_X86_TOOLCHAIN/bin/i686-linux-android-strip
|
||||||
|
|
||||||
try mkdir -p $DEPS $TARGET/armeabi-v7a $TARGET/x86 $TARGET/arm64-v8a
|
try mkdir -p $DEPS $TARGET/armeabi-v7a $TARGET/x86 $TARGET/arm64-v8a
|
||||||
|
|||||||
Reference in New Issue
Block a user