Commit 125fc3b9 authored by Mygod's avatar Mygod

Use setMetered API on Android Q

parent 9afa18ce
......@@ -30,6 +30,7 @@ import android.os.Build
import android.os.ParcelFileDescriptor
import android.system.ErrnoException
import android.system.Os
import androidx.core.os.BuildCompat
import com.github.shadowsocks.Core
import com.github.shadowsocks.VpnRequestActivity
import com.github.shadowsocks.acl.Acl
......@@ -109,7 +110,8 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
}
private val underlyingNetworks get() =
// clearing underlyingNetworks makes Android 9+ consider the network to be metered
if (Build.VERSION.SDK_INT >= 28 && metered) null else underlyingNetwork?.let { arrayOf(it) }
if (Build.VERSION.SDK_INT == 28 && !BuildCompat.isAtLeastQ() && metered) null
else underlyingNetwork?.let { arrayOf(it) }
override fun onBind(intent: Intent) = when (intent.action) {
SERVICE_INTERFACE -> super<BaseVpnService>.onBind(intent)
......@@ -195,7 +197,10 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
metered = profile.metered
active = true // possible race condition here?
if (Build.VERSION.SDK_INT >= 22) builder.setUnderlyingNetworks(underlyingNetworks)
if (Build.VERSION.SDK_INT >= 22) {
builder.setUnderlyingNetworks(underlyingNetworks)
if (BuildCompat.isAtLeastQ()) builder.setMetered(metered)
}
val conn = builder.establish() ?: throw NullConnectionException()
this.conn = conn
......
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