Commit 125fc3b9 authored by Mygod's avatar Mygod

Use setMetered API on Android Q

parent 9afa18ce
...@@ -30,6 +30,7 @@ import android.os.Build ...@@ -30,6 +30,7 @@ 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,7 +110,8 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface { ...@@ -109,7 +110,8 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
} }
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 && 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) { override fun onBind(intent: Intent) = when (intent.action) {
SERVICE_INTERFACE -> super<BaseVpnService>.onBind(intent) SERVICE_INTERFACE -> super<BaseVpnService>.onBind(intent)
...@@ -195,7 +197,10 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface { ...@@ -195,7 +197,10 @@ class VpnService : BaseVpnService(), LocalDnsService.Interface {
metered = profile.metered metered = profile.metered
active = true // possible race condition here? 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() val conn = builder.establish() ?: throw NullConnectionException()
this.conn = conn 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