From f61f30fdc40537bd233b2b7139a634099e264374 Mon Sep 17 00:00:00 2001 From: 2dust <31833384+2dust@users.noreply.github.com> Date: Thu, 17 Feb 2022 16:08:31 +0800 Subject: [PATCH] change sdk version --- V2rayNG/app/build.gradle | 24 +++++++----- .../kotlin/com/v2ray/ang/extension/_Ext.kt | 4 +- .../com/v2ray/ang/receiver/WidgetProvider.kt | 24 ++++++++++-- .../v2ray/ang/service/V2RayServiceManager.kt | 12 +++++- .../com/v2ray/ang/service/V2RayVpnService.kt | 3 +- .../kotlin/com/v2ray/ang/ui/LogcatActivity.kt | 2 +- .../kotlin/com/v2ray/ang/ui/MainActivity.kt | 2 +- .../com/v2ray/ang/ui/PerAppProxyActivity.kt | 2 +- .../v2ray/ang/ui/RoutingSettingsFragment.kt | 37 ++++++++++++++----- .../com/v2ray/ang/ui/ScannerActivity.kt | 2 +- .../kotlin/com/v2ray/ang/ui/ServerActivity.kt | 6 +-- .../ang/ui/ServerCustomConfigActivity.kt | 6 +-- .../com/v2ray/ang/ui/SettingsActivity.kt | 9 ++--- .../com/v2ray/ang/ui/SubEditActivity.kt | 6 +-- .../com/v2ray/ang/ui/SubSettingActivity.kt | 6 +-- .../kotlin/com/v2ray/ang/ui/TaskerActivity.kt | 4 +- .../com/v2ray/ang/util/AngConfigManager.kt | 2 +- .../color_highlight_material.xml | 0 .../app/src/main/res/values-v21/strings.xml | 4 -- .../app/src/main/res/values-v21/styles.xml | 8 ---- .../main/res/values-zh-rCN-v21/strings.xml | 4 -- .../src/main/res/values-zh-rCN/strings.xml | 2 +- .../main/res/values-zh-rTW-v21/strings.xml | 4 -- .../src/main/res/values-zh-rTW/strings.xml | 2 +- V2rayNG/app/src/main/res/values/strings.xml | 2 +- V2rayNG/app/src/main/res/values/styles.xml | 1 + V2rayNG/build.gradle | 10 +++-- V2rayNG/gradle.properties | 8 ++-- .../gradle/wrapper/gradle-wrapper.properties | 2 +- 29 files changed, 114 insertions(+), 84 deletions(-) rename V2rayNG/app/src/main/res/{color-v21 => color}/color_highlight_material.xml (100%) delete mode 100644 V2rayNG/app/src/main/res/values-v21/strings.xml delete mode 100644 V2rayNG/app/src/main/res/values-v21/styles.xml delete mode 100644 V2rayNG/app/src/main/res/values-zh-rCN-v21/strings.xml delete mode 100644 V2rayNG/app/src/main/res/values-zh-rTW-v21/strings.xml diff --git a/V2rayNG/app/build.gradle b/V2rayNG/app/build.gradle index 2fc17ae5..b563513f 100644 --- a/V2rayNG/app/build.gradle +++ b/V2rayNG/app/build.gradle @@ -13,7 +13,7 @@ android { defaultConfig { applicationId "com.v2ray.ang" - minSdkVersion 17 + minSdkVersion 21 targetSdkVersion Integer.parseInt("$targetSdkVer") multiDexEnabled true versionCode 212 @@ -59,7 +59,9 @@ android { android.applicationVariants.all { variant -> // assign different version code for each output variant.outputs.each { output -> - output.versionCodeOverride = + output.outputFileName = "v2rayNG_" + variant.versionName + "_" + output.getFilter(com.android.build.OutputFile.ABI) + ".apk" + + output.versionCodeOverride = project.ext.versionCodes.get(output.getFilter(com.android.build.OutputFile.ABI), 0) * 1000000 + android.defaultConfig.versionCode } @@ -72,7 +74,7 @@ android { dependencies { implementation fileTree(dir: 'libs', include: ['*.aar', '*.jar'], exclude: []) - testImplementation 'junit:junit:4.13' + testImplementation 'junit:junit:4.13.2' // Androidx implementation 'androidx.constraintlayout:constraintlayout:2.0.4' @@ -91,12 +93,11 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1' //kotlin - implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1" - implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.1" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2" + implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.2" - implementation 'com.tencent:mmkv-static:1.2.7' + implementation 'com.tencent:mmkv-static:1.2.12' implementation 'com.google.code.gson:gson:2.8.6' implementation 'io.reactivex:rxjava:1.3.4' implementation 'io.reactivex:rxandroid:1.2.1' @@ -105,15 +106,18 @@ dependencies { implementation 'me.dm7.barcodescanner:zxing:1.9.8' implementation 'com.github.jorgecastilloprz:fabprogresscircle:1.01@aar' implementation 'me.drakeet.support:toastcompat:1.1.0' - implementation 'com.blacksquircle.ui:editorkit:2.0.0' - implementation 'com.blacksquircle.ui:language-json:2.0.0' + implementation 'com.blacksquircle.ui:editorkit:2.1.1' + implementation 'com.blacksquircle.ui:language-base:2.1.1' + implementation 'com.blacksquircle.ui:language-json:2.1.1' } buildscript { repositories { google() - jcenter() + mavenCentral() maven { url 'https://maven.google.com' } + maven { url 'https://jitpack.io' } + jcenter() } dependencies { classpath "org.jetbrains.kotlin:kotlin-android-extensions:$kotlinVersion" 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 4d317e67..e238ff27 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 @@ -15,13 +15,13 @@ import java.net.URLConnection val Context.v2RayApplication: AngApplication get() = applicationContext as AngApplication -inline fun Context.toast(message: Int): Toast = ToastCompat +fun Context.toast(message: Int): Toast = ToastCompat .makeText(this, message, Toast.LENGTH_SHORT) .apply { show() } -inline fun Context.toast(message: CharSequence): Toast = ToastCompat +fun Context.toast(message: CharSequence): Toast = ToastCompat .makeText(this, message, Toast.LENGTH_SHORT) .apply { show() diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/WidgetProvider.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/WidgetProvider.kt index 20259d4e..826bf24f 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/WidgetProvider.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/receiver/WidgetProvider.kt @@ -6,6 +6,7 @@ import android.appwidget.AppWidgetProvider import android.content.ComponentName import android.content.Context import android.content.Intent +import android.os.Build import android.widget.RemoteViews import com.v2ray.ang.R import com.v2ray.ang.AppConfig @@ -21,16 +22,33 @@ class WidgetProvider : AppWidgetProvider() { updateWidgetBackground(context, appWidgetManager, appWidgetIds, V2RayServiceManager.v2rayPoint.isRunning) } + private fun updateWidgetBackground(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray, isRunning: Boolean) { val remoteViews = RemoteViews(context.packageName, R.layout.widget_switch) val intent = Intent(context, WidgetProvider::class.java) intent.action = AppConfig.BROADCAST_ACTION_WIDGET_CLICK - val pendingIntent = PendingIntent.getBroadcast(context, R.id.layout_switch, intent, PendingIntent.FLAG_UPDATE_CURRENT) + val pendingIntent = PendingIntent.getBroadcast( + context, + R.id.layout_switch, + intent, + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + } else { + PendingIntent.FLAG_UPDATE_CURRENT + }) remoteViews.setOnClickPendingIntent(R.id.layout_switch, pendingIntent) if (isRunning) { - remoteViews.setInt(R.id.layout_switch, "setBackgroundResource", R.drawable.ic_rounded_corner_theme) + remoteViews.setInt( + R.id.layout_switch, + "setBackgroundResource", + R.drawable.ic_rounded_corner_theme + ) } else { - remoteViews.setInt(R.id.layout_switch, "setBackgroundResource", R.drawable.ic_rounded_corner_grey) + remoteViews.setInt( + R.id.layout_switch, + "setBackgroundResource", + R.drawable.ic_rounded_corner_grey + ) } for (appWidgetId in appWidgetIds) { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayServiceManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayServiceManager.kt index cf44bfa2..8ee39792 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayServiceManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/service/V2RayServiceManager.kt @@ -237,7 +237,11 @@ object V2RayServiceManager { val startMainIntent = Intent(service, MainActivity::class.java) val contentPendingIntent = PendingIntent.getActivity(service, NOTIFICATION_PENDING_INTENT_CONTENT, startMainIntent, - PendingIntent.FLAG_UPDATE_CURRENT) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + } else { + PendingIntent.FLAG_UPDATE_CURRENT + }) val stopV2RayIntent = Intent(AppConfig.BROADCAST_ACTION_SERVICE) stopV2RayIntent.`package` = ANG_PACKAGE @@ -245,7 +249,11 @@ object V2RayServiceManager { val stopV2RayPendingIntent = PendingIntent.getBroadcast(service, NOTIFICATION_PENDING_INTENT_STOP_V2RAY, stopV2RayIntent, - PendingIntent.FLAG_UPDATE_CURRENT) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT + } else { + PendingIntent.FLAG_UPDATE_CURRENT + }) val channelId = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 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 586c5c00..240e6db8 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 @@ -132,8 +132,7 @@ class V2RayVpnService : VpnService(), ServiceControl { builder.setSession(V2RayServiceManager.currentConfig?.remarks.orEmpty()) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && - settingsStorage?.decodeBool(AppConfig.PREF_PER_APP_PROXY) == true) { + if (settingsStorage?.decodeBool(AppConfig.PREF_PER_APP_PROXY) == true) { val apps = settingsStorage?.decodeStringSet(AppConfig.PREF_PER_APP_PROXY_SET) val bypassApps = settingsStorage?.decodeBool(AppConfig.PREF_BYPASS_APPS) ?: false apps?.forEach { 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 146884fa..7128010f 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 @@ -70,7 +70,7 @@ class LogcatActivity : BaseActivity() { } } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_logcat, menu) return super.onCreateOptionsMenu(menu) } 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 09a6dff9..c876fe3e 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 @@ -169,7 +169,7 @@ class MainActivity : BaseActivity(), NavigationView.OnNavigationItemSelectedList super.onPause() } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_main, menu) return true } 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 003e06dd..435bd1e7 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 @@ -188,7 +188,7 @@ class PerAppProxyActivity : BaseActivity() { } } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_bypass_list, menu) return super.onCreateOptionsMenu(menu) } 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 37d1788a..70269460 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 @@ -4,33 +4,38 @@ import android.Manifest import android.app.Activity.RESULT_OK import android.content.Intent import android.os.Bundle +import android.text.TextUtils import androidx.fragment.app.Fragment import androidx.preference.PreferenceManager import android.view.* -import com.v2ray.ang.R -import com.v2ray.ang.util.Utils import kotlinx.android.synthetic.main.fragment_routing_settings.* import android.view.MenuInflater import androidx.activity.result.contract.ActivityResultContracts import com.tbruyelle.rxpermissions.RxPermissions import com.v2ray.ang.AppConfig +import com.v2ray.ang.R +import com.v2ray.ang.databinding.FragmentRoutingSettingsBinding import com.v2ray.ang.extension.toast +import com.v2ray.ang.extension.v2RayApplication +import com.v2ray.ang.util.Utils import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.net.URL class RoutingSettingsFragment : Fragment() { + private lateinit var binding: FragmentRoutingSettingsBinding companion object { private const val routing_arg = "routing_arg" } - val defaultSharedPreferences by lazy { PreferenceManager.getDefaultSharedPreferences(context) } + val defaultSharedPreferences by lazy { PreferenceManager.getDefaultSharedPreferences(requireContext()) } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment - return inflater.inflate(R.layout.fragment_routing_settings, container, false) + binding = FragmentRoutingSettingsBinding.inflate(layoutInflater) + return binding.root// inflater.inflate(R.layout.fragment_routing_settings, container, false) } fun newInstance(arg: String): Fragment { @@ -45,7 +50,7 @@ class RoutingSettingsFragment : Fragment() { super.onViewCreated(view, savedInstanceState) val content = defaultSharedPreferences.getString(requireArguments().getString(routing_arg), "") - et_routing_content.text = Utils.getEditable(content!!) + binding.etRoutingContent.text = Utils.getEditable(content!!) setHasOptionsMenu(true) } @@ -63,7 +68,7 @@ class RoutingSettingsFragment : Fragment() { true } R.id.del_routing -> { - et_routing_content.text = null + binding.etRoutingContent.text = null true } R.id.scan_replace -> { @@ -81,6 +86,12 @@ class RoutingSettingsFragment : Fragment() { else -> super.onOptionsItemSelected(item) } + private fun saveRouting() { + val content = binding.etRoutingContent.text.toString() + defaultSharedPreferences.edit().putString(requireArguments().getString(routing_arg), content).apply() + activity?.toast(R.string.toast_success) + } + fun scanQRcode(forReplace: Boolean): Boolean { // try { // startActivityForResult(Intent("com.google.zxing.client.android.SCAN") @@ -105,14 +116,14 @@ class RoutingSettingsFragment : Fragment() { private val scanQRCodeForReplace = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { if (it.resultCode == RESULT_OK) { val content = it.data?.getStringExtra("SCAN_RESULT") - et_routing_content.text = Utils.getEditable(content!!) + binding.etRoutingContent.text = Utils.getEditable(content!!) } } private val scanQRCodeForAppend = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { if (it.resultCode == RESULT_OK) { val content = it.data?.getStringExtra("SCAN_RESULT") - et_routing_content.text = Utils.getEditable("${et_routing_content.text},$content") + binding.etRoutingContent.text = Utils.getEditable("${binding.etRoutingContent.text},$content") } } @@ -139,8 +150,14 @@ class RoutingSettingsFragment : Fragment() { "" } launch(Dispatchers.Main) { - et_routing_content.text = Utils.getEditable(content) - activity?.toast(R.string.toast_success) + val routingList = if (TextUtils.isEmpty(content)) { + Utils.readTextFromAssets(activity?.v2RayApplication!!, "custom_routing_$tag") + } else { + content + } + binding.etRoutingContent.text = Utils.getEditable(routingList) + saveRouting() + //toast(R.string.toast_success) } } return true 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 03fb791e..e4982d83 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 @@ -63,7 +63,7 @@ class ScannerActivity : BaseActivity(), ZXingScannerView.ResultHandler { finish() } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.menu_scanner, menu) 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 17fd859a..a0139dff 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 @@ -315,10 +315,10 @@ class ServerActivity : BaseActivity() { return true } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_server, menu) - val delButton = menu?.findItem(R.id.del_config) - val saveButton = menu?.findItem(R.id.save_config) + val delButton = menu.findItem(R.id.del_config) + val saveButton = menu.findItem(R.id.save_config) if (editGuid.isNotEmpty()) { if (isRunning) { diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt index e445b744..a38c1783 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/ServerCustomConfigActivity.kt @@ -113,10 +113,10 @@ class ServerCustomConfigActivity : BaseActivity() { return true } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_server, menu) - val delButton = menu?.findItem(R.id.del_config) - val saveButton = menu?.findItem(R.id.save_config) + val delButton = menu.findItem(R.id.del_config) + val saveButton = menu.findItem(R.id.save_config) if (editGuid.isNotEmpty()) { if (isRunning) { 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 87226b08..6ac19920 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 @@ -4,7 +4,6 @@ import android.content.Intent import android.os.Bundle import androidx.preference.* import android.text.TextUtils -import android.view.View import androidx.activity.viewModels import com.v2ray.ang.R import com.v2ray.ang.AppConfig @@ -203,7 +202,7 @@ class SettingsActivity : BaseActivity() { override fun onStart() { super.onStart() - val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity) + val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()) updateMode(defaultSharedPreferences.getString(AppConfig.PREF_MODE, "VPN")) var remoteDnsString = defaultSharedPreferences.getString(AppConfig.PREF_REMOTE_DNS, "") domesticDns.summary = defaultSharedPreferences.getString(AppConfig.PREF_DOMESTIC_DNS, "") @@ -222,10 +221,10 @@ class SettingsActivity : BaseActivity() { } private fun updateMode(mode: String?) { - val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(activity) + val defaultSharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireActivity()) val vpn = mode == "VPN" perAppProxy.isEnabled = vpn - perAppProxy.isChecked = PreferenceManager.getDefaultSharedPreferences(activity) + perAppProxy.isChecked = PreferenceManager.getDefaultSharedPreferences(requireActivity()) .getBoolean(AppConfig.PREF_PER_APP_PROXY, false) localDns?.isEnabled = vpn fakeDns?.isEnabled = vpn @@ -243,7 +242,7 @@ class SettingsActivity : BaseActivity() { } } - fun onModeHelpClicked(view: View) { + fun onModeHelpClicked() { Utils.openUri(this, AppConfig.v2rayNGWikiMode) } } 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 dbc04895..f7b1c30a 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 @@ -106,10 +106,10 @@ class SubEditActivity : BaseActivity() { return true } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_server, menu) - del_config = menu?.findItem(R.id.del_config) - save_config = menu?.findItem(R.id.save_config) + del_config = menu.findItem(R.id.del_config) + save_config = menu.findItem(R.id.save_config) if (editSubId.isEmpty()) { del_config?.isVisible = 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 32abe229..a0030730 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 @@ -37,10 +37,10 @@ class SubSettingActivity : BaseActivity() { adapter.notifyDataSetChanged() } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_sub_setting, menu) - menu?.findItem(R.id.del_config)?.isVisible = false - menu?.findItem(R.id.save_config)?.isVisible = false + menu.findItem(R.id.del_config)?.isVisible = false + menu.findItem(R.id.save_config)?.isVisible = false return super.onCreateOptionsMenu(menu) } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt index 8ee9d68f..1fff3fbc 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/ui/TaskerActivity.kt @@ -95,9 +95,9 @@ class TaskerActivity : BaseActivity() { finish() } - override fun onCreateOptionsMenu(menu: Menu?): Boolean { + override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.action_server, menu) - val del_config = menu?.findItem(R.id.del_config) + val del_config = menu.findItem(R.id.del_config) del_config?.isVisible = false return super.onCreateOptionsMenu(menu) } diff --git a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt index 74844498..8888ecb0 100644 --- a/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt +++ b/V2rayNG/app/src/main/kotlin/com/v2ray/ang/util/AngConfigManager.kt @@ -167,7 +167,7 @@ object AngConfigManager { } //maybe sub - if (str.startsWith(HTTP_PROTOCOL) || str.startsWith(HTTPS_PROTOCOL)) { + if (TextUtils.isEmpty(subid) && (str.startsWith(HTTP_PROTOCOL) || str.startsWith(HTTPS_PROTOCOL))) { MmkvManager.importUrlAsSubscription(str) return 0 } diff --git a/V2rayNG/app/src/main/res/color-v21/color_highlight_material.xml b/V2rayNG/app/src/main/res/color/color_highlight_material.xml similarity index 100% rename from V2rayNG/app/src/main/res/color-v21/color_highlight_material.xml rename to V2rayNG/app/src/main/res/color/color_highlight_material.xml diff --git a/V2rayNG/app/src/main/res/values-v21/strings.xml b/V2rayNG/app/src/main/res/values-v21/strings.xml deleted file mode 100644 index fd9dac4a..00000000 --- a/V2rayNG/app/src/main/res/values-v21/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - Set proxy for selected apps - \ No newline at end of file diff --git a/V2rayNG/app/src/main/res/values-v21/styles.xml b/V2rayNG/app/src/main/res/values-v21/styles.xml deleted file mode 100644 index fd7a0584..00000000 --- a/V2rayNG/app/src/main/res/values-v21/styles.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - diff --git a/V2rayNG/app/src/main/res/values-zh-rCN-v21/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN-v21/strings.xml deleted file mode 100644 index 740864c2..00000000 --- a/V2rayNG/app/src/main/res/values-zh-rCN-v21/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 为应用程序分别设置代理 - \ No newline at end of file diff --git a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml index e03f27e6..dfa430f5 100644 --- a/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rCN/strings.xml @@ -78,7 +78,7 @@ 进阶设置 VPN 设置 分应用代理 - 分应用代理仅支持 Android 5.0 Lollipop 及更高 + 常规:勾选的App被代理,未勾选的直连;\n绕行模式:勾选的App直连,未勾选的被代理.\n不明白者在菜单中选择自动选中需代理应用 启用Mux多路复用 开启可能会加速,关闭可能会减少断流 diff --git a/V2rayNG/app/src/main/res/values-zh-rTW-v21/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW-v21/strings.xml deleted file mode 100644 index 81da2b40..00000000 --- a/V2rayNG/app/src/main/res/values-zh-rTW-v21/strings.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - 為選擇的應用程式設定 Proxy - diff --git a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml index f4224783..fc4f240c 100644 --- a/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml +++ b/V2rayNG/app/src/main/res/values-zh-rTW/strings.xml @@ -79,7 +79,7 @@ 進階 VPN 設定 Proxy 個別應用程式 - Proxy 個別應用程式模式只支援 Android 5.0 (Lollipop) 或更高 + 常規:勾選的App被代理,未勾選的直連;\n繞行模式:勾選的App直連,未勾選的被代理.\n不明白者在菜單中選擇自動選中需代理應用 啟用 Mux 啟用或許會加快網路速度,關閉或許會閃爍 diff --git a/V2rayNG/app/src/main/res/values/strings.xml b/V2rayNG/app/src/main/res/values/strings.xml index 171a069a..f6d5ec5c 100644 --- a/V2rayNG/app/src/main/res/values/strings.xml +++ b/V2rayNG/app/src/main/res/values/strings.xml @@ -79,7 +79,7 @@ Advanced Settings VPN Settings Per-app proxy - Per-app proxy mode only support Android 5.0 Lollipop or higher + General: Checked App is proxy, unchecked direct connection; \nbypass mode: checked app directly connected, unchecked proxy. \nThe option to automatically select the proxy application in the menu Enable Mux Enable maybe speed up network and switch network maybe flash diff --git a/V2rayNG/app/src/main/res/values/styles.xml b/V2rayNG/app/src/main/res/values/styles.xml index 827b4ded..ee224975 100644 --- a/V2rayNG/app/src/main/res/values/styles.xml +++ b/V2rayNG/app/src/main/res/values/styles.xml @@ -11,6 +11,7 @@