From a5287dbadc75904f7029b729aada07bbe3065556 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Sun, 2 Jun 2024 20:50:27 +0800 Subject: [PATCH] Optimized code --- .../kotlin/com/v2ray/ang/dto/AngConfig.kt | 32 ------------------- .../kotlin/com/v2ray/ang/dto/V2rayConfig.kt | 4 +-- .../v2ray/ang/service/SubscriptionUpdater.kt | 2 +- .../com/v2ray/ang/ui/MainRecyclerAdapter.kt | 2 +- .../com/v2ray/ang/ui/PerAppProxyActivity.kt | 12 +++---- .../v2ray/ang/ui/RoutingSettingsFragment.kt | 6 ++-- .../com/v2ray/ang/ui/ScannerActivity.kt | 4 +-- .../kotlin/com/v2ray/ang/ui/ServerActivity.kt | 12 ++++--- .../kotlin/com/v2ray/ang/ui/TaskerActivity.kt | 2 +- .../main/kotlin/com/v2ray/ang/util/Utils.kt | 21 ++++++++---- .../com/v2ray/ang/util/V2rayConfigUtil.kt | 6 ++-- .../com/v2ray/ang/util/fmt/ShadowsocksFmt.kt | 2 +- .../kotlin/com/v2ray/ang/util/fmt/SocksFmt.kt | 2 +- .../com/v2ray/ang/util/fmt/TrojanFmt.kt | 12 +++---- .../kotlin/com/v2ray/ang/util/fmt/VlessFmt.kt | 10 +++--- .../com/v2ray/ang/util/fmt/WireguardFmt.kt | 2 +- .../com/v2ray/ang/viewmodel/MainViewModel.kt | 4 +-- .../com/v2ray/ang/viewmodel/SubViewModel.kt | 2 +- 18 files changed, 58 insertions(+), 79 deletions(-) delete mode 100644 V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/AngConfig.kt diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/AngConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/AngConfig.kt deleted file mode 100644 index 01f2bdd8..00000000 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/AngConfig.kt +++ /dev/null @@ -1,32 +0,0 @@ -package com.v2ray.ang.dto - -data class AngConfig( - var index: Int, - var vmess: ArrayList, - var subItem: ArrayList -) { - data class VmessBean(var guid: String = "123456", - var address: String = "v2ray.cool", - var port: Int = 10086, - var id: String = "a3482e88-686a-4a58-8126-99c9df64b7bf", - var alterId: Int = 64, - var security: String = "aes-128-cfb", - var network: String = "tcp", - var remarks: String = "def", - var headerType: String = "", - var requestHost: String = "", - var path: String = "", - var streamSecurity: String = "", - var allowInsecure: String = "", - var configType: Int = 1, - var configVersion: Int = 1, - var testResult: String = "", - var subid: String = "", - var flow: String = "", - var sni: String = "") - - data class SubItemBean(var id: String = "", - var remarks: String = "", - var url: String = "", - var enabled: Boolean = true) -} diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt index 27000dbb..fe5c7919 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/dto/V2rayConfig.kt @@ -157,7 +157,7 @@ data class V2rayConfig( var headers: HeadersBean = HeadersBean(), val version: String? = null, val method: String? = null) { - data class HeadersBean(var Host: List = ArrayList(), + data class HeadersBean(var Host: List? = ArrayList(), @SerializedName("User-Agent") val userAgent: List? = null, @SerializedName("Accept-Encoding") @@ -247,7 +247,7 @@ data class V2rayConfig( requestObj.headers.Host = (host ?: "").split(",").map { it.trim() }.filter { it.isNotEmpty() } requestObj.path = (path ?: "").split(",").map { it.trim() }.filter { it.isNotEmpty() } tcpSetting.header.request = requestObj - sni = requestObj.headers.Host.getOrNull(0) ?: sni + sni = requestObj.headers.Host?.getOrNull(0) ?: sni } } else { tcpSetting.header.type = "none" diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/SubscriptionUpdater.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/SubscriptionUpdater.kt index 9cd6e1ae..2ba506b3 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/SubscriptionUpdater.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/SubscriptionUpdater.kt @@ -71,7 +71,7 @@ object SubscriptionUpdater { val count = AngConfigManager.importBatchConfig(server, subid, append) if (count <= 0) { - AngConfigManager.importBatchConfig(Utils.decode(server!!), subid, append) + AngConfigManager.importBatchConfig(Utils.decode(server), subid, append) } if (count <= 0) { AngConfigManager.appendCustomConfigServer(server, subid) 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 3662b8bd..2ea7adf7 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 @@ -162,7 +162,7 @@ class MainRecyclerAdapter(val activity: MainActivity) : RecyclerView.Adapter(R.id.listview) as ListView - listview!!.adapter = adapter + listview?.adapter = adapter init() } 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 b672b667..b16ca78c 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 @@ -39,8 +39,8 @@ object Utils { * @param text * @return */ - fun getEditable(text: String): Editable { - return Editable.Factory.getInstance().newEditable(text) + fun getEditable(text: String?): Editable { + return Editable.Factory.getInstance().newEditable(text?:"") } /** @@ -101,16 +101,16 @@ object Utils { /** * base64 decode */ - fun decode(text: String): String { + fun decode(text: String?): String { tryDecodeBase64(text)?.let { return it } - if (text.endsWith('=')) { + if (text?.endsWith('=')==true) { // try again for some loosely formatted base64 tryDecodeBase64(text.trimEnd('='))?.let { return it } } return "" } - fun tryDecodeBase64(text: String): String? { + fun tryDecodeBase64(text: String?): String? { try { return Base64.decode(text, Base64.NO_WRAP).toString(charset("UTF-8")) } catch (e: Exception) { @@ -302,7 +302,11 @@ object Utils { /** * readTextFromAssets */ - fun readTextFromAssets(context: Context, fileName: String): String { + fun readTextFromAssets(context: Context?, fileName: String): String { + if(context == null) + { + return "" + } val content = context.assets.open(fileName).bufferedReader().use { it.readText() } @@ -389,7 +393,10 @@ object Utils { } } - fun getIpv6Address(address: String): String { + fun getIpv6Address(address: String?): String { + if(address == null){ + return "" + } return if (isIpv6Address(address) && !address.contains('[') && !address.contains(']')) { String.format("[%s]", address) } else { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt index f4ad2da5..050e10e5 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/V2rayConfigUtil.kt @@ -295,10 +295,10 @@ object V2rayConfigUtil { rulesDomain.domain?.add(it) } } - if (rulesDomain.domain?.size!! > 0) { + if ((rulesDomain.domain?.size ?: 0) > 0) { v2rayConfig.routing.rules.add(rulesDomain) } - if (rulesIP.ip?.size!! > 0) { + if ((rulesIP.ip?.size ?: 0) > 0) { v2rayConfig.routing.rules.add(rulesIP) } } @@ -560,7 +560,7 @@ object V2rayConfigUtil { } else { path } - outbound.streamSettings?.tcpSettings?.header?.request?.headers?.Host = host!! + outbound.streamSettings?.tcpSettings?.header?.request?.headers?.Host = host } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/ShadowsocksFmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/ShadowsocksFmt.kt index f79ccb08..668264aa 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/ShadowsocksFmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/ShadowsocksFmt.kt @@ -58,7 +58,7 @@ object ShadowsocksFmt { val url = String.format( "%s@%s:%s", pw, - Utils.getIpv6Address(outbound.getServerAddress()!!), + Utils.getIpv6Address(outbound.getServerAddress()), outbound.getServerPort() ) return url + remark diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/SocksFmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/SocksFmt.kt index 420f8a68..0148ec88 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/SocksFmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/SocksFmt.kt @@ -61,7 +61,7 @@ object SocksFmt { val url = String.format( "%s@%s:%s", Utils.encode(pw), - Utils.getIpv6Address(outbound.getServerAddress()!!), + Utils.getIpv6Address(outbound.getServerAddress()), outbound.getServerPort() ) return url + remark diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/TrojanFmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/TrojanFmt.kt index b3365fcb..0a42f8bd 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/TrojanFmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/TrojanFmt.kt @@ -52,7 +52,7 @@ object TrojanFmt { fingerprint = queryParam["fp"] ?: "" config.outboundBean?.streamSettings?.populateTlsSettings( queryParam["security"] ?: V2rayConfig.TLS, - allowInsecure, queryParam["sni"] ?: sni!!, fingerprint, queryParam["alpn"], + allowInsecure, queryParam["sni"] ?: sni?:"", fingerprint, queryParam["alpn"], null, null, null ) flow = queryParam["flow"] ?: "" @@ -92,16 +92,16 @@ object TrojanFmt { Utils.removeWhiteSpace(tlsSetting.alpn.joinToString()).orEmpty() } if (!TextUtils.isEmpty(tlsSetting.fingerprint)) { - dicQuery["fp"] = tlsSetting.fingerprint!! + dicQuery["fp"] = tlsSetting.fingerprint?:"" } if (!TextUtils.isEmpty(tlsSetting.publicKey)) { - dicQuery["pbk"] = tlsSetting.publicKey!! + dicQuery["pbk"] = tlsSetting.publicKey?:"" } if (!TextUtils.isEmpty(tlsSetting.shortId)) { - dicQuery["sid"] = tlsSetting.shortId!! + dicQuery["sid"] = tlsSetting.shortId?:"" } if (!TextUtils.isEmpty(tlsSetting.spiderX)) { - dicQuery["spx"] = Utils.urlEncode(tlsSetting.spiderX!!) + dicQuery["spx"] = Utils.urlEncode(tlsSetting.spiderX?:"") } } dicQuery["type"] = @@ -162,7 +162,7 @@ object TrojanFmt { val url = String.format( "%s@%s:%s", outbound.getPassword(), - Utils.getIpv6Address(outbound.getServerAddress()!!), + Utils.getIpv6Address(outbound.getServerAddress()), outbound.getServerPort() ) return url + query + remark diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/VlessFmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/VlessFmt.kt index e689a31e..6ab3003b 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/VlessFmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/VlessFmt.kt @@ -92,16 +92,16 @@ object VlessFmt { Utils.removeWhiteSpace(tlsSetting.alpn.joinToString()).orEmpty() } if (!TextUtils.isEmpty(tlsSetting.fingerprint)) { - dicQuery["fp"] = tlsSetting.fingerprint!! + dicQuery["fp"] = tlsSetting.fingerprint?:"" } if (!TextUtils.isEmpty(tlsSetting.publicKey)) { - dicQuery["pbk"] = tlsSetting.publicKey!! + dicQuery["pbk"] = tlsSetting.publicKey?:"" } if (!TextUtils.isEmpty(tlsSetting.shortId)) { - dicQuery["sid"] = tlsSetting.shortId!! + dicQuery["sid"] = tlsSetting.shortId?:"" } if (!TextUtils.isEmpty(tlsSetting.spiderX)) { - dicQuery["spx"] = Utils.urlEncode(tlsSetting.spiderX!!) + dicQuery["spx"] = Utils.urlEncode(tlsSetting.spiderX?:"") } } dicQuery["type"] = @@ -162,7 +162,7 @@ object VlessFmt { val url = String.format( "%s@%s:%s", outbound.getPassword(), - Utils.getIpv6Address(outbound.getServerAddress()!!), + Utils.getIpv6Address(outbound.getServerAddress()), outbound.getServerPort() ) return url + query + remark diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/WireguardFmt.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/WireguardFmt.kt index 90c1ebe9..d00a4d75 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/WireguardFmt.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/fmt/WireguardFmt.kt @@ -63,7 +63,7 @@ object WireguardFmt { val url = String.format( "%s@%s:%s", Utils.urlEncode(outbound.getPassword().toString()), - Utils.getIpv6Address(outbound.getServerAddress()!!), + Utils.getIpv6Address(outbound.getServerAddress()), outbound.getServerPort() ) return url + query + remark diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt index 08e4b5ea..7e0510c8 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/MainViewModel.kt @@ -60,8 +60,8 @@ class MainViewModel(application: Application) : AndroidViewModel(application) { } var serverList = MmkvManager.decodeServerList() - var subscriptionId: String = settingsStorage.decodeString(AppConfig.CACHE_SUBSCRIPTION_ID, "")!! - var keywordFilter: String = settingsStorage.decodeString(AppConfig.CACHE_KEYWORD_FILTER, "")!! + var subscriptionId: String = settingsStorage.decodeString(AppConfig.CACHE_SUBSCRIPTION_ID, "")?:"" + var keywordFilter: String = settingsStorage.decodeString(AppConfig.CACHE_KEYWORD_FILTER, "")?:"" private set val serversCache = mutableListOf() val isRunning by lazy { MutableLiveData() } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SubViewModel.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SubViewModel.kt index b2f5cd42..67ad1ee3 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SubViewModel.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/viewmodel/SubViewModel.kt @@ -83,7 +83,7 @@ class SubViewModel(application: Application) : AndroidViewModel(application) { fun importBatchConfig(server: String?, subid: String = "", append: Boolean): Int { var count = AngConfigManager.importBatchConfig(server, subid, append) if (count <= 0) { - count = AngConfigManager.importBatchConfig(Utils.decode(server!!), subid, append) + count = AngConfigManager.importBatchConfig(Utils.decode(server), subid, append) } if (count <= 0) { count = AngConfigManager.appendCustomConfigServer(server, subid)