Commit 7ab3eb34 authored by Mygod's avatar Mygod

Update to Q beta 4/final API

parent 2991d0ab
...@@ -7,11 +7,11 @@ buildscript { ...@@ -7,11 +7,11 @@ buildscript {
javaVersion = JavaVersion.VERSION_1_8 javaVersion = JavaVersion.VERSION_1_8
kotlinVersion = '1.3.31' kotlinVersion = '1.3.31'
minSdkVersion = 21 minSdkVersion = 21
sdkVersion = 28 sdkVersion = 29
compileSdkVersion = 'android-Q' compileSdkVersion = 29
junitVersion = '4.12' junitVersion = '4.12'
androidTestVersion = '1.2.0-beta01' androidTestVersion = '1.2.0'
androidEspressoVersion = '3.2.0-beta01' androidEspressoVersion = '3.2.0'
versionCode = 4080050 versionCode = 4080050
versionName = '4.8.0-nightly' versionName = '4.8.0-nightly'
resConfigs = ['es', 'fa', 'fr', 'ja', 'ko', 'ru', 'tr', 'zh-rCN', 'zh-rTW'] resConfigs = ['es', 'fa', 'fr', 'ja', 'ko', 'ru', 'tr', 'zh-rCN', 'zh-rTW']
......
...@@ -54,7 +54,7 @@ dependencies { ...@@ -54,7 +54,7 @@ dependencies {
api "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion" api "androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion"
api "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion" api "androidx.lifecycle:lifecycle-extensions:$lifecycleVersion"
api "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion" api "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion"
api 'androidx.preference:preference:1.1.0-alpha05' api 'androidx.preference:preference:1.1.0-beta01'
api "androidx.room:room-runtime:$roomVersion" api "androidx.room:room-runtime:$roomVersion"
api 'androidx.work:work-runtime-ktx:2.0.1' api 'androidx.work:work-runtime-ktx:2.0.1'
api 'com.crashlytics.sdk.android:crashlytics:2.10.1' api 'com.crashlytics.sdk.android:crashlytics:2.10.1'
......
...@@ -23,10 +23,8 @@ package com.github.shadowsocks.bg ...@@ -23,10 +23,8 @@ package com.github.shadowsocks.bg
import android.annotation.TargetApi import android.annotation.TargetApi
import android.net.DnsResolver import android.net.DnsResolver
import android.net.Network import android.net.Network
import android.net.ParseException import android.os.Build
import android.os.CancellationSignal import android.os.CancellationSignal
import android.system.ErrnoException
import androidx.core.os.BuildCompat
import com.github.shadowsocks.Core import com.github.shadowsocks.Core
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
...@@ -39,7 +37,7 @@ import kotlin.coroutines.resumeWithException ...@@ -39,7 +37,7 @@ import kotlin.coroutines.resumeWithException
sealed class DnsResolverCompat { sealed class DnsResolverCompat {
companion object : DnsResolverCompat() { companion object : DnsResolverCompat() {
private val instance by lazy { if (BuildCompat.isAtLeastQ()) DnsResolverCompat29 else DnsResolverCompat21 } private val instance by lazy { if (Build.VERSION.SDK_INT >= 29) DnsResolverCompat29 else DnsResolverCompat21 }
override suspend fun resolve(network: Network, host: String) = instance.resolve(network, host) override suspend fun resolve(network: Network, host: String) = instance.resolve(network, host)
override suspend fun resolveOnActiveNetwork(host: String) = instance.resolveOnActiveNetwork(host) override suspend fun resolveOnActiveNetwork(host: String) = instance.resolveOnActiveNetwork(host)
...@@ -70,10 +68,10 @@ sealed class DnsResolverCompat { ...@@ -70,10 +68,10 @@ sealed class DnsResolverCompat {
cont.invokeOnCancellation { signal.cancel() } cont.invokeOnCancellation { signal.cancel() }
// retry should be handled by client instead // retry should be handled by client instead
DnsResolver.getInstance().query(network, host, DnsResolver.FLAG_NO_RETRY, InPlaceExecutor, DnsResolver.getInstance().query(network, host, DnsResolver.FLAG_NO_RETRY, InPlaceExecutor,
signal, object : DnsResolver.InetAddressAnswerCallback() { signal, object : DnsResolver.Callback<Collection<InetAddress>> {
override fun onAnswer(answer: MutableList<InetAddress>) = cont.resume(answer.toTypedArray()) override fun onAnswer(answer: Collection<InetAddress>, rcode: Int) =
override fun onQueryException(exception: ErrnoException) = cont.resumeWithException(exception) cont.resume(answer.toTypedArray())
override fun onParseException(exception: ParseException) = cont.resumeWithException(exception) override fun onError(error: DnsResolver.DnsException) = cont.resumeWithException(error)
}) })
} }
} }
......
...@@ -30,7 +30,6 @@ import android.os.Build ...@@ -30,7 +30,6 @@ import android.os.Build
import android.os.ParcelFileDescriptor import android.os.ParcelFileDescriptor
import android.system.ErrnoException import android.system.ErrnoException
import android.system.Os import android.system.Os
import androidx.core.os.BuildCompat
import com.github.shadowsocks.Core import com.github.shadowsocks.Core
import com.github.shadowsocks.VpnRequestActivity import com.github.shadowsocks.VpnRequestActivity
import com.github.shadowsocks.acl.Acl import com.github.shadowsocks.acl.Acl
...@@ -109,9 +108,8 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface { ...@@ -109,9 +108,8 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
if (active && Build.VERSION.SDK_INT >= 22) setUnderlyingNetworks(underlyingNetworks) if (active && Build.VERSION.SDK_INT >= 22) setUnderlyingNetworks(underlyingNetworks)
} }
private val underlyingNetworks get() = private val underlyingNetworks get() =
// clearing underlyingNetworks makes Android 9+ consider the network to be metered // clearing underlyingNetworks makes Android 9 consider the network to be metered
if (Build.VERSION.SDK_INT == 28 && !BuildCompat.isAtLeastQ() && metered) null if (Build.VERSION.SDK_INT == 28 && metered) null else underlyingNetwork?.let { arrayOf(it) }
else underlyingNetwork?.let { arrayOf(it) }
override fun onBind(intent: Intent) = when (intent.action) { override fun onBind(intent: Intent) = when (intent.action) {
SERVICE_INTERFACE -> super<BaseVpnService>.onBind(intent) SERVICE_INTERFACE -> super<BaseVpnService>.onBind(intent)
...@@ -199,7 +197,7 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface { ...@@ -199,7 +197,7 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
active = true // possible race condition here? active = true // possible race condition here?
if (Build.VERSION.SDK_INT >= 22) { if (Build.VERSION.SDK_INT >= 22) {
builder.setUnderlyingNetworks(underlyingNetworks) builder.setUnderlyingNetworks(underlyingNetworks)
if (BuildCompat.isAtLeastQ()) builder.setMetered(metered) if (Build.VERSION.SDK_INT >= 29) builder.setMetered(metered)
} }
val conn = builder.establish() ?: throw NullConnectionException() val conn = builder.establish() ?: throw NullConnectionException()
......
...@@ -35,10 +35,12 @@ import android.system.Os ...@@ -35,10 +35,12 @@ import android.system.Os
import android.system.OsConstants import android.system.OsConstants
import android.util.TypedValue import android.util.TypedValue
import androidx.annotation.AttrRes import androidx.annotation.AttrRes
import androidx.core.os.BuildCompat
import androidx.preference.Preference import androidx.preference.Preference
import com.crashlytics.android.Crashlytics import com.crashlytics.android.Crashlytics
import kotlinx.coroutines.* import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
import kotlinx.coroutines.withContext
import java.net.HttpURLConnection import java.net.HttpURLConnection
import java.net.InetAddress import java.net.InetAddress
import kotlin.coroutines.resume import kotlin.coroutines.resume
...@@ -57,7 +59,7 @@ private val parseNumericAddress by lazy @SuppressLint("DiscouragedPrivateApi") { ...@@ -57,7 +59,7 @@ private val parseNumericAddress by lazy @SuppressLint("DiscouragedPrivateApi") {
*/ */
fun String?.parseNumericAddress(): InetAddress? = Os.inet_pton(OsConstants.AF_INET, this) fun String?.parseNumericAddress(): InetAddress? = Os.inet_pton(OsConstants.AF_INET, this)
?: Os.inet_pton(OsConstants.AF_INET6, this)?.let { ?: Os.inet_pton(OsConstants.AF_INET6, this)?.let {
if (BuildCompat.isAtLeastQ()) it else parseNumericAddress.invoke(null, this) as InetAddress if (Build.VERSION.SDK_INT >= 29) it else parseNumericAddress.invoke(null, this) as InetAddress
} }
fun <K, V> MutableMap<K, V>.computeIfAbsentCompat(key: K, value: () -> V) = if (Build.VERSION.SDK_INT >= 24) fun <K, V> MutableMap<K, V>.computeIfAbsentCompat(key: K, value: () -> V) = if (Build.VERSION.SDK_INT >= 24)
......
...@@ -78,15 +78,15 @@ class GlobalSettingsPreferenceFragment : PreferenceFragmentCompat() { ...@@ -78,15 +78,15 @@ class GlobalSettingsPreferenceFragment : PreferenceFragmentCompat() {
tfo.summary = getString(R.string.tcp_fastopen_summary_unsupported, System.getProperty("os.version")) tfo.summary = getString(R.string.tcp_fastopen_summary_unsupported, System.getProperty("os.version"))
} }
hosts.onBindEditTextListener = EditTextPreferenceModifiers.Monospace hosts.setOnBindEditTextListener(EditTextPreferenceModifiers.Monospace)
hosts.summaryProvider = HostsSummaryProvider hosts.summaryProvider = HostsSummaryProvider
val serviceMode = findPreference<Preference>(Key.serviceMode)!! val serviceMode = findPreference<Preference>(Key.serviceMode)!!
val portProxy = findPreference<EditTextPreference>(Key.portProxy)!! val portProxy = findPreference<EditTextPreference>(Key.portProxy)!!
portProxy.onBindEditTextListener = EditTextPreferenceModifiers.Port portProxy.setOnBindEditTextListener(EditTextPreferenceModifiers.Port)
val portLocalDns = findPreference<EditTextPreference>(Key.portLocalDns)!! val portLocalDns = findPreference<EditTextPreference>(Key.portLocalDns)!!
portLocalDns.onBindEditTextListener = EditTextPreferenceModifiers.Port portLocalDns.setOnBindEditTextListener(EditTextPreferenceModifiers.Port)
val portTransproxy = findPreference<EditTextPreference>(Key.portTransproxy)!! val portTransproxy = findPreference<EditTextPreference>(Key.portTransproxy)!!
portTransproxy.onBindEditTextListener = EditTextPreferenceModifiers.Port portTransproxy.setOnBindEditTextListener(EditTextPreferenceModifiers.Port)
val onServiceModeChange = Preference.OnPreferenceChangeListener { _, newValue -> val onServiceModeChange = Preference.OnPreferenceChangeListener { _, newValue ->
val (enabledLocalDns, enabledTransproxy) = when (newValue as String?) { val (enabledLocalDns, enabledTransproxy) = when (newValue as String?) {
Key.modeProxy -> Pair(false, false) Key.modeProxy -> Pair(false, false)
......
...@@ -74,7 +74,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(), ...@@ -74,7 +74,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(),
val activity = requireActivity() val activity = requireActivity()
profileId = activity.intent.getLongExtra(Action.EXTRA_PROFILE_ID, -1L) profileId = activity.intent.getLongExtra(Action.EXTRA_PROFILE_ID, -1L)
addPreferencesFromResource(R.xml.pref_profile) addPreferencesFromResource(R.xml.pref_profile)
findPreference<EditTextPreference>(Key.remotePort)!!.onBindEditTextListener = EditTextPreferenceModifiers.Port findPreference<EditTextPreference>(Key.remotePort)!!.setOnBindEditTextListener(EditTextPreferenceModifiers.Port)
findPreference<EditTextPreference>(Key.password)!!.summaryProvider = PasswordSummaryProvider findPreference<EditTextPreference>(Key.password)!!.summaryProvider = PasswordSummaryProvider
val serviceMode = DataStore.serviceMode val serviceMode = DataStore.serviceMode
findPreference<Preference>(Key.remoteDns)!!.isEnabled = serviceMode != Key.modeProxy findPreference<Preference>(Key.remoteDns)!!.isEnabled = serviceMode != Key.modeProxy
...@@ -104,7 +104,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(), ...@@ -104,7 +104,7 @@ class ProfileConfigFragment : PreferenceFragmentCompat(),
} }
true true
} }
pluginConfigure.onBindEditTextListener = EditTextPreferenceModifiers.Monospace pluginConfigure.setOnBindEditTextListener(EditTextPreferenceModifiers.Monospace)
pluginConfigure.onPreferenceChangeListener = this pluginConfigure.onPreferenceChangeListener = this
initPlugins() initPlugins()
receiver = Core.listenForPackageChanges(false) { initPlugins() } receiver = Core.listenForPackageChanges(false) { initPlugins() }
......
...@@ -184,11 +184,11 @@ class MainPreferenceFragment : LeanbackPreferenceFragmentCompat(), ShadowsocksCo ...@@ -184,11 +184,11 @@ class MainPreferenceFragment : LeanbackPreferenceFragmentCompat(), ShadowsocksCo
serviceMode = findPreference(Key.serviceMode)!! serviceMode = findPreference(Key.serviceMode)!!
shareOverLan = findPreference(Key.shareOverLan)!! shareOverLan = findPreference(Key.shareOverLan)!!
portProxy = findPreference(Key.portProxy)!! portProxy = findPreference(Key.portProxy)!!
portProxy.onBindEditTextListener = EditTextPreferenceModifiers.Port portProxy.setOnBindEditTextListener(EditTextPreferenceModifiers.Port)
portLocalDns = findPreference(Key.portLocalDns)!! portLocalDns = findPreference(Key.portLocalDns)!!
portLocalDns.onBindEditTextListener = EditTextPreferenceModifiers.Port portLocalDns.setOnBindEditTextListener(EditTextPreferenceModifiers.Port)
portTransproxy = findPreference(Key.portTransproxy)!! portTransproxy = findPreference(Key.portTransproxy)!!
portTransproxy.onBindEditTextListener = EditTextPreferenceModifiers.Port portTransproxy.setOnBindEditTextListener(EditTextPreferenceModifiers.Port)
serviceMode.onPreferenceChangeListener = onServiceModeChange serviceMode.onPreferenceChangeListener = onServiceModeChange
findPreference<Preference>(Key.about)!!.summary = getString(R.string.about_title, BuildConfig.VERSION_NAME) findPreference<Preference>(Key.about)!!.summary = getString(R.string.about_title, BuildConfig.VERSION_NAME)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment