From 6407d7ca3f1352d7f6acefd001e679e0e1a2f03c Mon Sep 17 00:00:00 2001 From: Long <73825967+Long-FA@users.noreply.github.com> Date: Sun, 15 Aug 2021 22:20:52 +0700 Subject: [PATCH] DNS-over-HTTPS (Adguard) (#5715) * Update DohProviders.kt * Update NetworkHelper.kt * Update SettingsAdvancedController.kt * fix typo * Fix typo * Fix typo --- .../tachiyomi/data/image/coil/CoilSetup.kt | 10 ++--- .../kanade/tachiyomi/network/DohProviders.kt | 14 +++++++ .../kanade/tachiyomi/network/NetworkHelper.kt | 42 +++++++++++-------- .../ui/setting/SettingsAdvancedController.kt | 17 ++++---- app/src/main/res/values/strings.xml | 1 + 5 files changed, 53 insertions(+), 31 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/data/image/coil/CoilSetup.kt b/app/src/main/java/eu/kanade/tachiyomi/data/image/coil/CoilSetup.kt index 21769cb1f4..95d355bffb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/data/image/coil/CoilSetup.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/data/image/coil/CoilSetup.kt @@ -7,8 +7,9 @@ import coil.ImageLoader import coil.decode.GifDecoder import coil.decode.ImageDecoderDecoder import coil.decode.SvgDecoder -import com.chuckerteam.chucker.api.ChuckerInterceptor -import okhttp3.OkHttpClient +import eu.kanade.tachiyomi.network.NetworkHelper +import uy.kohesive.injekt.Injekt +import uy.kohesive.injekt.api.get class CoilSetup(context: Context) { init { @@ -26,11 +27,8 @@ class CoilSetup(context: Context) { add(SvgDecoder(context)) add(MangaFetcher()) add(ByteArrayFetcher()) - }.okHttpClient { - OkHttpClient.Builder() - .addInterceptor(ChuckerInterceptor(context)) - .build() } + .okHttpClient(Injekt.get().coilClient) .build() Coil.setImageLoader(imageLoader) diff --git a/app/src/main/java/eu/kanade/tachiyomi/network/DohProviders.kt b/app/src/main/java/eu/kanade/tachiyomi/network/DohProviders.kt index 982910f529..f5f62643f7 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/DohProviders.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/DohProviders.kt @@ -11,6 +11,7 @@ import java.net.InetAddress const val PREF_DOH_CLOUDFLARE = 1 const val PREF_DOH_GOOGLE = 2 +const val PREF_DOH_ADGUARD = 3 fun OkHttpClient.Builder.dohCloudflare() = dns( DnsOverHttps.Builder().client(build()) @@ -38,3 +39,16 @@ fun OkHttpClient.Builder.dohGoogle() = dns( ) .build() ) + +// AdGuard "Default" DNS works too but for the sake of making sure no site is blacklisted, i picked "Unfiltered" +fun OkHttpClient.Builder.dohAdGuard() = dns( + DnsOverHttps.Builder().client(build()) + .url("https://dns-unfiltered.adguard.com/dns-query".toHttpUrl()) + .bootstrapDnsHosts( + InetAddress.getByName("94.140.14.140"), + InetAddress.getByName("94.140.14.141"), + InetAddress.getByName("2a10:50c0::1:ff"), + InetAddress.getByName("2a10:50c0::2:ff"), + ) + .build() +) diff --git a/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt b/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt index 4bcec99112..da1ef4e5cb 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/network/NetworkHelper.kt @@ -1,6 +1,7 @@ package eu.kanade.tachiyomi.network import android.content.Context +import coil.util.CoilUtils import com.chuckerteam.chucker.api.ChuckerInterceptor import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.data.preference.PreferencesHelper @@ -10,7 +11,7 @@ import uy.kohesive.injekt.injectLazy import java.io.File import java.util.concurrent.TimeUnit -class NetworkHelper(context: Context) { +class NetworkHelper(val context: Context) { private val preferences: PreferencesHelper by injectLazy() @@ -20,24 +21,31 @@ class NetworkHelper(context: Context) { val cookieManager = AndroidCookieJar() - val client by lazy { - OkHttpClient.Builder() - .cookieJar(cookieManager) - .cache(Cache(cacheDir, cacheSize)) - .connectTimeout(30, TimeUnit.SECONDS) - .readTimeout(30, TimeUnit.SECONDS) - .addInterceptor(UserAgentInterceptor()) - .apply { - if (BuildConfig.DEBUG) { - addInterceptor(ChuckerInterceptor(context)) + private val baseClientBuilder: OkHttpClient.Builder + get() { + val builder = OkHttpClient.Builder() + .cookieJar(cookieManager) + .connectTimeout(30, TimeUnit.SECONDS) + .readTimeout(30, TimeUnit.SECONDS) + .addInterceptor(UserAgentInterceptor()) + .apply { + if (BuildConfig.DEBUG) { + addInterceptor(ChuckerInterceptor(context)) + } + + when (preferences.dohProvider()) { + PREF_DOH_CLOUDFLARE -> dohCloudflare() + PREF_DOH_GOOGLE -> dohGoogle() + PREF_DOH_ADGUARD -> dohAdGuard() + } } - when (preferences.dohProvider()) { - PREF_DOH_CLOUDFLARE -> dohCloudflare() - PREF_DOH_GOOGLE -> dohGoogle() - } - }.build() - } + return builder + } + + val client by lazy { baseClientBuilder.cache(Cache(cacheDir, cacheSize)).build() } + + val coilClient by lazy { baseClientBuilder.cache(CoilUtils.createDefaultCache(context)).build() } val cloudflareClient by lazy { client.newBuilder() diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt index 67b7129cca..605fc31070 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/setting/SettingsAdvancedController.kt @@ -24,6 +24,7 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Target import eu.kanade.tachiyomi.data.preference.PreferenceKeys import eu.kanade.tachiyomi.network.NetworkHelper +import eu.kanade.tachiyomi.network.PREF_DOH_ADGUARD import eu.kanade.tachiyomi.network.PREF_DOH_CLOUDFLARE import eu.kanade.tachiyomi.network.PREF_DOH_GOOGLE import eu.kanade.tachiyomi.source.SourceManager @@ -33,11 +34,7 @@ import eu.kanade.tachiyomi.util.system.launchIO import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.toast import eu.kanade.tachiyomi.util.view.openInBrowser -import kotlinx.coroutines.CoroutineStart -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.Job -import kotlinx.coroutines.launch +import kotlinx.coroutines.* import rx.Observable import rx.android.schedulers.AndroidSchedulers import rx.schedulers.Schedulers @@ -190,12 +187,16 @@ class SettingsAdvancedController : SettingsController() { activity?.toast(R.string.cookies_cleared) } } - intListPreference(activity) { key = PreferenceKeys.dohProvider titleRes = R.string.doh - entriesRes = arrayOf(R.string.disabled, R.string.cloudflare, R.string.google) - entryValues = listOf(-1, PREF_DOH_CLOUDFLARE, PREF_DOH_GOOGLE) + entriesRes = arrayOf( + R.string.disabled, + R.string.cloudflare, + R.string.google, + R.string.adGuard + ) + entryValues = listOf(-1, PREF_DOH_CLOUDFLARE, PREF_DOH_GOOGLE, PREF_DOH_ADGUARD) defaultValue = -1 onChange { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 046a528e87..3f7c25b42c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -750,6 +750,7 @@ Disabled Cloudflare Google + AdGuard Requires app restart to take effect Used: %1$s