mirror of
https://github.com/ironfox-oss/IronFox.git
synced 2026-06-11 17:54:30 -04:00
111 lines
4.5 KiB
Diff
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)
|
|
+ }
|
|
+ )
|
|
+ }
|
|
+ }
|
|
+}
|