summaryrefslogtreecommitdiffstats
path: root/mobile/android/android-components/components/feature
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/android-components/components/feature')
-rw-r--r--mobile/android/android-components/components/feature/accounts-push/build.gradle3
-rw-r--r--mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/CloseTabsFeature.kt93
-rw-r--r--mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/CloseTabsUseCases.kt63
-rw-r--r--mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/SendTabFeature.kt8
-rw-r--r--mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/CloseTabsFeatureTest.kt136
-rw-r--r--mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/CloseTabsUseCasesTest.kt100
-rw-r--r--mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/TabReceivedEventsObserverTest.kt (renamed from mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/EventsObserverTest.kt)6
-rw-r--r--mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/TabsClosedEventsObserverTest.kt183
-rw-r--r--mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/background.js10
-rw-r--r--mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/fxawebchannel.js12
-rw-r--r--mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeature.kt13
-rw-r--r--mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FxaWebChannelFeature.kt36
-rw-r--r--mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeatureTest.kt14
-rw-r--r--mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FxaWebChannelFeatureTest.kt86
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt8
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/PermissionsDialogFragment.kt10
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-be/strings.xml14
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-br/strings.xml34
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-cak/strings.xml68
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-eo/strings.xml68
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-eu/strings.xml68
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-it/strings.xml20
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-kab/strings.xml28
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-ko/strings.xml2
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-nn-rNO/strings.xml28
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-sc/strings.xml60
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-si/strings.xml8
-rw-r--r--mobile/android/android-components/components/feature/addons/src/main/res/values-su/strings.xml30
-rw-r--r--mobile/android/android-components/components/feature/addons/src/test/java/AddonManagerTest.kt11
-rw-r--r--mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/PermissionsDialogFragmentTest.kt10
-rw-r--r--mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_localized_single_result.json73
-rw-r--r--mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_multiple_results.json85
-rw-r--r--mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_single_result.json73
-rw-r--r--mobile/android/android-components/components/feature/addons/src/test/resources/collection.json73
-rw-r--r--mobile/android/android-components/components/feature/addons/src/test/resources/collection_with_empty_values.json50
-rw-r--r--mobile/android/android-components/components/feature/addons/src/test/resources/localized_collection.json73
-rw-r--r--mobile/android/android-components/components/feature/app-links/src/main/res/values-sk/strings.xml2
-rw-r--r--mobile/android/android-components/components/feature/contextmenu/build.gradle1
-rw-r--r--mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadMiddleware.kt12
-rw-r--r--mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt7
-rw-r--r--mobile/android/android-components/components/feature/downloads/src/main/res/values-ast/strings.xml3
-rw-r--r--mobile/android/android-components/components/feature/findinpage/build.gradle1
-rw-r--r--mobile/android/android-components/components/feature/media/build.gradle1
-rw-r--r--mobile/android/android-components/components/feature/media/src/main/res/values-br/strings.xml19
-rw-r--r--mobile/android/android-components/components/feature/media/src/main/res/values-nn-rNO/strings.xml6
-rw-r--r--mobile/android/android-components/components/feature/media/src/main/res/values-su/strings.xml9
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt37
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt13
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml76
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml2
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml13
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml68
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml68
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml70
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml2
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt133
-rw-r--r--mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt29
-rw-r--r--mobile/android/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/WebAppShortcutManager.kt3
-rw-r--r--mobile/android/android-components/components/feature/qr/build.gradle1
-rw-r--r--mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/manifest.template.json5
-rw-r--r--mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-background.js24
-rw-r--r--mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-content.js64
-rw-r--r--mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.html14
-rw-r--r--mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.js194
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/extensions/ads/adsTelemetry.js72
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/extensions/search/searchTelemetry.js54
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/search/list.json683
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-au.xml12
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-ca.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-co-uk.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-de.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-es.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-fr.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-in.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-it.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-nl.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-se.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazondotcom.xml13
-rw-r--r--mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/internal/SearchUrlBuilder.kt6
-rw-r--r--mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/middleware/SearchMiddlewareTest.kt215
-rw-r--r--mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/storage/BundledSearchEnginesStorageTest.kt18
-rw-r--r--mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt17
-rw-r--r--mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt6
-rw-r--r--mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt74
-rw-r--r--mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt1
-rw-r--r--mobile/android/android-components/components/feature/sitepermissions/src/main/res/values-ast/strings.xml4
-rw-r--r--mobile/android/android-components/components/feature/tabs/src/main/java/mozilla/components/feature/tabs/TabsUseCases.kt2
-rw-r--r--mobile/android/android-components/components/feature/webcompat-reporter/src/main/assets/extensions/webcompat-reporter/manifest.json11
88 files changed, 2367 insertions, 1472 deletions
diff --git a/mobile/android/android-components/components/feature/accounts-push/build.gradle b/mobile/android/android-components/components/feature/accounts-push/build.gradle
index c87fa7582a..17bc5d8313 100644
--- a/mobile/android/android-components/components/feature/accounts-push/build.gradle
+++ b/mobile/android/android-components/components/feature/accounts-push/build.gradle
@@ -37,6 +37,7 @@ tasks.withType(KotlinCompile).configureEach {
}
dependencies {
+ implementation project(':browser-state')
implementation project(':service-firefox-accounts')
implementation project(':support-ktx')
implementation project(':support-base')
@@ -47,7 +48,9 @@ dependencies {
implementation ComponentsDependencies.androidx_lifecycle_process
implementation ComponentsDependencies.kotlin_coroutines
+ testImplementation project(':concept-engine')
testImplementation project(':support-test')
+ testImplementation project(':support-test-libstate')
testImplementation ComponentsDependencies.androidx_test_core
testImplementation ComponentsDependencies.androidx_test_junit
diff --git a/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/CloseTabsFeature.kt b/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/CloseTabsFeature.kt
new file mode 100644
index 0000000000..8767064867
--- /dev/null
+++ b/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/CloseTabsFeature.kt
@@ -0,0 +1,93 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.accounts.push
+
+import androidx.annotation.VisibleForTesting
+import androidx.lifecycle.LifecycleOwner
+import androidx.lifecycle.ProcessLifecycleOwner
+import mozilla.components.browser.state.action.TabListAction
+import mozilla.components.browser.state.state.TabSessionState
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.sync.AccountEvent
+import mozilla.components.concept.sync.AccountEventsObserver
+import mozilla.components.concept.sync.Device
+import mozilla.components.concept.sync.DeviceCommandIncoming
+import mozilla.components.concept.sync.DeviceConstellation
+import mozilla.components.service.fxa.manager.FxaAccountManager
+
+/**
+ * A feature for closing tabs on this device from other devices
+ * in the [DeviceConstellation].
+ *
+ * This feature receives commands to close tabs using the [FxaAccountManager].
+ *
+ * See [CloseTabsUseCases] for the ability to close tabs that are open on
+ * other devices from this device.
+ *
+ * @param browserStore The [BrowserStore] that holds the currently open tabs.
+ * @param accountManager The account manager.
+ * @param owner The Android lifecycle owner for the observers. Defaults to
+ * the [ProcessLifecycleOwner].
+ * @param autoPause Whether or not the observer should automatically be
+ * paused/resumed with the bound lifecycle.
+ * @param onTabsClosed The callback invoked when one or more tabs are closed.
+ */
+class CloseTabsFeature(
+ private val browserStore: BrowserStore,
+ private val accountManager: FxaAccountManager,
+ private val owner: LifecycleOwner = ProcessLifecycleOwner.get(),
+ private val autoPause: Boolean = false,
+ onTabsClosed: (Device?, List<String>) -> Unit,
+) {
+ @VisibleForTesting internal val observer = TabsClosedEventsObserver { device, urls ->
+ val tabsToRemove = getTabsToRemove(urls)
+ if (tabsToRemove.isNotEmpty()) {
+ browserStore.dispatch(TabListAction.RemoveTabsAction(tabsToRemove.map { it.id }))
+ onTabsClosed(device, tabsToRemove.map { it.content.url })
+ }
+ }
+
+ /**
+ * Begins observing the [accountManager] for "tabs closed" events.
+ */
+ fun observe() {
+ accountManager.registerForAccountEvents(observer, owner, autoPause)
+ }
+
+ private fun getTabsToRemove(remotelyClosedUrls: List<String>): List<TabSessionState> {
+ // The user might have the same URL open in multiple tabs on this device, and might want
+ // to remotely close some or all of those tabs. Synced tabs don't carry enough
+ // information to know which duplicates the user meant to close, so we use a heuristic:
+ // if a URL appears N times in the remotely closed URLs list, we'll close up to
+ // N instances of that URL.
+ val countsByUrl = remotelyClosedUrls.groupingBy { it }.eachCount()
+ return browserStore.state.tabs
+ .groupBy { it.content.url }
+ .asSequence()
+ .mapNotNull { (url, tabs) ->
+ countsByUrl[url]?.let { count -> tabs.take(count) }
+ }
+ .flatten()
+ .toList()
+ }
+}
+
+internal class TabsClosedEventsObserver(
+ internal val onTabsClosed: (Device?, List<String>) -> Unit,
+) : AccountEventsObserver {
+ override fun onEvents(events: List<AccountEvent>) {
+ // Group multiple commands from the same device, so that we can close
+ // more tabs at once.
+ events.asSequence()
+ .filterIsInstance<AccountEvent.DeviceCommandIncoming>()
+ .map { it.command }
+ .filterIsInstance<DeviceCommandIncoming.TabsClosed>()
+ .groupingBy { it.from }
+ .fold(emptyList<String>()) { urls, command -> urls + command.urls }
+ .forEach { (device, urls) ->
+ onTabsClosed(device, urls)
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/CloseTabsUseCases.kt b/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/CloseTabsUseCases.kt
new file mode 100644
index 0000000000..845ae27a98
--- /dev/null
+++ b/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/CloseTabsUseCases.kt
@@ -0,0 +1,63 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.accounts.push
+
+import androidx.annotation.VisibleForTesting
+import androidx.annotation.WorkerThread
+import mozilla.components.concept.sync.Device
+import mozilla.components.concept.sync.DeviceCapability
+import mozilla.components.concept.sync.DeviceCommandOutgoing
+import mozilla.components.concept.sync.DeviceConstellation
+import mozilla.components.service.fxa.manager.FxaAccountManager
+
+/**
+ * Use cases for closing tabs that are open on other devices in the [DeviceConstellation].
+ *
+ * The use cases send commands to close tabs using the [FxaAccountManager].
+ *
+ * See [CloseTabsFeature] for the ability to close tabs on this device from
+ * other devices.
+ *
+ * @param accountManager The account manager.
+ */
+class CloseTabsUseCases(private val accountManager: FxaAccountManager) {
+ /**
+ * Closes a tab that's currently open on another device.
+ *
+ * @param deviceId The ID of the device on which the tab is currently open.
+ * @param url The URL of the tab to close.
+ * @return Whether the command to close the tab was sent to the device.
+ */
+ @WorkerThread
+ suspend fun close(deviceId: String, url: String): Boolean {
+ filterCloseTabsDevices(accountManager) { constellation, devices ->
+ val device = devices.firstOrNull { it.id == deviceId }
+ device?.let {
+ return constellation.sendCommandToDevice(
+ device.id,
+ DeviceCommandOutgoing.CloseTab(listOf(url)),
+ )
+ }
+ }
+
+ return false
+ }
+}
+
+@VisibleForTesting
+internal inline fun filterCloseTabsDevices(
+ accountManager: FxaAccountManager,
+ block: (DeviceConstellation, Collection<Device>) -> Unit,
+) {
+ val constellation = accountManager.authenticatedAccount()?.deviceConstellation() ?: return
+
+ constellation.state()?.let { state ->
+ state.otherDevices.filter {
+ it.capabilities.contains(DeviceCapability.CLOSE_TABS)
+ }.let { devices ->
+ block(constellation, devices)
+ }
+ }
+}
diff --git a/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/SendTabFeature.kt b/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/SendTabFeature.kt
index 4f049a790b..931dcf59a6 100644
--- a/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/SendTabFeature.kt
+++ b/mobile/android/android-components/components/feature/accounts-push/src/main/java/mozilla/components/feature/accounts/push/SendTabFeature.kt
@@ -24,7 +24,7 @@ import mozilla.components.support.base.log.logger.Logger
*
* See [SendTabUseCases] for the ability to send tabs to other devices.
*
- * @param accountManager Firefox account manager.
+ * @param accountManager Account manager.
* @param owner Android lifecycle owner for the observers. Defaults to the [ProcessLifecycleOwner]
* so that we can always observe events throughout the application lifecycle.
* @param autoPause whether or not the observer should automatically be
@@ -38,7 +38,7 @@ class SendTabFeature(
onTabsReceived: (Device?, List<TabData>) -> Unit,
) {
init {
- val observer = EventsObserver(onTabsReceived)
+ val observer = TabReceivedEventsObserver(onTabsReceived)
// Observe the account for all account events, although we'll ignore
// non send-tab command events.
@@ -46,10 +46,10 @@ class SendTabFeature(
}
}
-internal class EventsObserver(
+internal class TabReceivedEventsObserver(
private val onTabsReceived: (Device?, List<TabData>) -> Unit,
) : AccountEventsObserver {
- private val logger = Logger("EventsObserver")
+ private val logger = Logger("TabReceivedEventsObserver")
override fun onEvents(events: List<AccountEvent>) {
events.asSequence()
diff --git a/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/CloseTabsFeatureTest.kt b/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/CloseTabsFeatureTest.kt
new file mode 100644
index 0000000000..7b18681dce
--- /dev/null
+++ b/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/CloseTabsFeatureTest.kt
@@ -0,0 +1,136 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.accounts.push
+
+import mozilla.components.browser.state.state.BrowserState
+import mozilla.components.browser.state.state.createTab
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.concept.sync.Device
+import mozilla.components.concept.sync.DeviceCapability
+import mozilla.components.concept.sync.DeviceType
+import mozilla.components.support.test.any
+import mozilla.components.support.test.eq
+import mozilla.components.support.test.libstate.ext.waitUntilIdle
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.rule.MainCoroutineRule
+import org.junit.Assert.assertEquals
+import org.junit.Assert.assertTrue
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+
+class CloseTabsFeatureTest {
+ @get:Rule
+ val coroutinesTestRule = MainCoroutineRule()
+
+ private val device123 = Device(
+ id = "123",
+ displayName = "Charcoal",
+ deviceType = DeviceType.DESKTOP,
+ isCurrentDevice = false,
+ lastAccessTime = null,
+ capabilities = listOf(DeviceCapability.CLOSE_TABS),
+ subscriptionExpired = true,
+ subscription = null,
+ )
+
+ @Test
+ fun `GIVEN a notification to close multiple URLs WHEN all URLs are open in tabs THEN all tabs are closed and the callback is invoked`() {
+ val urls = listOf(
+ "https://mozilla.org",
+ "https://getfirefox.com",
+ "https://example.org",
+ "https://getthunderbird.com",
+ )
+ val browserStore = BrowserStore(
+ BrowserState(
+ tabs = urls.map { createTab(it) },
+ ),
+ )
+ val callback: (Device?, List<String>) -> Unit = mock()
+ val feature = CloseTabsFeature(
+ browserStore,
+ accountManager = mock(),
+ owner = mock(),
+ onTabsClosed = callback,
+ )
+
+ feature.observer.onTabsClosed(device123, urls)
+
+ browserStore.waitUntilIdle()
+
+ assertTrue(browserStore.state.tabs.isEmpty())
+ verify(callback).invoke(eq(device123), eq(urls))
+ }
+
+ @Test
+ fun `GIVEN a notification to close a URL WHEN the URL is not open in a tab THEN the callback is not invoked`() {
+ val browserStore = BrowserStore()
+ val callback: (Device?, List<String>) -> Unit = mock()
+ val feature = CloseTabsFeature(
+ browserStore,
+ accountManager = mock(),
+ owner = mock(),
+ onTabsClosed = callback,
+ )
+
+ feature.observer.onTabsClosed(device123, listOf("https://mozilla.org"))
+
+ browserStore.waitUntilIdle()
+
+ verify(callback, never()).invoke(any(), any())
+ }
+
+ @Test
+ fun `GIVEN a notification to close duplicate URLs WHEN the duplicate URLs are open in tabs THEN the number of tabs closed matches the number of URLs and the callback is invoked`() {
+ val browserStore = BrowserStore(
+ BrowserState(
+ tabs = listOf(
+ createTab("https://mozilla.org", id = "1"),
+ createTab("https://mozilla.org", id = "2"),
+ createTab("https://getfirefox.com", id = "3"),
+ createTab("https://getfirefox.com", id = "4"),
+ createTab("https://getfirefox.com", id = "5"),
+ createTab("https://getthunderbird.com", id = "6"),
+ createTab("https://example.org", id = "7"),
+ ),
+ ),
+ )
+ val callback: (Device?, List<String>) -> Unit = mock()
+ val feature = CloseTabsFeature(
+ browserStore,
+ accountManager = mock(),
+ owner = mock(),
+ onTabsClosed = callback,
+ )
+
+ feature.observer.onTabsClosed(
+ device123,
+ listOf(
+ "https://mozilla.org",
+ "https://getfirefox.com",
+ "https://getfirefox.com",
+ "https://example.org",
+ "https://example.org",
+ ),
+ )
+
+ browserStore.waitUntilIdle()
+
+ assertEquals(listOf("2", "5", "6"), browserStore.state.tabs.map { it.id })
+ verify(callback).invoke(
+ eq(device123),
+ eq(
+ listOf(
+ "https://mozilla.org",
+ "https://getfirefox.com",
+ "https://getfirefox.com",
+ "https://example.org",
+ ),
+ ),
+ )
+ }
+}
diff --git a/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/CloseTabsUseCasesTest.kt b/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/CloseTabsUseCasesTest.kt
new file mode 100644
index 0000000000..4aae8c84f6
--- /dev/null
+++ b/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/CloseTabsUseCasesTest.kt
@@ -0,0 +1,100 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.accounts.push
+
+import mozilla.components.concept.sync.ConstellationState
+import mozilla.components.concept.sync.Device
+import mozilla.components.concept.sync.DeviceCapability
+import mozilla.components.concept.sync.DeviceConstellation
+import mozilla.components.concept.sync.DeviceType
+import mozilla.components.concept.sync.OAuthAccount
+import mozilla.components.service.fxa.manager.FxaAccountManager
+import mozilla.components.support.test.any
+import mozilla.components.support.test.mock
+import mozilla.components.support.test.rule.MainCoroutineRule
+import mozilla.components.support.test.rule.runTestOnMain
+import org.junit.Assert.assertEquals
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.mockito.Mockito.never
+import org.mockito.Mockito.verify
+import org.mockito.Mockito.`when`
+
+class CloseTabsUseCasesTest {
+ @get:Rule
+ val coroutinesTestRule = MainCoroutineRule()
+
+ private val device123 = Device(
+ id = "123",
+ displayName = "Charcoal",
+ deviceType = DeviceType.DESKTOP,
+ isCurrentDevice = false,
+ lastAccessTime = null,
+ capabilities = listOf(DeviceCapability.CLOSE_TABS),
+ subscriptionExpired = true,
+ subscription = null,
+ )
+
+ private val device1234 = Device(
+ id = "1234",
+ displayName = "Ruby",
+ deviceType = DeviceType.DESKTOP,
+ isCurrentDevice = false,
+ lastAccessTime = null,
+ capabilities = emptyList(),
+ subscriptionExpired = true,
+ subscription = null,
+ )
+
+ private val manager: FxaAccountManager = mock()
+ private val account: OAuthAccount = mock()
+ private val constellation: DeviceConstellation = mock()
+ private val state: ConstellationState = mock()
+
+ @Before
+ fun setUp() {
+ `when`(manager.authenticatedAccount()).thenReturn(account)
+ `when`(account.deviceConstellation()).thenReturn(constellation)
+ `when`(constellation.state()).thenReturn(state)
+ }
+
+ @Test
+ fun `GIVEN a list of devices WHEN one device supports the close tabs command THEN filtering returns that device`() {
+ val deviceIds = mutableListOf<String>()
+ `when`(state.otherDevices).thenReturn(listOf(device123, device1234))
+ filterCloseTabsDevices(manager) { _, devices ->
+ deviceIds.addAll(devices.map { it.id })
+ }
+
+ assertEquals(listOf("123"), deviceIds)
+ }
+
+ @Test
+ fun `GIVEN a constellation with one capable device WHEN sending a close tabs command to that device THEN the command is sent`() = runTestOnMain {
+ val useCases = CloseTabsUseCases(manager)
+
+ `when`(state.otherDevices).thenReturn(listOf(device123))
+ `when`(constellation.sendCommandToDevice(any(), any()))
+ .thenReturn(true)
+
+ useCases.close("123", "http://example.com")
+
+ verify(constellation).sendCommandToDevice(any(), any())
+ }
+
+ @Test
+ fun `GIVEN a constellation with one incapable device WHEN sending a close tabs command to that device THEN the command is not sent`() = runTestOnMain {
+ val useCases = CloseTabsUseCases(manager)
+
+ `when`(state.otherDevices).thenReturn(listOf(device1234))
+ `when`(constellation.sendCommandToDevice(any(), any()))
+ .thenReturn(false)
+
+ useCases.close("1234", "http://example.com")
+
+ verify(constellation, never()).sendCommandToDevice(any(), any())
+ }
+}
diff --git a/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/EventsObserverTest.kt b/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/TabReceivedEventsObserverTest.kt
index 6de8ff42f6..1b8128d4ba 100644
--- a/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/EventsObserverTest.kt
+++ b/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/TabReceivedEventsObserverTest.kt
@@ -15,11 +15,11 @@ import org.junit.Test
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
-class EventsObserverTest {
+class TabReceivedEventsObserverTest {
@Test
fun `events are delivered successfully`() {
val callback: (Device?, List<TabData>) -> Unit = mock()
- val observer = EventsObserver(callback)
+ val observer = TabReceivedEventsObserver(callback)
val events = listOf(AccountEvent.DeviceCommandIncoming(command = DeviceCommandIncoming.TabReceived(mock(), mock())))
observer.onEvents(events)
@@ -34,7 +34,7 @@ class EventsObserverTest {
@Test
fun `only TabReceived commands are delivered`() {
val callback: (Device?, List<TabData>) -> Unit = mock()
- val observer = EventsObserver(callback)
+ val observer = TabReceivedEventsObserver(callback)
val events = listOf(
AccountEvent.ProfileUpdated,
AccountEvent.DeviceCommandIncoming(command = DeviceCommandIncoming.TabReceived(mock(), mock())),
diff --git a/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/TabsClosedEventsObserverTest.kt b/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/TabsClosedEventsObserverTest.kt
new file mode 100644
index 0000000000..8d51d0b812
--- /dev/null
+++ b/mobile/android/android-components/components/feature/accounts-push/src/test/java/mozilla/components/feature/accounts/push/TabsClosedEventsObserverTest.kt
@@ -0,0 +1,183 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package mozilla.components.feature.accounts.push
+
+import mozilla.components.concept.sync.AccountEvent
+import mozilla.components.concept.sync.Device
+import mozilla.components.concept.sync.DeviceCapability
+import mozilla.components.concept.sync.DeviceCommandIncoming
+import mozilla.components.concept.sync.DeviceType
+import mozilla.components.support.test.any
+import mozilla.components.support.test.eq
+import mozilla.components.support.test.mock
+import org.junit.Test
+import org.mockito.Mockito.times
+import org.mockito.Mockito.verify
+
+class TabsClosedEventsObserverTest {
+ private val device123 = Device(
+ id = "123",
+ displayName = "Charcoal",
+ deviceType = DeviceType.DESKTOP,
+ isCurrentDevice = false,
+ lastAccessTime = null,
+ capabilities = listOf(DeviceCapability.CLOSE_TABS),
+ subscriptionExpired = true,
+ subscription = null,
+ )
+
+ private val device1234 = Device(
+ id = "1234",
+ displayName = "Emerald",
+ deviceType = DeviceType.MOBILE,
+ isCurrentDevice = false,
+ lastAccessTime = null,
+ capabilities = listOf(DeviceCapability.CLOSE_TABS),
+ subscriptionExpired = true,
+ subscription = null,
+ )
+
+ private val device12345 = Device(
+ id = "12345",
+ displayName = "Sapphire",
+ deviceType = DeviceType.MOBILE,
+ isCurrentDevice = false,
+ lastAccessTime = null,
+ capabilities = listOf(DeviceCapability.CLOSE_TABS),
+ subscriptionExpired = true,
+ subscription = null,
+ )
+
+ @Test
+ fun `GIVEN a tabs closed command WHEN the observer is notified THEN the callback is invoked`() {
+ val callback: (Device?, List<String>) -> Unit = mock()
+ val observer = TabsClosedEventsObserver(callback)
+ val events = listOf(
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ null,
+ listOf("https://mozilla.org"),
+ ),
+ ),
+ )
+
+ observer.onEvents(events)
+
+ verify(callback).invoke(eq(null), eq(listOf("https://mozilla.org")))
+ }
+
+ @Test
+ fun `GIVEN a tabs closed command from a device WHEN the observer is notified THEN the callback is invoked`() {
+ val callback: (Device?, List<String>) -> Unit = mock()
+ val observer = TabsClosedEventsObserver(callback)
+ val events = listOf(
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ device123,
+ listOf("https://mozilla.org"),
+ ),
+ ),
+ )
+
+ observer.onEvents(events)
+
+ verify(callback).invoke(eq(device123), eq(listOf("https://mozilla.org")))
+ }
+
+ @Test
+ fun `GIVEN multiple commands WHEN the observer is notified THEN the callback is only invoked for the tabs closed commands`() {
+ val callback: (Device?, List<String>) -> Unit = mock()
+ val observer = TabsClosedEventsObserver(callback)
+ val events = listOf(
+ AccountEvent.ProfileUpdated,
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ device123,
+ listOf("https://mozilla.org"),
+ ),
+ ),
+ )
+
+ observer.onEvents(events)
+
+ verify(callback, times(1)).invoke(eq(device123), eq(listOf("https://mozilla.org")))
+ }
+
+ @Test
+ fun `GIVEN multiple tabs closed commands from the same device WHEN the observer is notified THEN the callback is invoked once`() {
+ val callback: (Device?, List<String>) -> Unit = mock()
+ val observer = TabsClosedEventsObserver(callback)
+ val events = listOf(
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ device123,
+ listOf("https://mozilla.org", "https://getfirefox.com"),
+ ),
+ ),
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ device123,
+ listOf("https://example.org"),
+ ),
+ ),
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ device123,
+ listOf("https://getthunderbird.com"),
+ ),
+ ),
+ )
+
+ observer.onEvents(events)
+
+ verify(callback, times(1)).invoke(
+ eq(device123),
+ eq(
+ listOf(
+ "https://mozilla.org",
+ "https://getfirefox.com",
+ "https://example.org",
+ "https://getthunderbird.com",
+ ),
+ ),
+ )
+ }
+
+ @Test
+ fun `GIVEN multiple tabs closed commands from different devices WHEN the observer is notified THEN the callback is invoked once per device`() {
+ val callback: (Device?, List<String>) -> Unit = mock()
+ val observer = TabsClosedEventsObserver(callback)
+ val events = listOf(
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ null,
+ listOf("https://mozilla.org"),
+ ),
+ ),
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ device123,
+ listOf("https://mozilla.org"),
+ ),
+ ),
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ device1234,
+ listOf("https://mozilla.org"),
+ ),
+ ),
+ AccountEvent.DeviceCommandIncoming(
+ command = DeviceCommandIncoming.TabsClosed(
+ device12345,
+ listOf("https://mozilla.org"),
+ ),
+ ),
+ )
+
+ observer.onEvents(events)
+
+ verify(callback, times(4)).invoke(any(), eq(listOf("https://mozilla.org")))
+ }
+}
diff --git a/mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/background.js b/mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/background.js
index b90f57154a..e8cf40ba8d 100644
--- a/mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/background.js
+++ b/mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/background.js
@@ -10,12 +10,12 @@ let port = browser.runtime.connectNative(WEB_CHANNEL_BACKGROUND_MESSAGING_ID);
/*
Handle messages from native application, register content script for specific url.
*/
-port.onMessage.addListener( event => {
- if(event.type == "overrideFxAServer"){
+port.onMessage.addListener(event => {
+ if (event.type == "overrideFxAServer") {
browser.contentScripts.register({
- "matches": [ event.url+"/*" ],
- "js": [{file: "fxawebchannel.js"}],
- "runAt": "document_start"
+ matches: [event.url + "/*"],
+ js: [{ file: "fxawebchannel.js" }],
+ runAt: "document_start",
});
port.disconnect();
}
diff --git a/mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/fxawebchannel.js b/mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/fxawebchannel.js
index 2f5934dff1..16614d3069 100644
--- a/mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/fxawebchannel.js
+++ b/mobile/android/android-components/components/feature/accounts/src/main/assets/extensions/fxawebchannel/fxawebchannel.js
@@ -10,16 +10,18 @@ let port = browser.runtime.connectNative("mozacWebchannel");
/*
Handle messages from native application, dispatch them to FxA via an event.
*/
-port.onMessage.addListener((event) => {
- window.dispatchEvent(new CustomEvent('WebChannelMessageToContent', {
- detail: JSON.stringify(event)
- }));
+port.onMessage.addListener(event => {
+ window.dispatchEvent(
+ new CustomEvent("WebChannelMessageToContent", {
+ detail: JSON.stringify(event),
+ })
+ );
});
/*
Handle messages from FxA. Messages are posted to the native application for processing.
*/
-window.addEventListener('WebChannelMessageToChrome', function (e) {
+window.addEventListener("WebChannelMessageToChrome", function (e) {
const detail = JSON.parse(e.detail);
port.postMessage(detail);
});
diff --git a/mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeature.kt b/mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeature.kt
index 60913282b7..b244eb0de8 100644
--- a/mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeature.kt
+++ b/mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeature.kt
@@ -38,10 +38,15 @@ class FirefoxAccountsAuthFeature(
* @param context [Context] The application context
* @param entrypoint [FxAEntryPoint] The Firefox Accounts feature/entrypoint that is launching
* authentication
+ * @param scopes [Set<String>] The oAuth scopes being requested
*/
- fun beginAuthentication(context: Context, entrypoint: FxAEntryPoint) {
+ fun beginAuthentication(
+ context: Context,
+ entrypoint: FxAEntryPoint,
+ scopes: Set<String> = emptySet(),
+ ) {
beginAuthenticationAsync(context) {
- accountManager.beginAuthentication(entrypoint = entrypoint)
+ accountManager.beginAuthentication(entrypoint = entrypoint, authScopes = scopes)
}
}
@@ -50,15 +55,17 @@ class FirefoxAccountsAuthFeature(
* @param context [Context] The application context
* @param pairingUrl [String] The pairing URL retrieved from the QR scanner
* @param entrypoint [FxAEntryPoint] The Firefox Accounts feature/entrypoint that is launching
+ * @param scopes [Set<String>] The oAuth scopes being requested
* authentication
*/
fun beginPairingAuthentication(
context: Context,
pairingUrl: String,
entrypoint: FxAEntryPoint,
+ scopes: Set<String> = emptySet(),
) {
beginAuthenticationAsync(context) {
- accountManager.beginAuthentication(pairingUrl, entrypoint = entrypoint)
+ accountManager.beginAuthentication(pairingUrl, entrypoint = entrypoint, scopes)
}
}
diff --git a/mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FxaWebChannelFeature.kt b/mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FxaWebChannelFeature.kt
index f5554c99e4..377d6b0d93 100644
--- a/mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FxaWebChannelFeature.kt
+++ b/mobile/android/android-components/components/feature/accounts/src/main/java/mozilla/components/feature/accounts/FxaWebChannelFeature.kt
@@ -20,6 +20,7 @@ import mozilla.components.concept.engine.webextension.MessageHandler
import mozilla.components.concept.engine.webextension.Port
import mozilla.components.concept.engine.webextension.WebExtensionRuntime
import mozilla.components.concept.sync.AuthType
+import mozilla.components.concept.sync.UserData
import mozilla.components.lib.state.ext.flowScoped
import mozilla.components.service.fxa.FxaAuthData
import mozilla.components.service.fxa.ServerConfig
@@ -157,6 +158,7 @@ class FxaWebChannelFeature(
WebChannelCommand.CAN_LINK_ACCOUNT -> processCanLinkAccountCommand(messageId)
WebChannelCommand.FXA_STATUS -> processFxaStatusCommand(accountManager, messageId, fxaCapabilities)
WebChannelCommand.OAUTH_LOGIN -> processOauthLoginCommand(accountManager, payload)
+ WebChannelCommand.LOGIN -> processLoginCommand(accountManager, payload)
}
response?.let { port.postMessage(it) }
}
@@ -195,6 +197,7 @@ class FxaWebChannelFeature(
enum class WebChannelCommand {
CAN_LINK_ACCOUNT,
+ LOGIN,
OAUTH_LOGIN,
FXA_STATUS,
}
@@ -222,6 +225,12 @@ class FxaWebChannelFeature(
private const val COMMAND_STATUS = "fxaccounts:fxa_status"
/**
+ * Gets triggered when the web content is signed in/up, but not necessarily verified
+ * it passes in its payload the session token the web content is holding on to
+ */
+ private const val COMMAND_LOGIN = "fxaccounts:login"
+
+ /**
* Handles the [COMMAND_CAN_LINK_ACCOUNT] event from the web-channel.
* Currently this always response with 'ok=true'.
* On Fx Desktop, this event prompts a possible "another user was previously logged in on
@@ -329,6 +338,32 @@ class FxaWebChannelFeature(
}
/**
+ * Handles the [COMMAND_LOGIN] event from the web-channel
+ */
+ private fun processLoginCommand(accountManager: FxaAccountManager, payload: JSONObject): JSONObject? {
+ val sessionToken: String
+ val email: String
+ val uid: String
+ val verified: Boolean
+
+ try {
+ val data = payload.getJSONObject("data")
+ sessionToken = data.getString("sessionToken")
+ email = data.getString("email")
+ uid = data.getString("uid")
+ verified = data.getBoolean("verified")
+ } catch (e: JSONException) {
+ logger.error("Error while processing WebChannel login command", e)
+ return null
+ }
+ val userData = UserData(sessionToken, email, uid, verified)
+ CoroutineScope(Dispatchers.Main).launch {
+ accountManager.setUserData(userData)
+ }
+ return null
+ }
+
+ /**
* Handles the [COMMAND_OAUTH_LOGIN] event from the web-channel.
*/
private fun processOauthLoginCommand(accountManager: FxaAccountManager, payload: JSONObject): JSONObject? {
@@ -368,6 +403,7 @@ class FxaWebChannelFeature(
COMMAND_CAN_LINK_ACCOUNT -> WebChannelCommand.CAN_LINK_ACCOUNT
COMMAND_OAUTH_LOGIN -> WebChannelCommand.OAUTH_LOGIN
COMMAND_STATUS -> WebChannelCommand.FXA_STATUS
+ COMMAND_LOGIN -> WebChannelCommand.LOGIN
else -> {
logger.warn("Unrecognized WebChannel command: $this")
null
diff --git a/mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeatureTest.kt b/mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeatureTest.kt
index a32681e8fe..ef7f78b336 100644
--- a/mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeatureTest.kt
+++ b/mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FirefoxAccountsAuthFeatureTest.kt
@@ -17,8 +17,8 @@ import mozilla.components.concept.sync.AuthType
import mozilla.components.concept.sync.DeviceConfig
import mozilla.components.concept.sync.DeviceType
import mozilla.components.concept.sync.FxAEntryPoint
-import mozilla.components.concept.sync.OAuthAccount
import mozilla.components.concept.sync.Profile
+import mozilla.components.service.fxa.FirefoxAccount
import mozilla.components.service.fxa.FxaAuthData
import mozilla.components.service.fxa.ServerConfig
import mozilla.components.service.fxa.StorageWrapper
@@ -45,13 +45,13 @@ internal class TestableStorageWrapper(
manager: FxaAccountManager,
accountEventObserverRegistry: ObserverRegistry<AccountEventsObserver>,
serverConfig: ServerConfig,
- private val block: () -> OAuthAccount = {
- val account: OAuthAccount = mock()
+ private val block: () -> FirefoxAccount = {
+ val account: FirefoxAccount = mock()
`when`(account.deviceConstellation()).thenReturn(mock())
account
},
) : StorageWrapper(manager, accountEventObserverRegistry, serverConfig) {
- override fun obtainAccount(): OAuthAccount = block()
+ override fun obtainAccount(): FirefoxAccount = block()
}
// Same as the actual account manager, except we get to control how FirefoxAccountShaped instances
@@ -63,7 +63,7 @@ class TestableFxaAccountManager(
config: ServerConfig,
scopes: Set<String>,
coroutineContext: CoroutineContext,
- block: () -> OAuthAccount = { mock() },
+ block: () -> FirefoxAccount = { mock() },
) : FxaAccountManager(context, config, DeviceConfig("test", DeviceType.MOBILE, setOf()), null, scopes, null, coroutineContext) {
private val testableStorageWrapper = TestableStorageWrapper(this, accountEventObserverRegistry, serverConfig, block)
override fun getStorageWrapper(): StorageWrapper {
@@ -252,7 +252,7 @@ class FirefoxAccountsAuthFeatureTest {
private suspend fun prepareAccountManagerForSuccessfulAuthentication(
coroutineContext: CoroutineContext,
): TestableFxaAccountManager {
- val mockAccount: OAuthAccount = mock()
+ val mockAccount: FirefoxAccount = mock()
val profile = Profile(uid = "testUID", avatar = null, email = "test@example.com", displayName = "test profile")
`when`(mockAccount.deviceConstellation()).thenReturn(mock())
@@ -279,7 +279,7 @@ class FirefoxAccountsAuthFeatureTest {
private suspend fun prepareAccountManagerForFailedAuthentication(
coroutineContext: CoroutineContext,
): TestableFxaAccountManager {
- val mockAccount: OAuthAccount = mock()
+ val mockAccount: FirefoxAccount = mock()
val profile = Profile(uid = "testUID", avatar = null, email = "test@example.com", displayName = "test profile")
`when`(mockAccount.getProfile(anyBoolean())).thenReturn(profile)
diff --git a/mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FxaWebChannelFeatureTest.kt b/mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FxaWebChannelFeatureTest.kt
index 809ed7a703..3a49633f61 100644
--- a/mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FxaWebChannelFeatureTest.kt
+++ b/mobile/android/android-components/components/feature/accounts/src/test/java/mozilla/components/feature/accounts/FxaWebChannelFeatureTest.kt
@@ -19,6 +19,7 @@ import mozilla.components.concept.engine.webextension.WebExtension
import mozilla.components.concept.sync.AuthType
import mozilla.components.concept.sync.OAuthAccount
import mozilla.components.concept.sync.Profile
+import mozilla.components.concept.sync.UserData
import mozilla.components.service.fxa.FxaAuthData
import mozilla.components.service.fxa.ServerConfig
import mozilla.components.service.fxa.SyncEngine
@@ -701,6 +702,56 @@ class FxaWebChannelFeatureTest {
assertTrue(FxaWebChannelFeature.isCommunicationAllowed("http://localhost", "http://localhost"))
}
+ @Test
+ fun `COMMAND_LOGIN must be processed and sets the user's data`() = runTest {
+ val accountManager: FxaAccountManager = mock() // syncConfig is null by default (is not configured)
+ val engineSession: EngineSession = mock()
+ val ext: WebExtension = mock()
+ val port: Port = mock()
+ val messageHandler = argumentCaptor<MessageHandler>()
+
+ WebExtensionController.installedExtensions[FxaWebChannelFeature.WEB_CHANNEL_EXTENSION_ID] = ext
+
+ val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, null, emptySet(), accountManager)
+ webchannelFeature.start()
+ shadowOf(getMainLooper()).idle()
+
+ verify(ext).registerContentMessageHandler(
+ eq(engineSession),
+ eq(FxaWebChannelFeature.WEB_CHANNEL_MESSAGING_ID),
+ messageHandler.capture(),
+ )
+ messageHandler.value.onPortConnected(port)
+
+ // Action: signin
+ verifyLogin("sessiontoken123", "foo@bar.com", "uid123", false, messageHandler.value, accountManager)
+ }
+
+ @Test
+ fun `COMMAND_LOGIN invalid json sends back`() = runTest {
+ val accountManager: FxaAccountManager = mock() // syncConfig is null by default (is not configured)
+ val engineSession: EngineSession = mock()
+ val ext: WebExtension = mock()
+ val port: Port = mock()
+ val messageHandler = argumentCaptor<MessageHandler>()
+
+ WebExtensionController.installedExtensions[FxaWebChannelFeature.WEB_CHANNEL_EXTENSION_ID] = ext
+
+ val webchannelFeature = prepareFeatureForTest(ext, port, engineSession, null, emptySet(), accountManager)
+ webchannelFeature.start()
+ shadowOf(getMainLooper()).idle()
+
+ verify(ext).registerContentMessageHandler(
+ eq(engineSession),
+ eq(FxaWebChannelFeature.WEB_CHANNEL_MESSAGING_ID),
+ messageHandler.capture(),
+ )
+ messageHandler.value.onPortConnected(port)
+
+ // Action: signin
+ verifyLogin("sessiontoken123", "foo@bar.com", "uid123", false, messageHandler.value, accountManager)
+ }
+
private fun JSONObject.getSupportedEngines(): List<String> {
val engines = this.getJSONObject("message")
.getJSONObject("data")
@@ -798,6 +849,41 @@ class FxaWebChannelFeatureTest {
)
}
+ private suspend fun verifyLogin(sessionToken: String, email: String, uid: String, verified: Boolean, messageHandler: MessageHandler, accountManager: FxaAccountManager) {
+ val jsonToWebChannel = jsonLogin(sessionToken, email, uid, verified)
+ val port = mock<Port>()
+ whenever(port.senderUrl()).thenReturn("https://foo.bar/email")
+ messageHandler.onPortMessage(jsonToWebChannel, port)
+
+ val expectedUserData = UserData(
+ sessionToken = sessionToken,
+ email = email,
+ uid = uid,
+ verified = verified,
+ )
+ shadowOf(getMainLooper()).idle()
+
+ verify(accountManager).setUserData(expectedUserData)
+ }
+
+ private fun jsonLogin(sessionToken: String, email: String, uid: String, verified: Boolean): JSONObject {
+ return JSONObject(
+ """{
+ "message":{
+ "command": "fxaccounts:login",
+ "messageId":123,
+ "data":{
+ "email":"$email",
+ "sessionToken":"$sessionToken",
+ "uid":"$uid",
+ "verified":$verified
+ }
+ }
+ }
+ """.trimIndent(),
+ )
+ }
+
private fun prepareFeatureForTest(
ext: WebExtension = mock(),
port: Port = mock(),
diff --git a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt
index d3e12a0171..723d3e6eb1 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt
+++ b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/AddonManager.kt
@@ -252,9 +252,9 @@ class AddonManager(
permissions = permissions,
origins = origins,
onSuccess = { ext ->
- val enabledAddon = addon.copy(installedState = toInstalledState(ext))
+ val updatedAddon = Addon.newFromWebExtension(ext, toInstalledState(ext))
completePendingAddonAction(pendingAction)
- onSuccess(enabledAddon)
+ onSuccess(updatedAddon)
},
onError = {
completePendingAddonAction(pendingAction)
@@ -296,9 +296,9 @@ class AddonManager(
permissions = permissions,
origins = origins,
onSuccess = { ext ->
- val enabledAddon = addon.copy(installedState = toInstalledState(ext))
+ val updatedAddon = Addon.newFromWebExtension(ext, toInstalledState(ext))
completePendingAddonAction(pendingAction)
- onSuccess(enabledAddon)
+ onSuccess(updatedAddon)
},
onError = {
completePendingAddonAction(pendingAction)
diff --git a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/PermissionsDialogFragment.kt b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/PermissionsDialogFragment.kt
index 92e555e722..a19a5a61f5 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/PermissionsDialogFragment.kt
+++ b/mobile/android/android-components/components/feature/addons/src/main/java/mozilla/components/feature/addons/ui/PermissionsDialogFragment.kt
@@ -153,9 +153,10 @@ class PermissionsDialogFragment : AddonDialogFragment() {
},
addon.translateName(requireContext()),
)
- rootView.findViewById<TextView>(R.id.optional_or_required_text).text = buildOptionalOrRequiredText()
-
val listPermissions = buildPermissionsList()
+ rootView.findViewById<TextView>(R.id.optional_or_required_text).text =
+ buildOptionalOrRequiredText(listPermissions.isNotEmpty())
+
val permissionsRecyclerView = rootView.findViewById<RecyclerView>(R.id.permissions)
val positiveButton = rootView.findViewById<Button>(R.id.allow_button)
val negativeButton = rootView.findViewById<Button>(R.id.deny_button)
@@ -217,7 +218,10 @@ class PermissionsDialogFragment : AddonDialogFragment() {
}
@VisibleForTesting
- internal fun buildOptionalOrRequiredText(): String {
+ internal fun buildOptionalOrRequiredText(hasPermissions: Boolean): String {
+ if (!hasPermissions) {
+ return ""
+ }
val optionalOrRequiredText = if (forOptionalPermissions) {
getString(R.string.mozac_feature_addons_optional_permissions_dialog_subtitle)
} else {
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-be/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-be/strings.xml
index 30c37d9ad9..ac9b647423 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-be/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-be/strings.xml
@@ -88,6 +88,8 @@
<string name="mozac_feature_addons_rating">Ацэнка</string>
<!-- A link that points to the detail page of the add-on. -->
<string name="mozac_feature_addons_more_info_link" moz:removedIn="126" tools:ignore="UnusedResources">Падрабязней аб гэтым дадатку</string>
+ <!-- A link that points to the detail page of the extension. -->
+ <string name="mozac_feature_addons_more_info_link_2">Падрабязней аб гэтым пашырэнні</string>
<!-- The settings of the add-on. -->
<string name="mozac_feature_addons_settings">Налады</string>
<!-- Indicates the add-on is enabled. -->
@@ -148,16 +150,24 @@
<string name="mozac_feature_addons_user_rating_count_2">Водгукі: %1$s</string>
<!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars and / separator and 5 the maximum number of stars e.g (2/5, 4.5/5 or 5/5) . -->
<string name="mozac_feature_addons_rating_content_description" moz:removedIn="124" tools:ignore="UnusedResources">%1$.02f/5</string>
+ <!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars. -->
+ <string name="mozac_feature_addons_rating_content_description_2">Ацэнка: %1$.02f з 5</string>
<!-- This is the title of page where all the add-ons are listed-->
<string name="mozac_feature_addons_addons">Дадаткі</string>
<!-- Label for add-ons sub menu item for add-ons manager-->
<string name="mozac_feature_addons_addons_manager">Менеджар дадаткаў</string>
<!-- The title of the "crash" notification in the add-ons manager -->
<string name="mozac_feature_addons_manager_notification_title_text" moz:removedIn="126" tools:ignore="UnusedResources">Дадаткі часова адключаны</string>
+ <!-- The title of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_title_text">Пашырэнні часова адключаны</string>
<!-- The content of the "crash" notification in the add-ons manager -->
<string name="mozac_feature_addons_manager_notification_content_text" moz:removedIn="126" tools:ignore="UnusedResources">Адзін або некалькі дадатковых кампанентаў перасталі працаваць, што зрабіла вашу сістэму нестабільнай.</string>
+ <!-- The content of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_content_text">Адно або некалькі пашырэнняў перасталі працаваць, што зрабіла вашу сістэму нестабільнай.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
<string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Перазапусціць дадаткі</string>
+ <!-- Button to re-enable the extensions in the "crash" notification -->
+ <string name="mozac_feature_extensions_manager_notification_restart_button">Перазапусціць пашырэнні</string>
<!-- Button in the add-ons manager that opens AMO in a tab -->
<string name="mozac_feature_addons_find_more_addons_button_text" moz:removedIn="126" tools:ignore="UnusedResources">Знайсці больш дадаткаў</string>
<!-- Button in the extensions manager that opens AMO in a tab -->
@@ -238,6 +248,8 @@
<string name="mozac_feature_addons_unsupported_caption_2">1 пашырэнне</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter - plural. %1$s is the number of unsupported add-ons -->
<string name="mozac_feature_addons_unsupported_caption_plural" moz:removedIn="126" tools:ignore="UnusedResources">Дадаткаў: %1$s</string>
+ <!-- Text shown in not yet supported add-ons section - plural. %1$s is the number of unsupported extensions. -->
+ <string name="mozac_feature_addons_unsupported_caption_plural_2">%1$s пашырэнняў</string>
<!-- Text link to a sumo page for learning more about unsupported add-ons. -->
<string name="mozac_feature_addons_unsupported_learn_more">Даведацца больш</string>
<!-- Displayed in the "Status" field for the updater when an add-on has been correctly updated. -->
@@ -256,6 +268,8 @@
<string name="mozac_feature_addons_installed_dialog_title">%1$s было дададзена ў %2$s</string>
<!-- Text shown in the dialog when add-on installation is completed. -->
<string name="mozac_feature_addons_installed_dialog_description" moz:removedIn="124" tools:ignore="UnusedResources">Адкрыць яго ў меню</string>
+ <!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
+ <string name="mozac_feature_addons_installed_dialog_description_2">Доступ да %1$s з меню %2$s.</string>
<!-- Confirmation button text for the dialog when add-on installation is completed. -->
<string name="mozac_feature_addons_installed_dialog_okay_button" moz:removedIn="124" tools:ignore="UnusedResources">Добра, зразумела</string>
<!-- Confirmation button text for the dialog when add-on installation is completed. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-br/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-br/strings.xml
index 2fb0506106..2f02310fe1 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-br/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-br/strings.xml
@@ -76,8 +76,6 @@
<string name="mozac_feature_addons_version">Handelv</string>
<!-- The author of an add-on. -->
<string name="mozac_feature_addons_author">Aozer</string>
- <!-- The authors of an add-on. -->
- <string name="mozac_feature_addons_authors" moz:removedIn="123" tools:ignore="UnusedResources">Aozerien</string>
<!-- The last date that the add-on was updated. -->
<string name="mozac_feature_addons_last_updated">Hizivadur diwezhañ</string>
<!-- The developer website (Homepage) of the add-on. -->
@@ -94,8 +92,6 @@
<string name="mozac_feature_addons_settings">Arventennoù</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_settings_on">Gweredekaet</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_settings_off" moz:removedIn="125" tools:ignore="UnusedResources">Diweredekaet</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_allow_in_private_browsing">Aotren er Merdeiñ Prevez</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
@@ -104,8 +100,6 @@
<string name="mozac_feature_addons_not_allowed_in_private_browsing">N’eo ket aotreet er prenestroù prevez</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_enabled">Gweredekaet</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_disabled" moz:removedIn="125" tools:ignore="UnusedResources">Diweredekaet</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the installed section. -->
<string name="mozac_feature_addons_installed_section">Staliet</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the recommended section. -->
@@ -140,22 +134,26 @@
<string name="mozac_feature_addons_permissions_dialog_deny">Nac’hañ</string>
<!-- This is a button to cancel the add-on installation . -->
<string name="mozac_feature_addons_permissions_dialog_cancel">Nullañ</string>
- <!-- Accessibility content description to install add-on button. -->
- <string name="mozac_feature_addons_install_addon_content_description" tools:ignore="UnusedResources" moz:removedIn="124">Staliañ an askouezh</string>
<!-- Accessibility content description to install add-on button. %1$s is the add-on name. -->
<string name="mozac_feature_addons_install_addon_content_description_2">Staliañ %1$s</string>
<!-- This is the label of a button to cancel an ongoing add-on installation. -->
<string name="mozac_feature_addons_install_addon_dialog_cancel">Nullañ</string>
<!-- Indicates how many users have rated an add-on. %1$s will be replaced with number of reviews -->
<string name="mozac_feature_addons_user_rating_count_2">Burutelladennoù: %1$s</string>
- <!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars and / separator and 5 the maximum number of stars e.g (2/5, 4.5/5 or 5/5) . -->
- <string name="mozac_feature_addons_rating_content_description" moz:removedIn="124" tools:ignore="UnusedResources">%1$.02f/5</string>
+ <!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars. -->
+ <string name="mozac_feature_addons_rating_content_description_2">Notenn: %1$.02f war 5</string>
<!-- This is the title of page where all the add-ons are listed-->
<string name="mozac_feature_addons_addons">Askouezhioù</string>
<!-- Label for add-ons sub menu item for add-ons manager-->
<string name="mozac_feature_addons_addons_manager">Ardoer an askouezhioù</string>
<!-- The title of the "crash" notification in the add-ons manager -->
<string name="mozac_feature_addons_manager_notification_title_text" moz:removedIn="126" tools:ignore="UnusedResources">Diweredekaet eo an askouezhioù evit ar mare</string>
+ <!-- The title of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_title_text">Diweredekaet eo an askouezhioù evit ar mare</string>
+ <!-- The content of the "crash" notification in the add-ons manager -->
+ <string name="mozac_feature_addons_manager_notification_content_text" moz:removedIn="126" tools:ignore="UnusedResources">Un enlugellad pe meur a hini o deus sac’het, ar pezh a ya da zistabilaat ho reizhiad.</string>
+ <!-- The content of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_content_text">Un askouezh pe meur a hini o deus sac’het, ar pezh a ya da zistabilaat ho reizhiad.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
<string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Adloc’hañ an askouezhioù</string>
<!-- Button to re-enable the extensions in the "crash" notification -->
@@ -200,6 +198,8 @@
<string name="mozac_extension_install_progress_caption">O pellgargañ hag o wiriañ an askouezh…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
<string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">Ne cʼhaller ket kaout roll an askouezhioù!</string>
+ <!-- Error shown when something unexpected happened while trying to get the extension list from the server -->
+ <string name="mozac_feature_addons_failed_to_query_extensions">Ne cʼhaller ket kaout roll an enlugelladoù!</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
<string name="mozac_feature_addons_failed_to_translate">N’eo ket bet kavet an droidigezh, nag evit ar yezh %1$s nag evit ar yezh dre ziouer %2$s</string>
<!-- Text shown after successfully installed an add-on. %1$s is the add-on name. -->
@@ -208,12 +208,20 @@
<string name="mozac_feature_addons_failed_to_install">Cʼhwitadenn war staliadur %1$s</string>
<!-- Text shown after failing to install an add-on for which we don't have its name. -->
<string name="mozac_feature_addons_failed_to_install_generic" moz:removedIn="126" tools:ignore="UnusedResources">Staliadur an askouezh c’hwitet.</string>
+ <!-- Text shown after failing to install an extension for which we don't have its name. -->
+ <string name="mozac_feature_addons_extension_failed_to_install">Staliadur an askouezh c’hwitet.</string>
<!-- Text shown when attempting to install an add-on and a network error happened. -->
<string name="mozac_feature_addons_failed_to_install_network_error" moz:removedIn="126" tools:ignore="UnusedResources">An askouezh-mañ n’hall ket bezañ pellgarget en abeg d’ur fazi kennask.</string>
+ <!-- Text shown when attempting to install an extension and a network error happened. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_network_error">An askouezh-mañ n’hall ket bezañ pellgarget en abeg d’ur fazi kennask.</string>
<!-- Text shown when attempting to install an add-on and the downloaded file is corrupted. -->
<string name="mozac_feature_addons_failed_to_install_corrupt_error" moz:removedIn="126" tools:ignore="UnusedResources">An askouezh-mañ n’hall ket bezañ staliet rak kontronet eo war ar seblant.</string>
+ <!-- Text shown when attempting to install an extension and the downloaded file is corrupted. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_corrupt_error">An askouezh-mañ n\'hall ket bezañ staliet rak kontronet eo war ar seblant.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
<string name="mozac_feature_addons_failed_to_install_not_signed_error" moz:removedIn="126" tools:ignore="UnusedResources">An askouezh-mañ n’hall ket bezañ staliet rak n’eo ket bet gwiriet.</string>
+ <!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_not_signed_error">An askouezh-mañ n\'hall ket bezañ staliet rak n\'eo ket bet gwiriet.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was incompatible. %1$s is the add-on name, %2$s is the app name and %3$s is the app version. -->
<string name="mozac_feature_addons_failed_to_install_incompatible_error">%1$s n’hall ket bezañ staliet rak ne glot ket gant %2$s %3$s.</string>
<!-- Text shown when attempting to install a blocklisted add-on. %1$s is the add-on name. -->
@@ -260,10 +268,8 @@
<string name="mozac_feature_addons_updater_dialog_status">Stad:</string>
<!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
<string name="mozac_feature_addons_installed_dialog_title">Ouzhpennet eo bet %1$s da %2$s.</string>
- <!-- Text shown in the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_description" moz:removedIn="124" tools:ignore="UnusedResources">Digeriñ anezhañ el lañser</string>
- <!-- Confirmation button text for the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_okay_button" moz:removedIn="124" tools:ignore="UnusedResources">Mat eo, komprenet am eus</string>
+ <!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
+ <string name="mozac_feature_addons_installed_dialog_description_2">Haezit %1$s adalek lañser %2$s.</string>
<!-- Confirmation button text for the dialog when add-on installation is completed. -->
<string name="mozac_feature_addons_installed_dialog_okay_button_2">Mat eo</string>
<!-- "Learn more" link displayed below an add-on status message. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-cak/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-cak/strings.xml
index 12c845c568..c12647a733 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-cak/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-cak/strings.xml
@@ -87,13 +87,15 @@
<!-- The rating of the add-on. -->
<string name="mozac_feature_addons_rating">Kejqalem</string>
<!-- A link that points to the detail page of the add-on. -->
- <string name="mozac_feature_addons_more_info_link">Ch\'aqa\' chik chi rij re tz\'aqat re\'</string>
+ <string name="mozac_feature_addons_more_info_link" moz:removedIn="126" tools:ignore="UnusedResources">Ch\'aqa\' chik chi rij re tz\'aqat re\'</string>
+ <!-- A link that points to the detail page of the extension. -->
+ <string name="mozac_feature_addons_more_info_link_2">Ch\'aqa\' chik chi rij re k\'amal re\'</string>
<!-- The settings of the add-on. -->
<string name="mozac_feature_addons_settings">Taq nuk\'ulem</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_settings_on">Tzijïl</string>
<!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_settings_off">Chupül</string>
+ <string name="mozac_feature_addons_settings_off" moz:removedIn="125" tools:ignore="UnusedResources">Chupül</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_allow_in_private_browsing">Tiya\' q\'ij chi re pa ichinan okem pa k\'amaya\'l</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
@@ -103,7 +105,7 @@
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_enabled">Tzijon</string>
<!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_disabled">Chupun</string>
+ <string name="mozac_feature_addons_disabled" moz:removedIn="125" tools:ignore="UnusedResources">Chupun</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the installed section. -->
<string name="mozac_feature_addons_installed_section">Xyak</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the recommended section. -->
@@ -155,13 +157,21 @@
<!-- Label for add-ons sub menu item for add-ons manager-->
<string name="mozac_feature_addons_addons_manager">Kinuk\'samajel taq Tz\'aqat</string>
<!-- The title of the "crash" notification in the add-ons manager -->
- <string name="mozac_feature_addons_manager_notification_title_text">Echupun jumej ri taq tz\'aqat</string>
+ <string name="mozac_feature_addons_manager_notification_title_text" moz:removedIn="126" tools:ignore="UnusedResources">Echupun jumej ri taq tz\'aqat</string>
+ <!-- The title of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_title_text">Echupun jumej ri taq k\'amal</string>
<!-- The content of the "crash" notification in the add-ons manager -->
- <string name="mozac_feature_addons_manager_notification_content_text">Jun o ka\'i\' oxi\' taq tz\'aqat xkiq\'ät kisamaj, ri nub\'än chi man jikil ta ri q\'inoj.</string>
+ <string name="mozac_feature_addons_manager_notification_content_text" moz:removedIn="126" tools:ignore="UnusedResources">Jun o ka\'i\' oxi\' taq tz\'aqat xkiq\'ät kisamaj, ri nub\'än chi man jikil ta ri q\'inoj.</string>
+ <!-- The content of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_content_text">Jun o ka\'i\' oxi\' taq k\'amal xkiq\'ät kisamaj, ri nub\'än chi man jikil ta ri q\'inoj.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
- <string name="mozac_feature_addons_manager_notification_restart_button">Ketzij chik ri taq tz\'aqat</string>
+ <string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Ketzij chik ri taq tz\'aqat</string>
+ <!-- Button to re-enable the extensions in the "crash" notification -->
+ <string name="mozac_feature_extensions_manager_notification_restart_button">Ketzij chik k\'amal</string>
<!-- Button in the add-ons manager that opens AMO in a tab -->
- <string name="mozac_feature_addons_find_more_addons_button_text">Kekanöx ch\'aqa\' chik taq tz\'aqat</string>
+ <string name="mozac_feature_addons_find_more_addons_button_text" moz:removedIn="126" tools:ignore="UnusedResources">Kekanöx ch\'aqa\' chik taq tz\'aqat</string>
+ <!-- Button in the extensions manager that opens AMO in a tab -->
+ <string name="mozac_feature_addons_find_more_extensions_button_text">Ke\'ilitäj ch\'aqa\' chik taq k\'amal</string>
<!-- The label of the allow button, this will be shown to the user when an add-on needs new permissions, with the button the user will indicate that they want to accept the new permissions and update the add-on-->
<string name="mozac_feature_addons_updater_notification_allow_button">Tiya\' q\'ij</string>
<!-- The label of the deny button on a notification, this will be shown to the user when an add-on needs new permissions. Indicates the user denies the new permissions and prevents the add-on from be updated-->
@@ -173,13 +183,15 @@
<!-- The content of the notification displayed when an add-on needs a new permission-->
<string name="mozac_feature_addons_updater_notification_content_singular">Najowäx jun k\'ak\'a\' ya\'oj q\'ij</string>
<!-- Name of the "notification channel" used for displaying a notification for updating an add-on. See https://developer.android.com/training/notify-user/channels -->
- <string name="mozac_feature_addons_updater_notification_channel">Kik\'exoj tz\'aqat</string>
+ <string name="mozac_feature_addons_updater_notification_channel" moz:removedIn="126" tools:ignore="UnusedResources">Kik\'exoj tz\'aqat</string>
+ <!-- Name of the "notification channel" used for displaying a notification for updating an extension. See https://developer.android.com/training/notify-user/channels -->
+ <string name="mozac_feature_addons_updater_notification_channel_2">Kik\'exoj k\'amal</string>
<!-- Name of the "notification channel" used for displaying a notification for new supported add-ons. See https://developer.android.com/training/notify-user/channels -->
- <string name="mozac_feature_addons_supported_checker_notification_channel">K\'amonel tojtob\'äl tz\'aqat</string>
+ <string name="mozac_feature_addons_supported_checker_notification_channel" tools:ignore="UnusedResources">K\'amonel tojtob\'äl tz\'aqat</string>
<!-- The tile of the notification, this will be shown to the user when one newly supported add-on is available.-->
- <string name="mozac_feature_addons_supported_checker_notification_title">K\'ak\'a\' tz\'aqat wachel</string>
+ <string name="mozac_feature_addons_supported_checker_notification_title" tools:ignore="UnusedResources">K\'ak\'a\' tz\'aqat wachel</string>
<!-- The tile of the notification, this will be shown to the user when more than one newly supported add-ons are available.-->
- <string name="mozac_feature_addons_supported_checker_notification_title_plural">K\'ak\'a\' taq tz\'aqat wachel</string>
+ <string name="mozac_feature_addons_supported_checker_notification_title_plural" tools:ignore="UnusedResources">K\'ak\'a\' taq tz\'aqat wachel</string>
<!-- The content of the notification, this will be shown to the user when one newly supported add-on is available. %1$s is the add-on name and %2$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_one">Titz\'aqatisäx %1$s pa %2$s</string>
<!-- The content of the notification, this will be shown to the user when two newly supported add-ons are available. %1$s is the first add-on name. %2$s is the second add-on name. %3$s is the app name (in most cases Firefox). -->
@@ -187,13 +199,17 @@
<!-- The content of the notification, this will be shown to the user when more than two newly supported add-ons are available. %1$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_more_than_two">Ketz\'aqatisäx pa %1$s</string>
<!-- This is the caption for not yet supported screen caption -->
- <string name="mozac_feature_addons_not_yet_supported_caption">Nib\'an k\'ak\'a\' chi re ri runa\'ob\'al rutz\'aqat Firefox. Re taq tz\'aqat re\' yekokisaj taq ruchi\' ri man kik\'amon ta ki\' rik\'in ri Firefox 75 &amp; ch\'aqa\' chik e nima\'q.</string>
+ <string name="mozac_feature_addons_not_yet_supported_caption" moz:removedIn="126" tools:ignore="UnusedResources">Nib\'an k\'ak\'a\' chi re ri runa\'ob\'al rutz\'aqat Firefox. Re taq tz\'aqat re\' yekokisaj taq ruchi\' ri man kik\'amon ta ki\' rik\'in ri Firefox 75 &amp; ch\'aqa\' chik e nima\'q.</string>
<!-- This is the caption for not yet supported screen caption -->
<string name="mozac_feature_addons_not_yet_supported_caption2">Wakami niqanük\' tob\'äl kichin nab\'ey cha\'oj taq K\'amal Echilab\'en.</string>
<!-- This is the caption for the add-on installation progress overlay -->
- <string name="mozac_add_on_install_progress_caption">Niqasäx chuqa\' ninik\'öx tz\'aqat…</string>
+ <string name="mozac_add_on_install_progress_caption" moz:removedIn="126" tools:ignore="UnusedResources">Niqasäx chuqa\' ninik\'öx tz\'aqat…</string>
+ <!-- This is the caption for the extension installation progress overlay -->
+ <string name="mozac_extension_install_progress_caption">Niqasäx chuqa\' ninik\'öx k\'amal…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
- <string name="mozac_feature_addons_failed_to_query_add_ons">¡Xsach toq xk\'utüx Tz\'aqat!</string>
+ <string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">¡Xsach toq xk\'utüx Tz\'aqat!</string>
+ <!-- Error shown when something unexpected happened while trying to get the extension list from the server -->
+ <string name="mozac_feature_addons_failed_to_query_extensions">¡Xsach toq xk\'utüx K\'amal!</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
<string name="mozac_feature_addons_failed_to_translate">Man xilitäj ta ri tzalq\'omanïk richin ri %1$s chuqa\' ni xa ta ri %2$s ch\'ab\'äl k\'o</string>
<!-- Text shown after successfully installed an add-on. %1$s is the add-on name. -->
@@ -201,13 +217,21 @@
<!-- Text shown after failed to install an add-on. %1$s is the add-on name. -->
<string name="mozac_feature_addons_failed_to_install">Xsach toq xyak ri %1$s</string>
<!-- Text shown after failing to install an add-on for which we don't have its name. -->
- <string name="mozac_feature_addons_failed_to_install_generic">Xsach toq niyak re tz\'aqat re\'.</string>
+ <string name="mozac_feature_addons_failed_to_install_generic" moz:removedIn="126" tools:ignore="UnusedResources">Xsach toq niyak re tz\'aqat re\'.</string>
+ <!-- Text shown after failing to install an extension for which we don't have its name. -->
+ <string name="mozac_feature_addons_extension_failed_to_install">Xsach toq niyak re k\'amal re\'.</string>
<!-- Text shown when attempting to install an add-on and a network error happened. -->
- <string name="mozac_feature_addons_failed_to_install_network_error">Man xqasäx ta re tz\'aqat re ruma man pa rub\'eyal taq ri rokem.</string>
+ <string name="mozac_feature_addons_failed_to_install_network_error" moz:removedIn="126" tools:ignore="UnusedResources">Man xqasäx ta re tz\'aqat re ruma man pa rub\'eyal taq ri rokem.</string>
+ <!-- Text shown when attempting to install an extension and a network error happened. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_network_error">Man xqasäx ta re k\'amal re ruma man pa rub\'eyal taq ri rokem.</string>
<!-- Text shown when attempting to install an add-on and the downloaded file is corrupted. -->
- <string name="mozac_feature_addons_failed_to_install_corrupt_error">Man xyak ta kan re tz\'aqat xa ke xa man ütz ta.</string>
+ <string name="mozac_feature_addons_failed_to_install_corrupt_error" moz:removedIn="126" tools:ignore="UnusedResources">Man xyak ta kan re tz\'aqat xa ke xa man ütz ta.</string>
+ <!-- Text shown when attempting to install an extension and the downloaded file is corrupted. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_corrupt_error">Man xyak ta kan re k\'amal xa ke xa man ütz ta.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
- <string name="mozac_feature_addons_failed_to_install_not_signed_error">Man xyak ta kan re jun rutz\'aqat re\' ruma chi man nik\'on ta.</string>
+ <string name="mozac_feature_addons_failed_to_install_not_signed_error" moz:removedIn="126" tools:ignore="UnusedResources">Man xyak ta kan re jun rutz\'aqat re\' ruma chi man nik\'on ta.</string>
+ <!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_not_signed_error">Man xyak ta kan re jun k\'amal re\' ruma chi man nik\'on ta.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was incompatible. %1$s is the add-on name, %2$s is the app name and %3$s is the app version. -->
<string name="mozac_feature_addons_failed_to_install_incompatible_error">Man xyak ta ri %1$s ruma man nuk\'äm ta ri\' rik\'in %2$s %3$s.</string>
<!-- Text shown when attempting to install a blocklisted add-on. %1$s is the add-on name. -->
@@ -231,9 +255,13 @@
<!-- Label shown to indicate that the add-on was migrated from a previous version of the app. %1$s is the app name most of the case it will be Firefox. -->
<string name="mozac_feature_addons_migrated_from_a_previous_version_label" tools:ignore="UnusedResources">Re tz\'aqat re\' xk\'am pe pa jun kan ruwäch %1$s</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter. -->
- <string name="mozac_feature_addons_unsupported_caption">1 tz\'aqat</string>
+ <string name="mozac_feature_addons_unsupported_caption" moz:removedIn="126" tools:ignore="UnusedResources">1 tz\'aqat</string>
+ <!-- Text shown in not yet supported add-ons section. -->
+ <string name="mozac_feature_addons_unsupported_caption_2">1 k\'amal</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter - plural. %1$s is the number of unsupported add-ons -->
- <string name="mozac_feature_addons_unsupported_caption_plural">%1$s taq tz\'aqat</string>
+ <string name="mozac_feature_addons_unsupported_caption_plural" moz:removedIn="126" tools:ignore="UnusedResources">%1$s taq tz\'aqat</string>
+ <!-- Text shown in not yet supported add-ons section - plural. %1$s is the number of unsupported extensions. -->
+ <string name="mozac_feature_addons_unsupported_caption_plural_2">%1$s taq k\'amal</string>
<!-- Text link to a sumo page for learning more about unsupported add-ons. -->
<string name="mozac_feature_addons_unsupported_learn_more">Tetamäx ch\'aqa\' chik</string>
<!-- Displayed in the "Status" field for the updater when an add-on has been correctly updated. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-eo/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-eo/strings.xml
index 19c630e4a9..f61b58e7cd 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-eo/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-eo/strings.xml
@@ -87,13 +87,15 @@
<!-- The rating of the add-on. -->
<string name="mozac_feature_addons_rating">Taksado</string>
<!-- A link that points to the detail page of the add-on. -->
- <string name="mozac_feature_addons_more_info_link">Pli da informo pri tiu ĉi aldonaĵo</string>
+ <string name="mozac_feature_addons_more_info_link" moz:removedIn="126" tools:ignore="UnusedResources">Pli da informo pri tiu ĉi aldonaĵo</string>
+ <!-- A link that points to the detail page of the extension. -->
+ <string name="mozac_feature_addons_more_info_link_2">Pli da informo pri tiu ĉi etendaĵo</string>
<!-- The settings of the add-on. -->
<string name="mozac_feature_addons_settings">Agordoj</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_settings_on">Ŝaltita</string>
<!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_settings_off">Malŝaltita</string>
+ <string name="mozac_feature_addons_settings_off" moz:removedIn="125" tools:ignore="UnusedResources">Malŝaltita</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_allow_in_private_browsing">Permesi en privata retumo</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
@@ -103,7 +105,7 @@
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_enabled">Aktiva</string>
<!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_disabled">Malaktiva</string>
+ <string name="mozac_feature_addons_disabled" moz:removedIn="125" tools:ignore="UnusedResources">Malaktiva</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the installed section. -->
<string name="mozac_feature_addons_installed_section">Instalita</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the recommended section. -->
@@ -155,13 +157,21 @@
<!-- Label for add-ons sub menu item for add-ons manager-->
<string name="mozac_feature_addons_addons_manager">Administrilo de aldonaĵoj</string>
<!-- The title of the "crash" notification in the add-ons manager -->
- <string name="mozac_feature_addons_manager_notification_title_text">La aldonaĵoj estas provizore malaktivigitaj</string>
+ <string name="mozac_feature_addons_manager_notification_title_text" moz:removedIn="126" tools:ignore="UnusedResources">La aldonaĵoj estas provizore malaktivigitaj</string>
+ <!-- The title of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_title_text">La etendaĵoj estas provizore malaktivigitaj</string>
<!-- The content of the "crash" notification in the add-ons manager -->
- <string name="mozac_feature_addons_manager_notification_content_text">Unu aŭ pli da aldonaĵoj ĉesis funkcii, kaj tio igas vian sistemon nestabila.</string>
+ <string name="mozac_feature_addons_manager_notification_content_text" moz:removedIn="126" tools:ignore="UnusedResources">Unu aŭ pli da aldonaĵoj ĉesis funkcii, kaj tio igas vian sistemon nestabila.</string>
+ <!-- The content of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_content_text">Unu aŭ pli da etendaĵoj ĉesis funkcii, kaj tio igas vian sistemon nestabila.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
- <string name="mozac_feature_addons_manager_notification_restart_button">Restartigi aldonaĵojn</string>
+ <string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Restartigi aldonaĵojn</string>
+ <!-- Button to re-enable the extensions in the "crash" notification -->
+ <string name="mozac_feature_extensions_manager_notification_restart_button">Restartigi etendaĵojn</string>
<!-- Button in the add-ons manager that opens AMO in a tab -->
- <string name="mozac_feature_addons_find_more_addons_button_text">Serĉi pli da aldonaĵoj</string>
+ <string name="mozac_feature_addons_find_more_addons_button_text" moz:removedIn="126" tools:ignore="UnusedResources">Serĉi pli da aldonaĵoj</string>
+ <!-- Button in the extensions manager that opens AMO in a tab -->
+ <string name="mozac_feature_addons_find_more_extensions_button_text">Serĉi pli da etendaĵoj</string>
<!-- The label of the allow button, this will be shown to the user when an add-on needs new permissions, with the button the user will indicate that they want to accept the new permissions and update the add-on-->
<string name="mozac_feature_addons_updater_notification_allow_button">Permesi</string>
<!-- The label of the deny button on a notification, this will be shown to the user when an add-on needs new permissions. Indicates the user denies the new permissions and prevents the add-on from be updated-->
@@ -173,13 +183,15 @@
<!-- The content of the notification displayed when an add-on needs a new permission-->
<string name="mozac_feature_addons_updater_notification_content_singular">Nova permeso postulata</string>
<!-- Name of the "notification channel" used for displaying a notification for updating an add-on. See https://developer.android.com/training/notify-user/channels -->
- <string name="mozac_feature_addons_updater_notification_channel">Ĝisdatigoj de aldonaĵoj</string>
+ <string name="mozac_feature_addons_updater_notification_channel" moz:removedIn="126" tools:ignore="UnusedResources">Ĝisdatigoj de aldonaĵoj</string>
+ <!-- Name of the "notification channel" used for displaying a notification for updating an extension. See https://developer.android.com/training/notify-user/channels -->
+ <string name="mozac_feature_addons_updater_notification_channel_2">Ĝisdatigoj por etendaĵoj</string>
<!-- Name of the "notification channel" used for displaying a notification for new supported add-ons. See https://developer.android.com/training/notify-user/channels -->
- <string name="mozac_feature_addons_supported_checker_notification_channel">Kontrolo de subtenataj aldonaĵoj</string>
+ <string name="mozac_feature_addons_supported_checker_notification_channel" tools:ignore="UnusedResources">Kontrolo de subtenataj aldonaĵoj</string>
<!-- The tile of the notification, this will be shown to the user when one newly supported add-on is available.-->
- <string name="mozac_feature_addons_supported_checker_notification_title">Nova aldonaĵo disponebla</string>
+ <string name="mozac_feature_addons_supported_checker_notification_title" tools:ignore="UnusedResources">Nova aldonaĵo disponebla</string>
<!-- The tile of the notification, this will be shown to the user when more than one newly supported add-ons are available.-->
- <string name="mozac_feature_addons_supported_checker_notification_title_plural">Novaj aldonaĵoj disponeblaj</string>
+ <string name="mozac_feature_addons_supported_checker_notification_title_plural" tools:ignore="UnusedResources">Novaj aldonaĵoj disponeblaj</string>
<!-- The content of the notification, this will be shown to the user when one newly supported add-on is available. %1$s is the add-on name and %2$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_one">Aldoni %1$s al %2$s</string>
<!-- The content of the notification, this will be shown to the user when two newly supported add-ons are available. %1$s is the first add-on name. %2$s is the second add-on name. %3$s is the app name (in most cases Firefox). -->
@@ -187,13 +199,17 @@
<!-- The content of the notification, this will be shown to the user when more than two newly supported add-ons are available. %1$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_more_than_two">Aldoni ilin al %1$s</string>
<!-- This is the caption for not yet supported screen caption -->
- <string name="mozac_feature_addons_not_yet_supported_caption">La teknologio de aldonaĵoj de Firefox moderniĝas. Tiuj ĉi aldonaĵoj uzas teknologiojn kiuj ne kongruas kun Firefox 75 kaj ĝiaj postaj versioj.</string>
+ <string name="mozac_feature_addons_not_yet_supported_caption" moz:removedIn="126" tools:ignore="UnusedResources">La teknologio de aldonaĵoj de Firefox moderniĝas. Tiuj ĉi aldonaĵoj uzas teknologiojn kiuj ne kongruas kun Firefox 75 kaj ĝiaj postaj versioj.</string>
<!-- This is the caption for not yet supported screen caption -->
<string name="mozac_feature_addons_not_yet_supported_caption2">Ni nun kreas la unuan liston kun elektitaj rekomenditaj etendaĵoj.</string>
<!-- This is the caption for the add-on installation progress overlay -->
- <string name="mozac_add_on_install_progress_caption">Aldonaĵo elŝutata kaj kontrolata…</string>
+ <string name="mozac_add_on_install_progress_caption" moz:removedIn="126" tools:ignore="UnusedResources">Aldonaĵo elŝutata kaj kontrolata…</string>
+ <!-- This is the caption for the extension installation progress overlay -->
+ <string name="mozac_extension_install_progress_caption">Etendaĵo elŝutata kaj kontrolata…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
- <string name="mozac_feature_addons_failed_to_query_add_ons">Ne eblis akiri la liston de aldonaĵoj!</string>
+ <string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">Ne eblis akiri la liston de aldonaĵoj!</string>
+ <!-- Error shown when something unexpected happened while trying to get the extension list from the server -->
+ <string name="mozac_feature_addons_failed_to_query_extensions">Ne eblis akiri la liston de etendaĵoj!</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
<string name="mozac_feature_addons_failed_to_translate">Traduko netrovita, nek por la lokaĵaro %1$s nek por la norma lingvo %2$s</string>
<!-- Text shown after successfully installed an add-on. %1$s is the add-on name. -->
@@ -201,13 +217,21 @@
<!-- Text shown after failed to install an add-on. %1$s is the add-on name. -->
<string name="mozac_feature_addons_failed_to_install">Malsukcesa instalo de %1$s</string>
<!-- Text shown after failing to install an add-on for which we don't have its name. -->
- <string name="mozac_feature_addons_failed_to_install_generic">Malsukcesa instalo de tiu ĉi aldonaĵo.</string>
+ <string name="mozac_feature_addons_failed_to_install_generic" moz:removedIn="126" tools:ignore="UnusedResources">Malsukcesa instalo de tiu ĉi aldonaĵo.</string>
+ <!-- Text shown after failing to install an extension for which we don't have its name. -->
+ <string name="mozac_feature_addons_extension_failed_to_install">Malsukcesa instalo de tiu ĉi etendaĵo.</string>
<!-- Text shown when attempting to install an add-on and a network error happened. -->
- <string name="mozac_feature_addons_failed_to_install_network_error">La aldonaĵo ne povis esti elŝutita pro eraro en la konekto.</string>
+ <string name="mozac_feature_addons_failed_to_install_network_error" moz:removedIn="126" tools:ignore="UnusedResources">La aldonaĵo ne povis esti elŝutita pro eraro en la konekto.</string>
+ <!-- Text shown when attempting to install an extension and a network error happened. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_network_error">La etendaĵo ne povis esti elŝutita pro eraro en la konekto.</string>
<!-- Text shown when attempting to install an add-on and the downloaded file is corrupted. -->
- <string name="mozac_feature_addons_failed_to_install_corrupt_error">Tiu ĉi aldonaĵo ne povis esti instalita ĉar ĝi aspektas difektite.</string>
+ <string name="mozac_feature_addons_failed_to_install_corrupt_error" moz:removedIn="126" tools:ignore="UnusedResources">Tiu ĉi aldonaĵo ne povis esti instalita ĉar ĝi aspektas difektite.</string>
+ <!-- Text shown when attempting to install an extension and the downloaded file is corrupted. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_corrupt_error">Tiu ĉi etendaĵo ne povis esti instalita ĉar ĝi aspektas difektite.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
- <string name="mozac_feature_addons_failed_to_install_not_signed_error">Tiu ĉi aldonaĵo ne povis esti instalita ĉar ĝi ne estas kontrolita.</string>
+ <string name="mozac_feature_addons_failed_to_install_not_signed_error" moz:removedIn="126" tools:ignore="UnusedResources">Tiu ĉi aldonaĵo ne povis esti instalita ĉar ĝi ne estas kontrolita.</string>
+ <!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_not_signed_error">Tiu ĉi etendaĵo ne povis esti instalita ĉar ĝi ne estis kontrolita.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was incompatible. %1$s is the add-on name, %2$s is the app name and %3$s is the app version. -->
<string name="mozac_feature_addons_failed_to_install_incompatible_error">%1$s ne povi esti instalita ĉar ĝi ne kongruas kun %2$s %3$s.</string>
<!-- Text shown when attempting to install a blocklisted add-on. %1$s is the add-on name. -->
@@ -231,9 +255,13 @@
<!-- Label shown to indicate that the add-on was migrated from a previous version of the app. %1$s is the app name most of the case it will be Firefox. -->
<string name="mozac_feature_addons_migrated_from_a_previous_version_label" tools:ignore="UnusedResources">Tiu ĉi aldonaĵo migris el antaŭa versio de %1$s</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter. -->
- <string name="mozac_feature_addons_unsupported_caption">1 aldonaĵo</string>
+ <string name="mozac_feature_addons_unsupported_caption" moz:removedIn="126" tools:ignore="UnusedResources">1 aldonaĵo</string>
+ <!-- Text shown in not yet supported add-ons section. -->
+ <string name="mozac_feature_addons_unsupported_caption_2">1 etendaĵo</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter - plural. %1$s is the number of unsupported add-ons -->
- <string name="mozac_feature_addons_unsupported_caption_plural">%1$s aldonaĵoj</string>
+ <string name="mozac_feature_addons_unsupported_caption_plural" moz:removedIn="126" tools:ignore="UnusedResources">%1$s aldonaĵoj</string>
+ <!-- Text shown in not yet supported add-ons section - plural. %1$s is the number of unsupported extensions. -->
+ <string name="mozac_feature_addons_unsupported_caption_plural_2">%1$s etendaĵoj</string>
<!-- Text link to a sumo page for learning more about unsupported add-ons. -->
<string name="mozac_feature_addons_unsupported_learn_more">Pli da informo</string>
<!-- Displayed in the "Status" field for the updater when an add-on has been correctly updated. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-eu/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-eu/strings.xml
index 44fdf12323..f7af45b7ea 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-eu/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-eu/strings.xml
@@ -87,13 +87,15 @@
<!-- The rating of the add-on. -->
<string name="mozac_feature_addons_rating">Puntuazioa</string>
<!-- A link that points to the detail page of the add-on. -->
- <string name="mozac_feature_addons_more_info_link">Gehiago gehigarri honi buruz</string>
+ <string name="mozac_feature_addons_more_info_link" moz:removedIn="126" tools:ignore="UnusedResources">Gehiago gehigarri honi buruz</string>
+ <!-- A link that points to the detail page of the extension. -->
+ <string name="mozac_feature_addons_more_info_link_2">Gehiago hedapen honi buruz</string>
<!-- The settings of the add-on. -->
<string name="mozac_feature_addons_settings">Ezarpenak</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_settings_on">Aktibatuta</string>
<!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_settings_off">Desaktibatuta</string>
+ <string name="mozac_feature_addons_settings_off" moz:removedIn="125" tools:ignore="UnusedResources">Desaktibatuta</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_allow_in_private_browsing">Baimendu nabigatze pribatuan</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
@@ -103,7 +105,7 @@
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_enabled">Gaituta</string>
<!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_disabled">Desgaituta</string>
+ <string name="mozac_feature_addons_disabled" moz:removedIn="125" tools:ignore="UnusedResources">Desgaituta</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the installed section. -->
<string name="mozac_feature_addons_installed_section">Instalatuta</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the recommended section. -->
@@ -155,13 +157,21 @@
<!-- Label for add-ons sub menu item for add-ons manager-->
<string name="mozac_feature_addons_addons_manager">Gehigarrien kudeatzailea</string>
<!-- The title of the "crash" notification in the add-ons manager -->
- <string name="mozac_feature_addons_manager_notification_title_text">Gehigarriak aldi baterako desgaitu dira</string>
+ <string name="mozac_feature_addons_manager_notification_title_text" moz:removedIn="126" tools:ignore="UnusedResources">Gehigarriak aldi baterako desgaitu dira</string>
+ <!-- The title of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_title_text">Hedapenak aldi baterako desgaitu dira</string>
<!-- The content of the "crash" notification in the add-ons manager -->
- <string name="mozac_feature_addons_manager_notification_content_text">Gehigarri bat edo gehiago matxuratu egin dira, zure sistema desegonkortuz.</string>
+ <string name="mozac_feature_addons_manager_notification_content_text" moz:removedIn="126" tools:ignore="UnusedResources">Gehigarri bat edo gehiago matxuratu egin dira, zure sistema desegonkortuz.</string>
+ <!-- The content of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_content_text">Hedapen bat edo gehiago matxuratu egin dira, zure sistema desegonkortuz.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
- <string name="mozac_feature_addons_manager_notification_restart_button">Berrabiarazi gehigarriak</string>
+ <string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Berrabiarazi gehigarriak</string>
+ <!-- Button to re-enable the extensions in the "crash" notification -->
+ <string name="mozac_feature_extensions_manager_notification_restart_button">Berrabiarazi hedapenak</string>
<!-- Button in the add-ons manager that opens AMO in a tab -->
- <string name="mozac_feature_addons_find_more_addons_button_text">Bilatu gehigarri gehiago</string>
+ <string name="mozac_feature_addons_find_more_addons_button_text" moz:removedIn="126" tools:ignore="UnusedResources">Bilatu gehigarri gehiago</string>
+ <!-- Button in the extensions manager that opens AMO in a tab -->
+ <string name="mozac_feature_addons_find_more_extensions_button_text">Bilatu hedapen gehiago</string>
<!-- The label of the allow button, this will be shown to the user when an add-on needs new permissions, with the button the user will indicate that they want to accept the new permissions and update the add-on-->
<string name="mozac_feature_addons_updater_notification_allow_button">Baimendu</string>
<!-- The label of the deny button on a notification, this will be shown to the user when an add-on needs new permissions. Indicates the user denies the new permissions and prevents the add-on from be updated-->
@@ -173,13 +183,15 @@
<!-- The content of the notification displayed when an add-on needs a new permission-->
<string name="mozac_feature_addons_updater_notification_content_singular">Baimen berri bat behar da</string>
<!-- Name of the "notification channel" used for displaying a notification for updating an add-on. See https://developer.android.com/training/notify-user/channels -->
- <string name="mozac_feature_addons_updater_notification_channel">Gehigarrien eguneraketak</string>
+ <string name="mozac_feature_addons_updater_notification_channel" moz:removedIn="126" tools:ignore="UnusedResources">Gehigarrien eguneraketak</string>
+ <!-- Name of the "notification channel" used for displaying a notification for updating an extension. See https://developer.android.com/training/notify-user/channels -->
+ <string name="mozac_feature_addons_updater_notification_channel_2">Hedapenen eguneraketak</string>
<!-- Name of the "notification channel" used for displaying a notification for new supported add-ons. See https://developer.android.com/training/notify-user/channels -->
- <string name="mozac_feature_addons_supported_checker_notification_channel">Onartutako gehigarrien egiaztatzailea</string>
+ <string name="mozac_feature_addons_supported_checker_notification_channel" tools:ignore="UnusedResources">Onartutako gehigarrien egiaztatzailea</string>
<!-- The tile of the notification, this will be shown to the user when one newly supported add-on is available.-->
- <string name="mozac_feature_addons_supported_checker_notification_title">Gehigarri berria erabilgarri</string>
+ <string name="mozac_feature_addons_supported_checker_notification_title" tools:ignore="UnusedResources">Gehigarri berria erabilgarri</string>
<!-- The tile of the notification, this will be shown to the user when more than one newly supported add-ons are available.-->
- <string name="mozac_feature_addons_supported_checker_notification_title_plural">Gehigarri berriak erabilgarri</string>
+ <string name="mozac_feature_addons_supported_checker_notification_title_plural" tools:ignore="UnusedResources">Gehigarri berriak erabilgarri</string>
<!-- The content of the notification, this will be shown to the user when one newly supported add-on is available. %1$s is the add-on name and %2$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_one">Gehitu %1$s %2$s(e)ra</string>
<!-- The content of the notification, this will be shown to the user when two newly supported add-ons are available. %1$s is the first add-on name. %2$s is the second add-on name. %3$s is the app name (in most cases Firefox). -->
@@ -187,13 +199,17 @@
<!-- The content of the notification, this will be shown to the user when more than two newly supported add-ons are available. %1$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_more_than_two">Gehitu hauek %1$s(e)ra</string>
<!-- This is the caption for not yet supported screen caption -->
- <string name="mozac_feature_addons_not_yet_supported_caption">Firefoxen gehigarrien teknologia modernizatzen ari da. Ondorengo gehigarriek Firefox 75 eta berriagoekin bateragarriak ez diren framework-ak erabiltzen dituzte.</string>
+ <string name="mozac_feature_addons_not_yet_supported_caption" moz:removedIn="126" tools:ignore="UnusedResources">Firefoxen gehigarrien teknologia modernizatzen ari da. Ondorengo gehigarriek Firefox 75 eta berriagoekin bateragarriak ez diren framework-ak erabiltzen dituzte.</string>
<!-- This is the caption for not yet supported screen caption -->
<string name="mozac_feature_addons_not_yet_supported_caption2">Gomendatutako hedapenen hasierako hautapena emateko euskarria eraikitzen ari gara une honetan.</string>
<!-- This is the caption for the add-on installation progress overlay -->
- <string name="mozac_add_on_install_progress_caption">Gehigarria deskargatzen eta egiaztatzen…</string>
+ <string name="mozac_add_on_install_progress_caption" moz:removedIn="126" tools:ignore="UnusedResources">Gehigarria deskargatzen eta egiaztatzen…</string>
+ <!-- This is the caption for the extension installation progress overlay -->
+ <string name="mozac_extension_install_progress_caption">Hedapena deskargatzen eta egiaztatzen…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
- <string name="mozac_feature_addons_failed_to_query_add_ons">Ezin izan dira gehigarriak kontsultatu!</string>
+ <string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">Ezin izan dira gehigarriak kontsultatu!</string>
+ <!-- Error shown when something unexpected happened while trying to get the extension list from the server -->
+ <string name="mozac_feature_addons_failed_to_query_extensions">Ezin izan dira hedapenak kontsultatu!</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
<string name="mozac_feature_addons_failed_to_translate">Ez da itzulpenik aurkitu, ez %1$s hizkuntzarentzat ez eta %2$s hizkuntza lehenetsiarentzat</string>
<!-- Text shown after successfully installed an add-on. %1$s is the add-on name. -->
@@ -201,13 +217,21 @@
<!-- Text shown after failed to install an add-on. %1$s is the add-on name. -->
<string name="mozac_feature_addons_failed_to_install">Ezin izan da %1$s instalatu</string>
<!-- Text shown after failing to install an add-on for which we don't have its name. -->
- <string name="mozac_feature_addons_failed_to_install_generic">Ezin izan da gehigarri hau instalatu.</string>
+ <string name="mozac_feature_addons_failed_to_install_generic" moz:removedIn="126" tools:ignore="UnusedResources">Ezin izan da gehigarri hau instalatu.</string>
+ <!-- Text shown after failing to install an extension for which we don't have its name. -->
+ <string name="mozac_feature_addons_extension_failed_to_install">Ezin izan da hedapen hau instalatu.</string>
<!-- Text shown when attempting to install an add-on and a network error happened. -->
- <string name="mozac_feature_addons_failed_to_install_network_error">Ezin izan da gehigarri hau deskargatu konexio-akats bat dela-eta.</string>
+ <string name="mozac_feature_addons_failed_to_install_network_error" moz:removedIn="126" tools:ignore="UnusedResources">Ezin izan da gehigarri hau deskargatu konexio-akats bat dela-eta.</string>
+ <!-- Text shown when attempting to install an extension and a network error happened. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_network_error">Ezin izan da hedapen hau deskargatu konexio-akats bat dela-eta.</string>
<!-- Text shown when attempting to install an add-on and the downloaded file is corrupted. -->
- <string name="mozac_feature_addons_failed_to_install_corrupt_error">Ezin izan da gehigarri hau instalatu hondatuta dagoela dirudielako.</string>
+ <string name="mozac_feature_addons_failed_to_install_corrupt_error" moz:removedIn="126" tools:ignore="UnusedResources">Ezin izan da gehigarri hau instalatu hondatuta dagoela dirudielako.</string>
+ <!-- Text shown when attempting to install an extension and the downloaded file is corrupted. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_corrupt_error">Ezin izan da hedapen hau instalatu hondatuta dagoela dirudielako.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
- <string name="mozac_feature_addons_failed_to_install_not_signed_error">Ezin izan da gehigarri hau instalatu egiaztatu gabea delako.</string>
+ <string name="mozac_feature_addons_failed_to_install_not_signed_error" moz:removedIn="126" tools:ignore="UnusedResources">Ezin izan da gehigarri hau instalatu egiaztatu gabea delako.</string>
+ <!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_not_signed_error">Ezin izan da hedapen hau instalatu egiaztatu gabea delako.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was incompatible. %1$s is the add-on name, %2$s is the app name and %3$s is the app version. -->
<string name="mozac_feature_addons_failed_to_install_incompatible_error">Ezin da %1$s instalatu ez delako %2$s %3$s bertsioarekin bateragarria.</string>
<!-- Text shown when attempting to install a blocklisted add-on. %1$s is the add-on name. -->
@@ -231,9 +255,13 @@
<!-- Label shown to indicate that the add-on was migrated from a previous version of the app. %1$s is the app name most of the case it will be Firefox. -->
<string name="mozac_feature_addons_migrated_from_a_previous_version_label" tools:ignore="UnusedResources">Gehigarri hau %1$s(r)en aurreko bertsio batetik migratu da</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter. -->
- <string name="mozac_feature_addons_unsupported_caption">Gehigarri 1</string>
+ <string name="mozac_feature_addons_unsupported_caption" moz:removedIn="126" tools:ignore="UnusedResources">Gehigarri 1</string>
+ <!-- Text shown in not yet supported add-ons section. -->
+ <string name="mozac_feature_addons_unsupported_caption_2">Hedapen bat</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter - plural. %1$s is the number of unsupported add-ons -->
- <string name="mozac_feature_addons_unsupported_caption_plural">%1$s gehigarri</string>
+ <string name="mozac_feature_addons_unsupported_caption_plural" moz:removedIn="126" tools:ignore="UnusedResources">%1$s gehigarri</string>
+ <!-- Text shown in not yet supported add-ons section - plural. %1$s is the number of unsupported extensions. -->
+ <string name="mozac_feature_addons_unsupported_caption_plural_2">%1$s hedapen</string>
<!-- Text link to a sumo page for learning more about unsupported add-ons. -->
<string name="mozac_feature_addons_unsupported_learn_more">Argibide gehiago</string>
<!-- Displayed in the "Status" field for the updater when an add-on has been correctly updated. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-it/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-it/strings.xml
index 2c0f38c37d..e6e37d0846 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-it/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-it/strings.xml
@@ -76,8 +76,6 @@
<string name="mozac_feature_addons_version">Versione</string>
<!-- The author of an add-on. -->
<string name="mozac_feature_addons_author">Autore</string>
- <!-- The authors of an add-on. -->
- <string name="mozac_feature_addons_authors" moz:removedIn="123" tools:ignore="UnusedResources">Autori</string>
<!-- The last date that the add-on was updated. -->
<string name="mozac_feature_addons_last_updated">Ultimo aggiornamento</string>
<!-- The developer website (Homepage) of the add-on. -->
@@ -94,8 +92,6 @@
<string name="mozac_feature_addons_settings">Impostazioni</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_settings_on">Attiva</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_settings_off" moz:removedIn="125" tools:ignore="UnusedResources">Disattivata</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_allow_in_private_browsing">Consenti in navigazione anonima</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
@@ -103,13 +99,11 @@
<!-- This is displayed when the add-on is not allowed to run in private browsing. -->
<string name="mozac_feature_addons_not_allowed_in_private_browsing">Disattivata in finestre anonime</string>
<!-- Indicates the add-on is enabled. -->
- <string name="mozac_feature_addons_enabled">Attivi</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_disabled" moz:removedIn="125" tools:ignore="UnusedResources">Disattivato</string>
+ <string name="mozac_feature_addons_enabled">Attive</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the installed section. -->
- <string name="mozac_feature_addons_installed_section">Installata</string>
+ <string name="mozac_feature_addons_installed_section">Installate</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the recommended section. -->
- <string name="mozac_feature_addons_recommended_section">Consigliati</string>
+ <string name="mozac_feature_addons_recommended_section">Consigliate</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the not yet supported section. -->
<string name="mozac_feature_addons_unsupported_section">Non ancora supportato</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the not yet available section. -->
@@ -140,16 +134,12 @@
<string name="mozac_feature_addons_permissions_dialog_deny">Nega</string>
<!-- This is a button to cancel the add-on installation . -->
<string name="mozac_feature_addons_permissions_dialog_cancel">Annulla</string>
- <!-- Accessibility content description to install add-on button. -->
- <string name="mozac_feature_addons_install_addon_content_description" tools:ignore="UnusedResources" moz:removedIn="124">Installa componente aggiuntivo</string>
<!-- Accessibility content description to install add-on button. %1$s is the add-on name. -->
<string name="mozac_feature_addons_install_addon_content_description_2">Installa %1$s</string>
<!-- This is the label of a button to cancel an ongoing add-on installation. -->
<string name="mozac_feature_addons_install_addon_dialog_cancel">Annulla</string>
<!-- Indicates how many users have rated an add-on. %1$s will be replaced with number of reviews -->
<string name="mozac_feature_addons_user_rating_count_2">Recensioni: %1$s</string>
- <!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars and / separator and 5 the maximum number of stars e.g (2/5, 4.5/5 or 5/5) . -->
- <string name="mozac_feature_addons_rating_content_description" moz:removedIn="124" tools:ignore="UnusedResources">%1$.02f/5</string>
<!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars. -->
<string name="mozac_feature_addons_rating_content_description_2">Valutazione: %1$.02f su 5</string>
<!-- This is the title of page where all the add-ons are listed-->
@@ -278,13 +268,9 @@
<string name="mozac_feature_addons_updater_dialog_status">Stato:</string>
<!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
<string name="mozac_feature_addons_installed_dialog_title">%1$s è stato aggiunto a %2$s</string>
- <!-- Text shown in the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_description" moz:removedIn="124" tools:ignore="UnusedResources">Apri nel menu</string>
<!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
<string name="mozac_feature_addons_installed_dialog_description_2">Accedi a %1$s dal menu di %2$s.</string>
<!-- Confirmation button text for the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_okay_button" moz:removedIn="124" tools:ignore="UnusedResources">OK</string>
- <!-- Confirmation button text for the dialog when add-on installation is completed. -->
<string name="mozac_feature_addons_installed_dialog_okay_button_2">OK</string>
<!-- "Learn more" link displayed below an add-on status message. -->
<string name="mozac_feature_addons_status_learn_more">Ulteriori informazioni</string>
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-kab/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-kab/strings.xml
index d154ecb99c..20100e7ce9 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-kab/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-kab/strings.xml
@@ -76,8 +76,6 @@
<string name="mozac_feature_addons_version">Lqem</string>
<!-- The author of an add-on. -->
<string name="mozac_feature_addons_author">Ameskar</string>
- <!-- The authors of an add-on. -->
- <string name="mozac_feature_addons_authors" moz:removedIn="123" tools:ignore="UnusedResources">Imeskaren</string>
<!-- The last date that the add-on was updated. -->
<string name="mozac_feature_addons_last_updated">Aleqqem aneggaru</string>
<!-- The developer website (Homepage) of the add-on. -->
@@ -88,20 +86,20 @@
<string name="mozac_feature_addons_rating">Tizmilin</string>
<!-- A link that points to the detail page of the add-on. -->
<string name="mozac_feature_addons_more_info_link" moz:removedIn="126" tools:ignore="UnusedResources">Ugar γef uzegrir-agi</string>
+ <!-- A link that points to the detail page of the extension. -->
+ <string name="mozac_feature_addons_more_info_link_2">Ugar ɣef usiɣzef-a</string>
<!-- The settings of the add-on. -->
<string name="mozac_feature_addons_settings">Iɣewwaṛen</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_settings_on">Yermed</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_settings_off" moz:removedIn="125" tools:ignore="UnusedResources">Yensa</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_allow_in_private_browsing">Sireg di tunigin tusligt</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_run_in_private_browsing">Selkem di tunigin tusligt</string>
+ <!-- This is displayed when the add-on is not allowed to run in private browsing. -->
+ <string name="mozac_feature_addons_not_allowed_in_private_browsing">Ur yettusireg ara deg yisfuyla usligen</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_enabled">Irmed</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_disabled" moz:removedIn="125" tools:ignore="UnusedResources">Yensa</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the installed section. -->
<string name="mozac_feature_addons_installed_section">Ibded</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the recommended section. -->
@@ -136,24 +134,24 @@
<string name="mozac_feature_addons_permissions_dialog_deny">Gdel</string>
<!-- This is a button to cancel the add-on installation . -->
<string name="mozac_feature_addons_permissions_dialog_cancel">Sefsex</string>
- <!-- Accessibility content description to install add-on button. -->
- <string name="mozac_feature_addons_install_addon_content_description" tools:ignore="UnusedResources" moz:removedIn="124">Asebded n uzegrir</string>
<!-- Accessibility content description to install add-on button. %1$s is the add-on name. -->
<string name="mozac_feature_addons_install_addon_content_description_2">Sebded %1$s</string>
<!-- This is the label of a button to cancel an ongoing add-on installation. -->
<string name="mozac_feature_addons_install_addon_dialog_cancel">Sefsex</string>
<!-- Indicates how many users have rated an add-on. %1$s will be replaced with number of reviews -->
<string name="mozac_feature_addons_user_rating_count_2">Cegger: %1$s</string>
- <!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars and / separator and 5 the maximum number of stars e.g (2/5, 4.5/5 or 5/5) . -->
- <string name="mozac_feature_addons_rating_content_description" moz:removedIn="124" tools:ignore="UnusedResources">%1$.02f/55</string>
<!-- This is the title of page where all the add-ons are listed-->
<string name="mozac_feature_addons_addons">Izegrar</string>
<!-- Label for add-ons sub menu item for add-ons manager-->
<string name="mozac_feature_addons_addons_manager">Amsefrak n yizegrar</string>
<!-- The title of the "crash" notification in the add-ons manager -->
<string name="mozac_feature_addons_manager_notification_title_text" moz:removedIn="126" tools:ignore="UnusedResources">Azegrir yensa i kra n wakud</string>
+ <!-- The title of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_title_text">Isiɣzaf nsan i kra n wakud</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
<string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Ales asenker n yizegrar</string>
+ <!-- Button to re-enable the extensions in the "crash" notification -->
+ <string name="mozac_feature_extensions_manager_notification_restart_button">Ales asenker n yisiɣzaf</string>
<!-- Button in the add-ons manager that opens AMO in a tab -->
<string name="mozac_feature_addons_find_more_addons_button_text" moz:removedIn="126" tools:ignore="UnusedResources">Aff-d ugar n izegrar</string>
<!-- Button in the extensions manager that opens AMO in a tab -->
@@ -170,6 +168,8 @@
<string name="mozac_feature_addons_updater_notification_content_singular">Tasiregt tamaynut tlaq</string>
<!-- Name of the "notification channel" used for displaying a notification for updating an add-on. See https://developer.android.com/training/notify-user/channels -->
<string name="mozac_feature_addons_updater_notification_channel" moz:removedIn="126" tools:ignore="UnusedResources">Ileqman n uzegrir</string>
+ <!-- Name of the "notification channel" used for displaying a notification for updating an extension. See https://developer.android.com/training/notify-user/channels -->
+ <string name="mozac_feature_addons_updater_notification_channel_2">Ileqman n yisiɣzaf</string>
<!-- Name of the "notification channel" used for displaying a notification for new supported add-ons. See https://developer.android.com/training/notify-user/channels -->
<string name="mozac_feature_addons_supported_checker_notification_channel" tools:ignore="UnusedResources">Amsenqed n izegrar imṣaḍan</string>
<!-- The tile of the notification, this will be shown to the user when one newly supported add-on is available.-->
@@ -188,6 +188,8 @@
<string name="mozac_feature_addons_not_yet_supported_caption2">Aql-aɣ nbennu Tallelt i taggayt tamezwarut akked isiɣzaf ihullen.</string>
<!-- This is the caption for the add-on installation progress overlay -->
<string name="mozac_add_on_install_progress_caption" moz:removedIn="126" tools:ignore="UnusedResources">Azdam akked usenqed n uzegrir…</string>
+ <!-- This is the caption for the extension installation progress overlay -->
+ <string name="mozac_extension_install_progress_caption">Asader d usenqed n usiɣzef…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
<string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">Tuttra n izegrar ur teddi ara!</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
@@ -250,10 +252,8 @@
<string name="mozac_feature_addons_updater_dialog_status">Addaden:</string>
<!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
<string name="mozac_feature_addons_installed_dialog_title">%1$s yettwarna ɣer %2$s</string>
- <!-- Text shown in the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_description" moz:removedIn="124" tools:ignore="UnusedResources">Ldi-t deg wumuɣ</string>
- <!-- Confirmation button text for the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_okay_button" moz:removedIn="124" tools:ignore="UnusedResources">Ih, awi-t-id</string>
+ <!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
+ <string name="mozac_feature_addons_installed_dialog_description_2">Kcem ɣer %1$s seg wumuɣ %2$s.</string>
<!-- Confirmation button text for the dialog when add-on installation is completed. -->
<string name="mozac_feature_addons_installed_dialog_okay_button_2">IH</string>
<!-- "Learn more" link displayed below an add-on status message. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-ko/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-ko/strings.xml
index 60f62641ed..ce90feb55f 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-ko/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-ko/strings.xml
@@ -65,7 +65,7 @@
<!-- Description for proxy permission. -->
<string name="mozac_feature_addons_permissions_proxy_description">브라우저 프록시 설정 제어</string>
<!-- Description for sessions permission. -->
- <string name="mozac_feature_addons_permissions_sessions_description">최근에 닫힌 탭에 접근</string>
+ <string name="mozac_feature_addons_permissions_sessions_description">최근에 닫은 탭에 접근</string>
<!-- Description for tab_hide permission. -->
<string name="mozac_feature_addons_permissions_tab_hide_description">브라우저 탭 숨기기 및 표시</string>
<!-- Description for top_sites permission. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-nn-rNO/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-nn-rNO/strings.xml
index 0497c14100..841f8a0fc4 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-nn-rNO/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-nn-rNO/strings.xml
@@ -76,8 +76,6 @@
<string name="mozac_feature_addons_version">Versjon</string>
<!-- The author of an add-on. -->
<string name="mozac_feature_addons_author">Utviklar</string>
- <!-- The authors of an add-on. -->
- <string name="mozac_feature_addons_authors" moz:removedIn="123" tools:ignore="UnusedResources">Utviklarar</string>
<!-- The last date that the add-on was updated. -->
<string name="mozac_feature_addons_last_updated">Sist oppdatert</string>
<!-- The developer website (Homepage) of the add-on. -->
@@ -94,8 +92,6 @@
<string name="mozac_feature_addons_settings">Innstillingar</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_settings_on">På</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_settings_off" moz:removedIn="125" tools:ignore="UnusedResources">Av</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_allow_in_private_browsing">Tillat i privat nettlesing</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
@@ -104,8 +100,6 @@
<string name="mozac_feature_addons_not_allowed_in_private_browsing">Ikkje tillate i private vindauge</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_enabled">Påslått</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_disabled" moz:removedIn="125" tools:ignore="UnusedResources">Avslått</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the installed section. -->
<string name="mozac_feature_addons_installed_section">Installert</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the recommended section. -->
@@ -140,16 +134,12 @@
<string name="mozac_feature_addons_permissions_dialog_deny">Avvis</string>
<!-- This is a button to cancel the add-on installation . -->
<string name="mozac_feature_addons_permissions_dialog_cancel">Avbryt</string>
- <!-- Accessibility content description to install add-on button. -->
- <string name="mozac_feature_addons_install_addon_content_description" tools:ignore="UnusedResources" moz:removedIn="124">Installer tillegg</string>
<!-- Accessibility content description to install add-on button. %1$s is the add-on name. -->
<string name="mozac_feature_addons_install_addon_content_description_2">Installer %1$s</string>
<!-- This is the label of a button to cancel an ongoing add-on installation. -->
<string name="mozac_feature_addons_install_addon_dialog_cancel">Avbryt</string>
<!-- Indicates how many users have rated an add-on. %1$s will be replaced with number of reviews -->
<string name="mozac_feature_addons_user_rating_count_2">Omtalar: %1$s</string>
- <!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars and / separator and 5 the maximum number of stars e.g (2/5, 4.5/5 or 5/5) . -->
- <string name="mozac_feature_addons_rating_content_description" moz:removedIn="124" tools:ignore="UnusedResources">%1$.02f/5</string>
<!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars. -->
<string name="mozac_feature_addons_rating_content_description_2">Vurdering: %1$.02f av 5</string>
<!-- This is the title of page where all the add-ons are listed-->
@@ -162,6 +152,8 @@
<string name="mozac_feature_extensions_manager_notification_title_text">Utvidinga er mellombels deaktivert</string>
<!-- The content of the "crash" notification in the add-ons manager -->
<string name="mozac_feature_addons_manager_notification_content_text" moz:removedIn="126" tools:ignore="UnusedResources">Eitt eller fleire tillegg slutta å verke, noko som gjorde systemet ditt ustabilt.</string>
+ <!-- The content of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_content_text">Ei eller fleire utvidingar slutta å fungere, noko som gjorde systemet ditt ustabilt.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
<string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Start tillegga på nytt</string>
<!-- Button to re-enable the extensions in the "crash" notification -->
@@ -202,8 +194,12 @@
<string name="mozac_feature_addons_not_yet_supported_caption2">Vi utviklar for tida støtte for eit første utval av tilrådde utvidingar.</string>
<!-- This is the caption for the add-on installation progress overlay -->
<string name="mozac_add_on_install_progress_caption" moz:removedIn="126" tools:ignore="UnusedResources">Lastar ned og stadfestar tiillegget…</string>
+ <!-- This is the caption for the extension installation progress overlay -->
+ <string name="mozac_extension_install_progress_caption">Lastar ned og stadfestar utvidinga…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
<string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">Mislykka førespurnad om tlleggsprogram!</string>
+ <!-- Error shown when something unexpected happened while trying to get the extension list from the server -->
+ <string name="mozac_feature_addons_failed_to_query_extensions">Mislykka førespurnad etter utvidingar!</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
<string name="mozac_feature_addons_failed_to_translate">Fann ikkje omsettinga for språket %2$s, eller for standardspråket %1$s</string>
<!-- Text shown after successfully installed an add-on. %1$s is the add-on name. -->
@@ -212,12 +208,20 @@
<string name="mozac_feature_addons_failed_to_install">Klarte ikkje å installere %1$s</string>
<!-- Text shown after failing to install an add-on for which we don't have its name. -->
<string name="mozac_feature_addons_failed_to_install_generic" moz:removedIn="126" tools:ignore="UnusedResources">Klarte ikkje å installere dette tillegget.</string>
+ <!-- Text shown after failing to install an extension for which we don't have its name. -->
+ <string name="mozac_feature_addons_extension_failed_to_install">Klarte ikkje å installere denne utvidinga.</string>
<!-- Text shown when attempting to install an add-on and a network error happened. -->
<string name="mozac_feature_addons_failed_to_install_network_error" moz:removedIn="126" tools:ignore="UnusedResources">Klarte ikkje å laste ned tillegget på grunn av ein tilkoplingsfeil.</string>
+ <!-- Text shown when attempting to install an extension and a network error happened. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_network_error">Klarte ikkje å laste ned utvidinga på grunn av ein tilkoplingsfeil.</string>
<!-- Text shown when attempting to install an add-on and the downloaded file is corrupted. -->
<string name="mozac_feature_addons_failed_to_install_corrupt_error" moz:removedIn="126" tools:ignore="UnusedResources">Klarte ikkje å installere dette tillegget fordi det ser ut til å vere skada.</string>
+ <!-- Text shown when attempting to install an extension and the downloaded file is corrupted. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_corrupt_error">Klarte ikkje å installere denne utvidinga fordi ho ser ut til å vere skada.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
<string name="mozac_feature_addons_failed_to_install_not_signed_error" moz:removedIn="126" tools:ignore="UnusedResources">Klarte ikkje å installere dette tillegget fordi det ikkje er stadfesta.</string>
+ <!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_not_signed_error">Klarte ikkje å installere denne utvidinga fordi ho ikkje har blitt stadfesta.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was incompatible. %1$s is the add-on name, %2$s is the app name and %3$s is the app version. -->
<string name="mozac_feature_addons_failed_to_install_incompatible_error">Klarte ikkje å installere %1$s fordi den ikkje er kompatibel med %2$s %3$s.</string>
<!-- Text shown when attempting to install a blocklisted add-on. %1$s is the add-on name. -->
@@ -264,13 +268,9 @@
<string name="mozac_feature_addons_updater_dialog_status">Status:</string>
<!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
<string name="mozac_feature_addons_installed_dialog_title">%1$s er lagt til i %2$s</string>
- <!-- Text shown in the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_description" moz:removedIn="124" tools:ignore="UnusedResources">Opne det i menyen</string>
<!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
<string name="mozac_feature_addons_installed_dialog_description_2">Få tilgang til %1$s frå %2$s-menyen.</string>
<!-- Confirmation button text for the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_okay_button" moz:removedIn="124" tools:ignore="UnusedResources">Ok, eg forstår</string>
- <!-- Confirmation button text for the dialog when add-on installation is completed. -->
<string name="mozac_feature_addons_installed_dialog_okay_button_2">OK</string>
<!-- "Learn more" link displayed below an add-on status message. -->
<string name="mozac_feature_addons_status_learn_more">Les meir</string>
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-sc/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-sc/strings.xml
index d3dbbca241..5106df89be 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-sc/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-sc/strings.xml
@@ -74,8 +74,6 @@
<string name="mozac_feature_addons_version">Versione</string>
<!-- The author of an add-on. -->
<string name="mozac_feature_addons_author">Autoria</string>
- <!-- The authors of an add-on. -->
- <string name="mozac_feature_addons_authors" moz:removedIn="123" tools:ignore="UnusedResources">Autoria</string>
<!-- The last date that the add-on was updated. -->
<string name="mozac_feature_addons_last_updated">Ùrtima atualizatzione</string>
<!-- The developer website (Homepage) of the add-on. -->
@@ -85,21 +83,17 @@
<!-- The rating of the add-on. -->
<string name="mozac_feature_addons_rating">Valutatzione</string>
<!-- A link that points to the detail page of the add-on. -->
- <string name="mozac_feature_addons_more_info_link">Àteru in pitzus de custu cumplementu</string>
+ <string name="mozac_feature_addons_more_info_link" moz:removedIn="126" tools:ignore="UnusedResources">Àteru in pitzus de custu cumplementu</string>
<!-- The settings of the add-on. -->
<string name="mozac_feature_addons_settings">Cunfiguratzione</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_settings_on">Ativu</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_settings_off">Disativadu</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_allow_in_private_browsing">Permite in sa navigatzione privada</string>
<!-- Indicates the add-on is allowed in private browsing mode. -->
<string name="mozac_feature_addons_settings_run_in_private_browsing">Esecuta in sa navigatzione privada</string>
<!-- Indicates the add-on is enabled. -->
<string name="mozac_feature_addons_enabled">Ativadu</string>
- <!-- Indicates the add-on is disabled. -->
- <string name="mozac_feature_addons_disabled">Disativadu</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the installed section. -->
<string name="mozac_feature_addons_installed_section">Installadu</string>
<!-- This is displayed in a page where the user can see the installed and recommended(not installed yet) add-ons, this string indicates the recommended section. -->
@@ -134,24 +128,28 @@
<string name="mozac_feature_addons_permissions_dialog_deny">Refuda</string>
<!-- This is a button to cancel the add-on installation . -->
<string name="mozac_feature_addons_permissions_dialog_cancel">Annulla</string>
- <!-- Accessibility content description to install add-on button. -->
- <string name="mozac_feature_addons_install_addon_content_description">Installa su cumplementu</string>
<!-- This is the label of a button to cancel an ongoing add-on installation. -->
<string name="mozac_feature_addons_install_addon_dialog_cancel">Annulla</string>
<!-- Indicates how many users have rated an add-on. %1$s will be replaced with number of reviews -->
<string name="mozac_feature_addons_user_rating_count_2">Retzensiones: %1$s</string>
- <!-- Accessibility content description for the amount of stars that add-on has, where %1$.02f will be the amount of stars and / separator and 5 the maximum number of stars e.g (2/5, 4.5/5 or 5/5) . -->
- <string name="mozac_feature_addons_rating_content_description">%1$.02f/5</string>
<!-- This is the title of page where all the add-ons are listed-->
<string name="mozac_feature_addons_addons">Cumplementos</string>
<!-- Label for add-ons sub menu item for add-ons manager-->
<string name="mozac_feature_addons_addons_manager">Gestore de cumplementos</string>
<!-- The title of the "crash" notification in the add-ons manager -->
- <string name="mozac_feature_addons_manager_notification_title_text">Is cumplementos sunt istados disativados in manera temporànea</string>
+ <string name="mozac_feature_addons_manager_notification_title_text" moz:removedIn="126" tools:ignore="UnusedResources">Is cumplementos sunt istados disativados in manera temporànea</string>
+ <!-- The title of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_title_text">Is estensiones sunt disativadas in manera temporànea</string>
+ <!-- The content of the "crash" notification in the extensions manager -->
+ <string name="mozac_feature_extensions_manager_notification_content_text">Una o prus estensiones ant tzessadu de funtzionare, e cumpromitent s\'istabilidade de su sistema.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
- <string name="mozac_feature_addons_manager_notification_restart_button">Torra a aviare is cumplementos</string>
+ <string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Torra a aviare is cumplementos</string>
+ <!-- Button to re-enable the extensions in the "crash" notification -->
+ <string name="mozac_feature_extensions_manager_notification_restart_button">Torra a aviare is estensiones</string>
<!-- Button in the add-ons manager that opens AMO in a tab -->
- <string name="mozac_feature_addons_find_more_addons_button_text">Agata àteros cumplementos</string>
+ <string name="mozac_feature_addons_find_more_addons_button_text" moz:removedIn="126" tools:ignore="UnusedResources">Agata àteros cumplementos</string>
+ <!-- Button in the extensions manager that opens AMO in a tab -->
+ <string name="mozac_feature_addons_find_more_extensions_button_text">Agata àteras estensiones</string>
<!-- The label of the allow button, this will be shown to the user when an add-on needs new permissions, with the button the user will indicate that they want to accept the new permissions and update the add-on-->
<string name="mozac_feature_addons_updater_notification_allow_button">Permite</string>
<!-- The label of the deny button on a notification, this will be shown to the user when an add-on needs new permissions. Indicates the user denies the new permissions and prevents the add-on from be updated-->
@@ -163,23 +161,27 @@
<!-- The content of the notification displayed when an add-on needs a new permission-->
<string name="mozac_feature_addons_updater_notification_content_singular">Permissu nou rechestu</string>
<!-- Name of the "notification channel" used for displaying a notification for updating an add-on. See https://developer.android.com/training/notify-user/channels -->
- <string name="mozac_feature_addons_updater_notification_channel">Atualizatziones de cumplementos</string>
+ <string name="mozac_feature_addons_updater_notification_channel" moz:removedIn="126" tools:ignore="UnusedResources">Atualizatziones de cumplementos</string>
<!-- Name of the "notification channel" used for displaying a notification for new supported add-ons. See https://developer.android.com/training/notify-user/channels -->
- <string name="mozac_feature_addons_supported_checker_notification_channel">Verificadore de cumplementos cumpatìbiles</string>
+ <string name="mozac_feature_addons_supported_checker_notification_channel" tools:ignore="UnusedResources">Verificadore de cumplementos cumpatìbiles</string>
<!-- The tile of the notification, this will be shown to the user when one newly supported add-on is available.-->
- <string name="mozac_feature_addons_supported_checker_notification_title">Cumplementu nou cumpatìbile</string>
+ <string name="mozac_feature_addons_supported_checker_notification_title" tools:ignore="UnusedResources">Cumplementu nou cumpatìbile</string>
<!-- The tile of the notification, this will be shown to the user when more than one newly supported add-ons are available.-->
- <string name="mozac_feature_addons_supported_checker_notification_title_plural">Cumplementos noos a disponimentu</string>
+ <string name="mozac_feature_addons_supported_checker_notification_title_plural" tools:ignore="UnusedResources">Cumplementos noos a disponimentu</string>
<!-- The content of the notification, this will be shown to the user when one newly supported add-on is available. %1$s is the add-on name and %2$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_one">Agiunghe %1$s a %2$s</string>
<!-- The content of the notification, this will be shown to the user when two newly supported add-ons are available. %1$s is the first add-on name. %2$s is the second add-on name. %3$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_two">Agiunghe %1$s e %2$s a %3$s</string>
<!-- The content of the notification, this will be shown to the user when more than two newly supported add-ons are available. %1$s is the app name (in most cases Firefox). -->
<string name="mozac_feature_addons_supported_checker_notification_content_more_than_two">Agiunghe·ddos a %1$s</string>
+ <!-- This is the caption for not yet supported screen caption -->
+ <string name="mozac_feature_addons_not_yet_supported_caption2">Semus traballende pro frunire una seletzione initziale de estensiones cussigiadas.</string>
<!-- This is the caption for the add-on installation progress overlay -->
- <string name="mozac_add_on_install_progress_caption">Iscarrighende e verifichende su cumplementu…</string>
+ <string name="mozac_add_on_install_progress_caption" moz:removedIn="126" tools:ignore="UnusedResources">Iscarrighende e verifichende su cumplementu…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
- <string name="mozac_feature_addons_failed_to_query_add_ons">Impossìbile otènnere sa lista de cumplementos.</string>
+ <string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">Impossìbile otènnere sa lista de cumplementos.</string>
+ <!-- Error shown when something unexpected happened while trying to get the extension list from the server -->
+ <string name="mozac_feature_addons_failed_to_query_extensions">Impossìbile otènnere sa lista de estensiones.</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
<string name="mozac_feature_addons_failed_to_translate">Nissuna tradutzione agatada, ne pro su %1$s nen pro sa lìngua predefinida %2$s</string>
<!-- Text shown after successfully installed an add-on. %1$s is the add-on name. -->
@@ -187,13 +189,13 @@
<!-- Text shown after failed to install an add-on. %1$s is the add-on name. -->
<string name="mozac_feature_addons_failed_to_install">Faddina in s’installatzione de %1$s</string>
<!-- Text shown after failing to install an add-on for which we don't have its name. -->
- <string name="mozac_feature_addons_failed_to_install_generic">Faddina in s’installatzione de custu cumplementu.</string>
+ <string name="mozac_feature_addons_failed_to_install_generic" moz:removedIn="126" tools:ignore="UnusedResources">Faddina in s’installatzione de custu cumplementu.</string>
<!-- Text shown when attempting to install an add-on and a network error happened. -->
- <string name="mozac_feature_addons_failed_to_install_network_error">Impossìbile iscarrigare custu cumplementu pro more de una faddina in sa connessione.</string>
+ <string name="mozac_feature_addons_failed_to_install_network_error" moz:removedIn="126" tools:ignore="UnusedResources">Impossìbile iscarrigare custu cumplementu pro more de una faddina in sa connessione.</string>
<!-- Text shown when attempting to install an add-on and the downloaded file is corrupted. -->
- <string name="mozac_feature_addons_failed_to_install_corrupt_error">Custu cumplementu non si podet installare ca paret corrùmpidu.</string>
+ <string name="mozac_feature_addons_failed_to_install_corrupt_error" moz:removedIn="126" tools:ignore="UnusedResources">Custu cumplementu non si podet installare ca paret corrùmpidu.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
- <string name="mozac_feature_addons_failed_to_install_not_signed_error">Custu cumplementu non si podet installare ca no est averiguadu.</string>
+ <string name="mozac_feature_addons_failed_to_install_not_signed_error" moz:removedIn="126" tools:ignore="UnusedResources">Custu cumplementu non si podet installare ca no est averiguadu.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was incompatible. %1$s is the add-on name, %2$s is the app name and %3$s is the app version. -->
<string name="mozac_feature_addons_failed_to_install_incompatible_error">%1$s non si podet installare ca no est cumpatìbile cun %2$s %3$s.</string>
<!-- Text shown when attempting to install a blocklisted add-on. %1$s is the add-on name. -->
@@ -215,9 +217,11 @@
<!-- Text shown after failed to remove an add-on. %1$s is the add-on name. -->
<string name="mozac_feature_addons_failed_to_remove" tools:ignore="UnusedResources">Faddina in s’eliminatzione de %1$s</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter. -->
- <string name="mozac_feature_addons_unsupported_caption">1 cumplementu</string>
+ <string name="mozac_feature_addons_unsupported_caption" moz:removedIn="126" tools:ignore="UnusedResources">1 cumplementu</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter - plural. %1$s is the number of unsupported add-ons -->
- <string name="mozac_feature_addons_unsupported_caption_plural">%1$s cumplementos</string>
+ <string name="mozac_feature_addons_unsupported_caption_plural" moz:removedIn="126" tools:ignore="UnusedResources">%1$s cumplementos</string>
+ <!-- Text shown in not yet supported add-ons section - plural. %1$s is the number of unsupported extensions. -->
+ <string name="mozac_feature_addons_unsupported_caption_plural_2">%1$s estensiones</string>
<!-- Text link to a sumo page for learning more about unsupported add-ons. -->
<string name="mozac_feature_addons_unsupported_learn_more">Àteras informatziones</string>
<!-- Displayed in the "Status" field for the updater when an add-on has been correctly updated. -->
@@ -234,10 +238,6 @@
<string name="mozac_feature_addons_updater_dialog_status">Istadu:</string>
<!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
<string name="mozac_feature_addons_installed_dialog_title">%1$s agiuntu a %2$s</string>
- <!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. -->
- <string name="mozac_feature_addons_installed_dialog_description">Aberi·ddu dae su menù</string>
- <!-- Confirmation button text for the dialog when add-on installation is completed. -->
- <string name="mozac_feature_addons_installed_dialog_okay_button">AB, cumprèndidu</string>
<!-- "Learn more" link displayed below an add-on status message. -->
<string name="mozac_feature_addons_status_learn_more">Àteras informatziones</string>
<!-- Status message below an add-on in the add-ons manager when this add-on has been blocklisted. %1$s is the add-on name. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-si/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-si/strings.xml
index 6eb142ef1b..202cf37277 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-si/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-si/strings.xml
@@ -162,8 +162,12 @@
<string name="mozac_feature_addons_manager_notification_content_text" moz:removedIn="126" tools:ignore="UnusedResources">ඔබගේ පද්ධතිය අස්ථායී කරමින් එක්කහුවක් හෝ කිහිපයක් නතර විය.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
<string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">එක්කහු යළි අරඹන්න</string>
+ <!-- Button to re-enable the extensions in the "crash" notification -->
+ <string name="mozac_feature_extensions_manager_notification_restart_button">දිගු යළි අරඹන්න</string>
<!-- Button in the add-ons manager that opens AMO in a tab -->
<string name="mozac_feature_addons_find_more_addons_button_text" moz:removedIn="126" tools:ignore="UnusedResources">තවත් එක්කහු සොයාගන්න</string>
+ <!-- Button in the extensions manager that opens AMO in a tab -->
+ <string name="mozac_feature_addons_find_more_extensions_button_text">තවත් දිගු සොයන්න</string>
<!-- The label of the allow button, this will be shown to the user when an add-on needs new permissions, with the button the user will indicate that they want to accept the new permissions and update the add-on-->
<string name="mozac_feature_addons_updater_notification_allow_button">ඉඩ දෙන්න</string>
<!-- The label of the deny button on a notification, this will be shown to the user when an add-on needs new permissions. Indicates the user denies the new permissions and prevents the add-on from be updated-->
@@ -196,6 +200,8 @@
<string name="mozac_feature_addons_not_yet_supported_caption2">දැනට නිර්දේශිත දිගුවල ප්‍රාරම්භ තේරීමක් සඳහා සහාය තනමින් සිටියි.</string>
<!-- This is the caption for the add-on installation progress overlay -->
<string name="mozac_add_on_install_progress_caption" moz:removedIn="126" tools:ignore="UnusedResources">එක්කහුව බාගැනෙමින් හා සත්‍යාපනය වෙමින්…</string>
+ <!-- This is the caption for the extension installation progress overlay -->
+ <string name="mozac_extension_install_progress_caption">දිගුව බාගැනෙමින් හා සත්‍යාපනය වෙමින්…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
<string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">එක්කහු විමසීමට අසමත් විය!</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
@@ -206,6 +212,8 @@
<string name="mozac_feature_addons_failed_to_install">%1$s ස්ථාපනයට අසමත් විය</string>
<!-- Text shown after failing to install an add-on for which we don't have its name. -->
<string name="mozac_feature_addons_failed_to_install_generic" moz:removedIn="126" tools:ignore="UnusedResources">එක්කහුව ස්ථාපනයට අසමත් විය.</string>
+ <!-- Text shown after failing to install an extension for which we don't have its name. -->
+ <string name="mozac_feature_addons_extension_failed_to_install">මෙම දිගුව ස්ථාපනයට අසමත් විය.</string>
<!-- Text shown when attempting to install an add-on and a network error happened. -->
<string name="mozac_feature_addons_failed_to_install_network_error" moz:removedIn="126" tools:ignore="UnusedResources">සම්බන්ධතාවයට බාධා වීමක් නිසා එක්කහුව බාගැනීමට නොහැකි විය.</string>
<!-- Text shown when attempting to install an add-on and the downloaded file is corrupted. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/main/res/values-su/strings.xml b/mobile/android/android-components/components/feature/addons/src/main/res/values-su/strings.xml
index 359ceede95..85eb4e0865 100644
--- a/mobile/android/android-components/components/feature/addons/src/main/res/values-su/strings.xml
+++ b/mobile/android/android-components/components/feature/addons/src/main/res/values-su/strings.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:moz="http://schemas.android.com/apk/res-auto">
<!-- Description for privacy add-on permission. -->
- <string name="mozac_feature_addons_permissions_privacy_description">Bca jeung ropéa setélan pripasi</string>
+ <string name="mozac_feature_addons_permissions_privacy_description">Baca jeung ropéa setélan pripasi</string>
<!-- Description for all_urls add-on permission. -->
<string name="mozac_feature_addons_permissions_all_urls_description">Aksés data anjeun pikeun sakabéh raramatloka</string>
<!-- Description for giving an add-on access to users's data on one site. %1$s will be replaced by the DNS host name for which a web extension is requesting access (e.g., www.mozilla.org). -->
@@ -83,7 +83,7 @@
<!-- The developer website (Homepage) of the add-on. -->
<string name="mozac_feature_addons_home_page">Tepas</string>
<!-- A link where users can find more information about add-ons permissions. -->
- <string name="mozac_feature_addons_learn_more">Leuwih jéntré ngeunaan idin</string>
+ <string name="mozac_feature_addons_learn_more">Leuwih jéntré ngeunaan pedaran idin</string>
<!-- The rating of the add-on. -->
<string name="mozac_feature_addons_rating">Peunteun</string>
<!-- A link that points to the detail page of the add-on. -->
@@ -166,8 +166,12 @@
<string name="mozac_feature_extensions_manager_notification_content_text">Aya émboh nu mugen, ngabalukarkeun sistem anjeun teu stabil.</string>
<!-- Button to re-enable the add-ons in the "crash" notification -->
<string name="mozac_feature_addons_manager_notification_restart_button" moz:removedIn="126" tools:ignore="UnusedResources">Balikan deui émboh</string>
+ <!-- Button to re-enable the extensions in the "crash" notification -->
+ <string name="mozac_feature_extensions_manager_notification_restart_button">Jalankeun deui éksténsi</string>
<!-- Button in the add-ons manager that opens AMO in a tab -->
<string name="mozac_feature_addons_find_more_addons_button_text" moz:removedIn="126" tools:ignore="UnusedResources">Panggihan émboh lianna</string>
+ <!-- Button in the extensions manager that opens AMO in a tab -->
+ <string name="mozac_feature_addons_find_more_extensions_button_text">Téangan leuwih réa éksténsi </string>
<!-- The label of the allow button, this will be shown to the user when an add-on needs new permissions, with the button the user will indicate that they want to accept the new permissions and update the add-on-->
<string name="mozac_feature_addons_updater_notification_allow_button">Idinan</string>
<!-- The label of the deny button on a notification, this will be shown to the user when an add-on needs new permissions. Indicates the user denies the new permissions and prevents the add-on from be updated-->
@@ -180,6 +184,8 @@
<string name="mozac_feature_addons_updater_notification_content_singular">Perlu idin anyar</string>
<!-- Name of the "notification channel" used for displaying a notification for updating an add-on. See https://developer.android.com/training/notify-user/channels -->
<string name="mozac_feature_addons_updater_notification_channel" moz:removedIn="126" tools:ignore="UnusedResources">Apdét add-on</string>
+ <!-- Name of the "notification channel" used for displaying a notification for updating an extension. See https://developer.android.com/training/notify-user/channels -->
+ <string name="mozac_feature_addons_updater_notification_channel_2">Apdet éksténsi</string>
<!-- Name of the "notification channel" used for displaying a notification for new supported add-ons. See https://developer.android.com/training/notify-user/channels -->
<string name="mozac_feature_addons_supported_checker_notification_channel" tools:ignore="UnusedResources">Pamariksa add-on nu didukung</string>
<!-- The tile of the notification, this will be shown to the user when one newly supported add-on is available.-->
@@ -198,8 +204,12 @@
<string name="mozac_feature_addons_not_yet_supported_caption2">Kami ayeuna ngawangun dukungan pikeun pilihan awal Éksténsi nu Disarankeun.</string>
<!-- This is the caption for the add-on installation progress overlay -->
<string name="mozac_add_on_install_progress_caption" moz:removedIn="126" tools:ignore="UnusedResources">Ngeundeur jeung verifikasi add-on…</string>
+ <!-- This is the caption for the extension installation progress overlay -->
+ <string name="mozac_extension_install_progress_caption">Ngeundeur jeung verifikasi add-on…</string>
<!-- Error shown when something unexpected happened while trying to get the add-on list from the server -->
<string name="mozac_feature_addons_failed_to_query_add_ons" moz:removedIn="126" tools:ignore="UnusedResources">Gagal pikeun pamundut Add-on!</string>
+ <!-- Error shown when something unexpected happened while trying to get the extension list from the server -->
+ <string name="mozac_feature_addons_failed_to_query_extensions">Gagal pikeun pamundut Add-on!</string>
<!-- Error shown when unable to find a translation for an add-on field. %1$s is the locale of the user and %2$s is the default language of the add-on -->
<string name="mozac_feature_addons_failed_to_translate">Tarjamahan teu kapanggih, pikeun daérah %1$s pon kitu ogé basa bawaan %2$s</string>
<!-- Text shown after successfully installed an add-on. %1$s is the add-on name. -->
@@ -208,12 +218,20 @@
<string name="mozac_feature_addons_failed_to_install">Gagal masang %1$s</string>
<!-- Text shown after failing to install an add-on for which we don't have its name. -->
<string name="mozac_feature_addons_failed_to_install_generic" moz:removedIn="126" tools:ignore="UnusedResources">Gagal masang ieu émboh.</string>
+ <!-- Text shown after failing to install an extension for which we don't have its name. -->
+ <string name="mozac_feature_addons_extension_failed_to_install">Gagal masang ieu éksténsi.</string>
<!-- Text shown when attempting to install an add-on and a network error happened. -->
<string name="mozac_feature_addons_failed_to_install_network_error" moz:removedIn="126" tools:ignore="UnusedResources">Ieu émboh teu bisa diundeur alatan gagal nyambung.</string>
+ <!-- Text shown when attempting to install an extension and a network error happened. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_network_error">Ieu émboh teu bisa diundeur alatan gagal nyambung.</string>
<!-- Text shown when attempting to install an add-on and the downloaded file is corrupted. -->
<string name="mozac_feature_addons_failed_to_install_corrupt_error" moz:removedIn="126" tools:ignore="UnusedResources">Ieu émboh teu bisa dipasang, sigana alatan korup.</string>
+ <!-- Text shown when attempting to install an extension and the downloaded file is corrupted. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_corrupt_error">Ieu émboh teu bisa dipasang, sigana alatan korup.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
<string name="mozac_feature_addons_failed_to_install_not_signed_error" moz:removedIn="126" tools:ignore="UnusedResources">Ieu émboh teu bisa dipasang alatan acan dipéripikasi.</string>
+ <!-- Text shown when attempting to install an add-on and an error occurred because the extension was not signed. -->
+ <string name="mozac_feature_addons_extension_failed_to_install_not_signed_error">Ieu émboh teu bisa dipasang alatan acan dipéripikasi.</string>
<!-- Text shown when attempting to install an add-on and an error occurred because the extension was incompatible. %1$s is the add-on name, %2$s is the app name and %3$s is the app version. -->
<string name="mozac_feature_addons_failed_to_install_incompatible_error">%1$s teu bisa dipasang alatan teu kompatibel jeung %2$s %3$s.</string>
<!-- Text shown when attempting to install a blocklisted add-on. %1$s is the add-on name. -->
@@ -238,8 +256,12 @@
<string name="mozac_feature_addons_migrated_from_a_previous_version_label" tools:ignore="UnusedResources">Ieu add-on dipindahkeun ti pérsi heubeul %1$s</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter. -->
<string name="mozac_feature_addons_unsupported_caption" moz:removedIn="126" tools:ignore="UnusedResources">1 add-on</string>
+ <!-- Text shown in not yet supported add-ons section. -->
+ <string name="mozac_feature_addons_unsupported_caption_2">éksténsi</string>
<!-- Text shown in not yet supported add-ons section in AddonsManagerAdapter - plural. %1$s is the number of unsupported add-ons -->
<string name="mozac_feature_addons_unsupported_caption_plural" moz:removedIn="126" tools:ignore="UnusedResources">%1$s add-on</string>
+ <!-- Text shown in not yet supported add-ons section - plural. %1$s is the number of unsupported extensions. -->
+ <string name="mozac_feature_addons_unsupported_caption_plural_2">%1$s éksténsi</string>
<!-- Text link to a sumo page for learning more about unsupported add-ons. -->
<string name="mozac_feature_addons_unsupported_learn_more">Lenyepan</string>
<!-- Displayed in the "Status" field for the updater when an add-on has been correctly updated. -->
@@ -258,8 +280,12 @@
<string name="mozac_feature_addons_installed_dialog_title">%1$s geus ditambahkeun ka %2$s</string>
<!-- Text shown in the dialog when add-on installation is completed. -->
<string name="mozac_feature_addons_installed_dialog_description" moz:removedIn="124" tools:ignore="UnusedResources">Buka dina menu</string>
+ <!-- Text shown in the dialog when add-on installation is completed. %1$s is the add-on name. %2$s is the app name. -->
+ <string name="mozac_feature_addons_installed_dialog_description_2">Aksés %1$s tina ménu %2$s.</string>
<!-- Confirmation button text for the dialog when add-on installation is completed. -->
<string name="mozac_feature_addons_installed_dialog_okay_button" moz:removedIn="124" tools:ignore="UnusedResources">Heug, Ngarti</string>
+ <!-- Confirmation button text for the dialog when add-on installation is completed. -->
+ <string name="mozac_feature_addons_installed_dialog_okay_button_2">HEUG</string>
<!-- "Learn more" link displayed below an add-on status message. -->
<string name="mozac_feature_addons_status_learn_more">Lenyepan</string>
<!-- Status message below an add-on in the add-ons manager when this add-on has been blocklisted. %1$s is the add-on name. -->
diff --git a/mobile/android/android-components/components/feature/addons/src/test/java/AddonManagerTest.kt b/mobile/android/android-components/components/feature/addons/src/test/java/AddonManagerTest.kt
index 9c30bd8c0e..c8d3fe8972 100644
--- a/mobile/android/android-components/components/feature/addons/src/test/java/AddonManagerTest.kt
+++ b/mobile/android/android-components/components/feature/addons/src/test/java/AddonManagerTest.kt
@@ -666,7 +666,12 @@ class AddonManagerTest {
val extension: WebExtension = mock()
whenever(extension.id).thenReturn("ext1")
WebExtensionSupport.installedExtensions[addon.id] = extension
-
+ val metadata: Metadata = mock()
+ whenever(extension.getMetadata()).thenReturn(metadata)
+ whenever(metadata.optionalPermissions).thenReturn(permission)
+ whenever(metadata.grantedOptionalPermissions).thenReturn(permission)
+ whenever(metadata.optionalOrigins).thenReturn(origin)
+ whenever(metadata.grantedOptionalOrigins).thenReturn(origin)
val engine: Engine = mock()
val onSuccessCaptor = argumentCaptor<((WebExtension) -> Unit)>()
@@ -685,6 +690,10 @@ class AddonManagerTest {
onSuccessCaptor.value.invoke(extension)
assertNotNull(updateAddon)
assertEquals(addon.id, updateAddon!!.id)
+ assertEquals("permission1", updateAddon!!.optionalPermissions.first().name)
+ assertEquals(true, updateAddon!!.optionalPermissions.first().granted)
+ assertEquals("origin", updateAddon!!.optionalOrigins.first().name)
+ assertEquals(true, updateAddon!!.optionalOrigins.first().granted)
assertTrue(manager.pendingAddonActions.isEmpty())
}
diff --git a/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/PermissionsDialogFragmentTest.kt b/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/PermissionsDialogFragmentTest.kt
index 339c880380..88a1ff223f 100644
--- a/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/PermissionsDialogFragmentTest.kt
+++ b/mobile/android/android-components/components/feature/addons/src/test/java/mozilla/components/feature/addons/ui/PermissionsDialogFragmentTest.kt
@@ -48,8 +48,8 @@ class PermissionsDialogFragmentTest {
val optionalOrRequiredTextView = dialog.findViewById<TextView>(R.id.optional_or_required_text)
val permissionsRecyclerView = dialog.findViewById<RecyclerView>(R.id.permissions)
val recyclerAdapter = permissionsRecyclerView.adapter!! as RequiredPermissionsAdapter
- val optionalOrRequiredText = fragment.buildOptionalOrRequiredText()
val permissionList = fragment.buildPermissionsList()
+ val optionalOrRequiredText = fragment.buildOptionalOrRequiredText(hasPermissions = permissionList.isNotEmpty())
assertTrue(titleTextView.text.contains(name))
assertTrue(optionalOrRequiredText.contains(testContext.getString(R.string.mozac_feature_addons_permissions_dialog_subtitle)))
@@ -153,12 +153,12 @@ class PermissionsDialogFragmentTest {
val optionalOrRequiredTextView = dialog.findViewById<TextView>(R.id.optional_or_required_text)
val permissionsRecyclerView = dialog.findViewById<RecyclerView>(R.id.permissions)
val recyclerAdapter = permissionsRecyclerView.adapter!! as RequiredPermissionsAdapter
- val optionalOrRequiredText = fragment.buildOptionalOrRequiredText()
val permissionList = fragment.buildPermissionsList()
+ val optionalOrRequiredText = fragment.buildOptionalOrRequiredText(hasPermissions = permissionList.isNotEmpty())
assertTrue(titleTextView.text.contains(name))
- assertTrue(optionalOrRequiredText.contains(testContext.getString(R.string.mozac_feature_addons_permissions_dialog_subtitle)))
- assertTrue(optionalOrRequiredTextView.text.contains(testContext.getString(R.string.mozac_feature_addons_permissions_dialog_subtitle)))
+ assertFalse(optionalOrRequiredText.contains(testContext.getString(R.string.mozac_feature_addons_permissions_dialog_subtitle)))
+ assertFalse(optionalOrRequiredTextView.text.contains(testContext.getString(R.string.mozac_feature_addons_permissions_dialog_subtitle)))
assertEquals(0, recyclerAdapter.itemCount)
assertFalse(permissionList.contains(testContext.getString(R.string.mozac_feature_addons_permissions_privacy_description)))
assertFalse(permissionList.contains(testContext.getString(R.string.mozac_feature_addons_permissions_all_urls_description)))
@@ -185,8 +185,8 @@ class PermissionsDialogFragmentTest {
val recyclerAdapter = permissionsRecyclerView.adapter!! as RequiredPermissionsAdapter
val allowButton = dialog.findViewById<Button>(R.id.allow_button)
val denyButton = dialog.findViewById<Button>(R.id.deny_button)
- val optionalOrRequiredText = fragment.buildOptionalOrRequiredText()
val permissionsList = fragment.buildPermissionsList()
+ val optionalOrRequiredText = fragment.buildOptionalOrRequiredText(hasPermissions = permissionsList.isNotEmpty())
assertEquals(
titleTextView.text,
diff --git a/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_localized_single_result.json b/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_localized_single_result.json
index 94aeed1f64..5bae00d2f6 100644
--- a/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_localized_single_result.json
+++ b/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_localized_single_result.json
@@ -17,12 +17,8 @@
],
"average_daily_users": 6229783,
"categories": {
- "android": [
- "security-privacy"
- ],
- "firefox": [
- "privacy-security"
- ]
+ "android": ["security-privacy"],
+ "firefox": ["privacy-security"]
},
"contributions_url": "",
"created": "2015-04-25T07:26:22Z",
@@ -110,93 +106,54 @@
{
"id": 238546,
"caption": "The popup panel: default mode",
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238546.png?modified=1622132421",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238546.jpg?modified=1622132421"
},
{
"id": 238548,
"caption": "The dashboard: stock filter lists",
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238548.png?modified=1622132423",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238548.jpg?modified=1622132423"
},
{
"id": 238547,
"caption": "The popup panel: default-deny mode",
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238547.png?modified=1622132425",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238547.jpg?modified=1622132425"
},
{
"id": 238549,
"caption": "The dashboard: settings",
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238549.png?modified=1622132426",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238549.jpg?modified=1622132426"
},
{
"id": 238552,
"caption": "The popup panel in Firefox Preview: default mode with more blocking options revealed",
- "image_size": [
- 970,
- 1800
- ],
+ "image_size": [970, 1800],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238552.png?modified=1622132430",
- "thumbnail_size": [
- 216,
- 400
- ],
+ "thumbnail_size": [216, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238552.jpg?modified=1622132430"
},
{
"id": 230370,
"caption": "The unified logger tells you all that uBO is seeing and doing",
- "image_size": [
- 800,
- 600
- ],
+ "image_size": [800, 600],
"image_url": "https://addons.mozilla.org/user-media/previews/full/230/230370.png?modified=1622132432",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/230/230370.jpg?modified=1622132432"
}
],
"promoted": {
- "apps": [
- "firefox",
- "android"
- ],
+ "apps": ["firefox", "android"],
"category": "recommended"
},
"ratings": {
diff --git a/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_multiple_results.json b/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_multiple_results.json
index 8d0b13dad1..30b0a8fc6b 100644
--- a/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_multiple_results.json
+++ b/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_multiple_results.json
@@ -17,12 +17,8 @@
],
"average_daily_users": 6229783,
"categories": {
- "android": [
- "security-privacy"
- ],
- "firefox": [
- "privacy-security"
- ]
+ "android": ["security-privacy"],
+ "firefox": ["privacy-security"]
},
"contributions_url": "",
"created": "2015-04-25T07:26:22Z",
@@ -192,15 +188,9 @@
"caption": {
"en-US": "The popup panel: default mode"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238546.png?modified=1622132421",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238546.jpg?modified=1622132421"
},
{
@@ -208,15 +198,9 @@
"caption": {
"en-US": "The dashboard: stock filter lists"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238548.png?modified=1622132423",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238548.jpg?modified=1622132423"
},
{
@@ -224,15 +208,9 @@
"caption": {
"en-US": "The popup panel: default-deny mode"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238547.png?modified=1622132425",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238547.jpg?modified=1622132425"
},
{
@@ -240,15 +218,9 @@
"caption": {
"en-US": "The dashboard: settings"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238549.png?modified=1622132426",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238549.jpg?modified=1622132426"
},
{
@@ -256,15 +228,9 @@
"caption": {
"en-US": "The popup panel in Firefox Preview: default mode with more blocking options revealed"
},
- "image_size": [
- 970,
- 1800
- ],
+ "image_size": [970, 1800],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238552.png?modified=1622132430",
- "thumbnail_size": [
- 216,
- 400
- ],
+ "thumbnail_size": [216, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238552.jpg?modified=1622132430"
},
{
@@ -272,23 +238,14 @@
"caption": {
"en-US": "The unified logger tells you all that uBO is seeing and doing"
},
- "image_size": [
- 800,
- 600
- ],
+ "image_size": [800, 600],
"image_url": "https://addons.mozilla.org/user-media/previews/full/230/230370.png?modified=1622132432",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/230/230370.jpg?modified=1622132432"
}
],
"promoted": {
- "apps": [
- "firefox",
- "android"
- ],
+ "apps": ["firefox", "android"],
"category": "recommended"
},
"ratings": {
@@ -378,12 +335,8 @@
],
"average_daily_users": 111124,
"categories": {
- "android": [
- "other"
- ],
- "firefox": [
- "search-tools"
- ]
+ "android": ["other"],
+ "firefox": ["search-tools"]
},
"contributions_url": "",
"created": "2017-10-31T15:35:56Z",
@@ -653,9 +606,7 @@
},
"previews": [],
"promoted": {
- "apps": [
- "android"
- ],
+ "apps": ["android"],
"category": "recommended"
},
"ratings": {
diff --git a/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_single_result.json b/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_single_result.json
index b6a3a79892..1bc5ba8b99 100644
--- a/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_single_result.json
+++ b/mobile/android/android-components/components/feature/addons/src/test/resources/amo_search_single_result.json
@@ -17,12 +17,8 @@
],
"average_daily_users": 6229783,
"categories": {
- "android": [
- "security-privacy"
- ],
- "firefox": [
- "privacy-security"
- ]
+ "android": ["security-privacy"],
+ "firefox": ["privacy-security"]
},
"contributions_url": "",
"created": "2015-04-25T07:26:22Z",
@@ -192,15 +188,9 @@
"caption": {
"en-US": "The popup panel: default mode"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238546.png?modified=1622132421",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238546.jpg?modified=1622132421"
},
{
@@ -208,15 +198,9 @@
"caption": {
"en-US": "The dashboard: stock filter lists"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238548.png?modified=1622132423",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238548.jpg?modified=1622132423"
},
{
@@ -224,15 +208,9 @@
"caption": {
"en-US": "The popup panel: default-deny mode"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238547.png?modified=1622132425",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238547.jpg?modified=1622132425"
},
{
@@ -240,15 +218,9 @@
"caption": {
"en-US": "The dashboard: settings"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238549.png?modified=1622132426",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238549.jpg?modified=1622132426"
},
{
@@ -256,15 +228,9 @@
"caption": {
"en-US": "The popup panel in Firefox Preview: default mode with more blocking options revealed"
},
- "image_size": [
- 970,
- 1800
- ],
+ "image_size": [970, 1800],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238552.png?modified=1622132430",
- "thumbnail_size": [
- 216,
- 400
- ],
+ "thumbnail_size": [216, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238552.jpg?modified=1622132430"
},
{
@@ -272,23 +238,14 @@
"caption": {
"en-US": "The unified logger tells you all that uBO is seeing and doing"
},
- "image_size": [
- 800,
- 600
- ],
+ "image_size": [800, 600],
"image_url": "https://addons.mozilla.org/user-media/previews/full/230/230370.png?modified=1622132432",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/230/230370.jpg?modified=1622132432"
}
],
"promoted": {
- "apps": [
- "firefox",
- "android"
- ],
+ "apps": ["firefox", "android"],
"category": "recommended"
},
"ratings": {
diff --git a/mobile/android/android-components/components/feature/addons/src/test/resources/collection.json b/mobile/android/android-components/components/feature/addons/src/test/resources/collection.json
index a337ed148f..15d7ab9d40 100644
--- a/mobile/android/android-components/components/feature/addons/src/test/resources/collection.json
+++ b/mobile/android/android-components/components/feature/addons/src/test/resources/collection.json
@@ -18,12 +18,8 @@
],
"average_daily_users": 6229783,
"categories": {
- "android": [
- "security-privacy"
- ],
- "firefox": [
- "privacy-security"
- ]
+ "android": ["security-privacy"],
+ "firefox": ["privacy-security"]
},
"contributions_url": "",
"created": "2015-04-25T07:26:22Z",
@@ -193,15 +189,9 @@
"caption": {
"en-US": "The popup panel: default mode"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238546.png?modified=1622132421",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238546.jpg?modified=1622132421"
},
{
@@ -209,15 +199,9 @@
"caption": {
"en-US": "The dashboard: stock filter lists"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238548.png?modified=1622132423",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238548.jpg?modified=1622132423"
},
{
@@ -225,15 +209,9 @@
"caption": {
"en-US": "The popup panel: default-deny mode"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238547.png?modified=1622132425",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238547.jpg?modified=1622132425"
},
{
@@ -241,15 +219,9 @@
"caption": {
"en-US": "The dashboard: settings"
},
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238549.png?modified=1622132426",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238549.jpg?modified=1622132426"
},
{
@@ -257,15 +229,9 @@
"caption": {
"en-US": "The popup panel in Firefox Preview: default mode with more blocking options revealed"
},
- "image_size": [
- 970,
- 1800
- ],
+ "image_size": [970, 1800],
"image_url": "https://addons.mozilla.org/user-media/previews/full/238/238552.png?modified=1622132430",
- "thumbnail_size": [
- 216,
- 400
- ],
+ "thumbnail_size": [216, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/238/238552.jpg?modified=1622132430"
},
{
@@ -273,23 +239,14 @@
"caption": {
"en-US": "The unified logger tells you all that uBO is seeing and doing"
},
- "image_size": [
- 800,
- 600
- ],
+ "image_size": [800, 600],
"image_url": "https://addons.mozilla.org/user-media/previews/full/230/230370.png?modified=1622132432",
- "thumbnail_size": [
- 533,
- 400
- ],
+ "thumbnail_size": [533, 400],
"thumbnail_url": "https://addons.mozilla.org/user-media/previews/thumbs/230/230370.jpg?modified=1622132432"
}
],
"promoted": {
- "apps": [
- "firefox",
- "android"
- ],
+ "apps": ["firefox", "android"],
"category": "recommended"
},
"ratings": {
diff --git a/mobile/android/android-components/components/feature/addons/src/test/resources/collection_with_empty_values.json b/mobile/android/android-components/components/feature/addons/src/test/resources/collection_with_empty_values.json
index fedd44adec..956247cfa1 100644
--- a/mobile/android/android-components/components/feature/addons/src/test/resources/collection_with_empty_values.json
+++ b/mobile/android/android-components/components/feature/addons/src/test/resources/collection_with_empty_values.json
@@ -162,15 +162,9 @@
"caption": {
"en-US": "Default mode"
},
- "image_size": [
- 640,
- 480
- ],
+ "image_size": [640, 480],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/157/157572.png?modified=1543520531",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/157/157572.png?modified=1543520531"
},
{
@@ -178,15 +172,9 @@
"caption": {
"en-US": "The dashboard: stock filter lists"
},
- "image_size": [
- 640,
- 480
- ],
+ "image_size": [640, 480],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/157/157576.png?modified=1543520531",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/157/157576.png?modified=1543520531"
},
{
@@ -194,15 +182,9 @@
"caption": {
"en-US": "Dynamic filtering allows default-deny mode"
},
- "image_size": [
- 640,
- 480
- ],
+ "image_size": [640, 480],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/157/157592.png?modified=1543520532",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/157/157592.png?modified=1543520532"
},
{
@@ -210,15 +192,9 @@
"caption": {
"en-US": "The dashboard: settings"
},
- "image_size": [
- 640,
- 480
- ],
+ "image_size": [640, 480],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/159/159634.png?modified=1543520533",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/159/159634.png?modified=1543520533"
},
{
@@ -226,15 +202,9 @@
"caption": {
"en-US": "Unified logger"
},
- "image_size": [
- 700,
- 525
- ],
+ "image_size": [700, 525],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/158/158734.png?modified=1543520534",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/158/158734.png?modified=1543520534"
}
],
diff --git a/mobile/android/android-components/components/feature/addons/src/test/resources/localized_collection.json b/mobile/android/android-components/components/feature/addons/src/test/resources/localized_collection.json
index db7a59ad18..1e2a5ffbb8 100644
--- a/mobile/android/android-components/components/feature/addons/src/test/resources/localized_collection.json
+++ b/mobile/android/android-components/components/feature/addons/src/test/resources/localized_collection.json
@@ -19,12 +19,8 @@
],
"average_daily_users": 5060298,
"categories": {
- "android": [
- "security-privacy"
- ],
- "firefox": [
- "privacy-security"
- ]
+ "android": ["security-privacy"],
+ "firefox": ["privacy-security"]
},
"contributions_url": "",
"created": "2015-04-25T07:26:22Z",
@@ -110,93 +106,54 @@
{
"id": 238546,
"caption": "The popup panel: default mode",
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/238/238546.png?modified=1590420038",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/238/238546.png?modified=1590420038"
},
{
"id": 238548,
"caption": "The dashboard: stock filter lists",
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/238/238548.png?modified=1590420038",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/238/238548.png?modified=1590420038"
},
{
"id": 238547,
"caption": "The popup panel: default-deny mode",
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/238/238547.png?modified=1590420038",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/238/238547.png?modified=1590420038"
},
{
"id": 238549,
"caption": "The dashboard: settings",
- "image_size": [
- 1011,
- 758
- ],
+ "image_size": [1011, 758],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/238/238549.png?modified=1590420038",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/238/238549.png?modified=1590420038"
},
{
"id": 238552,
"caption": "The popup panel in Firefox Preview: default mode with more blocking options revealed",
- "image_size": [
- 970,
- 1800
- ],
+ "image_size": [970, 1800],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/238/238552.png?modified=1590420044",
- "thumbnail_size": [
- 259,
- 480
- ],
+ "thumbnail_size": [259, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/238/238552.png?modified=1590420044"
},
{
"id": 230370,
"caption": "The unified logger tells you all that uBO is seeing and doing",
- "image_size": [
- 800,
- 600
- ],
+ "image_size": [800, 600],
"image_url": "https://addons.cdn.mozilla.net/user-media/previews/full/230/230370.png?modified=1590420038",
- "thumbnail_size": [
- 640,
- 480
- ],
+ "thumbnail_size": [640, 480],
"thumbnail_url": "https://addons.cdn.mozilla.net/user-media/previews/thumbs/230/230370.png?modified=1590420038"
}
],
"promoted": {
- "apps": [
- "firefox",
- "android"
- ],
+ "apps": ["firefox", "android"],
"category": "recommended"
},
"ratings": {
diff --git a/mobile/android/android-components/components/feature/app-links/src/main/res/values-sk/strings.xml b/mobile/android/android-components/components/feature/app-links/src/main/res/values-sk/strings.xml
index 0dbc181a50..3896b8371c 100644
--- a/mobile/android/android-components/components/feature/app-links/src/main/res/values-sk/strings.xml
+++ b/mobile/android/android-components/components/feature/app-links/src/main/res/values-sk/strings.xml
@@ -8,7 +8,7 @@
<string name="mozac_feature_applinks_normal_confirm_dialog_title">Otvoriť v inej aplikácii</string>
<!-- The message of the prompt to confirm with users that they want to open the link in another app
%s is a placeholder that will be replaced by the app name -->
- <string name="mozac_feature_applinks_normal_confirm_dialog_message">Chcete tento obsah zobraziť v aplikácii %s?</string>
+ <string name="mozac_feature_applinks_normal_confirm_dialog_message">Chcete opustiť %s a zobraziť tento obsah v aplikácii?</string>
<!-- Opens the selected time -->
<string name="mozac_feature_applinks_confirm_dialog_confirm">Otvoriť</string>
<!-- Cancels the prompt -->
diff --git a/mobile/android/android-components/components/feature/contextmenu/build.gradle b/mobile/android/android-components/components/feature/contextmenu/build.gradle
index f1ab6e0b64..a202c5bed9 100644
--- a/mobile/android/android-components/components/feature/contextmenu/build.gradle
+++ b/mobile/android/android-components/components/feature/contextmenu/build.gradle
@@ -41,6 +41,7 @@ dependencies {
implementation ComponentsDependencies.google_material
implementation ComponentsDependencies.androidx_constraintlayout
+ implementation ComponentsDependencies.androidx_core_ktx
testImplementation ComponentsDependencies.androidx_test_core
testImplementation ComponentsDependencies.androidx_test_junit
diff --git a/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadMiddleware.kt b/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadMiddleware.kt
index c7e480e038..ac5563aebb 100644
--- a/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadMiddleware.kt
+++ b/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadMiddleware.kt
@@ -27,6 +27,8 @@ import mozilla.components.feature.downloads.AbstractFetchDownloadService.Compani
import mozilla.components.lib.state.Middleware
import mozilla.components.lib.state.MiddlewareContext
import mozilla.components.lib.state.Store
+import mozilla.components.support.base.android.DefaultPowerManagerInfoProvider
+import mozilla.components.support.base.android.StartForegroundService
import mozilla.components.support.base.log.logger.Logger
import kotlin.coroutines.CoroutineContext
@@ -42,6 +44,9 @@ class DownloadMiddleware(
coroutineContext: CoroutineContext = Dispatchers.IO,
@get:VisibleForTesting
internal val downloadStorage: DownloadStorage = DownloadStorage(applicationContext),
+ private val startForegroundService: StartForegroundService = StartForegroundService(
+ powerManagerInfoProvider = DefaultPowerManagerInfoProvider(applicationContext),
+ ),
) : Middleware<BrowserState, BrowserAction> {
private val logger = Logger("DownloadMiddleware")
@@ -164,7 +169,12 @@ class DownloadMiddleware(
@VisibleForTesting
internal fun startForegroundService(intent: Intent) {
- ContextCompat.startForegroundService(applicationContext, intent)
+ /**
+ * @see [StartForegroundService]
+ */
+ startForegroundService {
+ ContextCompat.startForegroundService(applicationContext, intent)
+ }
}
@VisibleForTesting
diff --git a/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt b/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt
index 9b9c9aa34c..95ef2b5eea 100644
--- a/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt
+++ b/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadNotification.kt
@@ -89,12 +89,17 @@ internal object DownloadNotification {
val percentCopied = downloadJobState.getPercent() ?: -1
return NotificationCompat.Builder(context, channelId)
+ .setStyle(
+ NotificationCompat.BigTextStyle()
+ .setBigContentTitle(downloadState.fileName)
+ .setSummaryText(downloadJobState.getProgress()),
+ )
.setSmallIcon(R.drawable.mozac_feature_download_ic_ongoing_download)
.setContentTitle(downloadState.fileName)
.setContentText(downloadJobState.getProgress())
.setColor(ContextCompat.getColor(context, notificationAccentColor))
.setCategory(NotificationCompat.CATEGORY_PROGRESS)
- .setProgress(DownloadNotification.PERCENTAGE_MULTIPLIER, percentCopied, isIndeterminate)
+ .setProgress(PERCENTAGE_MULTIPLIER, percentCopied, isIndeterminate)
.setOngoing(true)
.setWhen(downloadJobState.createdTime)
.setOnlyAlertOnce(true)
diff --git a/mobile/android/android-components/components/feature/downloads/src/main/res/values-ast/strings.xml b/mobile/android/android-components/components/feature/downloads/src/main/res/values-ast/strings.xml
index 5f9d21334a..ae218de9c4 100644
--- a/mobile/android/android-components/components/feature/downloads/src/main/res/values-ast/strings.xml
+++ b/mobile/android/android-components/components/feature/downloads/src/main/res/values-ast/strings.xml
@@ -43,9 +43,6 @@
<!-- Message that appears when trying to download with an external app fails. %1$s will be replaced with the name the external app. -->--&gt;
<string name="mozac_feature_downloads_unable_to_open_third_party_app">Nun ye posible abrir «%1$s»</string>
- <!-- Text for the info dialog when write to storage permissions have been denied but user tries to download a file. -->
- <string name="mozac_feature_downloads_write_external_storage_permissions_needed_message">Tienes de permitir l\'accesu a los ficheros ya al conteníu multimedia pa baxar ficheros. Vete a la configuración d\'Android, dempués a los permisos ya toca Permitir.</string>
-
<!-- Alert dialog confirmation before cancelling downloads, this is the title -->
<string name="mozac_feature_downloads_cancel_active_downloads_warning_content_title">¿Quies encaboxar les descargues privaes?</string>
<!-- Alert dialog confirmation before cancelling private downloads, this is the body. %1$s will be replaced with the name of the file. -->
diff --git a/mobile/android/android-components/components/feature/findinpage/build.gradle b/mobile/android/android-components/components/feature/findinpage/build.gradle
index 7abc2177d8..cd778154b7 100644
--- a/mobile/android/android-components/components/feature/findinpage/build.gradle
+++ b/mobile/android/android-components/components/feature/findinpage/build.gradle
@@ -35,6 +35,7 @@ dependencies {
implementation project(':ui-icons')
implementation ComponentsDependencies.androidx_constraintlayout
+ implementation ComponentsDependencies.androidx_core_ktx
testImplementation ComponentsDependencies.androidx_test_core
testImplementation ComponentsDependencies.androidx_test_junit
diff --git a/mobile/android/android-components/components/feature/media/build.gradle b/mobile/android/android-components/components/feature/media/build.gradle
index 650288778f..ee649638c8 100644
--- a/mobile/android/android-components/components/feature/media/build.gradle
+++ b/mobile/android/android-components/components/feature/media/build.gradle
@@ -44,6 +44,7 @@ dependencies {
implementation project(':support-utils')
implementation ComponentsDependencies.kotlin_coroutines
+ implementation ComponentsDependencies.androidx_core_ktx
implementation ComponentsDependencies.androidx_media
testImplementation project(':support-test')
diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-br/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-br/strings.xml
index 58beef7ee1..6cc864bb28 100644
--- a/mobile/android/android-components/components/feature/media/src/main/res/values-br/strings.xml
+++ b/mobile/android/android-components/components/feature/media/src/main/res/values-br/strings.xml
@@ -11,6 +11,25 @@
<string name="mozac_feature_media_sharing_camera_and_microphone">Gweredekaet eo ar cʼhamera hag ar glevell</string>
+ <!-- Text of notification shown when the device's camera is shared with a website (WebRTC) -->
+ <string name="mozac_feature_media_sharing_camera_text">Stokit evit digeriñ an ivinell a zo oc’h implij ho kamera.</string>
+ <!-- Text of notification shown when the device's microphone is shared with a website (WebRTC) -->
+ <string name="mozac_feature_media_sharing_microphone_text">Stokit evit digeriñ an ivinell a zo oc’h implij ho klevell.</string>
+ <!-- Text of notification shown when the device's camera and microphone is shared with a website (WebRTC) -->
+ <string name="mozac_feature_media_sharing_camera_and_microphone_text">Stokit evit digeriñ an ivinell a zo oc’h implij ho klevell hag ho kamera.</string>
+
+
+ <!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_camera_reminder_text">Adc\'halv: Emañ %1$s oc’h implij ho kamera atav. Stokit evit digeriñ an ivinell.</string>
+ <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Adc\'halv: Emañ %1$s oc’h implij ho klevell atav. Stokit evit digeriñ an ivinell</string>
+ <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Adc’halv: %1$s a implij ho klevell c’hoazh. Stokit da zigeriñ an ivinell.</string>
+ <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Adc\'halv: Emañ %1$s oc’h implij ho klevell hag ho kamera atav. Stokit evit digeriñ an ivinell</string>
+ <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Adc\'halv: Emañ %1$s oc’h implij ho klevell hag ho kamera atav. Stokit evit digeriñ an ivinell</string>
+
<!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. -->
<string name="mozac_feature_media_notification_action_play">Lenn</string>
diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-nn-rNO/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-nn-rNO/strings.xml
index 54a2f5bb49..ecb0bf9ee5 100644
--- a/mobile/android/android-components/components/feature/media/src/main/res/values-nn-rNO/strings.xml
+++ b/mobile/android/android-components/components/feature/media/src/main/res/values-nn-rNO/strings.xml
@@ -27,6 +27,12 @@
<!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
<string name="mozac_feature_media_sharing_microphone_reminder_text_2">Påminning: %1$s brukar framleis mikrofonen din. Trykk for å opne fana.</string>
+ <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Påminning: %1$s brukar framleis mikrofonen og kameraet ditt. Trykk for å opne fana</string>
+
+ <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Påminning: %1$s brukar framleis mikrofonen og kameraet ditt. Trykk for å opne fana.</string>
+
<!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. -->
<string name="mozac_feature_media_notification_action_play">Spel av</string>
diff --git a/mobile/android/android-components/components/feature/media/src/main/res/values-su/strings.xml b/mobile/android/android-components/components/feature/media/src/main/res/values-su/strings.xml
index 36d6141e58..f5ecda93ad 100644
--- a/mobile/android/android-components/components/feature/media/src/main/res/values-su/strings.xml
+++ b/mobile/android/android-components/components/feature/media/src/main/res/values-su/strings.xml
@@ -22,9 +22,14 @@
<!-- Text of reminder notification shown when the device's camera is shared with a website (WebRTC). %1$s is a placeholder that will be replaced by the app name-->
<string name="mozac_feature_media_sharing_camera_reminder_text">Panginget: %1$s maké kénéh kaméra anjeun. Toél pikeun muka tabna.</string>
<!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
- <string name="mozac_feature_media_sharing_microphone_reminder_text">Panginget: %1$s maké kénéh mikropon anjeun. Toél pikeun muka tabna</string>
+ <string name="mozac_feature_media_sharing_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Panginget: %1$s maké kénéh mikropon anjeun. Toél pikeun muka tabna</string>
+ <!-- Text of reminder notification shown when the device's microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_microphone_reminder_text_2">Panginget: %1$s maké mikrofon anjeun kénéh. Pencét pikeun muka tab.</string>
+ <!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
+ <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text" moz:RemovedIn="124" tools:ignore="UnusedResources">Panginget: %1$s maké kénéh mikropon jeung kaméra anjeun. Toél pikeun muka tabna</string>
+
<!-- Text of reminder notification shown when the device's camera and microphone is shared with a website (WebRTC) %1$s is a placeholder that will be replaced by the app name-->
- <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text">Panginget: %1$s maké kénéh mikropon jeung kaméra anjeun. Toél pikeun muka tabna</string>
+ <string name="mozac_feature_media_sharing_camera_and_microphone_reminder_text_2">Panginget: %1$s maké kénéh mikropon jeung kaméra anjeun. Toél pikeun muka tabna</string>
<!--This is the title of the "play" action media shown in the media notification while web content is playing media. Clicking it will resume playing paused media. On most modern Android system only an icon is visible. But screen readers may read this title. -->
<string name="mozac_feature_media_notification_action_play">Ulinkeun</string>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt
index 481b0e5ce3..768fddddb9 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptFeature.kt
@@ -17,6 +17,7 @@ import kotlinx.coroutines.flow.map
import mozilla.components.browser.state.action.ContentAction
import mozilla.components.browser.state.selector.findTabOrCustomTab
import mozilla.components.browser.state.selector.findTabOrCustomTabOrSelectedTab
+import mozilla.components.browser.state.selector.selectedTab
import mozilla.components.browser.state.state.SessionState
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.prompt.Choice
@@ -100,6 +101,7 @@ import mozilla.components.support.base.feature.PermissionsFeature
import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.base.log.logger.Logger
import mozilla.components.support.ktx.kotlin.ifNullOrEmpty
+import mozilla.components.support.ktx.kotlin.tryGetHostFromUrl
import mozilla.components.support.ktx.kotlinx.coroutines.flow.ifAnyChanged
import java.lang.ref.WeakReference
import java.security.InvalidParameterException
@@ -134,6 +136,8 @@ internal const val FRAGMENT_TAG = "mozac_feature_prompt_dialog"
* a dialog (fragment).
* @property shareDelegate Delegate used to display share sheet.
* @property exitFullscreenUsecase Usecase allowing to exit browser tabs' fullscreen mode.
+ * @property isLoginAutofillEnabled A callback invoked before an autofill prompt is triggered. If false,
+ * 'autofill login' prompts will not be shown.
* @property isSaveLoginEnabled A callback invoked when a login prompt is triggered. If false,
* 'save login' prompts will not be shown.
* @property isCreditCardAutofillEnabled A callback invoked when credit card fields are detected in the webpage.
@@ -171,6 +175,7 @@ class PromptFeature private constructor(
private val exitFullscreenUsecase: ExitFullScreenUseCase = SessionUseCases(store).exitFullscreen,
override val creditCardValidationDelegate: CreditCardValidationDelegate? = null,
override val loginValidationDelegate: LoginValidationDelegate? = null,
+ private val isLoginAutofillEnabled: () -> Boolean = { false },
private val isSaveLoginEnabled: () -> Boolean = { false },
private val isCreditCardAutofillEnabled: () -> Boolean = { false },
private val isAddressAutofillEnabled: () -> Boolean = { false },
@@ -219,6 +224,7 @@ class PromptFeature private constructor(
exitFullscreenUsecase: ExitFullScreenUseCase = SessionUseCases(store).exitFullscreen,
creditCardValidationDelegate: CreditCardValidationDelegate? = null,
loginValidationDelegate: LoginValidationDelegate? = null,
+ isLoginAutofillEnabled: () -> Boolean = { false },
isSaveLoginEnabled: () -> Boolean = { false },
isCreditCardAutofillEnabled: () -> Boolean = { false },
isAddressAutofillEnabled: () -> Boolean = { false },
@@ -243,6 +249,7 @@ class PromptFeature private constructor(
exitFullscreenUsecase = exitFullscreenUsecase,
creditCardValidationDelegate = creditCardValidationDelegate,
loginValidationDelegate = loginValidationDelegate,
+ isLoginAutofillEnabled = isLoginAutofillEnabled,
isSaveLoginEnabled = isSaveLoginEnabled,
isCreditCardAutofillEnabled = isCreditCardAutofillEnabled,
isAddressAutofillEnabled = isAddressAutofillEnabled,
@@ -267,6 +274,7 @@ class PromptFeature private constructor(
exitFullscreenUsecase: ExitFullScreenUseCase = SessionUseCases(store).exitFullscreen,
creditCardValidationDelegate: CreditCardValidationDelegate? = null,
loginValidationDelegate: LoginValidationDelegate? = null,
+ isLoginAutofillEnabled: () -> Boolean = { false },
isSaveLoginEnabled: () -> Boolean = { false },
isCreditCardAutofillEnabled: () -> Boolean = { false },
isAddressAutofillEnabled: () -> Boolean = { false },
@@ -290,6 +298,7 @@ class PromptFeature private constructor(
exitFullscreenUsecase = exitFullscreenUsecase,
creditCardValidationDelegate = creditCardValidationDelegate,
loginValidationDelegate = loginValidationDelegate,
+ isLoginAutofillEnabled = isLoginAutofillEnabled,
isSaveLoginEnabled = isSaveLoginEnabled,
isCreditCardAutofillEnabled = isCreditCardAutofillEnabled,
isAddressAutofillEnabled = isAddressAutofillEnabled,
@@ -436,12 +445,12 @@ class PromptFeature private constructor(
}
}
- // Dismiss all prompts when page URL or session id changes. See Fenix#5326
+ // Dismiss all prompts when page host or session id changes. See Fenix#5326
dismissPromptScope = store.flowScoped { flow ->
flow.ifAnyChanged { state ->
arrayOf(
state.selectedTabId,
- state.findTabOrCustomTabOrSelectedTab(customTabId)?.content?.url,
+ state.findTabOrCustomTabOrSelectedTab(customTabId)?.content?.url?.tryGetHostFromUrl(),
)
}.collect {
dismissSelectPrompts()
@@ -559,17 +568,18 @@ class PromptFeature private constructor(
}
is SelectLoginPrompt -> {
- if (promptRequest.logins.isEmpty()) {
- if (isSuggestStrongPasswordEnabled) {
- val currentUrl =
- store.state.findTabOrCustomTabOrSelectedTab(customTabId)?.content?.url
- if (currentUrl != null) {
- strongPasswordPromptViewListener?.handleSuggestStrongPasswordRequest(
- promptRequest,
- currentUrl,
- onSaveLoginWithStrongPassword,
- )
- }
+ if (!isLoginAutofillEnabled()) {
+ return
+ }
+ if (promptRequest.generatedPassword != null && isSuggestStrongPasswordEnabled) {
+ val currentUrl =
+ store.state.findTabOrCustomTabOrSelectedTab(customTabId)?.content?.url
+ if (currentUrl != null) {
+ strongPasswordPromptViewListener?.handleSuggestStrongPasswordRequest(
+ promptRequest,
+ currentUrl,
+ onSaveLoginWithStrongPassword,
+ )
}
} else {
loginPicker?.handleSelectLoginRequest(promptRequest)
@@ -872,6 +882,7 @@ class PromptFeature private constructor(
inputLabel,
inputValue,
promptAbuserDetector.areDialogsBeingAbused(),
+ store.state.selectedTab?.content?.private == true,
)
}
}
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt
index 01492e96e4..41aeca796c 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt
+++ b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragment.kt
@@ -11,15 +11,18 @@ import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.LayoutInflater
+import android.view.inputmethod.EditorInfo.IME_NULL
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
+import androidx.core.view.inputmethod.EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING
import mozilla.components.feature.prompts.R
import mozilla.components.ui.widgets.withCenterAlignedButtons
private const val KEY_USER_EDIT_TEXT = "KEY_USER_EDIT_TEXT"
private const val KEY_LABEL_INPUT = "KEY_LABEL_INPUT"
private const val KEY_DEFAULT_INPUT_VALUE = "KEY_DEFAULT_INPUT_VALUE"
+private const val KEY_PRIVATE = "KEY_PRIVATE"
/**
* [androidx.fragment.app.DialogFragment] implementation to display a
@@ -38,6 +41,11 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te
*/
internal val labelInput: String? by lazy { safeArguments.getString(KEY_LABEL_INPUT) }
+ /**
+ * Tells if the Dialog is shown from private browsing
+ */
+ internal val private: Boolean? by lazy { safeArguments.getBoolean(KEY_PRIVATE) }
+
private var userSelectionEditText: String
get() = safeArguments.getString(KEY_USER_EDIT_TEXT, defaultInputValue)
set(value) {
@@ -73,6 +81,7 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te
label.text = labelInput
editText.setText(defaultInputValue)
editText.addTextChangedListener(this)
+ editText.imeOptions = if (private == true) IME_FLAG_NO_PERSONALIZED_LEARNING else IME_NULL
addCheckBoxIfNeeded(view)
@@ -100,7 +109,9 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te
* @param hasShownManyDialogs tells if this [sessionId] has shown many dialogs
* in a short period of time, if is true a checkbox will be part of the dialog, for the user
* to choose if wants to prevent this [sessionId] continuing showing dialogs.
+ * @param private tells if this dialog is triggered from private browsing
*/
+ @Suppress("complexity:LongParameterList")
fun newInstance(
sessionId: String,
promptRequestUID: String,
@@ -109,6 +120,7 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te
inputLabel: String,
defaultInputValue: String,
hasShownManyDialogs: Boolean,
+ private: Boolean,
): TextPromptDialogFragment {
val fragment = TextPromptDialogFragment()
val arguments = fragment.arguments ?: Bundle()
@@ -121,6 +133,7 @@ internal class TextPromptDialogFragment : AbstractPromptTextDialogFragment(), Te
putString(KEY_LABEL_INPUT, inputLabel)
putString(KEY_DEFAULT_INPUT_VALUE, defaultInputValue)
putBoolean(KEY_MANY_ALERTS, hasShownManyDialogs)
+ putBoolean(KEY_PRIVATE, private)
}
fragment.arguments = arguments
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml
index ee06036029..f7833ace0f 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-br/strings.xml
@@ -17,9 +17,9 @@
<!-- Text for password field in an authentication dialog. -->
<string name="mozac_feature_prompt_password_hint">Ger-tremen</string>
<!-- Negative confirmation that we should not save the new or updated login -->
- <string name="mozac_feature_prompt_dont_save">Na enrollañ</string>
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Na enrollañ</string>
<!-- Negative confirmation that we should not save the new or updated login -->
- <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Diwezhatoc’h</string>
+ <string name="mozac_feature_prompt_dont_save_2">Diwezhatoc’h</string>
<!-- Negative confirmation that we should never save a login for this site -->
<string name="mozac_feature_prompt_never_save">Na enrollañ biken</string>
<!-- Negative confirmation that we should not save a credit card for this site -->
@@ -27,27 +27,27 @@
<!-- Positive confirmation that we should save the new or updated login -->
<string name="mozac_feature_prompt_save_confirmation">Enrollañ</string>
<!-- Negative confirmation that we should not save the updated login -->
- <string name="mozac_feature_prompt_dont_update">Na hizivaat</string>
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Na hizivaat</string>
<!-- Negative confirmation that we should not save the updated login -->
- <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Diwezhatoc’h</string>
+ <string name="mozac_feature_prompt_dont_update_2">Diwezhatoc’h</string>
<!-- Positive confirmation that we should save the updated login -->
<string name="mozac_feature_prompt_update_confirmation">Hizivaat</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_empty_password">Ar vaezienn ger-tremen a rank bezañ leuniet</string>
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Ar vaezienn ger-tremen a rank bezañ leuniet</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Enankit ur ger-tremen</string>
+ <string name="mozac_feature_prompt_error_empty_password_2">Enankit ur ger-tremen</string>
<!-- Error text displayed underneath the login field when it is in an error case -->
- <string name="mozac_feature_prompt_error_unknown_cause">Ne cʼhaller ket enrollañ an titour kennaskañ</string>
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Ne cʼhaller ket enrollañ an titour kennaskañ</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">N’haller ket enrollañ ar ger-tremen</string>
+ <string name="mozac_feature_prompt_error_unknown_cause_2">N’haller ket enrollañ ar ger-tremen</string>
<!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
- <string name="mozac_feature_prompt_login_save_headline">Enrollañ an titour kennaskañ-mañ?</string>
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Enrollañ an titour kennaskañ-mañ?</string>
<!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
- <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Enrollañ ar ger-tremen?</string>
+ <string name="mozac_feature_prompt_login_save_headline_2">Enrollañ ar ger-tremen?</string>
<!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
- <string name="mozac_feature_prompt_login_update_headline">Hizivaat an titour kennaskañ-mañ?</string>
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Hizivaat an titour kennaskañ-mañ?</string>
<!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
- <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Hizivaat ar ger-tremen?</string>
+ <string name="mozac_feature_prompt_login_update_headline_2">Hizivaat ar ger-tremen?</string>
<!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
<string name="mozac_feature_prompt_login_add_username_headline">Ouzhpennañ an anv arveriad dʼar gerioù-tremen enrollet?</string>
<!-- Text for a label for the field when prompt requesting a text is shown. -->
@@ -96,22 +96,29 @@
<!-- Title of the time picker dialog. -->
<string name="mozac_feature_prompts_set_time">Dibab an eur</string>
<!-- Option in expanded select login prompt that links to login settings -->
- <string name="mozac_feature_prompts_manage_logins">Ardoer titouroù kennaskañ</string>
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Ardoer titouroù kennaskañ</string>
<!-- Option in expanded select password prompt that links to password settings -->
- <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Merañ ar gerioù-tremen</string>
+ <string name="mozac_feature_prompts_manage_logins_2">Merañ ar gerioù-tremen</string>
<!-- Content description for expanding the saved logins options in the select login prompt -->
- <string name="mozac_feature_prompts_expand_logins_content_description">Brasaat an titouroù kennaskañ aliet</string>
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Brasaat an titouroù kennaskañ aliet</string>
<!-- Content description for expanding the saved passwords options in the select password prompt -->
- <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Dispakañ ar gerioù-tremen enrollet</string>
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Dispakañ ar gerioù-tremen enrollet</string>
<!-- Content description for collapsing the saved logins options in the select login prompt -->
- <string name="mozac_feature_prompts_collapse_logins_content_description">Berraat an titouroù kennaskañ aliet</string>
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Berraat an titouroù kennaskañ aliet</string>
<!-- Content description for collapsing the saved passwords options in the select password prompt -->
- <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Kuzhat ar gerioù-tremen enrollet</string>
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Kuzhat ar gerioù-tremen enrollet</string>
<!-- Header for the select login prompt to allow users to fill a form with a saved login -->
- <string name="mozac_feature_prompts_saved_logins">Titouroù kennaskañ aliet</string>
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Titouroù kennaskañ aliet</string>
<!-- Header for the select password prompt to allow users to fill a form with a saved password -->
- <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Gerioù-tremen enrollet</string>
+ <string name="mozac_feature_prompts_saved_logins_2">Gerioù-tremen enrollet</string>
+
+ <!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_content_description">Kinnig ur ger-tremen kreñv</string>
+ <!-- Header for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
+ <string name="mozac_feature_prompts_suggest_strong_password">Kinnig ur ger-tremen kreñv</string>
+ <!-- Title for using the suggest strong password confirmation dialog. %1$s will be replaced with the generated password -->
+ <string name="mozac_feature_prompts_suggest_strong_password_message">Implij ur ger-tremen kreñv: %1$s</string>
<!-- Strings shown in a dialog that appear when users try to refresh a certain kind of webpages -->
<string name="mozac_feature_prompt_repost_title">Kas roadennoù en-dro d’al lec’hienn?</string>
@@ -123,38 +130,43 @@
<!-- Credit Card Autofill -->
<!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
- <string name="mozac_feature_prompts_select_credit_card">Diuzañ ur gartenn gred</string>
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Diuzañ ur gartenn gred</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Ober gant ur gartenn enrollet</string>
<!-- Content description for expanding the select credit card options in the select credit card prompt. -->
- <string name="mozac_feature_prompts_expand_credit_cards_content_description">Astenn ar cʼhartennoù kred kinniget</string>
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Astenn ar cʼhartennoù kred kinniget</string>
<!-- Content description for expanding the saved card options in the select card prompt. -->
- <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Dispakañ ar c’hartennoù enrollet</string>
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Dispakañ ar c’hartennoù enrollet</string>
<!-- Content description for collapsing the select credit card options in the select credit prompt. -->
- <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Bihanaat ar cʼhartennoù kred kinniget</string>
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Bihanaat ar cʼhartennoù kred kinniget</string>
<!-- Content description for collapsing the saved card options in the select prompt. -->
- <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Kuzhat ar c’hartennoù enrollet</string>
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Kuzhat ar c’hartennoù enrollet</string>
<!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
- <string name="mozac_feature_prompts_manage_credit_cards">Merañ ar cʼhartennoù kred</string>
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Merañ ar cʼhartennoù kred</string>
<!-- Option in the expanded select card prompt that links to cards settings. -->
- <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Merañ ar c’hartennoù</string>
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Merañ ar c’hartennoù</string>
<!-- Text for the title of a save credit card dialog. -->
<string name="mozac_feature_prompts_save_credit_card_prompt_title">Enrollañ ar gartenn-mañ en surentez?</string>
<!-- Text for the title of an update credit card dialog. -->
<string name="mozac_feature_prompts_update_credit_card_prompt_title">Hizivaat deiziad termen ar gartenn?</string>
<!-- Subtitle text displayed under the title of the save credit card dialog. -->
- <string name="mozac_feature_prompts_save_credit_card_prompt_body">Enrigenet e vo niverenn ar gartenn. Ne vo ket enrollet ar c’hod surentez.</string>
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Enrigenet e vo niverenn ar gartenn. Ne vo ket enrollet ar c’hod surentez.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s a enrinego ho niverenn gartenn. Ne vo ket enrollet ho poneg surentez.</string>
<!-- Address Autofill -->
<!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
<string name="mozac_feature_prompts_select_address_2">Dibab ur chomlec’h</string>
<!-- Content description for expanding the select addresses options in the select address prompt. -->
- <string name="mozac_feature_prompts_expand_address_content_description">Displegañ ar chomlec’hioù kinniget</string>
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Displegañ ar chomlec’hioù kinniget</string>
<!-- Content description for expanding the saved addresses options in the select address prompt. -->
- <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Dispakañ ar chomlec’hioù enrollet</string>
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Dispakañ ar chomlec’hioù enrollet</string>
<!-- Content description for collapsing the select address options in the select address prompt. -->
- <string name="mozac_feature_prompts_collapse_address_content_description">Plegañ ar chomlec’hioù kinniget</string>
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Plegañ ar chomlec’hioù kinniget</string>
<!-- Content description for collapsing the saved address options in the select address prompt. -->
- <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Kuzhat ar chomlec’hioù enrollet</string>
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Kuzhat ar chomlec’hioù enrollet</string>
<!-- Text for the manage addresses button. -->
<string name="mozac_feature_prompts_manage_address">Merañ ar chomlec’hioù</string>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml
index dc9067b13a..595f0075a4 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-kab/strings.xml
@@ -103,6 +103,8 @@
<string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Sken-d inekcam isumar</string>
<!-- Content description for collapsing the saved logins options in the select login prompt -->
<string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Ffer inekcam isumar</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Fneḍ awalen n uεeddi i yettwaskelsen</string>
<!-- Header for the select login prompt to allow users to fill a form with a saved login -->
<string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Inekcam yettwasumren</string>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml
index 6266243205..15d975b4eb 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-nn-rNO/strings.xml
@@ -38,6 +38,8 @@
<string name="mozac_feature_prompt_error_empty_password_2">Skriv inn passord</string>
<!-- Error text displayed underneath the login field when it is in an error case -->
<string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Klarte ikkje å lagre innlogginga</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Kan ikkje lagre passordet</string>
<!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
<string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Lagre denne innlogginga?</string>
<!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
@@ -103,6 +105,8 @@
<string name="mozac_feature_prompts_expand_logins_content_description_2">Utvid lagra passord</string>
<!-- Content description for collapsing the saved logins options in the select login prompt -->
<string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Slå saman føreslåtte innloggingar</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Skjul lagra passord</string>
<!-- Header for the select login prompt to allow users to fill a form with a saved login -->
<string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Føreslåtte innloggingar</string>
@@ -131,8 +135,12 @@
<string name="mozac_feature_prompts_select_credit_card_2">Bruk lagra kort</string>
<!-- Content description for expanding the select credit card options in the select credit card prompt. -->
<string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Utvid føreslått betalingskort</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Utvid lagra passord</string>
<!-- Content description for collapsing the select credit card options in the select credit prompt. -->
<string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Minimer føreslått betalingskort</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Skjul lagra kort</string>
<!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
<string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Handsam betalingskort</string>
<!-- Option in the expanded select card prompt that links to cards settings. -->
@@ -144,6 +152,9 @@
<!-- Subtitle text displayed under the title of the save credit card dialog. -->
<string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Kortnummeret vil bli kryptert. Tryggingskoden vert ikkje lagra.</string>
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s krypterer kortnummeret ditt. Sikkerheitskoden din vert ikkje lagra.</string>
+
<!-- Address Autofill -->
<!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
<string name="mozac_feature_prompts_select_address_2">Vel adresse</string>
@@ -153,6 +164,8 @@
<string name="mozac_feature_prompts_expand_address_content_description_2">Utvid lagra adresser</string>
<!-- Content description for collapsing the select address options in the select address prompt. -->
<string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Slå saman føreslåtte adresser</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Skjul lagra adresser</string>
<!-- Text for the manage addresses button. -->
<string name="mozac_feature_prompts_manage_address">Handsam adresser</string>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml
index e4dd91d8c6..74d17b4a10 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sc/strings.xml
@@ -17,9 +17,9 @@
<!-- Text for password field in an authentication dialog. -->
<string name="mozac_feature_prompt_password_hint">Crae</string>
<!-- Negative confirmation that we should not save the new or updated login -->
- <string name="mozac_feature_prompt_dont_save">Non sarves</string>
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Non sarves</string>
<!-- Negative confirmation that we should not save the new or updated login -->
- <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Immoe nono</string>
+ <string name="mozac_feature_prompt_dont_save_2">Immoe nono</string>
<!-- Negative confirmation that we should never save a login for this site -->
<string name="mozac_feature_prompt_never_save">Non sarves mai</string>
<!-- Negative confirmation that we should not save a credit card for this site -->
@@ -27,27 +27,27 @@
<!-- Positive confirmation that we should save the new or updated login -->
<string name="mozac_feature_prompt_save_confirmation">Sarva</string>
<!-- Negative confirmation that we should not save the updated login -->
- <string name="mozac_feature_prompt_dont_update">No atualizes</string>
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">No atualizes</string>
<!-- Negative confirmation that we should not save the updated login -->
- <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Immoe nono</string>
+ <string name="mozac_feature_prompt_dont_update_2">Immoe nono</string>
<!-- Positive confirmation that we should save the updated login -->
<string name="mozac_feature_prompt_update_confirmation">Atualiza</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_empty_password">Sa crae non podet èssere bòida</string>
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Sa crae non podet èssere bòida</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Inserta una crae</string>
+ <string name="mozac_feature_prompt_error_empty_password_2">Inserta una crae</string>
<!-- Error text displayed underneath the login field when it is in an error case -->
- <string name="mozac_feature_prompt_error_unknown_cause">Impossìbile sarvare is credentziales</string>
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Impossìbile sarvare is credentziales</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Impossìbile sarvare sa crae</string>
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Impossìbile sarvare sa crae</string>
<!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
- <string name="mozac_feature_prompt_login_save_headline">Boles sarvare custa credentziale?</string>
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Boles sarvare custa credentziale?</string>
<!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
- <string name="mozac_feature_prompt_login_save_headline_2" tools:ignore="UnusedResources">Boles sarvare sa crae?</string>
+ <string name="mozac_feature_prompt_login_save_headline_2">Boles sarvare sa crae?</string>
<!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
- <string name="mozac_feature_prompt_login_update_headline">Boles atualizare custa credentziale?</string>
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Boles atualizare custa credentziale?</string>
<!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
- <string name="mozac_feature_prompt_login_update_headline_2" tools:ignore="UnusedResources">Boles atualizare sa crae?</string>
+ <string name="mozac_feature_prompt_login_update_headline_2">Boles atualizare sa crae?</string>
<!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
<string name="mozac_feature_prompt_login_add_username_headline">Boles agiùnghere su nòmine de utente a sa crae sarvada?</string>
<!-- Text for a label for the field when prompt requesting a text is shown. -->
@@ -97,18 +97,22 @@
<!-- Title of the time picker dialog. -->
<string name="mozac_feature_prompts_set_time">Cunfigura s’ora</string>
<!-- Option in expanded select login prompt that links to login settings -->
- <string name="mozac_feature_prompts_manage_logins">Gesti is credentziales</string>
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Gesti is credentziales</string>
<!-- Option in expanded select password prompt that links to password settings -->
- <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Gesti is craes</string>
+ <string name="mozac_feature_prompts_manage_logins_2">Gesti is craes</string>
<!-- Content description for expanding the saved logins options in the select login prompt -->
- <string name="mozac_feature_prompts_expand_logins_content_description">Ismànnia is credentziales cussigiadas</string>
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Ismànnia is credentziales cussigiadas</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Ismànnia is craes sarvadas</string>
<!-- Content description for collapsing the saved logins options in the select login prompt -->
- <string name="mozac_feature_prompts_collapse_logins_content_description">Mìnima is credentziales cussigiadas</string>
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Mìnima is credentziales cussigiadas</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Mìnima is craes sarvadas</string>
<!-- Header for the select login prompt to allow users to fill a form with a saved login -->
- <string name="mozac_feature_prompts_saved_logins">Credentziales cussigiadas</string>
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Credentziales cussigiadas</string>
<!-- Header for the select password prompt to allow users to fill a form with a saved password -->
- <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Craes sarvadas</string>
+ <string name="mozac_feature_prompts_saved_logins_2">Craes sarvadas</string>
<!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
<string name="mozac_feature_prompts_suggest_strong_password_content_description">Cussìgia una crae segura</string>
@@ -126,35 +130,43 @@
<!-- Credit Card Autofill -->
<!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
- <string name="mozac_feature_prompts_select_credit_card">Seletziona una carta de crèditu</string>
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Seletziona una carta de crèditu</string>
<!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
- <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Imprea una carta sarvada</string>
+ <string name="mozac_feature_prompts_select_credit_card_2">Imprea una carta sarvada</string>
<!-- Content description for expanding the select credit card options in the select credit card prompt. -->
- <string name="mozac_feature_prompts_expand_credit_cards_content_description">Ismànnia is cartas de crèditu cussigiadas</string>
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Ismànnia is cartas de crèditu cussigiadas</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Ismànnia is cartas sarvadas</string>
<!-- Content description for collapsing the select credit card options in the select credit prompt. -->
- <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Mìnima is cartas de crèditu cussigiadas</string>
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Mìnima is cartas de crèditu cussigiadas</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Mìnima is cartas sarvadas</string>
<!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
- <string name="mozac_feature_prompts_manage_credit_cards">Gesti is cartas de crèditu</string>
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Gesti is cartas de crèditu</string>
<!-- Option in the expanded select card prompt that links to cards settings. -->
- <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Gesti is cartas</string>
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Gesti is cartas</string>
<!-- Text for the title of a save credit card dialog. -->
<string name="mozac_feature_prompts_save_credit_card_prompt_title">Boles sarvare custa carta cun seguresa?</string>
<!-- Text for the title of an update credit card dialog. -->
<string name="mozac_feature_prompts_update_credit_card_prompt_title">Boles atualizare sa data de iscadèntzia de sa carta?</string>
<!-- Subtitle text displayed under the title of the save credit card dialog. -->
- <string name="mozac_feature_prompts_save_credit_card_prompt_body">Su nùmeru de carta at a èssere tzifradu. Su còdighe de seguresa no at a èssere sarvadu.</string>
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Su nùmeru de carta at a èssere tzifradu. Su còdighe de seguresa no at a èssere sarvadu.</string>
<!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
- <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s tzifrat su nùmeru de sa carta tua. Su còdighe de seguresa no at a èssere sarvadu.</string>
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s tzifrat su nùmeru de sa carta tua. Su còdighe de seguresa no at a èssere sarvadu.</string>
<!-- Address Autofill -->
<!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
<string name="mozac_feature_prompts_select_address_2">Seletziona un’indiritzu</string>
<!-- Content description for expanding the select addresses options in the select address prompt. -->
- <string name="mozac_feature_prompts_expand_address_content_description">Ismànnia is indiritzos cussigiados</string>
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Ismànnia is indiritzos cussigiados</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Ismànnia is indiritzos sarvados</string>
<!-- Content description for collapsing the select address options in the select address prompt. -->
- <string name="mozac_feature_prompts_collapse_address_content_description">Mìnima is indiritzos cussigiados</string>
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Mìnima is indiritzos cussigiados</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Mìnima is indiritzos sarvados</string>
<!-- Text for the manage addresses button. -->
<string name="mozac_feature_prompts_manage_address">Gesti is indiritzos</string>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml
index dec932c1c5..afe0f515ca 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-sl/strings.xml
@@ -17,9 +17,9 @@
<!-- Text for password field in an authentication dialog. -->
<string name="mozac_feature_prompt_password_hint">Geslo</string>
<!-- Negative confirmation that we should not save the new or updated login -->
- <string name="mozac_feature_prompt_dont_save">Ne shrani</string>
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Ne shrani</string>
<!-- Negative confirmation that we should not save the new or updated login -->
- <string name="mozac_feature_prompt_dont_save_2" tools:ignore="UnusedResources">Ne zdaj</string>
+ <string name="mozac_feature_prompt_dont_save_2">Ne zdaj</string>
<!-- Negative confirmation that we should never save a login for this site -->
<string name="mozac_feature_prompt_never_save">Nikoli ne shranjuj</string>
<!-- Negative confirmation that we should not save a credit card for this site -->
@@ -27,23 +27,27 @@
<!-- Positive confirmation that we should save the new or updated login -->
<string name="mozac_feature_prompt_save_confirmation">Shrani</string>
<!-- Negative confirmation that we should not save the updated login -->
- <string name="mozac_feature_prompt_dont_update">Ne posodobi</string>
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Ne posodobi</string>
<!-- Negative confirmation that we should not save the updated login -->
- <string name="mozac_feature_prompt_dont_update_2" tools:ignore="UnusedResources">Ne zdaj</string>
+ <string name="mozac_feature_prompt_dont_update_2">Ne zdaj</string>
<!-- Positive confirmation that we should save the updated login -->
<string name="mozac_feature_prompt_update_confirmation">Posodobi</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_empty_password">Polje za geslo ne sme biti prazno</string>
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Polje za geslo ne sme biti prazno</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_empty_password_2" tools:ignore="UnusedResources">Vnesite geslo</string>
+ <string name="mozac_feature_prompt_error_empty_password_2">Vnesite geslo</string>
<!-- Error text displayed underneath the login field when it is in an error case -->
- <string name="mozac_feature_prompt_error_unknown_cause">Ni mogoče shraniti povezave</string>
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Ni mogoče shraniti povezave</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_unknown_cause_2" tools:ignore="UnusedResources">Gesla ni mogoče shraniti</string>
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Gesla ni mogoče shraniti</string>
<!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
- <string name="mozac_feature_prompt_login_save_headline">Shranim to prijavo?</string>
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Shranim to prijavo?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Shranim geslo?</string>
<!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
- <string name="mozac_feature_prompt_login_update_headline">Posodobim to prijavo?</string>
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Posodobim to prijavo?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Posodobim geslo?</string>
<!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
<string name="mozac_feature_prompt_login_add_username_headline">Dodaj shranjenemu geslu uporabniško ime?</string>
<!-- Text for a label for the field when prompt requesting a text is shown. -->
@@ -92,22 +96,22 @@
<!-- Title of the time picker dialog. -->
<string name="mozac_feature_prompts_set_time">Nastavi čas</string>
<!-- Option in expanded select login prompt that links to login settings -->
- <string name="mozac_feature_prompts_manage_logins">Upravljanje prijav</string>
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Upravljanje prijav</string>
<!-- Option in expanded select password prompt that links to password settings -->
- <string name="mozac_feature_prompts_manage_logins_2" tools:ignore="UnusedResources">Upravljanje gesel</string>
+ <string name="mozac_feature_prompts_manage_logins_2">Upravljanje gesel</string>
<!-- Content description for expanding the saved logins options in the select login prompt -->
- <string name="mozac_feature_prompts_expand_logins_content_description">Razširi predlagane prijave</string>
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Razširi predlagane prijave</string>
<!-- Content description for expanding the saved passwords options in the select password prompt -->
- <string name="mozac_feature_prompts_expand_logins_content_description_2" tools:ignore="UnusedResources">Prikaži shranjena gesla</string>
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Prikaži shranjena gesla</string>
<!-- Content description for collapsing the saved logins options in the select login prompt -->
- <string name="mozac_feature_prompts_collapse_logins_content_description">Strni predlagane prijave</string>
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Strni predlagane prijave</string>
<!-- Content description for collapsing the saved passwords options in the select password prompt -->
- <string name="mozac_feature_prompts_collapse_logins_content_description_2" tools:ignore="UnusedResources">Skrij shranjena gesla</string>
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Skrij shranjena gesla</string>
<!-- Header for the select login prompt to allow users to fill a form with a saved login -->
- <string name="mozac_feature_prompts_saved_logins">Predlagane prijave</string>
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Predlagane prijave</string>
<!-- Header for the select password prompt to allow users to fill a form with a saved password -->
- <string name="mozac_feature_prompts_saved_logins_2" tools:ignore="UnusedResources">Shranjena gesla</string>
+ <string name="mozac_feature_prompts_saved_logins_2">Shranjena gesla</string>
<!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
<string name="mozac_feature_prompts_suggest_strong_password_content_description">Predlagaj močno geslo</string>
@@ -126,42 +130,42 @@
<!-- Credit Card Autofill -->
<!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
- <string name="mozac_feature_prompts_select_credit_card">Izberite kreditno kartico</string>
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Izberite kreditno kartico</string>
<!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
- <string name="mozac_feature_prompts_select_credit_card_2" tools:ignore="UnusedResources">Uporabi shranjeno kartico</string>
+ <string name="mozac_feature_prompts_select_credit_card_2">Uporabi shranjeno kartico</string>
<!-- Content description for expanding the select credit card options in the select credit card prompt. -->
- <string name="mozac_feature_prompts_expand_credit_cards_content_description">Razširi predlagane kreditne kartice</string>
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Razširi predlagane kreditne kartice</string>
<!-- Content description for expanding the saved card options in the select card prompt. -->
- <string name="mozac_feature_prompts_expand_credit_cards_content_description_2" tools:ignore="UnusedResources">Prikaži shranjene kartice</string>
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Prikaži shranjene kartice</string>
<!-- Content description for collapsing the select credit card options in the select credit prompt. -->
- <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Strni predlagane kreditne kartice</string>
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Strni predlagane kreditne kartice</string>
<!-- Content description for collapsing the saved card options in the select prompt. -->
- <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2" tools:ignore="UnusedResources">Skrij shranjene kartice</string>
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Skrij shranjene kartice</string>
<!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
- <string name="mozac_feature_prompts_manage_credit_cards">Upravljanje kreditnih kartic</string>
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Upravljanje kreditnih kartic</string>
<!-- Option in the expanded select card prompt that links to cards settings. -->
- <string name="mozac_feature_prompts_manage_credit_cards_2" tools:ignore="UnusedResources">Upravljanje kartic</string>
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Upravljanje kartic</string>
<!-- Text for the title of a save credit card dialog. -->
<string name="mozac_feature_prompts_save_credit_card_prompt_title">Želite varno shraniti to kartico?</string>
<!-- Text for the title of an update credit card dialog. -->
<string name="mozac_feature_prompts_update_credit_card_prompt_title">Posodobi datum poteka veljavnosti kartice?</string>
<!-- Subtitle text displayed under the title of the save credit card dialog. -->
- <string name="mozac_feature_prompts_save_credit_card_prompt_body">Številka kartice bo šifrirana. Varnostna koda ne bo shranjena.</string>
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Številka kartice bo šifrirana. Varnostna koda ne bo shranjena.</string>
<!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
- <string name="mozac_feature_prompts_save_credit_card_prompt_body_2" tools:ignore="UnusedResources">%s šifrira številko vaše kartice. Varnostna koda se ne bo shranila.</string>
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s šifrira številko vaše kartice. Varnostna koda se ne bo shranila.</string>
<!-- Address Autofill -->
<!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
<string name="mozac_feature_prompts_select_address_2">Izbira naslova</string>
<!-- Content description for expanding the select addresses options in the select address prompt. -->
- <string name="mozac_feature_prompts_expand_address_content_description">Razširi predlagane naslove</string>
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Razširi predlagane naslove</string>
<!-- Content description for expanding the saved addresses options in the select address prompt. -->
- <string name="mozac_feature_prompts_expand_address_content_description_2" tools:ignore="UnusedResources">Prikaži shranjene naslove</string>
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Prikaži shranjene naslove</string>
<!-- Content description for collapsing the select address options in the select address prompt. -->
- <string name="mozac_feature_prompts_collapse_address_content_description">Strni predlagane naslove</string>
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Strni predlagane naslove</string>
<!-- Content description for collapsing the saved address options in the select address prompt. -->
- <string name="mozac_feature_prompts_collapse_address_content_description_2" tools:ignore="UnusedResources">Skrij shranjene naslove</string>
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Skrij shranjene naslove</string>
<!-- Text for the manage addresses button. -->
<string name="mozac_feature_prompts_manage_address">Upravljanje naslovov</string>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml
index 8069cf1b66..d0bf44fd5e 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values-su/strings.xml
@@ -17,7 +17,9 @@
<!-- Text for password field in an authentication dialog. -->
<string name="mozac_feature_prompt_password_hint">Kecap sandi</string>
<!-- Negative confirmation that we should not save the new or updated login -->
- <string name="mozac_feature_prompt_dont_save">Ulah diteundeun</string>
+ <string name="mozac_feature_prompt_dont_save" moz:removedIn="125" tools:ignore="UnusedResources">Ulah diteundeun</string>
+ <!-- Negative confirmation that we should not save the new or updated login -->
+ <string name="mozac_feature_prompt_dont_save_2">Moal waka</string>
<!-- Negative confirmation that we should never save a login for this site -->
<string name="mozac_feature_prompt_never_save">Ulah diteundeun</string>
<!-- Negative confirmation that we should not save a credit card for this site -->
@@ -25,17 +27,27 @@
<!-- Positive confirmation that we should save the new or updated login -->
<string name="mozac_feature_prompt_save_confirmation">Teundeun</string>
<!-- Negative confirmation that we should not save the updated login -->
- <string name="mozac_feature_prompt_dont_update">Ulah ngapdét</string>
+ <string name="mozac_feature_prompt_dont_update" moz:removedIn="125" tools:ignore="UnusedResources">Ulah ngapdét</string>
+ <!-- Negative confirmation that we should not save the updated login -->
+ <string name="mozac_feature_prompt_dont_update_2">Moal waka</string>
<!-- Positive confirmation that we should save the updated login -->
<string name="mozac_feature_prompt_update_confirmation">Apdét</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_empty_password">Widang kecap sandi henteu kaci kosong</string>
+ <string name="mozac_feature_prompt_error_empty_password" moz:removedIn="125" tools:ignore="UnusedResources">Widang kecap sandi henteu kaci kosong</string>
+ <!-- Error text displayed underneath the password field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_empty_password_2">Asupkeun sandi</string>
+ <!-- Error text displayed underneath the login field when it is in an error case -->
+ <string name="mozac_feature_prompt_error_unknown_cause" moz:removedIn="125" tools:ignore="UnusedResources">Teu bisa neundeun login</string>
<!-- Error text displayed underneath the password field when it is in an error case -->
- <string name="mozac_feature_prompt_error_unknown_cause">Teu bisa neundeun login</string>
+ <string name="mozac_feature_prompt_error_unknown_cause_2">Teu bisa nyimpen santi</string>
<!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new login. -->
- <string name="mozac_feature_prompt_login_save_headline">Teundeun ieu login?</string>
+ <string name="mozac_feature_prompt_login_save_headline" moz:removedIn="125" tools:ignore="UnusedResources">Teundeun ieu login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new username and password and user decides if app should save the new password. -->
+ <string name="mozac_feature_prompt_login_save_headline_2">Simpen sandi?</string>
<!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the login. -->
- <string name="mozac_feature_prompt_login_update_headline">Apdét ieu login?</string>
+ <string name="mozac_feature_prompt_login_update_headline" moz:removedIn="125" tools:ignore="UnusedResources">Apdét ieu login?</string>
+ <!-- Prompt message displayed when app detects a user has entered a new password for an existing login and user decides if app should update the password. -->
+ <string name="mozac_feature_prompt_login_update_headline_2">Anyarkeun sandi?</string>
<!-- Prompt message displayed when app detects a user has entered a username for an existing login without a username and user decides if app should update the login. -->
<string name="mozac_feature_prompt_login_add_username_headline">Tambahkeun sandiasma kana kecap sandi anu diteundeun?</string>
<!-- Text for a label for the field when prompt requesting a text is shown. -->
@@ -84,13 +96,22 @@
<!-- Title of the time picker dialog. -->
<string name="mozac_feature_prompts_set_time">Setél wanci</string>
<!-- Option in expanded select login prompt that links to login settings -->
- <string name="mozac_feature_prompts_manage_logins">Kokolakeun login</string>
+ <string name="mozac_feature_prompts_manage_logins" moz:removedIn="125" tools:ignore="UnusedResources">Kokolakeun login</string>
+ <!-- Option in expanded select password prompt that links to password settings -->
+ <string name="mozac_feature_prompts_manage_logins_2">Atur sandi</string>
<!-- Content description for expanding the saved logins options in the select login prompt -->
- <string name="mozac_feature_prompts_expand_logins_content_description">Legaan saran login</string>
+ <string name="mozac_feature_prompts_expand_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Legaan saran login</string>
+ <!-- Content description for expanding the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_expand_logins_content_description_2">Legaan sandi anu disimpen</string>
<!-- Content description for collapsing the saved logins options in the select login prompt -->
- <string name="mozac_feature_prompts_collapse_logins_content_description">Leutikan saran login</string>
+ <string name="mozac_feature_prompts_collapse_logins_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Leutikan saran login</string>
+ <!-- Content description for collapsing the saved passwords options in the select password prompt -->
+ <string name="mozac_feature_prompts_collapse_logins_content_description_2">Heureutan sandi nu disimpen</string>
<!-- Header for the select login prompt to allow users to fill a form with a saved login -->
- <string name="mozac_feature_prompts_saved_logins">Saran login</string>
+ <string name="mozac_feature_prompts_saved_logins" moz:removedIn="125" tools:ignore="UnusedResources">Saran login</string>
+
+ <!-- Header for the select password prompt to allow users to fill a form with a saved password -->
+ <string name="mozac_feature_prompts_saved_logins_2">Sandi nu disimpen</string>
<!-- Content description for the suggest strong password prompt to allow users to fill a form with a suggested strong password -->
<string name="mozac_feature_prompts_suggest_strong_password_content_description">Usulkeun kecap sandi anu wedel</string>
@@ -109,27 +130,42 @@
<!-- Credit Card Autofill -->
<!-- Header for the select credit card prompt to allow users to fill a form with a saved credit card. -->
- <string name="mozac_feature_prompts_select_credit_card">Pilih kartu kiridit</string>
+ <string name="mozac_feature_prompts_select_credit_card" moz:removedIn="125" tools:ignore="UnusedResources">Pilih kartu kiridit</string>
+ <!-- Header for the select card prompt to allow users to fill a form with a saved card. -->
+ <string name="mozac_feature_prompts_select_credit_card_2">Paké kartu nu disimpen</string>
<!-- Content description for expanding the select credit card options in the select credit card prompt. -->
- <string name="mozac_feature_prompts_expand_credit_cards_content_description">Legaan kartu kiridit anu disarankeun</string>
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Legaan kartu kiridit anu disarankeun</string>
+ <!-- Content description for expanding the saved card options in the select card prompt. -->
+ <string name="mozac_feature_prompts_expand_credit_cards_content_description_2">Legaan kartu nu disimpen</string>
<!-- Content description for collapsing the select credit card options in the select credit prompt. -->
- <string name="mozac_feature_prompts_collapse_credit_cards_content_description">Tilep saran kartu kiridit</string>
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Tilep saran kartu kiridit</string>
+ <!-- Content description for collapsing the saved card options in the select prompt. -->
+ <string name="mozac_feature_prompts_collapse_credit_cards_content_description_2">Heureutan kartu nu disimpen</string>
<!-- Option in the expanded select credit card prompt that links to credit cards settings. -->
- <string name="mozac_feature_prompts_manage_credit_cards">Kokolakeun kartu kiridit</string>
+ <string name="mozac_feature_prompts_manage_credit_cards" moz:removedIn="125" tools:ignore="UnusedResources">Kokolakeun kartu kiridit</string>
+ <!-- Option in the expanded select card prompt that links to cards settings. -->
+ <string name="mozac_feature_prompts_manage_credit_cards_2">Atur kartu</string>
<!-- Text for the title of a save credit card dialog. -->
<string name="mozac_feature_prompts_save_credit_card_prompt_title">Teundeun ieu kartu sacara aman?</string>
<!-- Text for the title of an update credit card dialog. -->
<string name="mozac_feature_prompts_update_credit_card_prompt_title">Mutahirkeun titimangsa kadaluwarsa kartu?</string>
<!-- Subtitle text displayed under the title of the save credit card dialog. -->
- <string name="mozac_feature_prompts_save_credit_card_prompt_body">Nomer kartu bakal diénkrip. Kode kaamanan moal diteundeun.</string>
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body" moz:removedIn="125" tools:ignore="UnusedResources">Nomer kartu bakal diénkrip. Kode kaamanan moal diteundeun.</string>
+
+ <!-- Subtitle text displayed under the title of the saved card dialog. Parameter will be replaced by app name-->
+ <string name="mozac_feature_prompts_save_credit_card_prompt_body_2">%s énkripsi nomer kartu anjeun. Kode kaamanan anjeun moal disimpen.</string>
<!-- Address Autofill -->
<!-- Header for the select address prompt to allow users to fill a form with a saved address. -->
<string name="mozac_feature_prompts_select_address_2">Pilih alamat</string>
<!-- Content description for expanding the select addresses options in the select address prompt. -->
- <string name="mozac_feature_prompts_expand_address_content_description">Legaan saran alamat</string>
+ <string name="mozac_feature_prompts_expand_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Legaan saran alamat</string>
+ <!-- Content description for expanding the saved addresses options in the select address prompt. -->
+ <string name="mozac_feature_prompts_expand_address_content_description_2">Legaan alamat nu disimpen</string>
<!-- Content description for collapsing the select address options in the select address prompt. -->
- <string name="mozac_feature_prompts_collapse_address_content_description">Leutikan saran alamat</string>
+ <string name="mozac_feature_prompts_collapse_address_content_description" moz:removedIn="125" tools:ignore="UnusedResources">Leutikan saran alamat</string>
+ <!-- Content description for collapsing the saved address options in the select address prompt. -->
+ <string name="mozac_feature_prompts_collapse_address_content_description_2">Heureutan alamat nu disimpen</string>
<!-- Text for the manage addresses button. -->
<string name="mozac_feature_prompts_manage_address">Kokolakeun alamat</string>
diff --git a/mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml b/mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml
index 5943e14165..1564be16e2 100644
--- a/mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml
+++ b/mobile/android/android-components/components/feature/prompts/src/main/res/values/quarantined_strings.xml
@@ -5,5 +5,5 @@
<!-- Strings in this file are not yet ready for localization. -->
<resources>
<!-- Text of the title of a dialog when a page is requesting to open a new window. -->
- <string name="mozac_feature_prompts_popup_dialog_title">Prevent this site from opening a pop-up window?</string>
+ <string name="mozac_feature_prompts_popup_dialog_title">Allow this site to open?</string>
</resources>
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt
index 3c1cfba67c..7f8157bf0d 100644
--- a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/PromptFeatureTest.kt
@@ -1805,6 +1805,74 @@ class PromptFeatureTest {
}
@Test
+ fun `WHEN login autofill is enabled THEN the select login prompt is shown`() {
+ val loginPickerView: SelectablePromptView<Login> = mock()
+
+ val login =
+ Login(guid = "A", origin = "origin", username = "user123", password = "password123")
+
+ val feature =
+ PromptFeature(
+ activity = mock<Activity>(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ loginDelegate = object : LoginDelegate {
+ override val loginPickerView = loginPickerView
+ override val onManageLogins = {}
+ },
+ isLoginAutofillEnabled = { true },
+ ) { }
+ feature.loginPicker = loginPicker
+ val onLoginDismiss: () -> Unit = {}
+ val onLoginConfirm: (Login) -> Unit = {}
+
+ val selectLoginRequest =
+ PromptRequest.SelectLoginPrompt(listOf(login), null, onLoginConfirm, onLoginDismiss)
+
+ feature.start()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, selectLoginRequest))
+ .joinBlocking()
+
+ verify(loginPicker).handleSelectLoginRequest(selectLoginRequest)
+ }
+
+ @Test
+ fun `WHEN login autofill is disabled THEN the select login prompt is not shown`() {
+ val loginPickerView: SelectablePromptView<Login> = mock()
+
+ val login =
+ Login(guid = "A", origin = "origin", username = "user123", password = "password123")
+
+ val feature =
+ PromptFeature(
+ activity = mock<Activity>(),
+ store = store,
+ fileUploadsDirCleaner = mock(),
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ exitFullscreenUsecase = mock(),
+ loginDelegate = object : LoginDelegate {
+ override val loginPickerView = loginPickerView
+ override val onManageLogins = {}
+ },
+ ) { }
+ feature.loginPicker = loginPicker
+ val onLoginDismiss: () -> Unit = {}
+ val onLoginConfirm: (Login) -> Unit = {}
+
+ val selectLoginRequest =
+ PromptRequest.SelectLoginPrompt(listOf(login), null, onLoginConfirm, onLoginDismiss)
+
+ feature.start()
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, selectLoginRequest))
+ .joinBlocking()
+ verify(loginPicker, never()).handleSelectLoginRequest(selectLoginRequest)
+ }
+
+ @Test
fun `When page is refreshed login dialog is dismissed`() {
val loginPickerView: SelectablePromptView<Login> = mock()
val feature =
@@ -1819,6 +1887,7 @@ class PromptFeatureTest {
override val loginPickerView = loginPickerView
override val onManageLogins = {}
},
+ isLoginAutofillEnabled = { true },
) { }
feature.loginPicker = loginPicker
val onLoginDismiss: () -> Unit = {}
@@ -2348,6 +2417,70 @@ class PromptFeatureTest {
}
@Test
+ fun `GIVEN saveLoginDialog is visible WHEN host doesn't change THEN keep saveLoginDialog visible`() {
+ val newUrlSameDomain = "https://www.mozilla.org/en-GB/firefox/browsers/mobile/android/"
+ val promptRequest = PromptRequest.Share(
+ data = mock(),
+ onSuccess = {},
+ onFailure = {},
+ onDismiss = {},
+ )
+ val saveLoginPrompt: SaveLoginDialogFragment = mock()
+
+ val feature = spy(
+ PromptFeature(
+ mock<Activity>(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ exitFullscreenUsecase = mock(),
+ isSaveLoginEnabled = { true },
+ loginValidationDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.activePrompt = WeakReference(saveLoginPrompt)
+
+ store.dispatch(ContentAction.UpdateUrlAction(tabId, newUrlSameDomain)).joinBlocking()
+ verify(saveLoginPrompt, never()).dismiss()
+ }
+
+ @Test
+ fun `GIVEN saveLoginDialog is visible WHEN host changes THEN dismiss saveLoginDialog`() {
+ val newUrlDifferentDomain = "https://www.android.com/new-features-on-android/"
+ val promptRequest = PromptRequest.Share(
+ data = mock(),
+ onSuccess = {},
+ onFailure = {},
+ onDismiss = {},
+ )
+ val saveLoginPrompt: SaveLoginDialogFragment = mock()
+
+ val feature = spy(
+ PromptFeature(
+ activity = mock(),
+ store = store,
+ tabsUseCases = mock(),
+ fragmentManager = fragmentManager,
+ fileUploadsDirCleaner = mock(),
+ exitFullscreenUsecase = mock(),
+ isSaveLoginEnabled = { true },
+ shareDelegate = mock(),
+ ) { },
+ )
+ feature.start()
+
+ store.dispatch(ContentAction.UpdatePromptRequestAction(tabId, promptRequest)).joinBlocking()
+ feature.activePrompt = WeakReference(saveLoginPrompt)
+
+ store.dispatch(ContentAction.UpdateUrlAction(tabId, newUrlDifferentDomain)).joinBlocking()
+ verify(saveLoginPrompt, times(1)).dismiss()
+ }
+
+ @Test
fun `prompt will always start the save login dialog with an icon`() {
val feature = PromptFeature(
activity = mock(),
diff --git a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt
index b0fee5f9a1..df8aba7705 100644
--- a/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt
+++ b/mobile/android/android-components/components/feature/prompts/src/test/java/mozilla/components/feature/prompts/dialog/TextPromptDialogFragmentTest.kt
@@ -6,9 +6,11 @@ package mozilla.components.feature.prompts.dialog
import android.content.DialogInterface.BUTTON_POSITIVE
import android.os.Looper.getMainLooper
+import android.view.inputmethod.EditorInfo.IME_NULL
import android.widget.CheckBox
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
+import androidx.core.view.inputmethod.EditorInfoCompat
import androidx.core.view.isVisible
import androidx.test.ext.junit.runners.AndroidJUnit4
import mozilla.components.feature.prompts.R.id
@@ -41,7 +43,7 @@ class TextPromptDialogFragmentTest {
@Test
fun `build dialog`() {
val fragment = spy(
- TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true),
+ TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true, false),
)
doReturn(appCompatContext).`when`(fragment).requireContext()
@@ -73,12 +75,14 @@ class TextPromptDialogFragmentTest {
inputValue.text = "NewValue"
assertEquals(inputValue.text.toString(), "NewValue")
+
+ assertEquals(IME_NULL, inputValue.imeOptions)
}
@Test
fun `TextPrompt with hasShownManyDialogs equals false should not have a checkbox`() {
val fragment = spy(
- TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", false),
+ TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", false, false),
)
doReturn(appCompatContext).`when`(fragment).requireContext()
@@ -95,7 +99,7 @@ class TextPromptDialogFragmentTest {
@Test
fun `Clicking on positive button notifies the feature`() {
val fragment = spy(
- TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", false),
+ TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", false, false),
)
fragment.feature = mockFeature
@@ -115,7 +119,7 @@ class TextPromptDialogFragmentTest {
@Test
fun `After checking no more dialogs checkbox feature onNoMoreDialogsChecked must be called`() {
val fragment = spy(
- TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", true),
+ TextPromptDialogFragment.newInstance("sessionId", "uid", false, "title", "label", "defaultValue", true, false),
)
fragment.feature = mockFeature
@@ -139,7 +143,7 @@ class TextPromptDialogFragmentTest {
@Test
fun `touching outside of the dialog must notify the feature onCancel`() {
val fragment = spy(
- TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true),
+ TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true, false),
)
fragment.feature = mockFeature
@@ -150,4 +154,19 @@ class TextPromptDialogFragmentTest {
verify(mockFeature).onCancel("sessionId", "uid")
}
+
+ @Test
+ fun `when TextPromptDialogFragment is created in private mode then keyboard is in private mode`() {
+ val fragment = spy(
+ TextPromptDialogFragment.newInstance("sessionId", "uid", true, "title", "label", "defaultValue", true, true),
+ )
+
+ fragment.feature = mockFeature
+ doReturn(appCompatContext).`when`(fragment).requireContext()
+
+ val dialog = fragment.onCreateDialog(null).also { it.show() }
+ val editText = dialog.findViewById<TextView>(id.input_value)
+
+ assertEquals(EditorInfoCompat.IME_FLAG_NO_PERSONALIZED_LEARNING, editText.imeOptions)
+ }
}
diff --git a/mobile/android/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/WebAppShortcutManager.kt b/mobile/android/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/WebAppShortcutManager.kt
index a97b3b8415..e754e89c60 100644
--- a/mobile/android/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/WebAppShortcutManager.kt
+++ b/mobile/android/android-components/components/feature/pwa/src/main/java/mozilla/components/feature/pwa/WebAppShortcutManager.kt
@@ -26,6 +26,7 @@ import mozilla.components.browser.icons.decoder.ICOIconDecoder
import mozilla.components.browser.icons.extension.toIconRequest
import mozilla.components.browser.icons.generator.DefaultIconGenerator
import mozilla.components.browser.icons.loader.DataUriIconLoader
+import mozilla.components.browser.icons.loader.DefaultMemoryInfoProvider
import mozilla.components.browser.icons.loader.HttpIconLoader
import mozilla.components.browser.icons.loader.MemoryIconLoader
import mozilla.components.browser.icons.preparer.MemoryIconPreparer
@@ -271,7 +272,7 @@ private fun webAppIcons(
),
loaders = listOf(
MemoryIconLoader(pwaIconMemoryCache),
- HttpIconLoader(httpClient),
+ HttpIconLoader(httpClient, DefaultMemoryInfoProvider(context)),
DataUriIconLoader(),
),
decoders = listOf(
diff --git a/mobile/android/android-components/components/feature/qr/build.gradle b/mobile/android/android-components/components/feature/qr/build.gradle
index f491a3e0a8..beebfcd1f5 100644
--- a/mobile/android/android-components/components/feature/qr/build.gradle
+++ b/mobile/android/android-components/components/feature/qr/build.gradle
@@ -28,6 +28,7 @@ dependencies {
implementation ComponentsDependencies.kotlin_coroutines
implementation ComponentsDependencies.androidx_appcompat
+ implementation ComponentsDependencies.androidx_core_ktx
implementation project(':support-ktx')
implementation project(':support-base')
diff --git a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/manifest.template.json b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/manifest.template.json
index 616b2036eb..7eb8d17589 100644
--- a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/manifest.template.json
+++ b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/manifest.template.json
@@ -10,7 +10,10 @@
"content_scripts": [
{
"matches": ["<all_urls>"],
- "js": ["readability/readability-readerable-0.4.2.js", "readerview-content.js"],
+ "js": [
+ "readability/readability-readerable-0.4.2.js",
+ "readerview-content.js"
+ ],
"run_at": "document_idle"
}
],
diff --git a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-background.js b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-background.js
index 136e5e40e3..41e7b1f538 100644
--- a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-background.js
+++ b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-background.js
@@ -7,16 +7,16 @@
browser.runtime.onMessage.addListener(message => {
switch (message.action) {
- case 'addSerializedDoc':
- browser.storage.session.set({ [message.id]: message.doc });
- return Promise.resolve();
- case 'getSerializedDoc':
- return (async () => {
- let doc = await browser.storage.session.get(message.id);
- browser.storage.session.remove(message.id);
- return doc[message.id];
- })();
- default:
- console.error(`Received unsupported action ${message.action}`);
- }
+ case "addSerializedDoc":
+ browser.storage.session.set({ [message.id]: message.doc });
+ return Promise.resolve();
+ case "getSerializedDoc":
+ return (async () => {
+ let doc = await browser.storage.session.get(message.id);
+ browser.storage.session.remove(message.id);
+ return doc[message.id];
+ })();
+ default:
+ console.error(`Received unsupported action ${message.action}`);
+ }
});
diff --git a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-content.js b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-content.js
index 1d5859e793..cdcbe0434c 100644
--- a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-content.js
+++ b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview-content.js
@@ -17,43 +17,53 @@ const blockedHosts = [
"pinterest.com",
"reddit.com",
"twitter.com",
- "youtube.com"
+ "youtube.com",
];
function isReaderable() {
- if (!supportedProtocols.includes(location.protocol)) {
- return false;
- }
+ if (!supportedProtocols.includes(location.protocol)) {
+ return false;
+ }
- if (blockedHosts.some(blockedHost => location.hostname.endsWith(blockedHost))) {
- return false;
- }
+ if (
+ blockedHosts.some(blockedHost => location.hostname.endsWith(blockedHost))
+ ) {
+ return false;
+ }
- if (location.pathname == "/") {
- return false;
- }
+ if (location.pathname == "/") {
+ return false;
+ }
- return isProbablyReaderable(document, _isNodeVisible);
+ return isProbablyReaderable(document, _isNodeVisible);
}
function _isNodeVisible(node) {
- return node.clientHeight > 0 && node.clientWidth > 0;
+ return node.clientHeight > 0 && node.clientWidth > 0;
}
function connectNativePort() {
let port = browser.runtime.connectNative("mozacReaderview");
- port.onMessage.addListener((message) => {
- switch (message.action) {
- case 'cachePage':
- let serializedDoc = new XMLSerializer().serializeToString(document);
- browser.runtime.sendMessage({action: "addSerializedDoc", doc: serializedDoc, id: message.id});
- break;
- case 'checkReaderState':
- port.postMessage({type: 'checkReaderState', baseUrl: browser.runtime.getURL("/"), readerable: isReaderable()});
- break;
- default:
- console.error(`Received unsupported action ${message.action}`);
- }
+ port.onMessage.addListener(message => {
+ switch (message.action) {
+ case "cachePage":
+ let serializedDoc = new XMLSerializer().serializeToString(document);
+ browser.runtime.sendMessage({
+ action: "addSerializedDoc",
+ doc: serializedDoc,
+ id: message.id,
+ });
+ break;
+ case "checkReaderState":
+ port.postMessage({
+ type: "checkReaderState",
+ baseUrl: browser.runtime.getURL("/"),
+ readerable: isReaderable(),
+ });
+ break;
+ default:
+ console.error(`Received unsupported action ${message.action}`);
+ }
});
return port;
@@ -65,11 +75,11 @@ let port = connectNativePort();
// do want to connect a new native port to trigger a new readerable check and
// apply the same logic (as on page load) in our feature class (e.g. updating the
// toolbar etc.)
-window.addEventListener("pageshow", (event) => {
- port = (port != null)? port : connectNativePort();
+window.addEventListener("pageshow", event => {
+ port = port != null ? port : connectNativePort();
});
-window.addEventListener("pagehide", (event) => {
+window.addEventListener("pagehide", event => {
port.disconnect();
port = null;
});
diff --git a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.html b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.html
index b09deb7811..99afab71a4 100644
--- a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.html
+++ b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.html
@@ -4,14 +4,14 @@
<html>
<head>
- <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
- <meta name="viewport" content="width=device-width; user-scalable=0" />
- <meta http-equiv="cache-control" content="no-store" />
+ <meta content="text/html; charset=UTF-8" http-equiv="content-type" />
+ <meta name="viewport" content="width=device-width; user-scalable=0" />
+ <meta http-equiv="cache-control" content="no-store" />
- <link rel="stylesheet" href="readerview.css" />
+ <link rel="stylesheet" href="readerview.css" />
- <script src="readability/JSDOMParser-0.4.2.js"></script>
- <script src="readability/readability-0.4.2.js"></script>
- <script src="readerview.js"></script>
+ <script src="readability/JSDOMParser-0.4.2.js"></script>
+ <script src="readability/readability-0.4.2.js"></script>
+ <script src="readerview.js"></script>
</head>
</html>
diff --git a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.js b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.js
index 23b1f35250..ddea9218b0 100644
--- a/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.js
+++ b/mobile/android/android-components/components/feature/readerview/src/main/assets/extensions/readerview/readerview.js
@@ -15,11 +15,10 @@ const preservedClasses = [
"visuallyhidden",
"wp-caption",
"wp-caption-text",
- "wp-smiley"
+ "wp-smiley",
];
class ReaderView {
-
static get MIN_FONT_SIZE() {
return 1;
}
@@ -37,18 +36,24 @@ class ReaderView {
* @param url the url of the article.
* @param options the fontSize, fontType and colorScheme to use.
*/
- show(doc, url, options = {fontSize: 4, fontType: "sans-serif", colorScheme: "light"}) {
- let result = new Readability(doc, {classesToPreserve: preservedClasses}).parse();
+ show(
+ doc,
+ url,
+ options = { fontSize: 4, fontType: "sans-serif", colorScheme: "light" }
+ ) {
+ let result = new Readability(doc, {
+ classesToPreserve: preservedClasses,
+ }).parse();
result.language = doc.documentElement.lang;
document.title = result.title;
let article = Object.assign(
result,
- {url: new URL(url)},
- {readingTime: this.getReadingTime(result.length, result.language)},
- {byline: this.getByline(result)},
- {dir: this.getTextDirection(result)},
- {title: this.getTitle(result)}
+ { url: new URL(url) },
+ { readingTime: this.getReadingTime(result.length, result.language) },
+ { byline: this.getByline(result) },
+ { dir: this.getTextDirection(result) },
+ { title: this.getTitle(result) }
);
document.body.outerHTML = this.createHtmlBody(article);
@@ -57,7 +62,7 @@ class ReaderView {
this.setFontType(options.fontType);
this.setColorScheme(options.colorScheme);
if (options.scrollY) {
- window.scrollTo({top: options.scrollY, left: 0, behavior: "instant"});
+ window.scrollTo({ top: options.scrollY, left: 0, behavior: "instant" });
}
}
@@ -68,7 +73,10 @@ class ReaderView {
* @param changeAmount e.g. +1, or -1.
*/
changeFontSize(changeAmount) {
- var size = Math.max(ReaderView.MIN_FONT_SIZE, Math.min(ReaderView.MAX_FONT_SIZE, this.fontSize + changeAmount));
+ var size = Math.max(
+ ReaderView.MIN_FONT_SIZE,
+ Math.min(ReaderView.MAX_FONT_SIZE, this.fontSize + changeAmount)
+ );
this.setFontSize(size);
}
@@ -79,7 +87,7 @@ class ReaderView {
* and ReaderView.MAX_FONT_SIZE.
*/
setFontSize(fontSize) {
- let size = (10 + 2 * fontSize) + "px";
+ let size = 10 + 2 * fontSize + "px";
let readerView = document.getElementById("mozac-readerview-container");
readerView.style.setProperty("font-size", size);
this.fontSize = fontSize;
@@ -108,8 +116,8 @@ class ReaderView {
* or sepia.
*/
setColorScheme(colorScheme) {
- if(!['light', 'sepia', 'dark'].includes(colorScheme)) {
- console.error(`Invalid color scheme specified: ${colorScheme}`)
+ if (!["light", "sepia", "dark"].includes(colorScheme)) {
+ console.error(`Invalid color scheme specified: ${colorScheme}`);
return;
}
@@ -152,7 +160,7 @@ class ReaderView {
</div>
</div>
</body>
- `
+ `;
}
/**
@@ -162,17 +170,21 @@ class ReaderView {
* @param optional language of the article, defaults to en.
*/
getReadingTime(length, lang = "en") {
- const [readingSpeed, readingSpeedLang] = this.getReadingSpeedForLanguage(lang);
+ const [readingSpeed, readingSpeedLang] =
+ this.getReadingSpeedForLanguage(lang);
const charactersPerMinuteLow = readingSpeed.cpm - readingSpeed.variance;
const charactersPerMinuteHigh = readingSpeed.cpm + readingSpeed.variance;
const readingTimeMinsSlow = Math.ceil(length / charactersPerMinuteLow);
- const readingTimeMinsFast = Math.ceil(length / charactersPerMinuteHigh);
+ const readingTimeMinsFast = Math.ceil(length / charactersPerMinuteHigh);
// Construct a localized and "humanized" reading time in minutes.
// If we have both a fast and slow reading time we'll show both e.g.
// "2 - 4 minutes", otherwise we'll just show "4 minutes".
try {
- var parts = new Intl.RelativeTimeFormat(readingSpeedLang).formatToParts(readingTimeMinsSlow, 'minute');
+ var parts = new Intl.RelativeTimeFormat(readingSpeedLang).formatToParts(
+ readingTimeMinsSlow,
+ "minute"
+ );
if (parts.length == 3) {
// No need to use part[0] which represents the literal "in".
var readingTime = parts[1].value; // reading time in minutes
@@ -183,8 +195,7 @@ class ReaderView {
}
return readingTimeString;
}
- }
- catch(error) {
+ } catch (error) {
console.error(`Failed to format reading time: ${error}`);
}
@@ -202,60 +213,62 @@ class ReaderView {
*/
getReadingSpeedForLanguage(lang) {
const readingSpeed = new Map([
- [ "en", {cpm: 987, variance: 118 } ],
- [ "ar", {cpm: 612, variance: 88 } ],
- [ "de", {cpm: 920, variance: 86 } ],
- [ "es", {cpm: 1025, variance: 127 } ],
- [ "fi", {cpm: 1078, variance: 121 } ],
- [ "fr", {cpm: 998, variance: 126 } ],
- [ "he", {cpm: 833, variance: 130 } ],
- [ "it", {cpm: 950, variance: 140 } ],
- [ "jw", {cpm: 357, variance: 56 } ],
- [ "nl", {cpm: 978, variance: 143 } ],
- [ "pl", {cpm: 916, variance: 126 } ],
- [ "pt", {cpm: 913, variance: 145 } ],
- [ "ru", {cpm: 986, variance: 175 } ],
- [ "sk", {cpm: 885, variance: 145 } ],
- [ "sv", {cpm: 917, variance: 156 } ],
- [ "tr", {cpm: 1054, variance: 156 } ],
- [ "zh", {cpm: 255, variance: 29 } ],
+ ["en", { cpm: 987, variance: 118 }],
+ ["ar", { cpm: 612, variance: 88 }],
+ ["de", { cpm: 920, variance: 86 }],
+ ["es", { cpm: 1025, variance: 127 }],
+ ["fi", { cpm: 1078, variance: 121 }],
+ ["fr", { cpm: 998, variance: 126 }],
+ ["he", { cpm: 833, variance: 130 }],
+ ["it", { cpm: 950, variance: 140 }],
+ ["jw", { cpm: 357, variance: 56 }],
+ ["nl", { cpm: 978, variance: 143 }],
+ ["pl", { cpm: 916, variance: 126 }],
+ ["pt", { cpm: 913, variance: 145 }],
+ ["ru", { cpm: 986, variance: 175 }],
+ ["sk", { cpm: 885, variance: 145 }],
+ ["sv", { cpm: 917, variance: 156 }],
+ ["tr", { cpm: 1054, variance: 156 }],
+ ["zh", { cpm: 255, variance: 29 }],
]);
- return readingSpeed.has(lang) ? [readingSpeed.get(lang), lang] : [readingSpeed.get("en"), "en"];
- }
-
- getByline(article) {
- return article.byline || "";
- }
-
- /**
- * Attempts to read the optional text direction from the article and uses
- * language mapping to detect rtl, if missing.
- */
- getTextDirection(article) {
- if (article.dir) {
- return article.dir;
- }
-
- if (["ar", "fa", "he", "ug", "ur"].includes(article.language)) {
- return "rtl";
- }
-
- return "ltr";
- }
-
- getTitle(article) {
- return article.title || "";
- }
-
- escapeHTML(text) {
- return text
- .replace(/\&/g, "&amp;")
- .replace(/\</g, "&lt;")
- .replace(/\>/g, "&gt;")
- .replace(/\"/g, "&quot;")
- .replace(/\'/g, "&#039;");
- }
+ return readingSpeed.has(lang)
+ ? [readingSpeed.get(lang), lang]
+ : [readingSpeed.get("en"), "en"];
+ }
+
+ getByline(article) {
+ return article.byline || "";
+ }
+
+ /**
+ * Attempts to read the optional text direction from the article and uses
+ * language mapping to detect rtl, if missing.
+ */
+ getTextDirection(article) {
+ if (article.dir) {
+ return article.dir;
+ }
+
+ if (["ar", "fa", "he", "ug", "ur"].includes(article.language)) {
+ return "rtl";
+ }
+
+ return "ltr";
+ }
+
+ getTitle(article) {
+ return article.title || "";
+ }
+
+ escapeHTML(text) {
+ return text
+ .replace(/\&/g, "&amp;")
+ .replace(/\</g, "&lt;")
+ .replace(/\>/g, "&gt;")
+ .replace(/\"/g, "&quot;")
+ .replace(/\'/g, "&#039;");
+ }
}
function fetchDocument(url) {
@@ -282,16 +295,16 @@ function fetchDocument(url) {
function getPreparedDocument(id, url) {
return new Promise((resolve, reject) => {
-
- browser.runtime.sendMessage({action: "getSerializedDoc", id: id}).then((serializedDoc) => {
+ browser.runtime
+ .sendMessage({ action: "getSerializedDoc", id: id })
+ .then(serializedDoc => {
if (serializedDoc) {
let doc = new JSDOMParser().parse(serializedDoc, url);
resolve(doc);
} else {
reject();
}
- }
- );
+ });
});
}
@@ -306,23 +319,26 @@ function connectNativePort() {
let baseUrl = browser.runtime.getURL("/");
let port = browser.runtime.connectNative("mozacReaderviewActive");
- port.onMessage.addListener((message) => {
+ port.onMessage.addListener(message => {
switch (message.action) {
- case 'show':
+ case "show":
async function showAsync(options) {
try {
let doc;
if (typeof Promise.any === "function") {
- doc = await Promise.any([fetchDocument(articleUrl), getPreparedDocument(id, articleUrl)]);
+ doc = await Promise.any([
+ fetchDocument(articleUrl),
+ getPreparedDocument(id, articleUrl),
+ ]);
} else {
try {
doc = await getPreparedDocument(id, articleUrl);
- } catch(e) {
+ } catch (e) {
doc = await fetchDocument(articleUrl);
}
}
readerView.show(doc, articleUrl, options);
- } catch(e) {
+ } catch (e) {
console.log(e);
// We weren't able to find the prepared document and also
// failed to fetch it. Let's load the original page which
@@ -332,19 +348,23 @@ function connectNativePort() {
}
showAsync(message.value);
break;
- case 'hide':
+ case "hide":
window.location.href = articleUrl;
- case 'setColorScheme':
+ case "setColorScheme":
readerView.setColorScheme(message.value.toLowerCase());
break;
- case 'changeFontSize':
+ case "changeFontSize":
readerView.changeFontSize(message.value);
break;
- case 'setFontType':
+ case "setFontType":
readerView.setFontType(message.value.toLowerCase());
break;
- case 'checkReaderState':
- port.postMessage({baseUrl: baseUrl, activeUrl: articleUrl, readerable: true});
+ case "checkReaderState":
+ port.postMessage({
+ baseUrl: baseUrl,
+ activeUrl: articleUrl,
+ readerable: true,
+ });
break;
default:
console.error(`Received invalid action ${message.action}`);
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/extensions/ads/adsTelemetry.js b/mobile/android/android-components/components/feature/search/src/main/assets/extensions/ads/adsTelemetry.js
index 65bf306835..0778799326 100644
--- a/mobile/android/android-components/components/feature/search/src/main/assets/extensions/ads/adsTelemetry.js
+++ b/mobile/android/android-components/components/feature/search/src/main/assets/extensions/ads/adsTelemetry.js
@@ -10,12 +10,12 @@
* to the native application.
*/
function sendCurrentState() {
- let message = {
- 'url': document.location.href,
- 'urls': getLinks(),
- 'cookies': getCookies()
- };
- browser.runtime.sendNativeMessage("MozacBrowserAdsMessage", message);
+ let message = {
+ url: document.location.href,
+ urls: getLinks(),
+ cookies: getCookies(),
+ };
+ browser.runtime.sendNativeMessage("MozacBrowserAdsMessage", message);
}
/**
@@ -24,17 +24,17 @@ function sendCurrentState() {
* @return {Array<string>} containing all current links in the current page.
*/
function getLinks() {
- let urls = [];
+ let urls = [];
- let anchors = document.getElementsByTagName("a");
- for (let anchor of anchors) {
- if (!anchor.href) {
- continue;
- }
- urls.push(anchor.href);
+ let anchors = document.getElementsByTagName("a");
+ for (let anchor of anchors) {
+ if (!anchor.href) {
+ continue;
}
+ urls.push(anchor.href);
+ }
- return urls;
+ return urls;
}
/**
@@ -43,40 +43,38 @@ function getLinks() {
* @return {Array<{name: string, value: string}>} containing all cookies.
*/
function getCookies() {
- let cookiesList = document.cookie.split("; ");
- let result = [];
+ let cookiesList = document.cookie.split("; ");
+ let result = [];
- cookiesList.forEach(cookie => {
- var [name, ...value] = cookie.split('=');
- // For that special cases where the value contains '='.
- value = value.join("=")
+ cookiesList.forEach(cookie => {
+ var [name, ...value] = cookie.split("=");
+ // For that special cases where the value contains '='.
+ value = value.join("=");
- result.push({
- "name" : name,
- "value" : value
- });
+ result.push({
+ name: name,
+ value: value,
});
+ });
- return result;
+ return result;
}
// Whenever a page is first accessed or when loaded from cache
// send all needed data about the ads provider to the app.
const events = ["pageshow", "load"];
const eventLogger = event => {
- switch (event.type) {
+ switch (event.type) {
case "load":
- sendCurrentState();
- break;
+ sendCurrentState();
+ break;
case "pageshow":
- if (event.persisted) {
- sendCurrentState();
- }
- break;
+ if (event.persisted) {
+ sendCurrentState();
+ }
+ break;
default:
- console.log('Event:', event.type);
- }
+ console.log("Event:", event.type);
+ }
};
-events.forEach(eventName =>
- window.addEventListener(eventName, eventLogger)
-);
+events.forEach(eventName => window.addEventListener(eventName, eventLogger));
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/extensions/search/searchTelemetry.js b/mobile/android/android-components/components/feature/search/src/main/assets/extensions/search/searchTelemetry.js
index 3199335fdf..355f378b9c 100644
--- a/mobile/android/android-components/components/feature/search/src/main/assets/extensions/search/searchTelemetry.js
+++ b/mobile/android/android-components/components/feature/search/src/main/assets/extensions/search/searchTelemetry.js
@@ -9,11 +9,11 @@
* to the native application.
*/
function sendCurrentState() {
- let message = {
- 'url': document.location.href,
- 'cookies': getCookies()
- };
- browser.runtime.sendNativeMessage("MozacBrowserSearchMessage", message);
+ let message = {
+ url: document.location.href,
+ cookies: getCookies(),
+ };
+ browser.runtime.sendNativeMessage("MozacBrowserSearchMessage", message);
}
/**
@@ -22,40 +22,38 @@ function sendCurrentState() {
* @return {Array<{name: string, value: string}>} containing all cookies.
*/
function getCookies() {
- let cookiesList = document.cookie.split("; ");
- let result = [];
+ let cookiesList = document.cookie.split("; ");
+ let result = [];
- cookiesList.forEach(cookie => {
- var [name, ...value] = cookie.split('=');
- // For that special cases where the cookie value contains '='.
- value = value.join("=");
+ cookiesList.forEach(cookie => {
+ var [name, ...value] = cookie.split("=");
+ // For that special cases where the cookie value contains '='.
+ value = value.join("=");
- result.push({
- "name" : name,
- "value" : value
- });
+ result.push({
+ name: name,
+ value: value,
});
+ });
- return result;
+ return result;
}
// Whenever a page is first accessed or when loaded from cache
// send all needed data about the search provider to the app.
const events = ["pageshow", "load"];
const eventLogger = event => {
- switch (event.type) {
+ switch (event.type) {
case "load":
- sendCurrentState();
- break;
+ sendCurrentState();
+ break;
case "pageshow":
- if (event.persisted) {
- sendCurrentState();
- }
- break;
+ if (event.persisted) {
+ sendCurrentState();
+ }
+ break;
default:
- console.log('Event:', event.type);
- }
+ console.log("Event:", event.type);
+ }
};
-events.forEach(eventName =>
- window.addEventListener(eventName, eventLogger)
-);
+events.forEach(eventName => window.addEventListener(eventName, eventLogger));
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/search/list.json b/mobile/android/android-components/components/feature/search/src/main/assets/search/list.json
index b2bb3d4698..5bd6349fe5 100644
--- a/mobile/android/android-components/components/feature/search/src/main/assets/search/list.json
+++ b/mobile/android/android-components/components/feature/search/src/main/assets/search/list.json
@@ -2,9 +2,7 @@
"default": {
"searchDefault": "Google",
"searchOrder": ["Google", "Bing"],
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia"]
},
"regionOverrides": {
"US": {
@@ -14,898 +12,1038 @@
"locales": {
"ach": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia"]
}
},
"an": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-es","wikipedia-an"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-es",
+ "wikipedia-an"
]
}
},
"ar": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-ar"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-ar"]
}
},
"as": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-as"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-as"]
}
},
"ast": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "ebay-es", "wikipedia-ast"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-es",
+ "wikipedia-ast"
]
}
},
"az": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "azerdict", "wikipedia-az"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "azerdict",
+ "wikipedia-az"
]
}
},
"be": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-be"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-be"]
},
"BY": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "ddg", "wikipedia-be"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia-be"
]
},
"KZ": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "ddg", "wikipedia-be"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia-be"
]
},
"RU": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "ddg", "wikipedia-be"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia-be"
]
},
"TR": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "ddg", "wikipedia-be"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia-be"
]
}
},
"bg": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "pazaruvaj", "wikipedia-bg"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "pazaruvaj",
+ "wikipedia-bg"
]
}
},
"bn": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-bn"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-bn"]
}
},
"bn-BD": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-bn"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-bn"]
}
},
"bn-IN": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-bn"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-bn"]
}
},
"br": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-br"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-br"]
}
},
"bs": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-bs"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-bs"]
}
},
"ca": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-es", "wikipedia-ca"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-es",
+ "wikipedia-ca"
]
}
},
"cak": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-es"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-es"]
}
},
"cs": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "mapy-cz", "seznam-cz", "wikipedia-cz"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "mapy-cz",
+ "seznam-cz",
+ "wikipedia-cz"
]
}
},
"cy": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-co-uk", "ddg", "ebay-co-uk", "wikipedia-cy"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-co-uk",
+ "wikipedia-cy"
]
}
},
"da": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "amazon-co-uk", "bing", "ddg", "wikipedia-da"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-da"]
}
},
"de": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-de", "ddg", "ecosia", "qwant", "wikipedia-de", "ebay-de"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ecosia",
+ "qwant",
+ "wikipedia-de",
+ "ebay-de"
]
}
},
"de-AT": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-de", "ddg", "ecosia", "qwant", "wikipedia-de", "ebay-at"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ecosia",
+ "qwant",
+ "wikipedia-de",
+ "ebay-at"
]
}
},
"dsb": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-de", "ddg", "wikipedia-dsb", "ebay-de"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-dsb",
+ "ebay-de"
]
}
},
"el": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-el"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-el"]
}
},
"en-AU": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-au", "ddg", "wikipedia", "ebay-au"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia",
+ "ebay-au"
]
}
},
"en-CA": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-ca", "ddg", "wikipedia", "ebay-ca"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia",
+ "ebay-ca"
]
}
},
"en-IE": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-co-uk", "ddg", "qwant", "wikipedia", "ebay-ie"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "qwant",
+ "wikipedia",
+ "ebay-ie"
]
}
},
"en-GB": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-co-uk", "ddg", "qwant", "wikipedia", "ebay-co-uk"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "qwant",
+ "wikipedia",
+ "ebay-co-uk"
]
},
"BY": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "amazon-co-uk", "ddg", "qwant", "wikipedia"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "qwant",
+ "wikipedia"
]
},
"KZ": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "amazon-co-uk", "ddg", "qwant", "wikipedia"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "qwant",
+ "wikipedia"
]
},
"RU": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "amazon-co-uk", "ddg", "qwant", "wikipedia"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "qwant",
+ "wikipedia"
]
},
"TR": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "amazon-co-uk", "ddg", "qwant", "wikipedia"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "qwant",
+ "wikipedia"
]
}
},
"en-US": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "ebay", "wikipedia"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay",
+ "wikipedia"
]
},
"BY": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "amazondotcom", "ddg", "wikipedia"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia"
]
},
"KZ": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "amazondotcom", "ddg", "wikipedia"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia"
]
},
"RU": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "amazondotcom", "ddg", "wikipedia"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia"
]
},
"TR": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "amazondotcom", "ddg", "wikipedia"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia"
]
}
},
"en-ZA": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "ddg", "wikipedia"
- ]
+ "visibleDefaultEngines": ["google-b-m", "ddg", "wikipedia"]
}
},
"eo": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-eo"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-eo"]
}
},
"es-AR": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "ddg", "mercadolibre-ar", "wikipedia-es"
+ "google-b-m",
+ "ddg",
+ "mercadolibre-ar",
+ "wikipedia-es"
]
}
},
"es-CL": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "mercadolibre-cl", "wikipedia-es"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "mercadolibre-cl",
+ "wikipedia-es"
]
}
},
"es-ES": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-es", "amazon-es", "ebay-es"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-es",
+ "ebay-es"
]
}
},
"es-MX": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "mercadolibre-mx", "wikipedia-es"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "mercadolibre-mx",
+ "wikipedia-es"
]
}
},
"et": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "amazon-co-uk", "ddg", "wikipedia-et"
- ]
+ "visibleDefaultEngines": ["google-b-m", "ddg", "wikipedia-et"]
}
},
"eu": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-es", "wikipedia-eu"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-es",
+ "wikipedia-eu"
]
}
},
"fa": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-fa"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-fa"]
}
},
"ff": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-fr", "ddg", "wikipedia-fr"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-fr"]
}
},
"fi": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "amazondotcom", "bing", "ddg", "wikipedia-fi"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-fi"]
}
},
"fr-BE": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "qwant", "wikipedia-fr", "ebay-befr"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "qwant",
+ "wikipedia-fr",
+ "ebay-befr"
]
}
},
"fr-CA": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-ca", "ddg", "wikipedia-fr", "ebay-ca"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-fr",
+ "ebay-ca"
]
}
},
"fr-FR": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "qwant", "wikipedia-fr", "amazon-fr", "ebay-fr"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "qwant",
+ "wikipedia-fr",
+ "ebay-fr"
]
}
},
"fr": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-fr", "qwant", "wikipedia-fr"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-fr",
+ "qwant",
+ "wikipedia-fr"
]
}
},
"fy-NL": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-nl", "wikipedia-fy-NL"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-nl",
+ "wikipedia-fy-NL"
]
}
},
"ga-IE": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "amazon-co-uk", "ddg", "ebay-ie", "wikipedia-ga-IE"
+ "google-b-m",
+ "ddg",
+ "ebay-ie",
+ "wikipedia-ga-IE"
]
}
},
"gd": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-co-uk", "faclair-beag", "wikipedia-gd"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-co-uk",
+ "faclair-beag",
+ "wikipedia-gd"
]
}
},
"gl": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "ebay-es", "wikipedia-gl"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-es",
+ "wikipedia-gl"
]
}
},
"gn": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-gn"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-gn"]
}
},
"gu-IN": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-gu"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-gu"]
}
},
"he": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-he"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-he"]
}
},
"hi-IN": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-hi"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-hi"]
}
},
"hr": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-co-uk", "ddg", "wikipedia-hr"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-hr"]
}
},
"hsb": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-de", "ddg", "wikipedia-hsb", "ebay-de"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-hsb",
+ "ebay-de"
]
}
},
"hu": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "ddg", "vatera", "wikipedia-hu"
- ]
+ "visibleDefaultEngines": ["google-b-m", "ddg", "vatera", "wikipedia-hu"]
}
},
"hy-AM": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-hy-AM"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-hy-AM"
]
}
},
"ia": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-ia"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-ia"]
}
},
"id": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-id"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-id"]
}
},
"is": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-is"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-is"]
}
},
"it": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-it", "amazon-it", "ebay-it"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-it",
+ "ebay-it"
]
}
},
"ja": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "amazon-jp", "bing", "ddg", "rakuten", "wikipedia-ja", "yahoo-jp", "yahoo-jp-auctions"
+ "google-b-m",
+ "amazon-jp",
+ "bing",
+ "ddg",
+ "rakuten",
+ "wikipedia-ja",
+ "yahoo-jp",
+ "yahoo-jp-auctions"
]
}
},
"ka": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-ka"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-ka"]
}
},
"kab": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-kab"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-kab"]
}
},
"kk": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-kk"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-kk"]
},
"KZ": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "ddg", "wikipedia-kk"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia-kk"
]
},
"BY": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "ddg", "wikipedia-kk"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia-kk"
]
},
"RU": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "ddg", "wikipedia-kk"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia-kk"
]
},
"TR": {
"visibleDefaultEngines": [
- "google-com-nocodes", "bing", "ddg", "wikipedia-kk"
+ "google-com-nocodes",
+ "bing",
+ "ddg",
+ "wikipedia-kk"
]
}
},
"km": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-km"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-km"]
}
},
"kn": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-kn", "wiktionary-kn"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-kn",
+ "wiktionary-kn"
]
}
},
"ko": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "ddg", "daum-kr"
- ]
+ "visibleDefaultEngines": ["google-b-m", "ddg", "daum-kr"]
}
},
"lij": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-it", "ddg", "wikipedia-lij", "ebay-it"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-lij",
+ "ebay-it"
]
}
},
"lo": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-lo"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-lo"]
}
},
"lt": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-lt"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-lt"]
}
},
"ltg": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-co-uk", "wikipedia-ltg"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "wikipedia-ltg"]
}
},
"lv": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "ddg", "salidzinilv", "wikipedia-lv"
+ "google-b-m",
+ "ddg",
+ "salidzinilv",
+ "wikipedia-lv"
]
}
},
"mai": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-hi"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-hi"]
}
},
"meh": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-es"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-es"]
}
},
"mix": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-es"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-es"]
}
},
"ml": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-ml"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-ml"]
}
},
"mr": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-mr"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-mr"]
}
},
"ms": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-ms"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-ms"]
}
},
"my": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-my"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-my"]
}
},
"nb-NO": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "gulesider-mobile-NO", "wikipedia-NO"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "gulesider-mobile-NO",
+ "wikipedia-NO"
]
}
},
"ne-NP": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-ne"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-ne"]
}
},
"nl-NL": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-nl", "amazon-nl", "ebay-nl"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-nl",
+ "ebay-nl"
]
}
},
"nl": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-nl", "wikipedia-nl"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-nl",
+ "wikipedia-nl"
]
}
},
"nn-NO": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "gulesider-mobile-NO", "wikipedia-NN"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "gulesider-mobile-NO",
+ "wikipedia-NN"
]
}
},
"oc": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-oc", "wiktionary-oc"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-oc",
+ "wiktionary-oc"
]
}
},
"or": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-or", "wiktionary-or"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-or",
+ "wiktionary-or"
]
}
},
"pa-IN": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-pa"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-pa"]
}
},
"pl": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-pl", "ebay-pl"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-pl",
+ "ebay-pl"
]
}
},
"pt-BR": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-pt"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-pt"]
}
},
"pt-PT": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "ddg", "wikipedia-pt"
- ]
+ "visibleDefaultEngines": ["google-b-m", "ddg", "wikipedia-pt"]
}
},
"rm": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-ch", "leo_ende_de", "wikipedia-rm"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-ch",
+ "leo_ende_de",
+ "wikipedia-rm"
]
}
},
"ro": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-ro"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-ro"]
}
},
"ru": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "ddg", "wikipedia-ru"
- ]
+ "visibleDefaultEngines": ["google-b-m", "ddg", "wikipedia-ru"]
},
"RU": {
- "visibleDefaultEngines": [
- "google-com-nocodes", "ddg", "wikipedia-ru"
- ]
+ "visibleDefaultEngines": ["google-com-nocodes", "ddg", "wikipedia-ru"]
},
"BY": {
- "visibleDefaultEngines": [
- "google-com-nocodes", "ddg", "wikipedia-ru"
- ]
+ "visibleDefaultEngines": ["google-com-nocodes", "ddg", "wikipedia-ru"]
},
"KZ": {
- "visibleDefaultEngines": [
- "google-com-nocodes", "ddg", "wikipedia-ru"
- ]
+ "visibleDefaultEngines": ["google-com-nocodes", "ddg", "wikipedia-ru"]
},
"TR": {
- "visibleDefaultEngines": [
- "google-com-nocodes", "ddg", "wikipedia-ru"
- ]
+ "visibleDefaultEngines": ["google-com-nocodes", "ddg", "wikipedia-ru"]
}
},
"sk": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "ddg", "wikipedia-sk"
- ]
+ "visibleDefaultEngines": ["google-b-m", "ddg", "wikipedia-sk"]
}
},
"sl": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "ddg", "ceneje", "odpiralni", "wikipedia-sl"
+ "google-b-m",
+ "ddg",
+ "ceneje",
+ "odpiralni",
+ "wikipedia-sl"
]
}
},
"son": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "ddg", "bing", "amazon-fr", "wikipedia-fr"
- ]
+ "visibleDefaultEngines": ["google-b-m", "ddg", "bing", "wikipedia-fr"]
}
},
"sq": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-co-uk", "ddg", "wikipedia-sq"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-sq"]
}
},
"sr": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-sr"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-sr"]
}
},
"sv-SE": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "prisjakt-sv-SE", "ddg", "wikipedia-sv-SE", "amazon-se", "ebay-ch"
+ "google-b-m",
+ "bing",
+ "prisjakt-sv-SE",
+ "ddg",
+ "wikipedia-sv-SE",
+ "ebay-ch"
]
}
},
"ta": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-ta", "wiktionary-ta"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-ta",
+ "wiktionary-ta"
]
}
},
"te": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-te", "wiktionary-te"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-te",
+ "wiktionary-te"
]
}
},
"th": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-th"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-th"]
}
},
"tl": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg"]
}
},
"tr": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-tr"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-tr"]
},
"TR": {
"visibleDefaultEngines": [
- "google-com-nocodes", "ddg", "bing", "wikipedia-tr"
+ "google-com-nocodes",
+ "ddg",
+ "bing",
+ "wikipedia-tr"
]
},
"BY": {
"visibleDefaultEngines": [
- "google-com-nocodes", "ddg", "bing", "wikipedia-tr"
+ "google-com-nocodes",
+ "ddg",
+ "bing",
+ "wikipedia-tr"
]
},
"KZ": {
"visibleDefaultEngines": [
- "google-com-nocodes", "ddg", "bing", "wikipedia-tr"
+ "google-com-nocodes",
+ "ddg",
+ "bing",
+ "wikipedia-tr"
]
},
"RU": {
"visibleDefaultEngines": [
- "google-com-nocodes", "ddg", "bing", "wikipedia-tr"
+ "google-com-nocodes",
+ "ddg",
+ "bing",
+ "wikipedia-tr"
]
}
},
"trs": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-es"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-es"]
}
},
"uk": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-uk"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-uk"]
}
},
"ur": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazon-in", "ddg", "wikipedia-ur"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-ur"]
}
},
"uz": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-uz"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-uz"]
}
},
"vi": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "coccoc", "ddg", "wikipedia-vi"
- ]
+ "visibleDefaultEngines": ["google-b-m", "coccoc", "ddg", "wikipedia-vi"]
}
},
"wo": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "ebay-fr", "wikipedia-wo"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "ebay-fr",
+ "wikipedia-wo"
]
}
},
"xh": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia"]
}
},
"zam": {
"default": {
- "visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-es"
- ]
+ "visibleDefaultEngines": ["google-b-m", "bing", "ddg", "wikipedia-es"]
}
},
"zh-CN": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "baidu", "bing", "ddg", "wikipedia-zh-CN"
+ "google-b-m",
+ "baidu",
+ "bing",
+ "ddg",
+ "wikipedia-zh-CN"
]
},
"CN": {
@@ -915,7 +1053,10 @@
"zh-TW": {
"default": {
"visibleDefaultEngines": [
- "google-b-m", "bing", "ddg", "wikipedia-zh-TW"
+ "google-b-m",
+ "bing",
+ "ddg",
+ "wikipedia-zh-TW"
]
}
}
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-au.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-au.xml
deleted file mode 100644
index 6e8801d893..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-au.xml
+++ /dev/null
@@ -1,12 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.com.au</ShortName>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.com.au/s">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.com.au/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-ca.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-ca.xml
deleted file mode 100644
index 932f62b276..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-ca.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.ca</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.ca/s" resultdomain="amazon.ca">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.ca/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-co-uk.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-co-uk.xml
deleted file mode 100644
index 5ff238cc73..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-co-uk.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.co.uk</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.co.uk/s" resultdomain="amazon.co.uk">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.co.uk/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-de.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-de.xml
deleted file mode 100644
index 137abd4b94..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-de.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.de</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.de/s" resultdomain="amazon.de">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.de/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-es.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-es.xml
deleted file mode 100644
index c989b9f361..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-es.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.es</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.es/s" resultdomain="amazon.es">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.es/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-fr.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-fr.xml
deleted file mode 100644
index abfb75bee5..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-fr.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.fr</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.fr/s" resultdomain="amazon.fr">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.fr/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-in.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-in.xml
deleted file mode 100644
index 2c1be1f73a..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-in.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.in</ShortName>
-<InputEncoding>utf-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.in/s">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.in/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-it.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-it.xml
deleted file mode 100644
index 805bbf0af2..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-it.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.it</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.it/s" resultdomain="amazon.it">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.it/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-nl.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-nl.xml
deleted file mode 100644
index 75530332cc..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-nl.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.nl</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.nl/s">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.nl/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-se.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-se.xml
deleted file mode 100644
index 98f7b2d35a..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazon-se.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.se</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="16" height="16">data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAABaFBMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////mQACAgH7+/uEhIT9mACFhYX9/f0JCQkFBQWwagBtQgAJBQANDQ36lgDr6+vj4+O7u7u3t7dDQ0M9PT0oKCgbGxvVgADGdwCqZgBYNQBCKAAkFgAcEQARCgDw8PDS0tKysrKtra2Xl5eSkpJtbW1dXV1aWlpLS0tHR0c5OTkzMzMuLi4qKirrjQDniwDehgC7cACZXACKUwBjOwBPLwA8JAAsGwAgEwD19fXn5+fZ2dnPz8/Ly8vHx8ekpKSdnZ2JiYl/f394eHggICD7lwD2lADRfgDPfACeXwCETwBdOAA4IgA0IAAWDgDd3d3W1ta/v7+oqKiPj497e3twcHBpaWljY2NWVlYUFBTsjgDiiADZgwDAcwC3bgCmYwCPVgB2RwBnPgBKLQAMCADt7e1fX19SUlIWFhYSEhLwkADujwCRVwB8SwB6SgBSMgAPCQBOQY7nAAAABnRSTlMA8si8ZBgxEvPEAAADLklEQVRo3u2aZ1MiMRiA0dO8WeWkd6miNEVF6c3ee++ent3r9e/fgm6iggJuMjfO7PMxs+wTkrcEJiqRluYmxIGm5hZVidZ3iBvvWkUBj/dTg7g+iCstqmbElWZVE+JKkwpxRhEoAkWgCBTBfxBoNVpEYCz41hexbbUBfBoPtQ8KzAUOm/huyui+kanAaYWn9HxmKBgwQxUizAT2NqjKHCNBZw9UZ2SejcAGzzHNROAAgqU92n8wDgSzwEIwBRLvNUhEmKGGGAOBQCJoRhqaJIIvDARDJPBJah0SQS8DgWbnPkjDZGiQCGaZRJEw7+ibnZ5yVn4paOdTrofptqO3JdAOH89O28ZHO7gIBtsnSEliL9AeBYDAQeAYA+ApmOsAroJ9oHQErFORMNs8sAPBfPC13CCYCjRbIGE1kjxgKOgDiQkNl1KxAxJ2aSjGUqAhEWShhwyWAlqag2Ssl4yF5QuOQSJU5RQQlC+ge2wlxxhakyzyBVF6VpTO1SGgDMgW2OFpA56DBwS0cgUfaB1qi5aOwXvwiD3ZeRAAyvautaInxOQKeuFl+uUKjKNQwcQuSMzIr6YDFd0gqDGO3W/LIYt+cPRk3SMCQvMWEBnpZ9PR7GNAmXTcZZsZwDJEzmaFnF6vv/HXFnQJVXt+NDhS7mfbYTLn2GTIKX0oHcd3eGoKXK7ccwnR6TSiqmQWsMRiTUFxGbt9qDGuvfmC/7Z7PY3x99p7YLjAeClrQK+gG+Ozejb5So3xj0wRNULxt6cbFTFerSuKfEmMsVr35xbVx6beLT6/gdYwvqkvTA2XaixiSum7aq9LNlV6OOlDaAUnhXrzYH0Z3+HK5PzoOfze9HJ5KgsZA0LCCdY3kGjej1gicb66lvcLj1ZlY23Vc4rv0RWQSA4nDI1kspAtKSjquMud0ul05+6lU9PD8YsCKqMzrTdaKnweE65B4meXtBmm7Ctq0aY+9YLjJO0TaGTkX1ns/npXlhZwBXHdVZ68XfYPEMPG9aXHnYwvYvViwnW28stL4peJgFJ9zm/qb01FgJAiUASKACFFUAH3SwPcrz1wv7jB++oJ/8sz3K///AMH5R5E/GGrogAAAABJRU5ErkJggg==</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.se/s" resultdomain="amazon.se">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.se/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazondotcom.xml b/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazondotcom.xml
deleted file mode 100644
index 2af84b936c..0000000000
--- a/mobile/android/android-components/components/feature/search/src/main/assets/searchplugins/amazondotcom.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<!-- This Source Code Form is subject to the terms of the Mozilla Public
- - License, v. 2.0. If a copy of the MPL was not distributed with this
- - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
-
-<SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
-<ShortName>Amazon.com</ShortName>
-<InputEncoding>UTF-8</InputEncoding>
-<Image width="32" height="32">data:image/png;base64,AAABAAIAEBAAAAEACACtAQAAJgAAACAgAAABACAArAMAANMBAACJUE5HDQoaCgAAAA1JSERSAAAAEAAAABAIBgAAAB/z/2EAAAF0SURBVDiNpVM9S8NQFD2RvC6KCE6V5gdUHBonF6eQrQ4q6dbVjkKH/gN3oVmLk8VFK7gKuiklU6lguliHpliXhrRLKxyH1NB8aEUP3OHdd+9559z3niQLgelkQvwBIpWSJJKx5k6ng1qthpduFwCwl8+jWCwmszACy7IoCxGLSqUSLSVJxgiOSiXKQlDTddq2HawzipJIELPQ7/fhOA5c14XneTiv19FoNAAA08lksQXbtplT1UQbv7JgFAqUhWBOVek4Dqum+SPBUlTRl1zDMJBOp9FqtYK90Wi02MK8fE3XQxaqpvmNhXEvSFiWxYyiBJOvmiaNQoGartPzPLJzRjbLfgQEN1ly+JzoMYS7fb/x6ZS8wBxB79ZPNMshNTGMe2T3yj/scp3k/Dt4bQCPB/5g1nYB5TA8rLd7YHAN7FwBYhUYtoHNY4Qf0rsFtE/8wiiWs8B2FdjQgI/ZbcgrSPxMcG1g8ABM3ZmiLb8xAdJ/v/Mnx1XnNJorMikAAAAASUVORK5CYIKJUE5HDQoaCgAAAA1JSERSAAAAIAAAACAIBgAAAHN6evQAAANzSURBVFiFtZdPaBRXHMc/r+4GlGAbylYWXZFQaCOt7CSK/+hJt/XSogUDvfTQ0OzBg2hgblEQFA9iLeauBDyYUB3x0kv6J0pr4gZLum0yFIpt3V3cUJoymxwS4edhMnEn+3bmJSFfGNj3m9+832d+7/d7bxaWJCKbRaRPRP6QjdPkUozN1EtE2jc4sA6kHUAt0UwCb2OoWq2G67rLY6UU6XSadDptOgXAr8B+ROScKbbjOHI0l5NEMqm9juZy4jjOajLRhxik3vO8yMArL9u2TQEKmHid7O4OBdiUSMRCGGZiPhbAcRxtgKxlycnu7qaZOZLLmQBILMCXvb2xKbZtWwthotfiSlUp1WDr7+8PjXt6elZT/eH5RUTinOrbTilFZ2dng0+ypaXBtriwEAuQMKFsbW2lq6treVypVCiXy/z86BEAo6OjAIiINmPrBgiC3rh5k+HhYYrFotZntcEBjNrQcRzZkckY7wOrKcLYGpiYmODAwYPae2fPnCGzcye7Ozr46NixhvsmNRCbgaxlabfcUqkU8ltrBiIBXNfVTlwoFEJ+5XJ5Y/aBqakprb2+I6L8KpVK7ApEAvzz7JnWXqvVQuPbQ0Nav/Hx8ViAyCUYGRnRHj71W/Hg4GDTAyprWeJ5XuQSRAI0W9tgcpPWvD4wsHYAkcajOApopW1HJiOu664PoNnHSH3KbdsWz/NCp2LWsmKDGwEEENcHBpZBNiUSkrUs6c3nG1ry4qVL0pvPh9d+riRSfSxSHRdZDNdEeCf8/WvYkoFdn8ZXr4nmyzB2CqoOBFH2XIPdp5t0wey0yDdvinx33CderxY9f565kv/7fofIb9dCLuF94PV34JOnsPAvjOyD70/A0zvwItz3xqqOQfEi3N8OcyWoTUHqUMhFfxi9qMGT8/Dn1Vepy3wBbXsgdRja3oVEa+Mz/03DbBGqD+D5Pf9FFHDgDiS3QvECfPhj/VP/KxGZBN7XvsFMAcY+98mDo34lrqqzrfwc2HYcrMt+ZmceQ8tW//crPVQi0gdc0QIE+usuTH8Fsw/8YEFQHZQC2s/Crs8gtTdyWiAf/DX7CcjGeTNfhpkxmPsbnv+wFFBBss1fnjfeg7f2Ny6PXg+VUh/4LyCSEpF76y97Y90SkVSQsGWJyAngY2Avzepi7foFeAIMKaW+DYwvASfwPtL4PwlOAAAAAElFTkSuQmCC</Image>
-<Url type="text/html" method="GET" template="https://www.amazon.com/s" resultdomain="amazon.com">
- <Param name="k" value="{searchTerms}"/>
-</Url>
-<SearchForm>https://www.amazon.com/</SearchForm>
-</SearchPlugin>
diff --git a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/internal/SearchUrlBuilder.kt b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/internal/SearchUrlBuilder.kt
index 9fc9f61dd5..40eec1a13c 100644
--- a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/internal/SearchUrlBuilder.kt
+++ b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/internal/SearchUrlBuilder.kt
@@ -17,10 +17,8 @@ import java.util.Locale
// be inconsistent between Kotlin versions. So to be safe we avoid this completely by
// constructing the strings manually.
-// Parameters copied from nsSearchService.js
+// Parameters copied from SearchEngine.sys.mjs on desktop.
private const val MOZ_PARAM_LOCALE = "{" + "moz:locale" + "}"
-private const val MOZ_PARAM_DIST_ID = "{" + "moz:distributionID" + "}"
-private const val MOZ_PARAM_OFFICIAL = "{" + "moz:official" + "}"
// Supported OpenSearch parameters
// See http://opensearch.a9.com/spec/1.1/querysyntax/#core
@@ -66,8 +64,6 @@ private fun paramSubstitution(template: String, query: String, inputEncoding: St
val locale = Locale.getDefault().toString()
result = result.replace(MOZ_PARAM_LOCALE, locale)
- result = result.replace(MOZ_PARAM_DIST_ID, "")
- result = result.replace(MOZ_PARAM_OFFICIAL, "unofficial")
result = result.replace(OS_PARAM_USER_DEFINED, query)
result = result.replace(OS_PARAM_INPUT_ENCODING, inputEncoding)
diff --git a/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/middleware/SearchMiddlewareTest.kt b/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/middleware/SearchMiddlewareTest.kt
index a93a6e1700..78b4e53e51 100644
--- a/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/middleware/SearchMiddlewareTest.kt
+++ b/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/middleware/SearchMiddlewareTest.kt
@@ -222,14 +222,13 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(6, store.state.search.regionSearchEngines.size)
+ assertEquals(5, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.co.uk", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
- assertEquals("Wicipedia (cy)", store.state.search.regionSearchEngines[5].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[3].name)
+ assertEquals("Wicipedia (cy)", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -299,14 +298,13 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(6, store.state.search.regionSearchEngines.size)
+ assertEquals(5, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.com.au", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Wikipedia", store.state.search.regionSearchEngines[4].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Wikipedia", store.state.search.regionSearchEngines[3].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -338,15 +336,14 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(7, store.state.search.regionSearchEngines.size)
+ assertEquals(6, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.co.uk", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Qwant", store.state.search.regionSearchEngines[4].name)
- assertEquals("Wikipedia", store.state.search.regionSearchEngines[5].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[6].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Qwant", store.state.search.regionSearchEngines[3].name)
+ assertEquals("Wikipedia", store.state.search.regionSearchEngines[4].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -378,15 +375,14 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(7, store.state.search.regionSearchEngines.size)
+ assertEquals(6, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.co.uk", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Qwant", store.state.search.regionSearchEngines[4].name)
- assertEquals("Wikipedia", store.state.search.regionSearchEngines[5].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[6].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Qwant", store.state.search.regionSearchEngines[3].name)
+ assertEquals("Wikipedia", store.state.search.regionSearchEngines[4].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -457,14 +453,13 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(6, store.state.search.regionSearchEngines.size)
+ assertEquals(5, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.ca", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Wikipédia (fr)", store.state.search.regionSearchEngines[4].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Wikipédia (fr)", store.state.search.regionSearchEngines[3].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -496,15 +491,14 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(7, store.state.search.regionSearchEngines.size)
+ assertEquals(6, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
assertEquals("Qwant", store.state.search.regionSearchEngines[3].name)
assertEquals("Wikipédia (fr)", store.state.search.regionSearchEngines[4].name)
- assertEquals("Amazon.fr", store.state.search.regionSearchEngines[5].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[6].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -536,15 +530,15 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(8, store.state.search.regionSearchEngines.size)
+ assertEquals(7, store.state.search.regionSearchEngines.size)
+
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.de", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Ecosia", store.state.search.regionSearchEngines[4].name)
- assertEquals("Qwant", store.state.search.regionSearchEngines[5].name)
- assertEquals("Wikipedia (de)", store.state.search.regionSearchEngines[6].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[7].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Ecosia", store.state.search.regionSearchEngines[3].name)
+ assertEquals("Qwant", store.state.search.regionSearchEngines[4].name)
+ assertEquals("Wikipedia (de)", store.state.search.regionSearchEngines[5].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[6].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -576,15 +570,15 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(8, store.state.search.regionSearchEngines.size)
+ assertEquals(7, store.state.search.regionSearchEngines.size)
+
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.de", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Ecosia", store.state.search.regionSearchEngines[4].name)
- assertEquals("Qwant", store.state.search.regionSearchEngines[5].name)
- assertEquals("Wikipedia (de)", store.state.search.regionSearchEngines[6].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[7].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Ecosia", store.state.search.regionSearchEngines[3].name)
+ assertEquals("Qwant", store.state.search.regionSearchEngines[4].name)
+ assertEquals("Wikipedia (de)", store.state.search.regionSearchEngines[5].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[6].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -615,13 +609,14 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.regionSearchEngines.isNotEmpty())
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(6, store.state.search.regionSearchEngines.size)
+
+ assertEquals(5, store.state.search.regionSearchEngines.size)
+
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.de", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Wikipedija (dsb)", store.state.search.regionSearchEngines[4].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Wikipedija (dsb)", store.state.search.regionSearchEngines[3].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -652,13 +647,14 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.regionSearchEngines.isNotEmpty())
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(6, store.state.search.regionSearchEngines.size)
+
+ assertEquals(5, store.state.search.regionSearchEngines.size)
+
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.de", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Wikipedija (hsb)", store.state.search.regionSearchEngines[4].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Wikipedija (hsb)", store.state.search.regionSearchEngines[3].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -690,14 +686,13 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(6, store.state.search.regionSearchEngines.size)
+ assertEquals(5, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
assertEquals("Wikipedia (es)", store.state.search.regionSearchEngines[3].name)
- assertEquals("Amazon.es", store.state.search.regionSearchEngines[4].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -729,14 +724,13 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(6, store.state.search.regionSearchEngines.size)
+ assertEquals(5, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
assertEquals("Wikipedia (it)", store.state.search.regionSearchEngines[3].name)
- assertEquals("Amazon.it", store.state.search.regionSearchEngines[4].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -768,14 +762,13 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(6, store.state.search.regionSearchEngines.size)
+ assertEquals(5, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.it", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("Wikipedia (lij)", store.state.search.regionSearchEngines[4].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("Wikipedia (lij)", store.state.search.regionSearchEngines[3].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -807,15 +800,14 @@ class SearchMiddlewareTest {
assertTrue(store.state.search.additionalAvailableSearchEngines.isEmpty())
assertTrue(store.state.search.additionalSearchEngines.isEmpty())
- assertEquals(7, store.state.search.regionSearchEngines.size)
+ assertEquals(6, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
assertEquals("Prisjakt", store.state.search.regionSearchEngines[2].name)
assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
assertEquals("Wikipedia (sv)", store.state.search.regionSearchEngines[4].name)
- assertEquals("Amazon.se", store.state.search.regionSearchEngines[5].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[6].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[5].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
@@ -1718,68 +1710,6 @@ class SearchMiddlewareTest {
}
@Test
- fun `Migration - default search engine`() {
- val customStorage = CustomSearchEngineStorage(testContext, dispatcher)
- val metadataStorage = SearchMetadataStorage(testContext)
-
- run {
- val searchMiddleware = SearchMiddleware(
- testContext,
- ioDispatcher = dispatcher,
- customStorage = customStorage,
- metadataStorage = metadataStorage,
- migration = object : SearchMiddleware.Migration {
- override fun getValuesToMigrate() = SearchMiddleware.Migration.MigrationValues(
- customSearchEngines = listOf(),
- defaultSearchEngineName = "Amazon.com",
- )
- },
- )
-
- val store = BrowserStore(middleware = listOf(searchMiddleware))
-
- store.dispatch(
- SearchAction.SetRegionAction(
- RegionState("US", "US"),
- ),
- ).joinBlocking()
-
- wait(store, dispatcher)
-
- val selectedSearchEngine = store.state.search.selectedOrDefaultSearchEngine
- assertNotNull(selectedSearchEngine!!)
-
- assertEquals("Amazon.com", selectedSearchEngine.name)
- assertTrue(selectedSearchEngine.resultUrls[0].startsWith("https://www.amazon.com/"))
- }
-
- run {
- val searchMiddleware = SearchMiddleware(
- testContext,
- ioDispatcher = dispatcher,
- customStorage = customStorage,
- metadataStorage = metadataStorage,
- )
-
- val store = BrowserStore(middleware = listOf(searchMiddleware))
-
- store.dispatch(
- SearchAction.SetRegionAction(
- RegionState("US", "US"),
- ),
- ).joinBlocking()
-
- wait(store, dispatcher)
-
- val selectedSearchEngine = store.state.search.selectedOrDefaultSearchEngine
- assertNotNull(selectedSearchEngine!!)
-
- assertEquals("Amazon.com", selectedSearchEngine.name)
- assertTrue(selectedSearchEngine.resultUrls[0].startsWith("https://www.amazon.com/"))
- }
- }
-
- @Test
fun `Reorders list of region search engines after adding previously removed search engines`() {
val searchMiddleware = SearchMiddleware(
testContext,
@@ -1805,14 +1735,13 @@ class SearchMiddlewareTest {
// Verify initial state
// ///////////////////////////////////////////////////////////////////////////////////////////
- assertEquals(6, store.state.search.regionSearchEngines.size)
+ assertEquals(5, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.com", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
- assertEquals("Wikipedia", store.state.search.regionSearchEngines[5].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[3].name)
+ assertEquals("Wikipedia", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
@@ -1832,12 +1761,11 @@ class SearchMiddlewareTest {
// Verify after hiding search engines
// ///////////////////////////////////////////////////////////////////////////////////////////
- assertEquals(4, store.state.search.regionSearchEngines.size)
+ assertEquals(3, store.state.search.regionSearchEngines.size)
assertEquals("Bing", store.state.search.regionSearchEngines[0].name)
- assertEquals("Amazon.com", store.state.search.regionSearchEngines[1].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[2].name)
- assertEquals("Wikipedia", store.state.search.regionSearchEngines[3].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[1].name)
+ assertEquals("Wikipedia", store.state.search.regionSearchEngines[2].name)
assertEquals("Bing", store.state.search.selectedOrDefaultSearchEngine!!.name)
@@ -1855,14 +1783,13 @@ class SearchMiddlewareTest {
// Verify state after adding search engines back
// ///////////////////////////////////////////////////////////////////////////////////////////
- assertEquals(6, store.state.search.regionSearchEngines.size)
+ assertEquals(5, store.state.search.regionSearchEngines.size)
assertEquals("Google", store.state.search.regionSearchEngines[0].name)
assertEquals("Bing", store.state.search.regionSearchEngines[1].name)
- assertEquals("Amazon.com", store.state.search.regionSearchEngines[2].name)
- assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[3].name)
- assertEquals("eBay", store.state.search.regionSearchEngines[4].name)
- assertEquals("Wikipedia", store.state.search.regionSearchEngines[5].name)
+ assertEquals("DuckDuckGo", store.state.search.regionSearchEngines[2].name)
+ assertEquals("eBay", store.state.search.regionSearchEngines[3].name)
+ assertEquals("Wikipedia", store.state.search.regionSearchEngines[4].name)
assertEquals("Google", store.state.search.selectedOrDefaultSearchEngine!!.name)
}
diff --git a/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/storage/BundledSearchEnginesStorageTest.kt b/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/storage/BundledSearchEnginesStorageTest.kt
index bfd6691432..bea87fea9c 100644
--- a/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/storage/BundledSearchEnginesStorageTest.kt
+++ b/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/storage/BundledSearchEnginesStorageTest.kt
@@ -26,7 +26,7 @@ class BundledSearchEnginesStorageTest {
val engines = storage.load(RegionState("US", "US"), Locale("en", "US"))
val searchEngines = engines.list
- assertEquals(6, searchEngines.size)
+ assertEquals(5, searchEngines.size)
}
@Test
@@ -50,7 +50,7 @@ class BundledSearchEnginesStorageTest {
val engines = storage.load(RegionState.Default, Locale("de", "DE"))
val searchEngines = engines.list
- assertEquals(8, searchEngines.size)
+ assertEquals(7, searchEngines.size)
assertContainsSearchEngine("google-b-m", searchEngines)
assertContainsNotSearchEngine("google-2018", searchEngines)
}
@@ -60,7 +60,7 @@ class BundledSearchEnginesStorageTest {
val engines = storage.load(RegionState("US", "US"), Locale("de", "DE"))
val searchEngines = engines.list
- assertEquals(8, searchEngines.size)
+ assertEquals(7, searchEngines.size)
assertContainsSearchEngine("google-b-1-m", searchEngines)
assertContainsNotSearchEngine("google", searchEngines)
}
@@ -75,7 +75,7 @@ class BundledSearchEnginesStorageTest {
val searchEngines = engines.list
println("searchEngines = $searchEngines")
- assertEquals(6, searchEngines.size)
+ assertEquals(5, searchEngines.size)
assertContainsNotSearchEngine("yandex-en", searchEngines)
}
// With region
@@ -85,7 +85,7 @@ class BundledSearchEnginesStorageTest {
val searchEngines = engines.list
println("searchEngines = $searchEngines")
- assertEquals(5, searchEngines.size)
+ assertEquals(4, searchEngines.size)
assertContainsSearchEngine("google-com-nocodes", searchEngines)
assertContainsNotSearchEngine("yandex-en", searchEngines)
}
@@ -134,11 +134,11 @@ class BundledSearchEnginesStorageTest {
val engines = storage.load(RegionState.Default, Locale("trs", ""))
val searchEngines = engines.list
- // visibleDefaultEngines: ["google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-es"]
+ // visibleDefaultEngines: ["google-b-m", "bing", "ddg", "wikipedia-es"]
// searchOrder (default): ["Google", "Bing"]
assertEquals(
- listOf("google-b-m", "bing", "amazondotcom", "ddg", "wikipedia-es"),
+ listOf("google-b-m", "bing", "ddg", "wikipedia-es"),
searchEngines.map { it.id },
)
@@ -154,7 +154,7 @@ class BundledSearchEnginesStorageTest {
val engines = storage.load(RegionState.Default, Locale("xx", "XX"))
val searchEngines = engines.list
- assertEquals(5, searchEngines.size)
+ assertEquals(4, searchEngines.size)
}
private fun assertContainsSearchEngine(identifier: String, searchEngines: List<SearchEngine>) {
@@ -181,7 +181,7 @@ class BundledSearchEnginesStorageTest {
val engines = storage.load(RegionState("US", "US"), Locale("en", "US"))
val searchEngines = engines.list
- assertEquals(6, searchEngines.size)
+ assertEquals(5, searchEngines.size)
val google = searchEngines.find { it.name == "Google" }
assertNotNull(google!!)
diff --git a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt
index 9dae8d3aac..521c5c7b64 100644
--- a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt
+++ b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionFeature.kt
@@ -17,6 +17,7 @@ import mozilla.components.support.base.feature.UserInteractionHandler
class SessionFeature(
private val store: BrowserStore,
private val goBackUseCase: SessionUseCases.GoBackUseCase,
+ private val goForwardUseCase: SessionUseCases.GoForwardUseCase,
private val engineView: EngineView,
private val tabId: String? = null,
) : LifecycleAwareFeature, UserInteractionHandler {
@@ -49,6 +50,22 @@ class SessionFeature(
}
/**
+ * Handler for forward pressed events in activities that use this feature.
+ *
+ * @return true if the event was handled, otherwise false.
+ */
+ override fun onForwardPressed(): Boolean {
+ val tab = store.state.findTabOrCustomTabOrSelectedTab(tabId)
+
+ if (tab?.content?.canGoForward == true) {
+ goForwardUseCase(tab.id)
+ return true
+ }
+
+ return false
+ }
+
+ /**
* Stop feature: App is in the background.
*/
override fun stop() {
diff --git a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt
index 565ba34632..fbe5ed9d18 100644
--- a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt
+++ b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/SessionUseCases.kt
@@ -89,14 +89,8 @@ class SessionUseCases(
// If we already have an engine session load Url directly to prevent
// context switches.
if (engineSession != null) {
- val parentEngineSession = if (tab is TabSessionState) {
- tab.parentId?.let { store.state.findTabOrCustomTab(it)?.engineState?.engineSession }
- } else {
- null
- }
engineSession.loadUrl(
url = url,
- parent = parentEngineSession,
flags = flags,
additionalHeaders = additionalHeaders,
)
diff --git a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt
index 0192f04773..8be8db17f4 100644
--- a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt
+++ b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionFeatureTest.kt
@@ -54,7 +54,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -74,7 +74,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("C", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "C")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "C")
verify(view, never()).render(any())
feature.start()
@@ -95,7 +95,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("D", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "D")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "D")
verify(view, never()).render(any())
feature.start()
@@ -117,7 +117,7 @@ class SessionFeatureTest {
store.dispatch(EngineAction.LinkEngineSessionAction("A", engineSessionA)).joinBlocking()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSessionB)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -136,7 +136,7 @@ class SessionFeatureTest {
val view: EngineView = mock()
doReturn(actualView).`when`(view).asView()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -157,7 +157,7 @@ class SessionFeatureTest {
store.dispatch(EngineAction.LinkEngineSessionAction("A", engineSessionA)).joinBlocking()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSessionB)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -181,7 +181,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
feature.start()
@@ -205,7 +205,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
feature.start()
@@ -233,7 +233,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("D", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "D")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "D")
verify(view, never()).render(any())
feature.start()
@@ -253,7 +253,7 @@ class SessionFeatureTest {
val view: EngineView = mock()
doReturn(false).`when`(view).canClearSelection()
- val feature = SessionFeature(BrowserStore(), mock(), view)
+ val feature = SessionFeature(BrowserStore(), mock(), mock(), view)
assertFalse(feature.onBackPressed())
verify(view, never()).clearSelection()
@@ -263,7 +263,7 @@ class SessionFeatureTest {
val view: EngineView = mock()
doReturn(true).`when`(view).canClearSelection()
- val feature = SessionFeature(BrowserStore(), mock(), view)
+ val feature = SessionFeature(BrowserStore(), mock(), mock(), view)
assertTrue(feature.onBackPressed())
verify(view).clearSelection()
@@ -282,7 +282,7 @@ class SessionFeatureTest {
val useCase: SessionUseCases.GoBackUseCase = mock()
- val feature = SessionFeature(store, useCase, mock())
+ val feature = SessionFeature(store, useCase, mock(), mock())
assertFalse(feature.onBackPressed())
verify(useCase, never()).invoke("A")
@@ -305,7 +305,7 @@ class SessionFeatureTest {
val useCase: SessionUseCases.GoBackUseCase = mock()
- val feature = SessionFeature(store, useCase, mock())
+ val feature = SessionFeature(store, useCase, mock(), mock())
assertTrue(feature.onBackPressed())
verify(useCase).invoke("A")
@@ -313,6 +313,48 @@ class SessionFeatureTest {
}
@Test
+ fun `onForwardPressed() invokes GoForwardUseCase if forward navigation is possible`() {
+ run {
+ val store = BrowserStore(
+ BrowserState(
+ tabs = listOf(createTab("https://www.mozilla.org", id = "A")),
+ selectedTabId = "A",
+ ),
+ )
+
+ val forwardUseCase: SessionUseCases.GoForwardUseCase = mock()
+
+ val feature = SessionFeature(store, mock(), forwardUseCase, mock())
+
+ assertFalse(feature.onForwardPressed())
+ verify(forwardUseCase, never()).invoke("A")
+ }
+
+ run {
+ val store = BrowserStore(
+ BrowserState(
+ tabs = listOf(createTab("https://www.mozilla.org", id = "A")),
+ selectedTabId = "A",
+ ),
+ )
+
+ store.dispatch(
+ ContentAction.UpdateForwardNavigationStateAction(
+ "A",
+ canGoForward = true,
+ ),
+ ).joinBlocking()
+
+ val forwardUseCase: SessionUseCases.GoForwardUseCase = mock()
+
+ val feature = SessionFeature(store, mock(), forwardUseCase, mock())
+
+ assertTrue(feature.onForwardPressed())
+ verify(forwardUseCase).invoke("A")
+ }
+ }
+
+ @Test
fun `stop releases engine view`() {
val store = prepareStore()
@@ -323,7 +365,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("D", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "D")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "D")
verify(view, never()).render(any())
feature.start()
@@ -347,7 +389,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("A", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view, tabId = "A")
+ val feature = SessionFeature(store, mock(), mock(), view, tabId = "A")
verify(view, never()).render(any())
feature.start()
@@ -368,7 +410,7 @@ class SessionFeatureTest {
val engineSession: EngineSession = mock()
store.dispatch(EngineAction.LinkEngineSessionAction("B", engineSession)).joinBlocking()
- val feature = SessionFeature(store, mock(), view)
+ val feature = SessionFeature(store, mock(), mock(), view)
verify(view, never()).render(any())
assertEquals(0L, store.state.findTab("B")?.lastAccess)
diff --git a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt
index 4461577d25..01db35cbc8 100644
--- a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt
+++ b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/SessionUseCasesTest.kt
@@ -132,7 +132,6 @@ class SessionUseCasesTest {
middleware.assertNotDispatched(EngineAction.LoadUrlAction::class)
verify(childEngineSession).loadUrl(
url = "https://www.mozilla.org/en-CA/firefox/browsers/mobile/",
- parent = engineSession,
)
middleware.assertLastAction(EngineAction.OptimizedLoadUrlTriggeredAction::class) { action ->
assertEquals("bugzilla", action.tabId)
diff --git a/mobile/android/android-components/components/feature/sitepermissions/src/main/res/values-ast/strings.xml b/mobile/android/android-components/components/feature/sitepermissions/src/main/res/values-ast/strings.xml
index 1a4f8a717a..deff5834db 100644
--- a/mobile/android/android-components/components/feature/sitepermissions/src/main/res/values-ast/strings.xml
+++ b/mobile/android/android-components/components/feature/sitepermissions/src/main/res/values-ast/strings.xml
@@ -9,7 +9,7 @@
<!-- Title of a dialog for a location permission request. -->
<string name="mozac_feature_sitepermissions_location_title">¿Quies permitir a «%1$s» qu\'use la to llocalización?</string>
<!-- Title of a dialog for a camera and microphone permission request. -->
- <string name="mozac_feature_sitepermissions_camera_and_microphone">¿Quies permitir a «%1$s» qu\'use la cámara ya\'l micrófonu?</string>
+ <string name="mozac_feature_sitepermissions_camera_and_microphone">¿Quies permitir a «%1$s» qu\'use la cámara y el micrófonu?</string>
<!-- Option in a dialog for requesting a microphone permission, this option will give access to
the first microphone-->
<string name="mozac_feature_sitepermissions_option_microphone_one">Micrófonu 1</string>
@@ -40,7 +40,7 @@
<string name="mozac_feature_sitepermissions_storage_access_title">¿Quies permitir a «%1$s» qu\'use les sos cookies en «%2$s»?</string>
<!-- Message of a dialog offering more context about the cross origin storage permission.
%s is the name of the site URL (www.site1.example) trying to track the user's activity. -->
- <string name="mozac_feature_sitepermissions_storage_access_message">Si nun ta claro por qué «%s» precisa estos datos, ye probable que quieras bloquiar l\'accesu.</string>
+ <string name="mozac_feature_sitepermissions_storage_access_message">Si nun tienes claro por qué «%s» precisa estos datos, pues bloquiar l\'accesu.</string>
<!-- Text for a negative button in the storage access permission request dialog. This button will not give access to this permission. -->
<string name="mozac_feature_sitepermissions_storage_access_not_allow">Bloquiar</string>
<!-- Clickable text that will open a new tab navigating the user to online documentation about specific features. -->
diff --git a/mobile/android/android-components/components/feature/tabs/src/main/java/mozilla/components/feature/tabs/TabsUseCases.kt b/mobile/android/android-components/components/feature/tabs/src/main/java/mozilla/components/feature/tabs/TabsUseCases.kt
index 6c5fe387b1..64a7cc06f8 100644
--- a/mobile/android/android-components/components/feature/tabs/src/main/java/mozilla/components/feature/tabs/TabsUseCases.kt
+++ b/mobile/android/android-components/components/feature/tabs/src/main/java/mozilla/components/feature/tabs/TabsUseCases.kt
@@ -194,6 +194,7 @@ class TabsUseCases(
url = url,
flags = flags,
additionalHeaders = additionalHeaders,
+ includeParent = true,
),
)
}
@@ -412,6 +413,7 @@ class TabsUseCases(
tab.id,
url,
flags,
+ includeParent = true,
),
)
tab.id
diff --git a/mobile/android/android-components/components/feature/webcompat-reporter/src/main/assets/extensions/webcompat-reporter/manifest.json b/mobile/android/android-components/components/feature/webcompat-reporter/src/main/assets/extensions/webcompat-reporter/manifest.json
index 53051559e4..4663f571b8 100644
--- a/mobile/android/android-components/components/feature/webcompat-reporter/src/main/assets/extensions/webcompat-reporter/manifest.json
+++ b/mobile/android/android-components/components/feature/webcompat-reporter/src/main/assets/extensions/webcompat-reporter/manifest.json
@@ -27,18 +27,11 @@
"96": "icons/lightbulb.svg",
"128": "icons/lightbulb.svg"
},
- "permissions": [
- "geckoViewAddons",
- "nativeMessaging",
- "tabs",
- "<all_urls>"
- ],
+ "permissions": ["geckoViewAddons", "nativeMessaging", "tabs", "<all_urls>"],
"background": {
"persistent": false,
"type": "module",
- "scripts": [
- "background.js"
- ]
+ "scripts": ["background.js"]
},
"page_action": {
"browser_style": true,