From f13ba6fa70245e1d2689762105c55e15f25f1950 Mon Sep 17 00:00:00 2001 From: harvey186 Date: Mon, 10 Mar 2025 13:43:35 +0100 Subject: [PATCH] y --- app/build.gradle | 2 +- app/src/0001-x.patch | 214 ++++++++++++++++++ .../android/ui/robots/SettingsRobot.kt | 2 +- app/src/main/assets/autoconfig.cfg | 10 + app/src/main/assets/geckoview-config.yaml | 17 +- .../java/net/waterfox/android/MainActivity.kt | 24 -- .../android/network/OkHttpClientProvider.kt | 60 ----- .../android/repository/NetworkRepository.kt | 24 -- .../android/viewmodel/MainViewModel.kt | 17 -- app/src/main/res/layout/activity_main.xml | 15 -- 10 files changed, 237 insertions(+), 148 deletions(-) create mode 100644 app/src/0001-x.patch create mode 100644 app/src/main/assets/autoconfig.cfg delete mode 100644 app/src/main/java/net/waterfox/android/MainActivity.kt delete mode 100644 app/src/main/java/net/waterfox/android/network/OkHttpClientProvider.kt delete mode 100644 app/src/main/java/net/waterfox/android/repository/NetworkRepository.kt delete mode 100644 app/src/main/java/net/waterfox/android/viewmodel/MainViewModel.kt delete mode 100644 app/src/main/res/layout/activity_main.xml diff --git a/app/build.gradle b/app/build.gradle index ff5b7b0..ad08f82 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -305,7 +305,7 @@ tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { dependencies { implementation Deps.mozilla_browser_engine_gecko - + implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation Deps.kotlin_stdlib implementation Deps.kotlin_coroutines implementation Deps.kotlin_coroutines_android diff --git a/app/src/0001-x.patch b/app/src/0001-x.patch new file mode 100644 index 0000000..d1224df --- /dev/null +++ b/app/src/0001-x.patch @@ -0,0 +1,214 @@ +From 04e67441b3f04ce1a005843527be7ae3ba3597fc Mon Sep 17 00:00:00 2001 +From: harvey186 +Date: Mon, 10 Mar 2025 12:00:34 +0100 +Subject: [PATCH] x + +--- + .../android/ui/robots/SettingsRobot.kt | 4 +- + .../java/net/waterfox/android/MainActivity.kt | 24 ++++++++ + .../android/network/OkHttpClientProvider.kt | 60 +++++++++++++++++++ + .../android/repository/NetworkRepository.kt | 24 ++++++++ + .../android/viewmodel/MainViewModel.kt | 17 ++++++ + app/src/main/res/layout/activity_main.xml | 15 +++++ + 6 files changed, 142 insertions(+), 2 deletions(-) + create mode 100644 app/src/main/java/net/waterfox/android/MainActivity.kt + create mode 100644 app/src/main/java/net/waterfox/android/network/OkHttpClientProvider.kt + create mode 100644 app/src/main/java/net/waterfox/android/repository/NetworkRepository.kt + create mode 100644 app/src/main/java/net/waterfox/android/viewmodel/MainViewModel.kt + create mode 100644 app/src/main/res/layout/activity_main.xml + +diff --git a/app/src/androidTest/java/net/waterfox/android/ui/robots/SettingsRobot.kt b/app/src/androidTest/java/net/waterfox/android/ui/robots/SettingsRobot.kt +index 47afad4..1d4df12 100644 +--- a/app/src/androidTest/java/net/waterfox/android/ui/robots/SettingsRobot.kt ++++ b/app/src/androidTest/java/net/waterfox/android/ui/robots/SettingsRobot.kt +@@ -106,7 +106,7 @@ class SettingsRobot { + // ABOUT SECTION + fun verifyAboutHeading() = assertAboutHeading() + +- fun verifyRateOnGooglePlay() = assertTrue(rateOnGooglePlayHeading().waitForExists(waitingTime)) ++// fun verifyRateOnGooglePlay() = assertTrue(rateOnGooglePlayHeading().waitForExists(waitingTime)) + fun verifyAboutWaterfoxPreview() = assertTrue(aboutWaterfoxHeading().waitForExists(waitingTime)) + fun verifyGooglePlayRedirect() = assertGooglePlayRedirect() + +@@ -561,7 +561,7 @@ private fun assertAboutHeading(): ViewInteraction { + // settingsList().scrollToEnd(LISTS_MAXSWIPES) + // rateOnGooglePlay.waitForExists(waitingTime) + +- return rateOnGooglePlay// ++// return rateOnGooglePlay// + //} + + private fun aboutWaterfoxHeading(): UiObject { +diff --git a/app/src/main/java/net/waterfox/android/MainActivity.kt b/app/src/main/java/net/waterfox/android/MainActivity.kt +new file mode 100644 +index 0000000..cddf760 +--- /dev/null ++++ b/app/src/main/java/net/waterfox/android/MainActivity.kt +@@ -0,0 +1,24 @@ ++package net.waterfox.android ++ ++import android.os.Bundle ++import android.widget.Toast ++import androidx.appcompat.app.AppCompatActivity ++import net.waterfox.android.network.OkHttpClientProvider ++ ++class MainActivity : AppCompatActivity() { ++ ++ override fun onCreate(savedInstanceState: Bundle?) { ++ super.onCreate(savedInstanceState) ++ setContentView(R.layout.activity_main) ++ ++ // Beispiel-URL, die abgefragt wird ++ val url = "https://detectportal.firefox.com" // Dies wird blockiert ++ ++ // Anfrage senden ++ val response = OkHttpClientProvider.makeRequest(url) ++ ++ // Antwort anzeigen ++ Toast.makeText(this, "Antwort: $response", Toast.LENGTH_LONG).show() ++ } ++} ++ +diff --git a/app/src/main/java/net/waterfox/android/network/OkHttpClientProvider.kt b/app/src/main/java/net/waterfox/android/network/OkHttpClientProvider.kt +new file mode 100644 +index 0000000..9862a0f +--- /dev/null ++++ b/app/src/main/java/net/waterfox/android/network/OkHttpClientProvider.kt +@@ -0,0 +1,60 @@ ++package net.waterfox.android.network ++ ++import okhttp3.OkHttpClient ++import okhttp3.Request ++import okhttp3.Interceptor ++import okhttp3.Response ++import java.io.IOException ++ ++object OkHttpClientProvider { ++ ++ // Interceptor, der Domains blockiert ++ private val blockDomainInterceptor = Interceptor { chain -> ++ val request = chain.request() ++ ++ // Logge die URL der Anfrage ++ println("Intercepting request to: ${request.url.host}") ++ ++ // Hier kannst du Domains definieren, die blockiert werden sollen ++ val blockedDomains = listOf("detectportal.firefox.com", "content-signature-2.cdn.mozilla.net") ++ ++ // Logge, ob die Domain blockiert werden soll ++ if (blockedDomains.any { request.url.host.contains(it) }) { ++ println("BLOCKING DOMAIN: ${request.url.host}") ++ // Wenn die Domain blockiert werden soll, gib eine Fehlerantwort zurück ++ throw IOException("Blocked domain: ${request.url.host}") ++ } ++ ++ // Ansonsten fahre mit der Anfrage fort ++ println("Request allowed to proceed: ${request.url.host}") ++ return@Interceptor chain.proceed(request) ++ } ++ ++ // Erstelle einen OkHttpClient mit dem BlockDomainInterceptor ++ fun getOkHttpClient(): OkHttpClient { ++ return OkHttpClient.Builder() ++ .addInterceptor(blockDomainInterceptor) // Hier fügen wir den Interceptor hinzu ++ .build() ++ } ++ ++ // Beispiel für eine einfache Anfrage ++ fun makeRequest(url: String): String { ++ val client = getOkHttpClient() ++ val request = Request.Builder() ++ .url(url) ++ .build() ++ ++ return try { ++ // Führe die Anfrage aus ++ val response = client.newCall(request).execute() ++ // Logge die Antwort ++ println("Antwort: ${response.body?.string()}") ++ response.body?.string() ?: "Leere Antwort" ++ } catch (e: Exception) { ++ // Fehlerbehandlung, wenn eine Ausnahme auftritt ++ println("Fehler: ${e.message}") ++ return "Fehler: ${e.message}" ++ } ++ } ++} ++ +diff --git a/app/src/main/java/net/waterfox/android/repository/NetworkRepository.kt b/app/src/main/java/net/waterfox/android/repository/NetworkRepository.kt +new file mode 100644 +index 0000000..b1118ba +--- /dev/null ++++ b/app/src/main/java/net/waterfox/android/repository/NetworkRepository.kt +@@ -0,0 +1,24 @@ ++package net.waterfox.android.repository ++ ++import okhttp3.OkHttpClient ++import okhttp3.Request ++import okhttp3.Response ++import net.waterfox.android.network.OkHttpClientProvider ++ ++class NetworkRepository { ++ ++ // Diese Funktion holt Daten von einer angegebenen URL ++ fun fetchData(url: String): String { ++ try { ++ val client: OkHttpClient = OkHttpClientProvider.getOkHttpClient() ++ val request = Request.Builder().url(url).build() ++ val response: Response = client.newCall(request).execute() ++ ++ // Gib den Antworttext zurück ++ return response.body?.string() ?: "No Data" ++ } catch (e: Exception) { ++ return "Fehler: ${e.message}" ++ } ++ } ++} ++ +diff --git a/app/src/main/java/net/waterfox/android/viewmodel/MainViewModel.kt b/app/src/main/java/net/waterfox/android/viewmodel/MainViewModel.kt +new file mode 100644 +index 0000000..e835966 +--- /dev/null ++++ b/app/src/main/java/net/waterfox/android/viewmodel/MainViewModel.kt +@@ -0,0 +1,17 @@ ++package net.waterfox.android.viewmodel ++ ++import androidx.lifecycle.ViewModel ++import androidx.lifecycle.liveData ++import net.waterfox.android.repository.NetworkRepository ++ ++class MainViewModel : ViewModel() { ++ ++ private val repository = NetworkRepository() // Instanz des Repositories erstellen ++ ++ // Funktion, die die LiveData von der Netzwerkanfrage liefert ++ fun fetchData(url: String) = liveData { ++ val data = repository.fetchData(url) // Netzwerkoperation aufrufen ++ emit(data) // LiveData mit dem Ergebnis versorgen ++ } ++} ++ +diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml +new file mode 100644 +index 0000000..b30d715 +--- /dev/null ++++ b/app/src/main/res/layout/activity_main.xml +@@ -0,0 +1,15 @@ ++ ++ ++ ++ ++ ++ ++ +-- +2.34.1 + diff --git a/app/src/androidTest/java/net/waterfox/android/ui/robots/SettingsRobot.kt b/app/src/androidTest/java/net/waterfox/android/ui/robots/SettingsRobot.kt index 1d4df12..1340dac 100644 --- a/app/src/androidTest/java/net/waterfox/android/ui/robots/SettingsRobot.kt +++ b/app/src/androidTest/java/net/waterfox/android/ui/robots/SettingsRobot.kt @@ -106,7 +106,7 @@ class SettingsRobot { // ABOUT SECTION fun verifyAboutHeading() = assertAboutHeading() -// fun verifyRateOnGooglePlay() = assertTrue(rateOnGooglePlayHeading().waitForExists(waitingTime)) + // fun verifyRateOnGooglePlay() = assertTrue(rateOnGooglePlayHeading().waitForExists(waitingTime)) fun verifyAboutWaterfoxPreview() = assertTrue(aboutWaterfoxHeading().waitForExists(waitingTime)) fun verifyGooglePlayRedirect() = assertGooglePlayRedirect() diff --git a/app/src/main/assets/autoconfig.cfg b/app/src/main/assets/autoconfig.cfg new file mode 100644 index 0000000..31a4062 --- /dev/null +++ b/app/src/main/assets/autoconfig.cfg @@ -0,0 +1,10 @@ +// Autoconfig für GeckoView (optional) + +pref("network.trr.mode", 2); +pref("network.trr.uri", "https://example.doh.server/dns-query"); +pref("network.trr.use_ohttp", true); +pref("network.trr.ohttp.config_uri", "https://your-config-uri.com/.well-known/doohconfig"); + +pref("contentblocking.features.enabled", true); +pref("contentblocking.policy", 1); + diff --git a/app/src/main/assets/geckoview-config.yaml b/app/src/main/assets/geckoview-config.yaml index 28ece36..2b72d64 100644 --- a/app/src/main/assets/geckoview-config.yaml +++ b/app/src/main/assets/geckoview-config.yaml @@ -1,6 +1,11 @@ -prefs: - network.trr.mode: 0 - network.trr.ohttp.config_uri: "https://dooh.quad9.com/.well-known/doohconfig" - network.trr.ohttp.uri: "https://dooh.quad9/dns-query" - network.trr.ohttp.relay_uri: "https://dooh.waterfox.net/" - network.trr.use_ohttp: true +# Geckoview Config - Aktivierung von DNS-over-HTTPS und Content Blocking + +network.trr.mode: 2 # Aktiviert DNS-over-HTTPS +network.trr.uri: "https://example.doh.server/dns-query" # Dein DoH-Server +network.trr.use_ohttp: true # Benutzt DoH-Over-HTTP (OHTTP) +network.trr.ohttp.config_uri: "https://your-config-uri.com/.well-known/doohconfig" + +# Aktiviert Content-Blocking +contentblocking.features.enabled: true +contentblocking.policy: 1 # Blockiert Werbung und Tracker + diff --git a/app/src/main/java/net/waterfox/android/MainActivity.kt b/app/src/main/java/net/waterfox/android/MainActivity.kt deleted file mode 100644 index cddf760..0000000 --- a/app/src/main/java/net/waterfox/android/MainActivity.kt +++ /dev/null @@ -1,24 +0,0 @@ -package net.waterfox.android - -import android.os.Bundle -import android.widget.Toast -import androidx.appcompat.app.AppCompatActivity -import net.waterfox.android.network.OkHttpClientProvider - -class MainActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) - - // Beispiel-URL, die abgefragt wird - val url = "https://detectportal.firefox.com" // Dies wird blockiert - - // Anfrage senden - val response = OkHttpClientProvider.makeRequest(url) - - // Antwort anzeigen - Toast.makeText(this, "Antwort: $response", Toast.LENGTH_LONG).show() - } -} - diff --git a/app/src/main/java/net/waterfox/android/network/OkHttpClientProvider.kt b/app/src/main/java/net/waterfox/android/network/OkHttpClientProvider.kt deleted file mode 100644 index 9862a0f..0000000 --- a/app/src/main/java/net/waterfox/android/network/OkHttpClientProvider.kt +++ /dev/null @@ -1,60 +0,0 @@ -package net.waterfox.android.network - -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.Interceptor -import okhttp3.Response -import java.io.IOException - -object OkHttpClientProvider { - - // Interceptor, der Domains blockiert - private val blockDomainInterceptor = Interceptor { chain -> - val request = chain.request() - - // Logge die URL der Anfrage - println("Intercepting request to: ${request.url.host}") - - // Hier kannst du Domains definieren, die blockiert werden sollen - val blockedDomains = listOf("detectportal.firefox.com", "content-signature-2.cdn.mozilla.net") - - // Logge, ob die Domain blockiert werden soll - if (blockedDomains.any { request.url.host.contains(it) }) { - println("BLOCKING DOMAIN: ${request.url.host}") - // Wenn die Domain blockiert werden soll, gib eine Fehlerantwort zurück - throw IOException("Blocked domain: ${request.url.host}") - } - - // Ansonsten fahre mit der Anfrage fort - println("Request allowed to proceed: ${request.url.host}") - return@Interceptor chain.proceed(request) - } - - // Erstelle einen OkHttpClient mit dem BlockDomainInterceptor - fun getOkHttpClient(): OkHttpClient { - return OkHttpClient.Builder() - .addInterceptor(blockDomainInterceptor) // Hier fügen wir den Interceptor hinzu - .build() - } - - // Beispiel für eine einfache Anfrage - fun makeRequest(url: String): String { - val client = getOkHttpClient() - val request = Request.Builder() - .url(url) - .build() - - return try { - // Führe die Anfrage aus - val response = client.newCall(request).execute() - // Logge die Antwort - println("Antwort: ${response.body?.string()}") - response.body?.string() ?: "Leere Antwort" - } catch (e: Exception) { - // Fehlerbehandlung, wenn eine Ausnahme auftritt - println("Fehler: ${e.message}") - return "Fehler: ${e.message}" - } - } -} - diff --git a/app/src/main/java/net/waterfox/android/repository/NetworkRepository.kt b/app/src/main/java/net/waterfox/android/repository/NetworkRepository.kt deleted file mode 100644 index b1118ba..0000000 --- a/app/src/main/java/net/waterfox/android/repository/NetworkRepository.kt +++ /dev/null @@ -1,24 +0,0 @@ -package net.waterfox.android.repository - -import okhttp3.OkHttpClient -import okhttp3.Request -import okhttp3.Response -import net.waterfox.android.network.OkHttpClientProvider - -class NetworkRepository { - - // Diese Funktion holt Daten von einer angegebenen URL - fun fetchData(url: String): String { - try { - val client: OkHttpClient = OkHttpClientProvider.getOkHttpClient() - val request = Request.Builder().url(url).build() - val response: Response = client.newCall(request).execute() - - // Gib den Antworttext zurück - return response.body?.string() ?: "No Data" - } catch (e: Exception) { - return "Fehler: ${e.message}" - } - } -} - diff --git a/app/src/main/java/net/waterfox/android/viewmodel/MainViewModel.kt b/app/src/main/java/net/waterfox/android/viewmodel/MainViewModel.kt deleted file mode 100644 index e835966..0000000 --- a/app/src/main/java/net/waterfox/android/viewmodel/MainViewModel.kt +++ /dev/null @@ -1,17 +0,0 @@ -package net.waterfox.android.viewmodel - -import androidx.lifecycle.ViewModel -import androidx.lifecycle.liveData -import net.waterfox.android.repository.NetworkRepository - -class MainViewModel : ViewModel() { - - private val repository = NetworkRepository() // Instanz des Repositories erstellen - - // Funktion, die die LiveData von der Netzwerkanfrage liefert - fun fetchData(url: String) = liveData { - val data = repository.fetchData(url) // Netzwerkoperation aufrufen - emit(data) // LiveData mit dem Ergebnis versorgen - } -} - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index b30d715..0000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - -