Files
IronFox/patches/install-ublock.patch
2025-04-01 15:37:48 +05:30

111 lines
4.5 KiB
Diff

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt
@@ -121,6 +121,9 @@
private fun handlePostInstallationRequest(
addon: Addon,
) {
+ if (org.mozilla.fenix.utils.isUBlock(addon)) {
+ return
+ }
showPostInstallationDialog(addon)
}
@@ -128,6 +131,15 @@
addon: Addon,
promptRequest: WebExtensionPromptRequest.AfterInstallation.Permissions.Required,
) {
+ if (org.mozilla.fenix.utils.isUBlock(addon)) {
+ handlePermissions(
+ promptRequest = promptRequest,
+ granted = true,
+ privateBrowsingAllowed = true
+ )
+ return
+ }
+
showPermissionDialog(
addon = addon,
promptRequest = promptRequest,
@@ -141,6 +153,15 @@
addon: Addon,
promptRequest: WebExtensionPromptRequest.AfterInstallation.Permissions.Optional,
) {
+ if (org.mozilla.fenix.utils.isUBlock(addon)) {
+ handlePermissions(
+ promptRequest = promptRequest,
+ granted = true,
+ privateBrowsingAllowed = true
+ )
+ return
+ }
+
val shouldGrantWithoutPrompt = Addon.localizePermissions(
promptRequest.permissions,
context,
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
--- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
@@ -19,8 +19,10 @@
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.ComposeView
import androidx.fragment.app.Fragment
+import androidx.lifecycle.lifecycleScope
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.navigation.fragment.findNavController
+import kotlinx.coroutines.launch
import mozilla.components.concept.engine.webextension.InstallationMethod
import mozilla.components.service.nimbus.evalJexlSafe
import mozilla.components.service.nimbus.messaging.use
@@ -116,6 +118,11 @@
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val context = requireContext()
+
+ lifecycleScope.launch {
+ org.mozilla.fenix.utils.installIFAddons(requireComponents)
+ }
+
if (pagesToDisplay.isEmpty()) {
/* do not continue if there's no onboarding pages to display */
onFinish(null)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt
new file mode 100644
--- /dev/null
+++ b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/utils/AddonUtils.kt
@@ -0,0 +1,34 @@
+package org.mozilla.fenix.utils
+
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.withContext
+import mozilla.components.concept.engine.webextension.InstallationMethod
+import mozilla.components.feature.addons.Addon
+import mozilla.components.feature.addons.logger
+import org.mozilla.fenix.components.Components
+
+private val UBLOCK = Addon(
+ id = "uBlock0@raymondhill.net",
+ downloadUrl = "https://addons.mozilla.org/firefox/downloads/latest/uBlock0@raymondhill.net/latest.xpi"
+)
+
+fun isUBlock(addon: Addon) = addon.id == UBLOCK.id
+
+suspend fun installIFAddons(components: Components) = withContext(Dispatchers.IO) {
+ val addonManager = components.addonManager
+ val addons = addonManager.getAddons(waitForPendingActions = true)
+ if (addons.none { it.id == UBLOCK.id && it.isInstalled() }) {
+ withContext(Dispatchers.Main) {
+ addonManager.installAddon(
+ url = UBLOCK.downloadUrl,
+ installationMethod = InstallationMethod.MANAGER,
+ onSuccess = {
+ logger.info("uBlock Origin installed.")
+ },
+ onError = { err ->
+ logger.error("uBlock Origin install failed.", err)
+ }
+ )
+ }
+ }
+}