From 78cac0cd90ae444e49f3f805b300fb21ac0e1015 Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 3 Oct 2020 11:19:46 -0400 Subject: [PATCH 1/6] Replace divider with standard library Also, cleanup some unused classes --- V2rayNG/app/build.gradle | 3 -- .../com/v2ray/ang/ui/PerAppProxyActivity.kt | 8 ++--- V2rayNG/app/src/main/res/raw/licenses.xml | 32 +------------------ 3 files changed, 5 insertions(+), 38 deletions(-) diff --git a/V2rayNG/app/build.gradle b/V2rayNG/app/build.gradle index 3c906e29..a0cb7c43 100644 --- a/V2rayNG/app/build.gradle +++ b/V2rayNG/app/build.gradle @@ -89,12 +89,9 @@ dependencies { implementation 'io.reactivex:rxjava:1.3.4' implementation 'io.reactivex:rxandroid:1.2.1' implementation 'com.tbruyelle.rxpermissions:rxpermissions:0.9.4@aar' - implementation 'com.dinuscxj:recycleritemdecoration:1.0.0' - implementation 'io.reactivex:rxkotlin:0.60.0' implementation 'me.dm7.barcodescanner:core:1.9.8' implementation 'me.dm7.barcodescanner:zxing:1.9.8' implementation 'com.github.jorgecastilloprz:fabprogresscircle:1.01@aar' - implementation 'com.beust:klaxon:3.0.1' implementation(name: 'libv2ray', ext: 'aar') //implementation(name: 'tun2socks', ext: 'aar') diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt index 3ba3120c..d154d4d3 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt @@ -4,6 +4,8 @@ import android.animation.Animator import android.animation.AnimatorListenerAdapter import android.content.Context import android.os.Bundle +import android.support.v7.widget.DividerItemDecoration +import android.support.v7.widget.LinearLayoutManager import android.support.v7.widget.RecyclerView import android.text.TextUtils import android.util.Log @@ -12,7 +14,6 @@ import android.view.MenuItem import android.view.View import android.view.animation.AccelerateInterpolator import android.view.animation.DecelerateInterpolator -import com.dinuscxj.itemdecoration.LinearDividerItemDecoration import com.v2ray.ang.R import com.v2ray.ang.extension.defaultDPreference import com.v2ray.ang.util.AppManagerUtil @@ -47,8 +48,7 @@ class PerAppProxyActivity : BaseActivity() { supportActionBar?.setDisplayHomeAsUpEnabled(true) - val dividerItemDecoration = LinearDividerItemDecoration( - this, LinearDividerItemDecoration.LINEAR_DIVIDER_VERTICAL) + val dividerItemDecoration = DividerItemDecoration(this, LinearLayoutManager.VERTICAL) recycler_view.addItemDecoration(dividerItemDecoration) val blacklist = defaultDPreference.getPrefStringSet(PREF_PER_APP_PROXY_SET, null) @@ -276,4 +276,4 @@ class PerAppProxyActivity : BaseActivity() { } return true } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/res/raw/licenses.xml b/V2rayNG/app/src/main/res/raw/licenses.xml index 2df2478e..e7949142 100644 --- a/V2rayNG/app/src/main/res/raw/licenses.xml +++ b/V2rayNG/app/src/main/res/raw/licenses.xml @@ -17,12 +17,6 @@ Copyright(C) 2008-2011 The Android Open Source Project Apache Software License 2.0 - - Apache Commons Validator - http://commons.apache.org/proper/commons-collections/ - Copyright(C) 2001-2014 The Apache Software Foundation - Apache Software License 2.0 - anko https://github.com/Kotlin/anko @@ -52,33 +46,9 @@ Copyright 2015 Square, Inc. Apache Software License 2.0 - - ReactiveNetwork - https://github.com/pwittchen/ReactiveNetwork - Copyright 2016 Piotr Wittchen - Apache Software License 2.0 - - - RecyclerItemDecoration - https://github.com/dinuscxj/RecyclerItemDecoration - Copyright 2015-2019 dinus - Apache Software License 2.0 - - - RxKotlin - https://github.com/ReactiveX/RxKotlin - Copyright 2012 Netflix, Inc. - Apache Software License 2.0 - RxPermissions https://github.com/tbruyelle/RxPermissions Apache Software License 2.0 - - RecyclerItemDecoration - https://github.com/dinuscxj/RecyclerItemDecoration - Copyright 2015-2019 dinus - Apache Software License 2.0 - - \ No newline at end of file + From c2a704a6ea56a384219292973387ddd136ff709a Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 3 Oct 2020 11:19:46 -0400 Subject: [PATCH 2/6] Deprecate some anko function - Replace toast with inline function - Use standard startActivityForResult --- V2rayNG/app/build.gradle | 3 --- .../main/kotlin/com/v2ray/ang/extension/_Ext.kt | 12 ++++++++++++ .../kotlin/com/v2ray/ang/ui/LogcatActivity.kt | 2 +- .../main/kotlin/com/v2ray/ang/ui/MainActivity.kt | 4 ++-- .../com/v2ray/ang/ui/MainRecyclerAdapter.kt | 2 +- .../com/v2ray/ang/ui/PerAppProxyActivity.kt | 2 +- .../com/v2ray/ang/ui/RoutingSettingsFragment.kt | 15 ++++----------- .../kotlin/com/v2ray/ang/ui/ScScannerActivity.kt | 8 ++++---- .../kotlin/com/v2ray/ang/ui/ScannerActivity.kt | 12 +----------- .../kotlin/com/v2ray/ang/ui/Server2Activity.kt | 4 ++-- .../kotlin/com/v2ray/ang/ui/Server3Activity.kt | 4 ++-- .../kotlin/com/v2ray/ang/ui/Server4Activity.kt | 4 ++-- .../kotlin/com/v2ray/ang/ui/ServerActivity.kt | 4 ++-- .../kotlin/com/v2ray/ang/ui/SettingsActivity.kt | 2 +- .../kotlin/com/v2ray/ang/ui/SubEditActivity.kt | 4 ++-- .../src/main/kotlin/com/v2ray/ang/util/Utils.kt | 3 +-- 16 files changed, 38 insertions(+), 47 deletions(-) diff --git a/V2rayNG/app/build.gradle b/V2rayNG/app/build.gradle index a0cb7c43..1352b28a 100644 --- a/V2rayNG/app/build.gradle +++ b/V2rayNG/app/build.gradle @@ -82,9 +82,6 @@ dependencies { // DSL implementation "org.jetbrains.anko:anko-sdk15:$ankoVersion" - implementation "org.jetbrains.anko:anko-support-v4:$ankoVersion" - implementation "org.jetbrains.anko:anko-appcompat-v7:$ankoVersion" - implementation "org.jetbrains.anko:anko-design:$ankoVersion" implementation 'com.google.code.gson:gson:2.8.6' implementation 'io.reactivex:rxjava:1.3.4' implementation 'io.reactivex:rxandroid:1.2.1' diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/extension/_Ext.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/extension/_Ext.kt index a1cc220c..5e74b662 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/extension/_Ext.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/extension/_Ext.kt @@ -2,6 +2,7 @@ package com.v2ray.ang.extension import android.content.Context import android.os.Build +import android.widget.Toast import com.v2ray.ang.AngApplication import me.dozen.dpreference.DPreference import org.json.JSONObject @@ -17,6 +18,17 @@ val Context.v2RayApplication: AngApplication val Context.defaultDPreference: DPreference get() = v2RayApplication.defaultDPreference +inline fun Context.toast(message: Int): Toast = Toast + .makeText(this, message, Toast.LENGTH_SHORT) + .apply { + show() + } + +inline fun Context.toast(message: CharSequence): Toast = Toast + .makeText(this, message, Toast.LENGTH_SHORT) + .apply { + show() + } fun JSONObject.putOpt(pair: Pair) = putOpt(pair.first, pair.second)!! fun JSONObject.putOpt(pairs: Map) = pairs.forEach { putOpt(it.key to it.value) } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt index d56395b8..e4f5205c 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt @@ -8,10 +8,10 @@ import android.view.Menu import android.view.MenuItem import android.view.View import com.v2ray.ang.R +import com.v2ray.ang.extension.toast import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_logcat.* import org.jetbrains.anko.doAsync -import org.jetbrains.anko.toast import org.jetbrains.anko.uiThread import java.io.IOException diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index f4c1148c..04ae2f7b 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -30,7 +30,7 @@ import android.util.Log import com.v2ray.ang.BuildConfig import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.extension.defaultDPreference -//import com.v2ray.ang.InappBuyActivity +import com.v2ray.ang.extension.toast import rx.Observable import rx.android.schedulers.AndroidSchedulers import java.util.concurrent.TimeUnit @@ -306,7 +306,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList .request(Manifest.permission.CAMERA) .subscribe { if (it) - startActivityForResult(requestCode) + startActivityForResult(Intent(this, ScannerActivity::class.java), requestCode) else toast(R.string.toast_permission_denied) } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt index cb675384..a84ef8ea 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt @@ -9,7 +9,7 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.R import com.v2ray.ang.dto.AngConfig import com.v2ray.ang.dto.EConfigType -import com.v2ray.ang.extension.defaultDPreference +import com.v2ray.ang.extension.toast import com.v2ray.ang.helper.ItemTouchHelperAdapter import com.v2ray.ang.helper.ItemTouchHelperViewHolder import com.v2ray.ang.util.AngConfigManager diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt index d154d4d3..837b26df 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt @@ -26,10 +26,10 @@ import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager import com.v2ray.ang.AppConfig import com.v2ray.ang.dto.AppInfo +import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.v2RayApplication import com.v2ray.ang.util.Utils import org.jetbrains.anko.doAsync -import org.jetbrains.anko.toast import org.jetbrains.anko.uiThread import java.net.URL diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt index 492829ed..67d88aa5 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt @@ -1,30 +1,23 @@ package com.v2ray.ang.ui - import android.Manifest import android.app.Activity.RESULT_OK import android.content.Intent import android.os.Bundle import android.support.v4.app.Fragment -import android.text.TextUtils -import android.util.Log import android.view.* import com.v2ray.ang.R import com.v2ray.ang.extension.defaultDPreference import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.fragment_routing_settings.* -import org.jetbrains.anko.toast import android.view.MenuInflater import com.tbruyelle.rxpermissions.RxPermissions import com.v2ray.ang.AppConfig +import com.v2ray.ang.extension.toast import org.jetbrains.anko.doAsync -import org.jetbrains.anko.startActivityForResult -import org.jetbrains.anko.support.v4.startActivityForResult -import org.jetbrains.anko.support.v4.toast import org.jetbrains.anko.uiThread import java.net.URL - class RoutingSettingsFragment : Fragment() { companion object { private const val routing_arg = "routing_arg" @@ -96,7 +89,7 @@ class RoutingSettingsFragment : Fragment() { .request(Manifest.permission.CAMERA) .subscribe { if (it) - startActivityForResult(requestCode) + startActivityForResult(Intent(activity, ScannerActivity::class.java), requestCode) else activity?.toast(R.string.toast_permission_denied) } @@ -118,12 +111,12 @@ class RoutingSettingsFragment : Fragment() { } } - toast(R.string.msg_downloading_content) + activity?.toast(R.string.msg_downloading_content) doAsync { val content = URL(url).readText() uiThread { et_routing_content.text = Utils.getEditable(content!!) - toast(R.string.toast_success) + activity?.toast(R.string.toast_success) } } return true diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScScannerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScScannerActivity.kt index b3cd04bb..23297e76 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScScannerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScScannerActivity.kt @@ -6,7 +6,7 @@ import com.tbruyelle.rxpermissions.RxPermissions import com.v2ray.ang.R import com.v2ray.ang.util.AngConfigManager import android.os.Bundle -import org.jetbrains.anko.* +import com.v2ray.ang.extension.toast class ScScannerActivity : BaseActivity() { companion object { @@ -24,7 +24,7 @@ class ScScannerActivity : BaseActivity() { .request(Manifest.permission.CAMERA) .subscribe { if (it) - startActivityForResult(requestCode) + startActivityForResult(Intent(this, ScannerActivity::class.java), requestCode) else toast(R.string.toast_permission_denied) } @@ -43,10 +43,10 @@ class ScScannerActivity : BaseActivity() { } else { toast(R.string.toast_failure) } - startActivity() + startActivity(Intent(this, MainActivity::class.java)) } } finish() } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt index eff431da..6f1dafd1 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ScannerActivity.kt @@ -7,23 +7,13 @@ import com.google.zxing.Result import me.dm7.barcodescanner.zxing.ZXingScannerView import android.content.Intent import android.graphics.BitmapFactory -import android.icu.util.TimeUnit import android.view.Menu import android.view.MenuItem import com.google.zxing.BarcodeFormat import com.tbruyelle.rxpermissions.RxPermissions import com.v2ray.ang.R +import com.v2ray.ang.extension.toast import com.v2ray.ang.util.QRCodeDecoder -import org.jetbrains.anko.toast -import rx.Observable -import android.os.SystemClock -import kotlinx.android.synthetic.main.activity_main.* -import rx.Observer -import rx.android.schedulers.AndroidSchedulers -import javax.xml.datatype.DatatypeConstants.SECONDS - - - class ScannerActivity : BaseActivity(), ZXingScannerView.ResultHandler { companion object { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt index bdfba4c2..02ee56ae 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt @@ -10,13 +10,13 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.R import com.v2ray.ang.extension.defaultDPreference import com.v2ray.ang.dto.AngConfig +import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_server2.* import org.jetbrains.anko.* import java.lang.Exception - class Server2Activity : BaseActivity() { companion object { private const val REQUEST_SCAN = 1 @@ -158,4 +158,4 @@ class Server2Activity : BaseActivity() { } else -> super.onOptionsItemSelected(item) } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server3Activity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server3Activity.kt index 92ee6e2f..248feb1e 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server3Activity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server3Activity.kt @@ -6,12 +6,12 @@ import android.view.Menu import android.view.MenuItem import com.v2ray.ang.R import com.v2ray.ang.dto.AngConfig +import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_server3.* import org.jetbrains.anko.* - class Server3Activity : BaseActivity() { companion object { private const val REQUEST_SCAN = 1 @@ -172,4 +172,4 @@ class Server3Activity : BaseActivity() { } else -> super.onOptionsItemSelected(item) } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server4Activity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server4Activity.kt index 97fb4d63..b4b9d007 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server4Activity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server4Activity.kt @@ -6,12 +6,12 @@ import android.view.Menu import android.view.MenuItem import com.v2ray.ang.R import com.v2ray.ang.dto.AngConfig +import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_server4.* import org.jetbrains.anko.* - class Server4Activity : BaseActivity() { companion object { private const val REQUEST_SCAN = 1 @@ -156,4 +156,4 @@ class Server4Activity : BaseActivity() { } else -> super.onOptionsItemSelected(item) } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt index d2a14035..ae753cd3 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt @@ -6,12 +6,12 @@ import android.view.Menu import android.view.MenuItem import com.v2ray.ang.R import com.v2ray.ang.dto.AngConfig +import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_server.* import org.jetbrains.anko.* - class ServerActivity : BaseActivity() { companion object { private const val REQUEST_SCAN = 1 @@ -215,4 +215,4 @@ class ServerActivity : BaseActivity() { } else -> super.onOptionsItemSelected(item) } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt index b46eff3f..476d85b2 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt @@ -5,10 +5,10 @@ import android.support.v7.preference.* import android.view.View import com.v2ray.ang.R import com.v2ray.ang.AppConfig +import com.v2ray.ang.extension.toast import com.v2ray.ang.util.Utils import org.jetbrains.anko.defaultSharedPreferences import org.jetbrains.anko.startActivity -import org.jetbrains.anko.toast class SettingsActivity : BaseActivity() { companion object { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt index d8cb7d2e..dfb6a716 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt @@ -6,12 +6,12 @@ import android.view.Menu import android.view.MenuItem import com.v2ray.ang.R import com.v2ray.ang.dto.AngConfig +import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_sub_edit.* import org.jetbrains.anko.* - class SubEditActivity : BaseActivity() { var del_config: MenuItem? = null @@ -135,4 +135,4 @@ class SubEditActivity : BaseActivity() { } else -> super.onOptionsItemSelected(item) } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt index efcdde4d..8189b31b 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/Utils.kt @@ -24,18 +24,17 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.R import com.v2ray.ang.dto.EConfigType import com.v2ray.ang.extension.responseLength +import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.v2RayApplication import com.v2ray.ang.service.V2RayServiceManager import com.v2ray.ang.ui.SettingsActivity import kotlinx.coroutines.isActive import me.dozen.dpreference.DPreference -import org.jetbrains.anko.toast import java.io.IOException import java.net.* import libv2ray.Libv2ray import kotlin.coroutines.coroutineContext - object Utils { val tcpTestingSockets = ArrayList() From 2956fa20308515df1a051954641a36659e8696da Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 3 Oct 2020 11:19:46 -0400 Subject: [PATCH 3/6] Replace doasync with Kotlin coroutine Using a custom coroutine scope, we don't need to keep track of the running job. We can simply call cancel children for the scope. --- .../com/v2ray/ang/service/V2RayVpnService.kt | 6 ++- .../kotlin/com/v2ray/ang/ui/LogcatActivity.kt | 10 ++--- .../kotlin/com/v2ray/ang/ui/MainActivity.kt | 39 +++++++++++-------- .../com/v2ray/ang/ui/PerAppProxyActivity.kt | 16 +++++--- .../v2ray/ang/ui/RoutingSettingsFragment.kt | 18 ++++++--- 5 files changed, 54 insertions(+), 35 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt index 823776a1..5b213a67 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayVpnService.kt @@ -16,7 +16,9 @@ import com.v2ray.ang.extension.defaultDPreference import com.v2ray.ang.ui.PerAppProxyActivity import com.v2ray.ang.ui.SettingsActivity import com.v2ray.ang.util.Utils -import org.jetbrains.anko.doAsync +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import java.io.File import java.lang.ref.SoftReference @@ -170,7 +172,7 @@ class V2RayVpnService : VpnService(), ServiceControl { val fd = mInterface.fileDescriptor val path = File(Utils.packagePath(applicationContext), "sock_path").absolutePath - doAsync { + GlobalScope.launch(Dispatchers.IO) { var tries = 0 while (true) try { Thread.sleep(50L shl tries) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt index e4f5205c..620ab3a1 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/LogcatActivity.kt @@ -11,9 +11,9 @@ import com.v2ray.ang.R import com.v2ray.ang.extension.toast import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_logcat.* -import org.jetbrains.anko.doAsync -import org.jetbrains.anko.uiThread - +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import java.io.IOException import java.util.LinkedHashSet @@ -34,7 +34,7 @@ class LogcatActivity : BaseActivity() { try { pb_waiting.visibility = View.VISIBLE - doAsync { + GlobalScope.launch(Dispatchers.Default) { if (shouldFlushLog) { val lst = LinkedHashSet() lst.add("logcat") @@ -54,7 +54,7 @@ class LogcatActivity : BaseActivity() { // InputStreamReader(process.inputStream)) // val allText = bufferedReader.use(BufferedReader::readText) val allText = process.inputStream.bufferedReader().use { it.readText() } - uiThread { + launch(Dispatchers.Main) { tv_logcat.text = allText tv_logcat.movementMethod = ScrollingMovementMethod() pb_waiting.visibility = View.GONE diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index 04ae2f7b..8fc201d4 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -63,7 +63,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList private val adapter by lazy { MainRecyclerAdapter(this) } private var mItemTouchHelper: ItemTouchHelper? = null - private val testingJobs = ArrayList() + private val tcpingTestScope by lazy { CoroutineScope(Dispatchers.IO) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -90,9 +90,9 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList val socksPort = 10808//Utils.parseInt(defaultDPreference.getPrefString(SettingsActivity.PREF_SOCKS_PORT, "10808")) tv_test_state.text = getString(R.string.connection_test_testing) - doAsync { + GlobalScope.launch(Dispatchers.IO) { val result = Utils.testConnection(this@MainActivity, socksPort) - uiThread { + launch(Dispatchers.Main) { tv_test_state.text = Utils.getEditable(result) } } @@ -249,10 +249,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList } R.id.ping_all -> { - testingJobs.forEach { - it.cancel() - } - testingJobs.clear() + tcpingTestScope.coroutineContext[Job]?.cancelChildren() Utils.closeAllTcpSockets() for (k in 0 until configs.vmess.count()) { configs.vmess[k].testResult = "" @@ -267,16 +264,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList serverAddress = serverOutbound.getServerAddress() ?: continue serverPort = serverOutbound.getServerPort() ?: continue } - testingJobs.add(GlobalScope.launch(Dispatchers.IO) { + tcpingTestScope.launch { configs.vmess.getOrNull(k)?.let { // check null in case array is modified during testing it.testResult = Utils.tcping(serverAddress, serverPort) - val myJob = coroutineContext[Job] launch(Dispatchers.Main) { - testingJobs.remove(myJob) adapter.updateSelectedItem(k) } } - }) + } } true } @@ -392,9 +387,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList toast(R.string.toast_invalid_url) return false } - doAsync { - val configText = URL(url).readText() - uiThread { + GlobalScope.launch(Dispatchers.IO) { + val configText = try { + URL(url).readText() + } catch (e: Exception) { + e.printStackTrace() + "" + } + launch(Dispatchers.Main) { importCustomizeConfig(configText) } } @@ -426,9 +426,14 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList continue } Log.d("Main", url) - doAsync { - val configText = URL(url).readText() - uiThread { + GlobalScope.launch(Dispatchers.IO) { + val configText = try { + URL(url).readText() + } catch (e: Exception) { + e.printStackTrace() + "" + } + launch(Dispatchers.Main) { importBatchConfig(Utils.decode(configText), id) } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt index 837b26df..2b5ddd41 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyActivity.kt @@ -29,8 +29,9 @@ import com.v2ray.ang.dto.AppInfo import com.v2ray.ang.extension.toast import com.v2ray.ang.extension.v2RayApplication import com.v2ray.ang.util.Utils -import org.jetbrains.anko.doAsync -import org.jetbrains.anko.uiThread +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import java.net.URL class PerAppProxyActivity : BaseActivity() { @@ -220,9 +221,14 @@ class PerAppProxyActivity : BaseActivity() { private fun selectProxyApp() { toast(R.string.msg_downloading_content) val url = AppConfig.androidpackagenamelistUrl - doAsync { - val content = URL(url).readText() - uiThread { + GlobalScope.launch(Dispatchers.IO) { + val content = try { + URL(url).readText() + } catch (e: Exception) { + e.printStackTrace() + "" + } + launch(Dispatchers.Main) { Log.d("selectProxyApp", content) selectProxyApp(content) toast(R.string.toast_success) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt index 67d88aa5..97917148 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/RoutingSettingsFragment.kt @@ -14,8 +14,9 @@ import android.view.MenuInflater import com.tbruyelle.rxpermissions.RxPermissions import com.v2ray.ang.AppConfig import com.v2ray.ang.extension.toast -import org.jetbrains.anko.doAsync -import org.jetbrains.anko.uiThread +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.launch import java.net.URL class RoutingSettingsFragment : Fragment() { @@ -112,10 +113,15 @@ class RoutingSettingsFragment : Fragment() { } activity?.toast(R.string.msg_downloading_content) - doAsync { - val content = URL(url).readText() - uiThread { - et_routing_content.text = Utils.getEditable(content!!) + GlobalScope.launch(Dispatchers.IO) { + val content = try { + URL(url).readText() + } catch (e: Exception) { + e.printStackTrace() + "" + } + launch(Dispatchers.Main) { + et_routing_content.text = Utils.getEditable(content) activity?.toast(R.string.toast_success) } } From 10f705a8b26cb4793955050ec3c5744e7be2ab09 Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 3 Oct 2020 11:19:46 -0400 Subject: [PATCH 4/6] Use standard startActivity --- .../com/v2ray/ang/ui/BaseDrawerActivity.kt | 6 +----- .../main/kotlin/com/v2ray/ang/ui/MainActivity.kt | 16 ++++++++++------ .../com/v2ray/ang/ui/MainRecyclerAdapter.kt | 11 +++++++---- .../kotlin/com/v2ray/ang/ui/SettingsActivity.kt | 6 +++--- .../com/v2ray/ang/ui/SubSettingActivity.kt | 8 +++++--- .../v2ray/ang/ui/SubSettingRecyclerAdapter.kt | 5 ++++- 6 files changed, 30 insertions(+), 22 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/BaseDrawerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/BaseDrawerActivity.kt index 6227f9ac..231575bb 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/BaseDrawerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/BaseDrawerActivity.kt @@ -13,11 +13,7 @@ import android.support.v7.widget.Toolbar import android.util.Log import android.view.MenuItem import android.view.View -//import com.v2ray.ang.InappBuyActivity - import com.v2ray.ang.R -import org.jetbrains.anko.startActivity - abstract class BaseDrawerActivity : BaseActivity() { companion object { @@ -58,7 +54,7 @@ abstract class BaseDrawerActivity : BaseActivity() { R.id.sub_setting -> activityClass = SubSettingActivity::class.java R.id.settings -> activityClass = SettingsActivity::class.java R.id.logcat -> { - startActivity() + startActivity(Intent(this@BaseDrawerActivity, LogcatActivity::class.java)) return } R.id.donate -> { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index 8fc201d4..aed907a4 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -188,6 +188,9 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList return true } + private fun getOptionIntent() = Intent().putExtra("position", -1) + .putExtra("isRunning", isRunning) + override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.import_qrcode -> { importQRcode(REQUEST_SCAN) @@ -198,17 +201,17 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList true } R.id.import_manually_vmess -> { - startActivity("position" to -1, "isRunning" to isRunning) + startActivity(getOptionIntent().setClass(this, ServerActivity::class.java)) adapter.updateConfigList() true } R.id.import_manually_ss -> { - startActivity("position" to -1, "isRunning" to isRunning) + startActivity(getOptionIntent().setClass(this, Server3Activity::class.java)) adapter.updateConfigList() true } R.id.import_manually_socks -> { - startActivity("position" to -1, "isRunning" to isRunning) + startActivity(getOptionIntent().setClass(this, Server4Activity::class.java)) adapter.updateConfigList() true } @@ -579,10 +582,11 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList when (item.itemId) { //R.id.server_profile -> activityClass = MainActivity::class.java R.id.sub_setting -> { - startActivity() + startActivity(Intent(this, SubSettingActivity::class.java)) } R.id.settings -> { - startActivity("isRunning" to isRunning) + startActivity(Intent(this, SettingsActivity::class.java) + .putExtra("isRunning", isRunning)) } R.id.feedback -> { Utils.openUri(this, AppConfig.v2rayNGIssues) @@ -594,7 +598,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList // startActivity() } R.id.logcat -> { - startActivity() + startActivity(Intent(this, LogcatActivity::class.java)) } } drawer_layout.closeDrawer(GravityCompat.START) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt index a84ef8ea..4eddafb5 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt @@ -1,5 +1,6 @@ package com.v2ray.ang.ui +import android.content.Intent import android.graphics.Color import android.support.v7.widget.RecyclerView import android.text.TextUtils @@ -121,14 +122,16 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter("position" to position, "isRunning" to !changeable) + mActivity.startActivity(intent.setClass(mActivity, ServerActivity::class.java)) } else if (configType == EConfigType.CUSTOM) { - mActivity.startActivity("position" to position, "isRunning" to !changeable) + mActivity.startActivity(intent.setClass(mActivity, Server2Activity::class.java)) } else if (configType == EConfigType.SHADOWSOCKS) { - mActivity.startActivity("position" to position, "isRunning" to !changeable) + mActivity.startActivity(intent.setClass(mActivity, Server3Activity::class.java)) } else if (configType == EConfigType.SOCKS) { - mActivity.startActivity("position" to position, "isRunning" to !changeable) + mActivity.startActivity(intent.setClass(mActivity, Server4Activity::class.java)) } } holder.layout_remove.setOnClickListener { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt index 476d85b2..936495eb 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt @@ -1,5 +1,6 @@ package com.v2ray.ang.ui +import android.content.Intent import android.os.Bundle import android.support.v7.preference.* import android.view.View @@ -8,7 +9,6 @@ import com.v2ray.ang.AppConfig import com.v2ray.ang.extension.toast import com.v2ray.ang.util.Utils import org.jetbrains.anko.defaultSharedPreferences -import org.jetbrains.anko.startActivity class SettingsActivity : BaseActivity() { companion object { @@ -89,7 +89,7 @@ class SettingsActivity : BaseActivity() { if (isRunning()) { Utils.stopVService(requireContext()) } - activity?.startActivity() + startActivity(Intent(activity, PerAppProxyActivity::class.java)) perAppProxy.isChecked = true true } @@ -126,7 +126,7 @@ class SettingsActivity : BaseActivity() { routingCustom.setOnPreferenceClickListener { if (isRunning()) Utils.stopVService(requireContext()) - activity?.startActivity() + startActivity(Intent(activity, RoutingSettingsActivity::class.java)) false } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt index 709ef38b..e8a6b449 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingActivity.kt @@ -1,12 +1,12 @@ package com.v2ray.ang.ui +import android.content.Intent import android.support.v7.widget.LinearLayoutManager import android.view.Menu import android.view.MenuItem import com.v2ray.ang.R import kotlinx.android.synthetic.main.activity_sub_setting.* import android.os.Bundle -import org.jetbrains.anko.startActivity class SubSettingActivity : BaseActivity() { @@ -40,7 +40,9 @@ class SubSettingActivity : BaseActivity() { override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) { R.id.add_config -> { - startActivity("position" to -1) + startActivity(Intent(this, SubEditActivity::class.java) + .putExtra("position", -1) + ) adapter.updateConfigList() true } @@ -48,4 +50,4 @@ class SubSettingActivity : BaseActivity() { } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt index f8cd8824..364147ea 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt @@ -1,5 +1,6 @@ package com.v2ray.ang.ui +import android.content.Intent import android.graphics.Color import android.support.v7.widget.RecyclerView import android.view.View @@ -31,7 +32,9 @@ class SubSettingRecyclerAdapter(val activity: SubSettingActivity) : RecyclerView holder.itemView.backgroundColor = Color.TRANSPARENT holder.layout_edit.setOnClickListener { - mActivity.startActivity("position" to position) + mActivity.startActivity(Intent(mActivity, SubEditActivity::class.java) + .putExtra("position", position) + ) } } else { } From 896889778fdb4814db46acd5b26313dacf942a4b Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 3 Oct 2020 11:19:46 -0400 Subject: [PATCH 5/6] Replace Anko with support lib AlertDialog replace some property setter --- .../kotlin/com/v2ray/ang/ui/MainActivity.kt | 5 ++--- .../com/v2ray/ang/ui/MainRecyclerAdapter.kt | 16 +++++--------- .../com/v2ray/ang/ui/PerAppProxyAdapter.kt | 10 ++++----- .../com/v2ray/ang/ui/Server2Activity.kt | 21 +++++++++---------- .../com/v2ray/ang/ui/Server3Activity.kt | 21 +++++++++---------- .../com/v2ray/ang/ui/Server4Activity.kt | 21 +++++++++---------- .../kotlin/com/v2ray/ang/ui/ServerActivity.kt | 21 +++++++++---------- .../com/v2ray/ang/ui/SubEditActivity.kt | 21 +++++++++---------- .../v2ray/ang/ui/SubSettingRecyclerAdapter.kt | 2 +- 9 files changed, 62 insertions(+), 76 deletions(-) diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt index aed907a4..5b3260dc 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainActivity.kt @@ -18,7 +18,6 @@ import android.view.KeyEvent import com.v2ray.ang.AppConfig import com.v2ray.ang.util.MessageUtil import com.v2ray.ang.util.V2rayConfigUtil -import org.jetbrains.anko.* import java.lang.ref.SoftReference import java.net.URL import android.content.IntentFilter @@ -52,10 +51,10 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList field = value adapter.changeable = !value if (value) { - fab.imageResource = R.drawable.ic_v + fab.setImageResource(R.drawable.ic_v) tv_test_state.text = getString(R.string.connection_connected) } else { - fab.imageResource = R.drawable.ic_v_idle + fab.setImageResource(R.drawable.ic_v_idle) tv_test_state.text = getString(R.string.connection_not_connected) } hideCircle() diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt index 4eddafb5..bd9d7492 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt @@ -2,6 +2,7 @@ package com.v2ray.ang.ui import android.content.Intent import android.graphics.Color +import android.support.v7.app.AlertDialog import android.support.v7.widget.RecyclerView import android.text.TextUtils import android.view.View @@ -61,7 +62,7 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter + AlertDialog.Builder(mActivity).setItems(shareOptions.toTypedArray()) { _, i -> try { when (i) { 0 -> { @@ -95,14 +96,7 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter { @@ -118,7 +112,7 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter, blacklist: MutableSet?) : @@ -68,17 +66,17 @@ class PerAppProxyAdapter(val activity: BaseActivity, val apps: List, bl fun bind(appInfo: AppInfo) { this.appInfo = appInfo - icon.image = appInfo.appIcon + icon.setImageDrawable(appInfo.appIcon) // name.text = appInfo.appName checkBox.isChecked = inBlacklist package_name.text = appInfo.packageName if (appInfo.isSystemApp) { name.text = String.format("** %1s", appInfo.appName) - name.textColor = Color.RED + name.setTextColor(Color.RED) } else { name.text = appInfo.appName - name.textColor = Color.DKGRAY + name.setTextColor(Color.DKGRAY) } itemView.setOnClickListener(this) @@ -94,4 +92,4 @@ class PerAppProxyAdapter(val activity: BaseActivity, val apps: List, bl } } } -} \ No newline at end of file +} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt index 02ee56ae..a021c1ec 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server2Activity.kt @@ -1,6 +1,7 @@ package com.v2ray.ang.ui import android.os.Bundle +import android.support.v7.app.AlertDialog import android.text.Editable import android.text.TextUtils import android.view.Menu @@ -14,7 +15,6 @@ import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_server2.* -import org.jetbrains.anko.* import java.lang.Exception class Server2Activity : BaseActivity() { @@ -112,17 +112,16 @@ class Server2Activity : BaseActivity() { */ fun deleteServer(): Boolean { if (edit_index >= 0) { - alert(R.string.del_config_comfirm) { - positiveButton(android.R.string.ok) { - if (AngConfigManager.removeServer(edit_index) == 0) { - toast(R.string.toast_success) - finish() - } else { - toast(R.string.toast_failure) + AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm) + .setPositiveButton(android.R.string.ok) { _, _ -> + if (AngConfigManager.removeServer(edit_index) == 0) { + toast(R.string.toast_success) + finish() + } else { + toast(R.string.toast_failure) + } } - } - show() - } + .show() } else { } return true diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server3Activity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server3Activity.kt index 248feb1e..89b98424 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server3Activity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server3Activity.kt @@ -1,6 +1,7 @@ package com.v2ray.ang.ui import android.os.Bundle +import android.support.v7.app.AlertDialog import android.text.TextUtils import android.view.Menu import android.view.MenuItem @@ -10,7 +11,6 @@ import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_server3.* -import org.jetbrains.anko.* class Server3Activity : BaseActivity() { companion object { @@ -126,17 +126,16 @@ class Server3Activity : BaseActivity() { */ fun deleteServer(): Boolean { if (edit_index >= 0) { - alert(R.string.del_config_comfirm) { - positiveButton(android.R.string.ok) { - if (AngConfigManager.removeServer(edit_index) == 0) { - toast(R.string.toast_success) - finish() - } else { - toast(R.string.toast_failure) + AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm) + .setPositiveButton(android.R.string.ok) { _, _ -> + if (AngConfigManager.removeServer(edit_index) == 0) { + toast(R.string.toast_success) + finish() + } else { + toast(R.string.toast_failure) + } } - } - show() - } + .show() } else { } return true diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server4Activity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server4Activity.kt index b4b9d007..d6355470 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server4Activity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/Server4Activity.kt @@ -1,6 +1,7 @@ package com.v2ray.ang.ui import android.os.Bundle +import android.support.v7.app.AlertDialog import android.text.TextUtils import android.view.Menu import android.view.MenuItem @@ -10,7 +11,6 @@ import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_server4.* -import org.jetbrains.anko.* class Server4Activity : BaseActivity() { companion object { @@ -110,17 +110,16 @@ class Server4Activity : BaseActivity() { */ fun deleteServer(): Boolean { if (edit_index >= 0) { - alert(R.string.del_config_comfirm) { - positiveButton(android.R.string.ok) { - if (AngConfigManager.removeServer(edit_index) == 0) { - toast(R.string.toast_success) - finish() - } else { - toast(R.string.toast_failure) + AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm) + .setPositiveButton(android.R.string.ok) { _, _ -> + if (AngConfigManager.removeServer(edit_index) == 0) { + toast(R.string.toast_success) + finish() + } else { + toast(R.string.toast_failure) + } } - } - show() - } + .show() } else { } return true diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt index ae753cd3..7f95cbde 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerActivity.kt @@ -1,6 +1,7 @@ package com.v2ray.ang.ui import android.os.Bundle +import android.support.v7.app.AlertDialog import android.text.TextUtils import android.view.Menu import android.view.MenuItem @@ -10,7 +11,6 @@ import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_server.* -import org.jetbrains.anko.* class ServerActivity : BaseActivity() { companion object { @@ -169,17 +169,16 @@ class ServerActivity : BaseActivity() { */ fun deleteServer(): Boolean { if (edit_index >= 0) { - alert(R.string.del_config_comfirm) { - positiveButton(android.R.string.ok) { - if (AngConfigManager.removeServer(edit_index) == 0) { - toast(R.string.toast_success) - finish() - } else { - toast(R.string.toast_failure) + AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm) + .setPositiveButton(android.R.string.ok) { _, _ -> + if (AngConfigManager.removeServer(edit_index) == 0) { + toast(R.string.toast_success) + finish() + } else { + toast(R.string.toast_failure) + } } - } - show() - } + .show() } else { } return true diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt index dfb6a716..1d60a327 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubEditActivity.kt @@ -1,6 +1,7 @@ package com.v2ray.ang.ui import android.os.Bundle +import android.support.v7.app.AlertDialog import android.text.TextUtils import android.view.Menu import android.view.MenuItem @@ -10,7 +11,6 @@ import com.v2ray.ang.extension.toast import com.v2ray.ang.util.AngConfigManager import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.activity_sub_edit.* -import org.jetbrains.anko.* class SubEditActivity : BaseActivity() { @@ -95,17 +95,16 @@ class SubEditActivity : BaseActivity() { */ fun deleteServer(): Boolean { if (edit_index >= 0) { - alert(R.string.del_config_comfirm) { - positiveButton(android.R.string.ok) { - if (AngConfigManager.removeSubItem(edit_index) == 0) { - toast(R.string.toast_success) - finish() - } else { - toast(R.string.toast_failure) + AlertDialog.Builder(this).setMessage(R.string.del_config_comfirm) + .setPositiveButton(android.R.string.ok) { _, _ -> + if (AngConfigManager.removeSubItem(edit_index) == 0) { + toast(R.string.toast_success) + finish() + } else { + toast(R.string.toast_failure) + } } - } - show() - } + .show() } else { } return true diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt index 364147ea..307f3a46 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt @@ -29,7 +29,7 @@ class SubSettingRecyclerAdapter(val activity: SubSettingActivity) : RecyclerView holder.name.text = remarks holder.url.text = url - holder.itemView.backgroundColor = Color.TRANSPARENT + holder.itemView.setBackgroundColor(Color.TRANSPARENT) holder.layout_edit.setOnClickListener { mActivity.startActivity(Intent(mActivity, SubEditActivity::class.java) From 89be5f077bbb56077ea0f2713fa42611a047a6da Mon Sep 17 00:00:00 2001 From: yuhan6665 <1588741+yuhan6665@users.noreply.github.com> Date: Sat, 3 Oct 2020 11:19:46 -0400 Subject: [PATCH 6/6] Say goodbye to Anko replace with support lib PreferenceManager replace LayoutInflater --- V2rayNG/app/build.gradle | 1 - .../src/main/kotlin/com/v2ray/ang/AngApplication.kt | 4 ++-- .../kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt | 6 +++--- .../kotlin/com/v2ray/ang/ui/PerAppProxyAdapter.kt | 4 ++-- .../main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt | 12 ++++++------ .../com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt | 4 ++-- V2rayNG/app/src/main/res/raw/licenses.xml | 5 ----- V2rayNG/gradle.properties | 1 - 8 files changed, 15 insertions(+), 22 deletions(-) diff --git a/V2rayNG/app/build.gradle b/V2rayNG/app/build.gradle index 1352b28a..47b65128 100644 --- a/V2rayNG/app/build.gradle +++ b/V2rayNG/app/build.gradle @@ -81,7 +81,6 @@ dependencies { implementation 'com.android.support.constraint:constraint-layout:2.0.1' // DSL - implementation "org.jetbrains.anko:anko-sdk15:$ankoVersion" implementation 'com.google.code.gson:gson:2.8.6' implementation 'io.reactivex:rxjava:1.3.4' implementation 'io.reactivex:rxandroid:1.2.1' diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AngApplication.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AngApplication.kt index 73f816d5..649e0594 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AngApplication.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/AngApplication.kt @@ -1,10 +1,9 @@ package com.v2ray.ang -//import com.squareup.leakcanary.LeakCanary import android.support.multidex.MultiDexApplication +import android.support.v7.preference.PreferenceManager import com.v2ray.ang.util.AngConfigManager import me.dozen.dpreference.DPreference -import org.jetbrains.anko.defaultSharedPreferences class AngApplication : MultiDexApplication() { companion object { @@ -22,6 +21,7 @@ class AngApplication : MultiDexApplication() { // LeakCanary.install(this) + val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this) firstRun = defaultSharedPreferences.getInt(PREF_LAST_VERSION, 0) != BuildConfig.VERSION_CODE if (firstRun) defaultSharedPreferences.edit().putInt(PREF_LAST_VERSION, BuildConfig.VERSION_CODE).apply() diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt index bd9d7492..fbce435f 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/MainRecyclerAdapter.kt @@ -5,6 +5,7 @@ import android.graphics.Color import android.support.v7.app.AlertDialog import android.support.v7.widget.RecyclerView import android.text.TextUtils +import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.v2ray.ang.AppConfig @@ -19,7 +20,6 @@ import com.v2ray.ang.util.Utils import com.v2ray.ang.util.V2rayConfigUtil import kotlinx.android.synthetic.main.item_qrcode.view.* import kotlinx.android.synthetic.main.item_recycler_main.view.* -import org.jetbrains.anko.* import rx.Observable import rx.android.schedulers.AndroidSchedulers import java.util.concurrent.TimeUnit @@ -180,10 +180,10 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter - return MainViewHolder(parent.context.layoutInflater + return MainViewHolder(LayoutInflater.from(parent.context) .inflate(R.layout.item_recycler_main, parent, false)) else -> - return FooterViewHolder(parent.context.layoutInflater + return FooterViewHolder(LayoutInflater.from(parent.context) .inflate(R.layout.item_recycler_footer, parent, false)) } } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyAdapter.kt index 2b7f9ce4..cc2d6088 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/PerAppProxyAdapter.kt @@ -2,12 +2,12 @@ package com.v2ray.ang.ui import android.graphics.Color import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.v2ray.ang.R import com.v2ray.ang.dto.AppInfo import kotlinx.android.synthetic.main.item_recycler_bypass_list.view.* -import org.jetbrains.anko.layoutInflater import java.util.* class PerAppProxyAdapter(val activity: BaseActivity, val apps: List, blacklist: MutableSet?) : @@ -43,7 +43,7 @@ class PerAppProxyAdapter(val activity: BaseActivity, val apps: List, bl // VIEW_TYPE_ITEM -> AppViewHolder(ctx.layoutInflater // .inflate(R.layout.item_recycler_bypass_list, parent, false)) - else -> AppViewHolder(ctx.layoutInflater + else -> AppViewHolder(LayoutInflater.from(ctx) .inflate(R.layout.item_recycler_bypass_list, parent, false)) } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt index 936495eb..0843e0a4 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SettingsActivity.kt @@ -8,7 +8,6 @@ import com.v2ray.ang.R import com.v2ray.ang.AppConfig import com.v2ray.ang.extension.toast import com.v2ray.ang.util.Utils -import org.jetbrains.anko.defaultSharedPreferences class SettingsActivity : BaseActivity() { companion object { @@ -206,9 +205,10 @@ class SettingsActivity : BaseActivity() { override fun onStart() { super.onStart() - updatePerAppProxy(activity?.defaultSharedPreferences?.getString(AppConfig.PREF_MODE, "VPN")) - remoteDns.summary = activity?.defaultSharedPreferences?.getString(PREF_REMOTE_DNS, "") - domesticDns.summary = activity?.defaultSharedPreferences?.getString(PREF_DOMESTIC_DNS, "") + val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity) + updatePerAppProxy(defaultSharedPreferences.getString(AppConfig.PREF_MODE, "VPN")) + remoteDns.summary = defaultSharedPreferences.getString(PREF_REMOTE_DNS, "") + domesticDns.summary = defaultSharedPreferences.getString(PREF_DOMESTIC_DNS, "") if (remoteDns.summary == "") { remoteDns.summary = AppConfig.DNS_AGENT @@ -223,10 +223,10 @@ class SettingsActivity : BaseActivity() { } private fun updatePerAppProxy(mode: String?) { - val preference = activity?.defaultSharedPreferences ?: return if (mode == "VPN") { perAppProxy.isEnabled = true - perAppProxy.isChecked = preference.getBoolean(PREF_PER_APP_PROXY, false) + perAppProxy.isChecked = PreferenceManager.getDefaultSharedPreferences(activity) + .getBoolean(PREF_PER_APP_PROXY, false) } else { perAppProxy.isEnabled = false perAppProxy.isChecked = false diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt index 307f3a46..50c89d5b 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/SubSettingRecyclerAdapter.kt @@ -3,13 +3,13 @@ package com.v2ray.ang.ui import android.content.Intent import android.graphics.Color import android.support.v7.widget.RecyclerView +import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import com.v2ray.ang.R import com.v2ray.ang.dto.AngConfig import com.v2ray.ang.util.AngConfigManager import kotlinx.android.synthetic.main.item_recycler_sub_setting.view.* -import org.jetbrains.anko.* class SubSettingRecyclerAdapter(val activity: SubSettingActivity) : RecyclerView.Adapter() { @@ -41,7 +41,7 @@ class SubSettingRecyclerAdapter(val activity: SubSettingActivity) : RecyclerView } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BaseViewHolder { - return MainViewHolder(parent.context.layoutInflater + return MainViewHolder(LayoutInflater.from(parent.context) .inflate(R.layout.item_recycler_sub_setting, parent, false)) } diff --git a/V2rayNG/app/src/main/res/raw/licenses.xml b/V2rayNG/app/src/main/res/raw/licenses.xml index e7949142..06723342 100644 --- a/V2rayNG/app/src/main/res/raw/licenses.xml +++ b/V2rayNG/app/src/main/res/raw/licenses.xml @@ -17,11 +17,6 @@ Copyright(C) 2008-2011 The Android Open Source Project Apache Software License 2.0 - - anko - https://github.com/Kotlin/anko - Apache Software License 2.0 - Google Gson https://github.com/google/gson diff --git a/V2rayNG/gradle.properties b/V2rayNG/gradle.properties index ee67f2c2..cd501cb8 100644 --- a/V2rayNG/gradle.properties +++ b/V2rayNG/gradle.properties @@ -13,7 +13,6 @@ org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryErro # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true #Fri Jun 02 14:08:42 CST 2017 -ankoVersion=0.10.8 kotlinVersion=1.4.0 supportLibVersion=28.0.0 buildToolsVer=29.0.3