Use Cronet on Android 14

This commit is contained in:
Mygod
2023-03-09 23:00:35 -05:00
parent 8bdf186311
commit 9e325e0975

View File

@@ -1,9 +1,12 @@
package be.mygod.vpnhotspot.util package be.mygod.vpnhotspot.util
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.annotation.TargetApi
import android.content.* import android.content.*
import android.content.res.Resources import android.content.res.Resources
import android.net.* import android.net.*
import android.net.http.ConnectionMigrationOptions
import android.net.http.HttpEngine
import android.os.Build import android.os.Build
import android.os.RemoteException import android.os.RemoteException
import android.text.* import android.text.*
@@ -11,12 +14,15 @@ import android.view.MenuItem
import android.view.View import android.view.View
import android.widget.ImageView import android.widget.ImageView
import androidx.annotation.DrawableRes import androidx.annotation.DrawableRes
import androidx.annotation.RequiresApi
import androidx.core.net.toUri import androidx.core.net.toUri
import androidx.core.os.BuildCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.databinding.BindingAdapter import androidx.databinding.BindingAdapter
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.App.Companion.app
import be.mygod.vpnhotspot.client.MacLookup
import be.mygod.vpnhotspot.net.MacAddressCompat import be.mygod.vpnhotspot.net.MacAddressCompat
import be.mygod.vpnhotspot.widget.SmartSnackbar import be.mygod.vpnhotspot.widget.SmartSnackbar
import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CancellationException
@@ -25,6 +31,7 @@ import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.coroutines.suspendCancellableCoroutine
import timber.log.Timber import timber.log.Timber
import java.io.File
import java.lang.invoke.MethodHandles import java.lang.invoke.MethodHandles
import java.lang.reflect.InvocationHandler import java.lang.reflect.InvocationHandler
import java.lang.reflect.InvocationTargetException import java.lang.reflect.InvocationTargetException
@@ -244,9 +251,26 @@ fun globalNetworkRequestBuilder() = NetworkRequest.Builder().apply {
if (Build.VERSION.SDK_INT >= 31) setIncludeOtherUidNetworks(true) if (Build.VERSION.SDK_INT >= 31) setIncludeOtherUidNetworks(true)
} }
@get:RequiresApi(34)
private val engine by lazy @TargetApi(34) {
val cache = File(app.deviceStorage.cacheDir, "httpEngine")
HttpEngine.Builder(app.deviceStorage).apply {
if (cache.mkdirs() || cache.isDirectory) {
setStoragePath(cache.absolutePath)
setEnableHttpCache(HttpEngine.Builder.HTTP_CACHE_DISK, 1024 * 1024)
}
setConnectionMigrationOptions(ConnectionMigrationOptions.Builder().apply {
setEnableDefaultNetworkMigration(true)
setEnablePathDegradationMigration(true)
}.build())
setEnableBrotli(true)
addQuicHint(MacLookup.HOST, 443, 443)
}.build()
}
suspend fun <T> connectCancellable(url: String, block: suspend (HttpURLConnection) -> T): T { suspend fun <T> connectCancellable(url: String, block: suspend (HttpURLConnection) -> T): T {
@Suppress("BlockingMethodInNonBlockingContext") val conn = (if (BuildCompat.isAtLeastU()) {
val conn = URL(url).openConnection() as HttpURLConnection engine.openConnection(URL(url))
} else @Suppress("BlockingMethodInNonBlockingContext") URL(url).openConnection()) as HttpURLConnection
return suspendCancellableCoroutine { cont -> return suspendCancellableCoroutine { cont ->
val job = GlobalScope.launch(Dispatchers.IO) { val job = GlobalScope.launch(Dispatchers.IO) {
try { try {