diff --git a/app/build.gradle b/app/build.gradle
index 8c9b9ee40..567ac156c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -82,6 +82,8 @@ android {
"targetActivity": targetActivity,
"deepLinkScheme": deepLinkSchemeValue
]
+
+ buildConfigField "String[]", "SUPPORTED_LOCALE_ARRAY", getSupportedLocales()
}
def releaseTemplate = {
@@ -239,7 +241,14 @@ android {
reset()
- include "x86", "armeabi-v7a", "arm64-v8a", "x86_64"
+ // As gradle is unable to pick the right apk to install when multiple apks are generated
+ // while running benchmark tests or generating baseline profiles. To circumvent this,
+ // this flag is passed to make sure only one apk is generated so gradle can pick that one.
+ if (project.hasProperty("benchmarkTest")) {
+ include "arm64-v8a"
+ } else {
+ include "x86", "armeabi-v7a", "arm64-v8a", "x86_64"
+ }
}
}
@@ -515,7 +524,6 @@ android.applicationVariants.configureEach { variant ->
} else {
buildConfigField "boolean", "LEAKCANARY", "false"
}
-
}
// Generate Kotlin code for the Fenix Glean metrics.
@@ -670,13 +678,16 @@ dependencies {
implementation ComponentsDependencies.androidx_fragment
implementation FenixDependencies.androidx_navigation_fragment
implementation FenixDependencies.androidx_navigation_ui
+ implementation ComponentsDependencies.androidx_compose_navigation
implementation ComponentsDependencies.androidx_recyclerview
+
implementation ComponentsDependencies.androidx_lifecycle_common
implementation ComponentsDependencies.androidx_lifecycle_livedata
implementation ComponentsDependencies.androidx_lifecycle_process
implementation ComponentsDependencies.androidx_lifecycle_runtime
-
implementation ComponentsDependencies.androidx_lifecycle_viewmodel
+ implementation ComponentsDependencies.androidx_lifecycle_service
+
implementation ComponentsDependencies.androidx_core
implementation ComponentsDependencies.androidx_core_ktx
implementation FenixDependencies.androidx_core_splashscreen
@@ -837,25 +848,6 @@ tasks.register('printVariants') {
}
}
-tasks.register('buildTranslationArray') {
- // This isn't running as a task, instead the array is build when the gradle file is parsed.
- // https://github.com/mozilla-mobile/fenix/issues/14175
- def foundLocales = new StringBuilder()
- foundLocales.append("new String[]{")
-
- fileTree("src/main/res").visit { FileVisitDetails details ->
- if (details.file.path.endsWith("${File.separator}strings.xml")) {
- def languageCode = details.file.parent.tokenize(File.separator).last().replaceAll('values-', '').replaceAll('-r', '-')
- languageCode = (languageCode == "values") ? "en-US" : languageCode
- foundLocales.append("\"").append(languageCode).append("\"").append(",")
- }
- }
-
- foundLocales.append("}")
- def foundLocalesString = foundLocales.toString().replaceAll(',}', '}')
- android.defaultConfig.buildConfigField "String[]", "SUPPORTED_LOCALE_ARRAY", foundLocalesString
-}
-
afterEvaluate {
// Format test output. Ported from AC #2401
@@ -922,5 +914,24 @@ android.applicationVariants.configureEach { variant ->
}
}
+def getSupportedLocales() {
+ // This isn't running as a task, instead the array is build when the gradle file is parsed.
+ // https://github.com/mozilla-mobile/fenix/issues/14175
+ def foundLocales = new StringBuilder()
+ foundLocales.append("new String[]{")
+
+ fileTree("src/main/res").visit { FileVisitDetails details ->
+ if (details.file.path.endsWith("${File.separator}strings.xml")) {
+ def languageCode = details.file.parent.tokenize(File.separator).last().replaceAll('values-', '').replaceAll('-r', '-')
+ languageCode = (languageCode == "values") ? "en-US" : languageCode
+ foundLocales.append("\"").append(languageCode).append("\"").append(",")
+ }
+ }
+
+ foundLocales.append("}")
+ def foundLocalesString = foundLocales.toString().replaceAll(',}', '}')
+ return foundLocalesString
+}
+
// Enable expiration by major version.
ext.gleanExpireByVersion = Config.majorVersion()
diff --git a/app/metrics.yaml b/app/metrics.yaml
index e49a8508e..92a892dc6 100644
--- a/app/metrics.yaml
+++ b/app/metrics.yaml
@@ -135,12 +135,12 @@ events:
description: |
A string containing the name of the item the user tapped. These items
include:
- add_to_homescreen, add_to_top_sites, addons_manager, back, bookmark,
- bookmarks, desktop_view_off, desktop_view_on, downloads,
- find_in_page, forward, history, new_tab, open_in_app, open_in_fenix,
- quit, reader_mode_appearance, reload, remove_from_top_sites,
+ add_to_homescreen, add_to_top_sites, addons_manager, back, back_long_press,
+ bookmark, bookmarks, desktop_view_off, desktop_view_on, downloads,
+ find_in_page, forward, forward_long_press, history, new_tab, open_in_app,
+ open_in_fenix, quit, reader_mode_appearance, reload, remove_from_top_sites,
save_to_collection, set_default_browser, settings, share, stop,
- sync_account, and print_content.
+ sync_account, translate and print_content.
type: string
bugs:
- https://github.com/mozilla-mobile/fenix/issues/1024
@@ -475,6 +475,23 @@ events:
notification_emails:
- android-probes@mozilla.com
expires: never
+ browser_toolbar_security_indicator_tapped:
+ type: event
+ description: |
+ An event that indicates that a user has tapped
+ the security indicator icon (at the start of the domain name).
+ bugs:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1869664
+ data_reviews:
+ - https://github.com/mozilla-mobile/firefox-android/pull/5019#issuecomment-1876329933
+ data_sensitivity:
+ - interaction
+ notification_emails:
+ - android-probes@mozilla.com
+ expires: never
+ metadata:
+ tags:
+ - Toolbar
browser_toolbar_erase_tapped:
type: event
description: |
@@ -489,6 +506,22 @@ events:
notification_emails:
- android-probes@mozilla.com
expires: never
+ browser_toolbar_input_cleared:
+ type: event
+ description: |
+ A user pressed the circle cross icon, clearing the input in the toolbar.
+ bugs:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1869664
+ data_reviews:
+ - https://github.com/mozilla-mobile/firefox-android/pull/5019#issuecomment-1876329933
+ data_sensitivity:
+ - interaction
+ notification_emails:
+ - android-probes@mozilla.com
+ expires: never
+ metadata:
+ tags:
+ - Toolbar
browser_toolbar_qr_scan_tapped:
type: event
description: |
@@ -506,6 +539,22 @@ events:
metadata:
tags:
- Toolbar
+ browser_toolbar_qr_scan_completed:
+ type: event
+ description: |
+ An event that indicates that a QR code has been scanned successfully.
+ bugs:
+ - https://bugzilla.mozilla.org/show_bug.cgi?id=1869664
+ data_reviews:
+ - https://github.com/mozilla-mobile/firefox-android/pull/5019#issuecomment-1876329933
+ data_sensitivity:
+ - interaction
+ notification_emails:
+ - android-probes@mozilla.com
+ expires: never
+ metadata:
+ tags:
+ - Toolbar
toolbar_tab_swipe:
type: event
description: |
diff --git a/app/nimbus.fml.yaml b/app/nimbus.fml.yaml
index 6c126dcd3..946012bee 100644
--- a/app/nimbus.fml.yaml
+++ b/app/nimbus.fml.yaml
@@ -214,14 +214,6 @@ features:
type: Boolean
default: true
- extensions-process:
- description: A feature to rollout the extensions process.
- variables:
- enabled:
- description: If true, the extensions process is enabled.
- type: Boolean
- default: true
-
growth-data:
description: A feature measuring campaign growth data
variables:
@@ -341,6 +333,26 @@ features:
type: Map
default: {}
+ fx-strong-password:
+ description: A feature that provides a generated strong password on sign up.
+ variables:
+ enabled:
+ description: >
+ When the feature is enabled and Firefox receives a Login event with an
+ empty saved logins list, a suggested strong password prompt will be shown,
+ allowing the user to use the generated password to fill in the password field
+ for the new account that will be created. When the feature is disabled,
+ there won't be any prompt displayed that would allow using a generated password.
+ type: Boolean
+ default: false
+ defaults:
+ - channel: developer
+ value:
+ enabled: true
+ - channel: nightly
+ value:
+ enabled: true
+
fx-suggest:
description: A feature that provides Firefox Suggest search suggestions.
variables:
@@ -361,6 +373,17 @@ features:
- channel: nightly
value:
enabled: true
+
+ nimbus-is-ready:
+ description: >
+ A feature that provides the number of Nimbus is_ready events to send
+ when Nimbus finishes launching.
+ variables:
+ event-count:
+ description: The number of events that should be sent.
+ type: Int
+ default: 1
+
types:
objects: {}
diff --git a/app/onboarding.fml.yaml b/app/onboarding.fml.yaml
index dcd7be764..f4c3f1e12 100644
--- a/app/onboarding.fml.yaml
+++ b/app/onboarding.fml.yaml
@@ -25,8 +25,7 @@ features:
card-type: default-browser
title: juno_onboarding_default_browser_title_nimbus_2
ordering: 10
- body: juno_onboarding_default_browser_description_nimbus_2
- link-text: juno_onboarding_default_browser_description_link_text
+ body: juno_onboarding_default_browser_description_nimbus_3
image-res: ic_onboarding_welcome
primary-button-label: juno_onboarding_default_browser_positive_button
secondary-button-label: juno_onboarding_default_browser_negative_button
@@ -83,13 +82,6 @@ objects:
description: The message text displayed to the user. May contain linkable text.
# This should never be defaulted.
default: ""
- link-text:
- type: Option
- description: >
- The text to link from the body text. This should match the linkable text from the body text exactly.
- e.g. body: This is a policy link
- link-text: policy link
- default: null
image-res:
type: Image
description: The resource id of the image to be displayed.
diff --git a/app/src/androidTest/java/org/mozilla/fenix/AppRequestInterceptor.kt b/app/src/androidTest/java/org/mozilla/fenix/AppRequestInterceptor.kt
index b474245a3..a8be915ad 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/AppRequestInterceptor.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/AppRequestInterceptor.kt
@@ -92,7 +92,6 @@ class AppRequestInterceptor(
// This method is the only difference from the production code.
// Otherwise the code should be kept identical
- @Suppress("LongParameterList")
private fun interceptFxaRequest(
engineSession: EngineSession,
uri: String,
diff --git a/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/Pipfile.lock b/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/Pipfile.lock
index 8665746c5..fb5887ad2 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/Pipfile.lock
+++ b/app/src/androidTest/java/org/mozilla/fenix/experimentintegration/Pipfile.lock
@@ -146,11 +146,12 @@
},
"jinja2": {
"hashes": [
- "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852",
- "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"
+ "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa",
+ "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"
],
+ "index": "pypi",
"markers": "python_version >= '3.7'",
- "version": "==3.1.2"
+ "version": "==3.1.3"
},
"markupsafe": {
"hashes": [
diff --git a/app/src/androidTest/java/org/mozilla/fenix/extensions/ExtensionProcessTest.kt b/app/src/androidTest/java/org/mozilla/fenix/extensions/ExtensionProcessTest.kt
index 17078869c..6fdf897b9 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/extensions/ExtensionProcessTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/extensions/ExtensionProcessTest.kt
@@ -6,19 +6,15 @@ package org.mozilla.fenix.extensions
import android.content.Context
import mozilla.components.concept.engine.EngineSession
-import org.json.JSONObject
-import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
-import org.mozilla.experiments.nimbus.HardcodedNimbusFeatures
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.gecko.GeckoProvider
import org.mozilla.fenix.helpers.TestHelper
-import org.mozilla.fenix.nimbus.FxNimbus
/**
- * Instrumentation test for verifying that the extensions process can be controlled with Nimbus.
+ * Instrumentation test for verifying that the extensions process is enabled unconditionally.
*/
class ExtensionProcessTest {
private lateinit var context: Context
@@ -27,49 +23,12 @@ class ExtensionProcessTest {
@Before
fun setUp() {
context = TestHelper.appContext
- policy =
- context.components.core.trackingProtectionPolicyFactory.createTrackingProtectionPolicy()
+ policy = context.components.core.trackingProtectionPolicyFactory.createTrackingProtectionPolicy()
}
@Test
- fun test_extension_process_can_be_enabled_by_nimbus() {
- val hardcodedNimbus = HardcodedNimbusFeatures(
- context,
- "extensions-process" to JSONObject(
- """
- {
- "enabled": true
- }
- """.trimIndent(),
- ),
- )
-
- hardcodedNimbus.connectWith(FxNimbus)
-
+ fun test_extension_process_is_enabled() {
val runtime = GeckoProvider.createRuntimeSettings(context, policy)
-
- assertTrue(FxNimbus.features.extensionsProcess.value().enabled)
assertTrue(runtime.extensionsProcessEnabled!!)
}
-
- @Test
- fun test_extension_process_can_be_disabled_by_nimbus() {
- val hardcodedNimbus = HardcodedNimbusFeatures(
- context,
- "extensions-process" to JSONObject(
- """
- {
- "enabled": false
- }
- """.trimIndent(),
- ),
- )
-
- hardcodedNimbus.connectWith(FxNimbus)
-
- val runtime = GeckoProvider.createRuntimeSettings(context, policy)
-
- assertFalse(FxNimbus.features.extensionsProcess.value().enabled)
- assertFalse(runtime.extensionsProcessEnabled!!)
- }
}
diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/AppAndSystemHelper.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/AppAndSystemHelper.kt
index 6e0973b5c..4ef27f9e9 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/helpers/AppAndSystemHelper.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/AppAndSystemHelper.kt
@@ -249,6 +249,7 @@ object AppAndSystemHelper {
* Runs on Debug variant as we don't want to adjust Release permission manifests
* Runs the test in its testBlock.
* Cleans up and sets the default locale after it's done.
+ * As a safety measure, always add the resetSystemLocaleToEnUS() method in the tearDown method of your Class.
*/
fun runWithSystemLocaleChanged(locale: Locale, testRule: ActivityTestRule, testBlock: () -> Unit) {
if (Config.channel.isDebug) {
@@ -274,6 +275,21 @@ object AppAndSystemHelper {
}
}
+ /**
+ * Resets the default language of the entire device back to EN-US.
+ * In case of a test instrumentation crash, the finally statement in the
+ * runWithSystemLocaleChanged(locale: Locale) method, will not be reached.
+ * Add this method inside the tearDown method of your test class, where the above method is used.
+ * Note: If set inside the ActivityTestRule's afterActivityFinished() method, this also won't work,
+ * as the methods inside it are not always executed: https://github.com/android/android-test/issues/498
+ */
+ fun resetSystemLocaleToEnUS() {
+ if (Locale.getDefault() != Locale.US) {
+ Log.i(TAG, "Resetting system locale to EN US")
+ setSystemLocale(Locale.US)
+ }
+ }
+
/**
* Changes the default language of the entire device, not just the app.
*/
diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/DataGenerationHelper.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/DataGenerationHelper.kt
index b4edc8bc3..d82affa71 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/helpers/DataGenerationHelper.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/DataGenerationHelper.kt
@@ -22,6 +22,8 @@ import org.junit.Assert
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.helpers.TestHelper.mDevice
import org.mozilla.fenix.utils.IntentUtils
+import java.time.LocalDate
+import java.time.LocalTime
object DataGenerationHelper {
val appContext: Context = InstrumentationRegistry.getInstrumentation().targetContext
@@ -75,6 +77,28 @@ object DataGenerationHelper {
clipBoard.setPrimaryClip(clipData)
}
+ /**
+ * Constructs a date and time placeholder string for sponsored Fx suggest links.
+ * The format of the datetime is YYYYMMDDHH, where YYYY is the four-digit year,
+ * MM is the two-digit month, DD is the two-digit day, and HH is the two-digit hour.
+ * Single-digit months, days, and hours are padded with a leading zero to ensure
+ * the correct format. For example, a date and time of January 10, 2024, at 3 PM
+ * would be represented as "2024011015".
+ *
+ * @return A string representing the current date and time in the specified format.
+ */
+ fun getSponsoredFxSuggestPlaceHolder(): String {
+ val currentDate = LocalDate.now()
+ val currentTime = LocalTime.now()
+
+ val currentDay = currentDate.dayOfMonth.toString().padStart(2, '0')
+ val currentMonth = currentDate.monthValue.toString().padStart(2, '0')
+ val currentYear = currentDate.year.toString()
+ val currentHour = currentTime.hour.toString().padStart(2, '0')
+
+ return currentYear + currentMonth + currentDay + currentHour
+ }
+
/**
* Returns sponsored shortcut title based on the index.
*/
diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelper.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelper.kt
index 9b6fda9e1..6aa8319f5 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelper.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelper.kt
@@ -82,6 +82,11 @@ interface FeatureSettingsHelper {
*/
var composeTopSitesEnabled: Boolean
+ /**
+ * Enable or disable translations flow.
+ */
+ var isTranslationsEnabled: Boolean
+
fun applyFlagUpdates()
fun resetAllFeatureFlags()
diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelperDelegate.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelperDelegate.kt
index 9426d0c12..c6f0853a1 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelperDelegate.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/FeatureSettingsHelperDelegate.kt
@@ -37,6 +37,7 @@ class FeatureSettingsHelperDelegate() : FeatureSettingsHelper {
etpPolicy = getETPPolicy(settings),
tabsTrayRewriteEnabled = settings.enableTabsTrayToCompose,
composeTopSitesEnabled = settings.enableComposeTopSites,
+ translationsEnabled = settings.enableTranslations,
)
/**
@@ -66,6 +67,7 @@ class FeatureSettingsHelperDelegate() : FeatureSettingsHelper {
override var etpPolicy: ETPPolicy by updatedFeatureFlags::etpPolicy
override var tabsTrayRewriteEnabled: Boolean by updatedFeatureFlags::tabsTrayRewriteEnabled
override var composeTopSitesEnabled: Boolean by updatedFeatureFlags::composeTopSitesEnabled
+ override var isTranslationsEnabled: Boolean by updatedFeatureFlags::translationsEnabled
override fun applyFlagUpdates() {
applyFeatureFlags(updatedFeatureFlags)
@@ -91,6 +93,7 @@ class FeatureSettingsHelperDelegate() : FeatureSettingsHelper {
settings.shouldShowOpenInAppBanner = featureFlags.isOpenInAppBannerEnabled
settings.enableTabsTrayToCompose = featureFlags.tabsTrayRewriteEnabled
settings.enableComposeTopSites = featureFlags.composeTopSitesEnabled
+ settings.enableTranslations = featureFlags.translationsEnabled
setETPPolicy(featureFlags.etpPolicy)
}
}
@@ -110,6 +113,7 @@ private data class FeatureFlags(
var etpPolicy: ETPPolicy,
var tabsTrayRewriteEnabled: Boolean,
var composeTopSitesEnabled: Boolean,
+ var translationsEnabled: Boolean,
)
internal fun getETPPolicy(settings: Settings): ETPPolicy {
diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt
index 754f7f5a5..d552d55fb 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/HomeActivityTestRule.kt
@@ -165,6 +165,7 @@ class HomeActivityIntentTestRule internal constructor(
etpPolicy: ETPPolicy = getETPPolicy(settings),
tabsTrayRewriteEnabled: Boolean = false,
composeTopSitesEnabled: Boolean = false,
+ translationsEnabled: Boolean = false,
) : this(initialTouchMode, launchActivity, skipOnboarding) {
this.isHomeOnboardingDialogEnabled = isHomeOnboardingDialogEnabled
this.isPocketEnabled = isPocketEnabled
@@ -179,6 +180,7 @@ class HomeActivityIntentTestRule internal constructor(
this.etpPolicy = etpPolicy
this.tabsTrayRewriteEnabled = tabsTrayRewriteEnabled
this.composeTopSitesEnabled = composeTopSitesEnabled
+ this.isTranslationsEnabled = translationsEnabled
}
private val longTapUserPreference = getLongPressTimeout()
@@ -260,6 +262,7 @@ class HomeActivityIntentTestRule internal constructor(
skipOnboarding: Boolean = false,
tabsTrayRewriteEnabled: Boolean = false,
composeTopSitesEnabled: Boolean = false,
+ translationsEnabled: Boolean = false,
) = HomeActivityIntentTestRule(
initialTouchMode = initialTouchMode,
launchActivity = launchActivity,
@@ -271,6 +274,7 @@ class HomeActivityIntentTestRule internal constructor(
isWallpaperOnboardingEnabled = false,
isOpenInAppBannerEnabled = false,
composeTopSitesEnabled = composeTopSitesEnabled,
+ translationsEnabled = translationsEnabled,
)
}
}
diff --git a/app/src/androidTest/java/org/mozilla/fenix/helpers/RetryTestRule.kt b/app/src/androidTest/java/org/mozilla/fenix/helpers/RetryTestRule.kt
index ad1ac26ea..12b10268d 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/helpers/RetryTestRule.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/helpers/RetryTestRule.kt
@@ -4,6 +4,7 @@
package org.mozilla.fenix.helpers
+import android.util.Log
import androidx.test.espresso.IdlingResourceTimeoutException
import androidx.test.espresso.NoMatchingViewException
import androidx.test.uiautomator.UiObjectNotFoundException
@@ -13,7 +14,9 @@ import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
import org.mozilla.fenix.components.PermissionStorage
+import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.helpers.AppAndSystemHelper.setNetworkEnabled
+import org.mozilla.fenix.helpers.Constants.TAG
import org.mozilla.fenix.helpers.IdlingResourceHelper.unregisterAllIdlingResources
import org.mozilla.fenix.helpers.TestHelper.appContext
@@ -32,68 +35,83 @@ class RetryTestRule(private val retryCount: Int = 5) : TestRule {
return statement {
for (i in 1..retryCount) {
try {
+ Log.i(TAG, "RetryTestRule: Started try #$i.")
base.evaluate()
break
} catch (t: AssertionError) {
setNetworkEnabled(true)
unregisterAllIdlingResources()
runBlocking {
+ appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
permissionStorage.deleteAllSitePermissions()
}
if (i == retryCount) {
+ Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
throw t
}
} catch (t: AssertionFailedError) {
unregisterAllIdlingResources()
runBlocking {
+ appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
permissionStorage.deleteAllSitePermissions()
}
if (i == retryCount) {
+ Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
throw t
}
} catch (t: UiObjectNotFoundException) {
setNetworkEnabled(true)
unregisterAllIdlingResources()
runBlocking {
+ appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
permissionStorage.deleteAllSitePermissions()
}
if (i == retryCount) {
+ Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
throw t
}
} catch (t: NoMatchingViewException) {
setNetworkEnabled(true)
unregisterAllIdlingResources()
runBlocking {
+ appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
permissionStorage.deleteAllSitePermissions()
}
if (i == retryCount) {
+ Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
throw t
}
} catch (t: IdlingResourceTimeoutException) {
setNetworkEnabled(true)
unregisterAllIdlingResources()
runBlocking {
+ appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
permissionStorage.deleteAllSitePermissions()
}
if (i == retryCount) {
+ Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
throw t
}
} catch (t: RuntimeException) {
setNetworkEnabled(true)
unregisterAllIdlingResources()
runBlocking {
+ appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
permissionStorage.deleteAllSitePermissions()
}
if (i == retryCount) {
+ Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
throw t
}
} catch (t: NullPointerException) {
setNetworkEnabled(true)
unregisterAllIdlingResources()
runBlocking {
+ appContext.settings().alwaysOpenTheHomepageWhenOpeningTheApp = true
permissionStorage.deleteAllSitePermissions()
}
if (i == retryCount) {
+ Log.i(TAG, "RetryTestRule: Max numbers of retries reached.")
throw t
}
}
diff --git a/app/src/androidTest/java/org/mozilla/fenix/onboarding/view/OnboardingMapperTest.kt b/app/src/androidTest/java/org/mozilla/fenix/onboarding/view/OnboardingMapperTest.kt
index ac48f485e..1a9024ee6 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/onboarding/view/OnboardingMapperTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/onboarding/view/OnboardingMapperTest.kt
@@ -45,10 +45,12 @@ class OnboardingMapperTest {
@Test
fun showNotificationTrue_showAddWidgetFalse_pagesToDisplay_returnsSortedListOfAllConvertedPages_withoutAddWidgetPage() {
- val expected = listOf(defaultBrowserPageUiData, syncPageUiData, notificationPageUiData)
+ val expected = listOf(defaultBrowserPageUiDataWithPrivacyCaption, syncPageUiData, notificationPageUiData)
assertEquals(
expected,
unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = true,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -59,10 +61,12 @@ class OnboardingMapperTest {
@Test
fun showNotificationFalse_showAddWidgetFalse_pagesToDisplay_returnsSortedListOfConvertedPages_withoutNotificationPage_and_addWidgetPage() {
- val expected = listOf(defaultBrowserPageUiData, syncPageUiData)
+ val expected = listOf(defaultBrowserPageUiDataWithPrivacyCaption, syncPageUiData)
assertEquals(
expected,
unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -71,12 +75,77 @@ class OnboardingMapperTest {
)
}
+ @Test
+ fun pagesToDisplay_returnsSortedListOfConvertedPages_withPrivacyCaption_alwaysOnFirstPage() {
+ var result = unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = false,
+ showNotificationPage = false,
+ showAddWidgetPage = false,
+ jexlConditions = jexlConditions,
+ func = evalFunction,
+ )
+ assertEquals(result[0].privacyCaption, privacyCaption)
+
+ result = unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = false,
+ showNotificationPage = true,
+ showAddWidgetPage = false,
+ jexlConditions = jexlConditions,
+ func = evalFunction,
+ )
+ assertEquals(result[0].privacyCaption, privacyCaption)
+ assertEquals(result[1].privacyCaption, null)
+
+ result = unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
+ showNotificationPage = true,
+ showAddWidgetPage = false,
+ jexlConditions = jexlConditions,
+ func = evalFunction,
+ )
+ assertEquals(result[0].privacyCaption, privacyCaption)
+ assertEquals(result[1].privacyCaption, null)
+ assertEquals(result[2].privacyCaption, null)
+
+ result = unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = false,
+ showNotificationPage = false,
+ showAddWidgetPage = true,
+ jexlConditions = jexlConditions,
+ func = evalFunction,
+ )
+ assertEquals(result[0].privacyCaption, privacyCaption)
+ assertEquals(result[1].privacyCaption, null)
+ }
+
+ @Test
+ fun showDefaultBrowserPageFalse_showNotificationFalse_showAddWidgetTrue_pagesToDisplay_returnsSortedListOfAllConvertedPages() {
+ val expected = listOf(addSearchWidgetPageUiDataWithPrivacyCaption, syncPageUiData)
+ assertEquals(
+ expected,
+ unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = false,
+ showNotificationPage = false,
+ showAddWidgetPage = true,
+ jexlConditions = jexlConditions,
+ func = evalFunction,
+ ),
+ )
+ }
+
@Test
fun showNotificationFalse_showAddWidgetTrue_pagesToDisplay_returnsSortedListOfAllConvertedPages_withoutNotificationPage() {
- val expected = listOf(defaultBrowserPageUiData, addSearchWidgetPageUiData, syncPageUiData)
+ val expected = listOf(defaultBrowserPageUiDataWithPrivacyCaption, addSearchWidgetPageUiData, syncPageUiData)
assertEquals(
expected,
unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = true,
jexlConditions = jexlConditions,
@@ -88,7 +157,7 @@ class OnboardingMapperTest {
@Test
fun showNotificationTrue_and_showAddWidgetTrue_pagesToDisplay_returnsSortedListOfConvertedPages() {
val expected = listOf(
- defaultBrowserPageUiData,
+ defaultBrowserPageUiDataWithPrivacyCaption,
addSearchWidgetPageUiData,
syncPageUiData,
notificationPageUiData,
@@ -96,6 +165,8 @@ class OnboardingMapperTest {
assertEquals(
expected,
unsortedAllKnownCardData.toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = true,
showAddWidgetPage = true,
jexlConditions = jexlConditions,
@@ -107,11 +178,13 @@ class OnboardingMapperTest {
@Test
fun cardConditionsMatchJexlConditions_shouldDisplayCard_returnsConvertedPage() {
val jexlConditions = mapOf("ALWAYS" to "true", "NEVER" to "false")
- val expected = listOf(defaultBrowserPageUiData)
+ val expected = listOf(defaultBrowserPageUiDataWithPrivacyCaption)
assertEquals(
expected,
listOf(defaultBrowserCardData).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -128,6 +201,8 @@ class OnboardingMapperTest {
assertEquals(
expected,
listOf(addSearchWidgetCardDataNoConditions).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -144,6 +219,8 @@ class OnboardingMapperTest {
assertEquals(
expected,
listOf(defaultBrowserCardData).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -155,11 +232,13 @@ class OnboardingMapperTest {
@Test
fun prerequisitesMatchJexlConditions_shouldDisplayCard_returnsConvertedPage() {
val jexlConditions = mapOf("ALWAYS" to "true")
- val expected = listOf(defaultBrowserPageUiData)
+ val expected = listOf(defaultBrowserPageUiDataWithPrivacyCaption)
assertEquals(
expected,
listOf(defaultBrowserCardData).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -176,6 +255,8 @@ class OnboardingMapperTest {
assertEquals(
expected,
listOf(defaultBrowserCardData).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -192,6 +273,8 @@ class OnboardingMapperTest {
assertEquals(
expected,
listOf(addSearchWidgetCardDataNoConditions).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -203,11 +286,13 @@ class OnboardingMapperTest {
@Test
fun noDisqualifiers_shouldDisplayCard_returnsConvertedPage() {
val jexlConditions = mapOf("ALWAYS" to "true", "NEVER" to "false")
- val expected = listOf(defaultBrowserPageUiData)
+ val expected = listOf(defaultBrowserPageUiDataWithPrivacyCaption)
assertEquals(
expected,
listOf(defaultBrowserCardDataNoDisqualifiers).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -219,11 +304,13 @@ class OnboardingMapperTest {
@Test
fun disqualifiersMatchJexlConditions_shouldDisplayCard_returnsConvertedPage() {
val jexlConditions = mapOf("NEVER" to "false")
- val expected = listOf(syncPageUiData)
+ val expected = listOf(syncPageUiDataWithPrivacyCaption)
assertEquals(
expected,
listOf(syncCardData).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -240,6 +327,8 @@ class OnboardingMapperTest {
assertEquals(
expected,
listOf(notificationCardData).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -251,11 +340,13 @@ class OnboardingMapperTest {
@Test
fun noPrerequisites_shouldDisplayCard_returnsConvertedPage() {
val jexlConditions = mapOf("ALWAYS" to "true", "NEVER" to "false")
- val expected = listOf(syncPageUiData)
+ val expected = listOf(syncPageUiDataWithPrivacyCaption)
assertEquals(
expected,
listOf(syncCardData).toPageUiData(
+ privacyCaption = privacyCaption,
+ showDefaultBrowserPage = true,
showNotificationPage = false,
showAddWidgetPage = false,
jexlConditions = jexlConditions,
@@ -264,24 +355,34 @@ class OnboardingMapperTest {
)
}
}
+val privacyCaption: Caption = mockk(relaxed = true)
-private val defaultBrowserPageUiData = OnboardingPageUiData(
+private val defaultBrowserPageUiDataWithPrivacyCaption = OnboardingPageUiData(
type = OnboardingPageUiData.Type.DEFAULT_BROWSER,
imageRes = R.drawable.ic_onboarding_welcome,
title = "default browser title",
- description = "default browser body with link text",
- linkText = "link text",
+ description = "default browser body",
primaryButtonLabel = "default browser primary button text",
secondaryButtonLabel = "default browser secondary button text",
+ privacyCaption = privacyCaption,
)
private val addSearchWidgetPageUiData = OnboardingPageUiData(
type = OnboardingPageUiData.Type.ADD_SEARCH_WIDGET,
imageRes = R.drawable.ic_onboarding_search_widget,
title = "add search widget title",
- description = "add search widget body with link text",
- linkText = "link text",
+ description = "add search widget body",
+ primaryButtonLabel = "add search widget primary button text",
+ secondaryButtonLabel = "add search widget secondary button text",
+ privacyCaption = null,
+)
+private val addSearchWidgetPageUiDataWithPrivacyCaption = OnboardingPageUiData(
+ type = OnboardingPageUiData.Type.ADD_SEARCH_WIDGET,
+ imageRes = R.drawable.ic_onboarding_search_widget,
+ title = "add search widget title",
+ description = "add search widget body",
primaryButtonLabel = "add search widget primary button text",
secondaryButtonLabel = "add search widget secondary button text",
+ privacyCaption = privacyCaption,
)
private val syncPageUiData = OnboardingPageUiData(
type = OnboardingPageUiData.Type.SYNC_SIGN_IN,
@@ -290,6 +391,16 @@ private val syncPageUiData = OnboardingPageUiData(
description = "sync body",
primaryButtonLabel = "sync primary button text",
secondaryButtonLabel = "sync secondary button text",
+ privacyCaption = null,
+)
+private val syncPageUiDataWithPrivacyCaption = OnboardingPageUiData(
+ type = OnboardingPageUiData.Type.SYNC_SIGN_IN,
+ imageRes = R.drawable.ic_onboarding_sync,
+ title = "sync title",
+ description = "sync body",
+ primaryButtonLabel = "sync primary button text",
+ secondaryButtonLabel = "sync secondary button text",
+ privacyCaption = privacyCaption,
)
private val notificationPageUiData = OnboardingPageUiData(
type = OnboardingPageUiData.Type.NOTIFICATION_PERMISSION,
@@ -298,14 +409,14 @@ private val notificationPageUiData = OnboardingPageUiData(
description = "notification body",
primaryButtonLabel = "notification primary button text",
secondaryButtonLabel = "notification secondary button text",
+ privacyCaption = null,
)
private val defaultBrowserCardData = OnboardingCardData(
cardType = OnboardingCardType.DEFAULT_BROWSER,
imageRes = R.drawable.ic_onboarding_welcome,
title = StringHolder(null, "default browser title"),
- body = StringHolder(null, "default browser body with link text"),
- linkText = StringHolder(null, "link text"),
+ body = StringHolder(null, "default browser body"),
primaryButtonLabel = StringHolder(null, "default browser primary button text"),
secondaryButtonLabel = StringHolder(null, "default browser secondary button text"),
ordering = 10,
@@ -317,8 +428,7 @@ private val defaultBrowserCardDataNoDisqualifiers = OnboardingCardData(
cardType = OnboardingCardType.DEFAULT_BROWSER,
imageRes = R.drawable.ic_onboarding_welcome,
title = StringHolder(null, "default browser title"),
- body = StringHolder(null, "default browser body with link text"),
- linkText = StringHolder(null, "link text"),
+ body = StringHolder(null, "default browser body"),
primaryButtonLabel = StringHolder(null, "default browser primary button text"),
secondaryButtonLabel = StringHolder(null, "default browser secondary button text"),
ordering = 10,
@@ -330,8 +440,7 @@ private val addSearchWidgetCardDataNoConditions = OnboardingCardData(
cardType = OnboardingCardType.ADD_SEARCH_WIDGET,
imageRes = R.drawable.ic_onboarding_search_widget,
title = StringHolder(null, "add search widget title"),
- body = StringHolder(null, "add search widget body with link text"),
- linkText = StringHolder(null, "link text"),
+ body = StringHolder(null, "add search widget body"),
primaryButtonLabel = StringHolder(null, "add search widget primary button text"),
secondaryButtonLabel = StringHolder(null, "add search widget secondary button text"),
ordering = 15,
@@ -343,8 +452,7 @@ private val addSearchWidgetCardData = OnboardingCardData(
cardType = OnboardingCardType.ADD_SEARCH_WIDGET,
imageRes = R.drawable.ic_onboarding_search_widget,
title = StringHolder(null, "add search widget title"),
- body = StringHolder(null, "add search widget body with link text"),
- linkText = StringHolder(null, "link text"),
+ body = StringHolder(null, "add search widget body"),
primaryButtonLabel = StringHolder(null, "add search widget primary button text"),
secondaryButtonLabel = StringHolder(null, "add search widget secondary button text"),
ordering = 15,
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/AddressAutofillTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/AddressAutofillTest.kt
index ac1af19cc..4631b8a7a 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/AddressAutofillTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/AddressAutofillTest.kt
@@ -7,7 +7,6 @@ package org.mozilla.fenix.ui
import okhttp3.mockwebserver.MockWebServer
import org.junit.After
import org.junit.Before
-import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
@@ -265,7 +264,6 @@ class AddressAutofillTest {
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1836849
- @Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1814032")
@Test
fun verifyMultipleAddressesSelectionTest() {
val addressFormPage =
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/ComposeNavigationToolbarTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/ComposeNavigationToolbarTest.kt
index d5cee7ed0..ee4964197 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/ComposeNavigationToolbarTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/ComposeNavigationToolbarTest.kt
@@ -14,6 +14,7 @@ import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
+import org.mozilla.fenix.helpers.AppAndSystemHelper.resetSystemLocaleToEnUS
import org.mozilla.fenix.helpers.AppAndSystemHelper.runWithSystemLocaleChanged
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
@@ -54,6 +55,7 @@ class ComposeNavigationToolbarTest {
@After
fun tearDown() {
mockWebServer.shutdown()
+ resetSystemLocaleToEnUS()
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/987326
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/CookieBannerBlockerTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/CookieBannerBlockerTest.kt
new file mode 100644
index 000000000..7ff48e390
--- /dev/null
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/CookieBannerBlockerTest.kt
@@ -0,0 +1,54 @@
+/* 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 org.mozilla.fenix.ui
+
+import androidx.core.net.toUri
+import org.junit.Rule
+import org.junit.Test
+import org.mozilla.fenix.customannotations.SmokeTest
+import org.mozilla.fenix.ext.settings
+import org.mozilla.fenix.helpers.AppAndSystemHelper.runWithCondition
+import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
+import org.mozilla.fenix.helpers.TestHelper.appContext
+import org.mozilla.fenix.ui.robots.homeScreen
+import org.mozilla.fenix.ui.robots.navigationToolbar
+
+/**
+ * Tests for verifying the new Cookie banner blocker option and functionality.
+ */
+class CookieBannerBlockerTest {
+ @get:Rule
+ val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides(skipOnboarding = true)
+
+ // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2419260
+ @SmokeTest
+ @Test
+ fun verifyCookieBannerBlockerSettingsOptionTest() {
+ runWithCondition(appContext.settings().shouldUseCookieBannerPrivateMode) {
+ homeScreen {
+ }.openThreeDotMenu {
+ }.openSettings {
+ verifyCookieBannerBlockerButton(enabled = true)
+ }
+ }
+ }
+
+ // TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2419273
+ @SmokeTest
+ @Test
+ fun verifyCFRAfterBlockingTheCookieBanner() {
+ runWithCondition(appContext.settings().shouldUseCookieBannerPrivateMode) {
+ homeScreen {
+ }.togglePrivateBrowsingMode()
+
+ navigationToolbar {
+ }.enterURLAndEnterToBrowser("voetbal24.be".toUri()) {
+ waitForPageToLoad()
+ verifyCookieBannerExists(exists = false)
+ verifyCookieBannerBlockerCFRExists(exists = true)
+ }
+ }
+ }
+}
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/FirefoxSuggestTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/FirefoxSuggestTest.kt
index 8d9cef7d4..a6b6eb35d 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/FirefoxSuggestTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/FirefoxSuggestTest.kt
@@ -5,11 +5,13 @@
package org.mozilla.fenix.ui
import androidx.compose.ui.test.junit4.AndroidComposeTestRule
+import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.settings
-import org.mozilla.fenix.helpers.AppAndSystemHelper
+import org.mozilla.fenix.helpers.AppAndSystemHelper.runWithCondition
+import org.mozilla.fenix.helpers.DataGenerationHelper.getSponsoredFxSuggestPlaceHolder
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestHelper
import org.mozilla.fenix.ui.robots.navigationToolbar
@@ -20,6 +22,7 @@ import org.mozilla.fenix.ui.robots.navigationToolbar
*/
class FirefoxSuggestTest {
+
@get:Rule
val activityTestRule = AndroidComposeTestRule(
HomeActivityTestRule(
@@ -33,91 +36,156 @@ class FirefoxSuggestTest {
),
) { it.activity }
+ private val sponsoredKeyWords: Map> =
+ mapOf(
+ "Amazon" to
+ listOf(
+ "Amazon.com - Official Site",
+ "amazon.com/?tag=admarketus-20&ref=pd_sl_924ab4435c5a5c23aa2804307ee0669ab36f88caee841ce51d1f2ecb&mfadid=adm",
+ ),
+ "Nike" to
+ listOf(
+ "Nike.com - Official Site",
+ "nike.com/?cp=16423867261_search_318370984us128${getSponsoredFxSuggestPlaceHolder()}&mfadid=adm",
+ ),
+ "Macy" to listOf(
+ "macys.com - Official Site",
+ "macys.com/?cm_mmc=Google_AdMarketPlace-_-Privacy_Instant%20Suggest-_-319101130_Broad-_-kclickid__kenshoo_clickid_&m_sc=sem&m_sb=Admarketplace&m_tp=Search&m_ac=Admarketplace&m_ag=Instant%20Suggest&m_cn=Privacy&m_pi=kclickid__kenshoo_clickid__319101130us1201${getSponsoredFxSuggestPlaceHolder()}&mfadid=adm",
+ ),
+ "Spanx" to listOf(
+ "SPANX® - Official Site",
+ "spanx.com/?utm_source=admarketplace&utm_medium=cpc&utm_campaign=privacy&utm_content=319093361us1202${getSponsoredFxSuggestPlaceHolder()}&mfadid=adm",
+ ),
+ "Bloom" to listOf(
+ "Bloomingdales.com - Official Site",
+ "bloomingdales.com/?cm_mmc=Admarketplace-_-Privacy-_-Privacy-_-privacy%20instant%20suggest-_-319093353us1228${getSponsoredFxSuggestPlaceHolder()}-_-kclickid__kenshoo_clickid_&mfadid=adm",
+ ),
+ "Groupon" to listOf(
+ "groupon.com - Discover & Save!",
+ "groupon.com/?utm_source=google&utm_medium=cpc&utm_campaign=us_dt_sea_ggl_txt_smp_sr_cbp_ch1_nbr_k*{keyword}_m*{match-type}_d*ADMRKT_319093357us1279${getSponsoredFxSuggestPlaceHolder()}&mfadid=adm",
+ ),
+ )
+
+ private val sponsoredKeyWord = sponsoredKeyWords.keys.random()
+
+ private val nonSponsoredKeyWords: Map> =
+ mapOf(
+ "Marvel" to
+ listOf(
+ "Wikipedia - Marvel Cinematic Universe",
+ "wikipedia.org/wiki/Marvel_Cinematic_Universe",
+ ),
+ "Apple" to
+ listOf(
+ "Wikipedia - Apple Inc.",
+ "wikipedia.org/wiki/Apple_Inc",
+ ),
+ "Africa" to listOf(
+ "Wikipedia - African Union",
+ "wikipedia.org/wiki/African_Union",
+ ),
+ "Ultimate" to listOf(
+ "Wikipedia - Ultimate Fighting Championship",
+ "wikipedia.org/wiki/Ultimate_Fighting_Championship",
+ ),
+ "Youtube" to listOf(
+ "Wikipedia - YouTube",
+ "wikipedia.org/wiki/YouTube",
+ ),
+ "Fifa" to listOf(
+ "Wikipedia - FIFA World Cup",
+ "en.m.wikipedia.org/wiki/FIFA_World_Cup",
+ ),
+ )
+
+ private val nonSponsoredKeyWord = nonSponsoredKeyWords.keys.random()
+
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2348361
+ @Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1874831")
@SmokeTest
@Test
fun verifyFirefoxSuggestSponsoredSearchResultsTest() {
- AppAndSystemHelper.runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
+ runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
navigationToolbar {
}.clickUrlbar {
- typeSearch(searchTerm = "Amazon")
+ typeSearch(searchTerm = sponsoredKeyWord)
verifySearchEngineSuggestionResults(
rule = activityTestRule,
searchSuggestions = arrayOf(
"Firefox Suggest",
- "Amazon.com - Official Site",
+ sponsoredKeyWords.getValue(sponsoredKeyWord)[0],
"Sponsored",
),
- searchTerm = "Amazon",
+ searchTerm = sponsoredKeyWord,
)
}
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2348362
+ @Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1874831")
@Test
fun verifyFirefoxSuggestSponsoredSearchResultsWithPartialKeywordTest() {
- AppAndSystemHelper.runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
+ runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
navigationToolbar {
}.clickUrlbar {
- typeSearch(searchTerm = "Amaz")
+ typeSearch(searchTerm = sponsoredKeyWord.dropLast(1))
verifySearchEngineSuggestionResults(
rule = activityTestRule,
searchSuggestions = arrayOf(
"Firefox Suggest",
- "Amazon.com - Official Site",
+ sponsoredKeyWords.getValue(sponsoredKeyWord)[0],
"Sponsored",
),
- searchTerm = "Amaz",
+ searchTerm = sponsoredKeyWord.dropLast(1),
)
}
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2348363
+ @Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1874831")
@Test
fun openFirefoxSuggestSponsoredSearchResultsTest() {
- AppAndSystemHelper.runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
+ runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
navigationToolbar {
}.clickUrlbar {
- typeSearch(searchTerm = "Amazon")
+ typeSearch(searchTerm = sponsoredKeyWord)
verifySearchEngineSuggestionResults(
rule = activityTestRule,
searchSuggestions = arrayOf(
"Firefox Suggest",
- "Amazon.com - Official Site",
+ sponsoredKeyWords.getValue(sponsoredKeyWord)[0],
"Sponsored",
),
- searchTerm = "Amazon",
- )
- }.clickSearchSuggestion("Amazon.com - Official Site") {
- waitForPageToLoad()
- verifyUrl(
- "amazon.com/?tag=admarketus-20&ref=pd_sl_924ab4435c5a5c23aa2804307ee0669ab36f88caee841ce51d1f2ecb&mfadid=adm",
+ searchTerm = sponsoredKeyWord,
)
+ }.clickSearchSuggestion(sponsoredKeyWords.getValue(sponsoredKeyWord)[0]) {
+ verifyUrl(sponsoredKeyWords.getValue(sponsoredKeyWord)[1])
verifyTabCounter("1")
}
}
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2348369
+ @Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1874831")
@Test
fun verifyFirefoxSuggestSponsoredSearchResultsWithEditedKeywordTest() {
- AppAndSystemHelper.runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
+ runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
navigationToolbar {
}.clickUrlbar {
- typeSearch(searchTerm = "Amazon")
- deleteSearchKeywordCharacters(numberOfDeletionSteps = 3)
+ typeSearch(searchTerm = sponsoredKeyWord)
+ deleteSearchKeywordCharacters(numberOfDeletionSteps = 1)
verifySearchEngineSuggestionResults(
rule = activityTestRule,
searchSuggestions = arrayOf(
"Firefox Suggest",
- "Amazon.com - Official Site",
+ sponsoredKeyWords.getValue(sponsoredKeyWord)[0],
"Sponsored",
),
- searchTerm = "Amazon",
+ searchTerm = sponsoredKeyWord,
shouldEditKeyword = true,
- numberOfDeletionSteps = 3,
+ numberOfDeletionSteps = 1,
)
}
}
@@ -127,17 +195,17 @@ class FirefoxSuggestTest {
@SmokeTest
@Test
fun verifyFirefoxSuggestNonSponsoredSearchResultsTest() {
- AppAndSystemHelper.runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
+ runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
navigationToolbar {
}.clickUrlbar {
- typeSearch(searchTerm = "Marvel")
+ typeSearch(searchTerm = nonSponsoredKeyWord)
verifySearchEngineSuggestionResults(
rule = activityTestRule,
searchSuggestions = arrayOf(
"Firefox Suggest",
- "Wikipedia - Marvel Cinematic Universe",
+ nonSponsoredKeyWords.getValue(nonSponsoredKeyWord)[0],
),
- searchTerm = "Marvel",
+ searchTerm = nonSponsoredKeyWord,
)
verifySuggestionsAreNotDisplayed(
rule = activityTestRule,
@@ -152,17 +220,17 @@ class FirefoxSuggestTest {
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2348375
@Test
fun verifyFirefoxSuggestNonSponsoredSearchResultsWithPartialKeywordTest() {
- AppAndSystemHelper.runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
+ runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
navigationToolbar {
}.clickUrlbar {
- typeSearch(searchTerm = "Marv")
+ typeSearch(searchTerm = nonSponsoredKeyWord.dropLast(1))
verifySearchEngineSuggestionResults(
rule = activityTestRule,
searchSuggestions = arrayOf(
"Firefox Suggest",
- "Wikipedia - Marvel Cinematic Universe",
+ nonSponsoredKeyWords.getValue(nonSponsoredKeyWord)[0],
),
- searchTerm = "Marv",
+ searchTerm = nonSponsoredKeyWord.dropLast(1),
)
}
}
@@ -171,23 +239,21 @@ class FirefoxSuggestTest {
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2348376
@Test
fun openFirefoxSuggestNonSponsoredSearchResultsTest() {
- AppAndSystemHelper.runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
+ runWithCondition(TestHelper.appContext.settings().enableFxSuggest) {
navigationToolbar {
}.clickUrlbar {
- typeSearch(searchTerm = "Marvel")
+ typeSearch(searchTerm = nonSponsoredKeyWord)
verifySearchEngineSuggestionResults(
rule = activityTestRule,
searchSuggestions = arrayOf(
"Firefox Suggest",
- "Wikipedia - Marvel Cinematic Universe",
+ nonSponsoredKeyWords.getValue(nonSponsoredKeyWord)[0],
),
- searchTerm = "Marvel",
+ searchTerm = nonSponsoredKeyWord,
)
- }.clickSearchSuggestion("Wikipedia - Marvel Cinematic Universe") {
+ }.clickSearchSuggestion(nonSponsoredKeyWords.getValue(nonSponsoredKeyWord)[0]) {
waitForPageToLoad()
- verifyUrl(
- "wikipedia.org/wiki/Marvel_Cinematic_Universe",
- )
+ verifyUrl(nonSponsoredKeyWords.getValue(nonSponsoredKeyWord)[1])
}
}
}
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt
index 6705fcf5c..a725fd33d 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/LoginsTest.kt
@@ -607,14 +607,12 @@ class LoginsTest {
revealPassword()
verifyPasswordSaved("firefox")
}.goBackToSavedLogins {
- clickSearchLoginButton()
searchLogin("android")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
revealPassword()
verifyPasswordSaved("firefox")
}.goBackToSavedLogins {
- clickSearchLoginButton()
searchLogin("AnDrOiD")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
@@ -654,14 +652,12 @@ class LoginsTest {
revealPassword()
verifyPasswordSaved("firefox")
}.goBackToSavedLogins {
- clickSearchLoginButton()
searchLogin("mozilla")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
revealPassword()
verifyPasswordSaved("firefox")
}.goBackToSavedLogins {
- clickSearchLoginButton()
searchLogin("MoZiLlA")
viewSavedLoginDetails(originWebsite)
verifyLoginItemUsername("android")
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/MainMenuTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/MainMenuTest.kt
index 97e0d5c57..fa871f779 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/MainMenuTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/MainMenuTest.kt
@@ -37,7 +37,8 @@ class MainMenuTest {
private lateinit var mockWebServer: MockWebServer
@get:Rule
- val activityTestRule = HomeActivityIntentTestRule.withDefaultSettingsOverrides()
+ val activityTestRule =
+ HomeActivityIntentTestRule.withDefaultSettingsOverrides(translationsEnabled = true)
@Before
fun setUp() {
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTest.kt
index 17fd124d6..13c8812c5 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/NavigationToolbarTest.kt
@@ -14,6 +14,7 @@ import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
+import org.mozilla.fenix.helpers.AppAndSystemHelper
import org.mozilla.fenix.helpers.AppAndSystemHelper.runWithSystemLocaleChanged
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.TestAssetHelper
@@ -50,6 +51,7 @@ class NavigationToolbarTest {
@After
fun tearDown() {
mockWebServer.shutdown()
+ AppAndSystemHelper.resetSystemLocaleToEnUS()
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/987326
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt
index c2bc8cae4..0a5686c03 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SearchTest.kt
@@ -21,6 +21,7 @@ import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
+import org.mozilla.fenix.helpers.AppAndSystemHelper
import org.mozilla.fenix.helpers.AppAndSystemHelper.assertNativeAppOpens
import org.mozilla.fenix.helpers.AppAndSystemHelper.denyPermission
import org.mozilla.fenix.helpers.AppAndSystemHelper.grantSystemPermission
@@ -92,6 +93,7 @@ class SearchTest {
@After
fun tearDown() {
searchMockServer.shutdown()
+ AppAndSystemHelper.resetSystemLocaleToEnUS()
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2154189
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsAdvancedTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsAdvancedTest.kt
index 7bcebac37..f11f87783 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsAdvancedTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsAdvancedTest.kt
@@ -327,7 +327,7 @@ class SettingsAdvancedTest {
}
navigationToolbar {
- }.enterURLAndEnterToBrowser(youTubePage) {
+ }.enterURLAndEnterToBrowser("https://m.youtube.com/".toUri()) {
waitForPageToLoad()
verifyOpenLinksInAppsCFRExists(true)
}.clickOpenLinksInAppsGoToSettingsCFRButton {
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsGeneralTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsGeneralTest.kt
index b4423a272..d2292b31c 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsGeneralTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsGeneralTest.kt
@@ -14,6 +14,7 @@ import org.mozilla.fenix.FenixApplication
import org.mozilla.fenix.R
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
+import org.mozilla.fenix.helpers.AppAndSystemHelper
import org.mozilla.fenix.helpers.AppAndSystemHelper.registerAndCleanupIdlingResources
import org.mozilla.fenix.helpers.AppAndSystemHelper.runWithSystemLocaleChanged
import org.mozilla.fenix.helpers.DataGenerationHelper.getStringResource
@@ -51,6 +52,7 @@ class SettingsGeneralTest {
@After
fun tearDown() {
mockWebServer.shutdown()
+ AppAndSystemHelper.resetSystemLocaleToEnUS()
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2092697
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHTTPSOnlyModeTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHTTPSOnlyModeTest.kt
index 05d754c4f..f8c1bccbb 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHTTPSOnlyModeTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsHTTPSOnlyModeTest.kt
@@ -5,14 +5,12 @@
package org.mozilla.fenix.ui
import androidx.core.net.toUri
-import androidx.test.espresso.Espresso.pressBack
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.HomeActivityIntentTestRule
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.TestHelper.exitMenu
-import org.mozilla.fenix.ui.robots.browserScreen
import org.mozilla.fenix.ui.robots.clickPageObject
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
@@ -182,13 +180,7 @@ class SettingsHTTPSOnlyModeTest {
waitForPageToLoad()
}.openNavigationToolbar {
verifyUrl(httpsPageUrl)
- pressBack()
- }
- browserScreen {
- }.openTabDrawer {
- closeTab()
- }
- homeScreen {
+ }.goBackToBrowserScreen {
}.openThreeDotMenu {
}.openSettings {
}.openHttpsOnlyModeMenu {
@@ -203,7 +195,6 @@ class SettingsHTTPSOnlyModeTest {
waitForPageToLoad()
}.openNavigationToolbar {
verifyUrl(httpPageUrl)
- pressBack()
}
}
}
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsSearchTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsSearchTest.kt
index 5d75a3117..f9aab824f 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsSearchTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SettingsSearchTest.kt
@@ -14,6 +14,7 @@ import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
+import org.mozilla.fenix.helpers.AppAndSystemHelper.resetSystemLocaleToEnUS
import org.mozilla.fenix.helpers.AppAndSystemHelper.runWithSystemLocaleChanged
import org.mozilla.fenix.helpers.AppAndSystemHelper.setSystemLocale
import org.mozilla.fenix.helpers.DataGenerationHelper.setTextToClipBoard
@@ -64,6 +65,7 @@ class SettingsSearchTest {
@After
fun tearDown() {
mockWebServer.shutdown()
+ resetSystemLocaleToEnUS()
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/2203333
@@ -424,6 +426,10 @@ class SettingsSearchTest {
fun verifyShowSearchSuggestionsToggleTest() {
homeScreen {
}.openSearch {
+ // The Google related suggestions aren't always displayed on cold run
+ // Bugzilla ticket: https://bugzilla.mozilla.org/show_bug.cgi?id=1813587
+ clickSearchSelectorButton()
+ selectTemporarySearchMethod("DuckDuckGo")
typeSearch("mozilla ")
verifySearchEngineSuggestionResults(
activityTestRule,
@@ -438,6 +444,10 @@ class SettingsSearchTest {
}.goBack {
}.goBack {
}.openSearch {
+ // The Google related suggestions aren't always displayed on cold run
+ // Bugzilla ticket: https://bugzilla.mozilla.org/show_bug.cgi?id=1813587
+ clickSearchSelectorButton()
+ selectTemporarySearchMethod("DuckDuckGo")
typeSearch("mozilla")
verifySuggestionsAreNotDisplayed(activityTestRule, "mozilla firefox")
}
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/SponsoredShortcutsTest.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/SponsoredShortcutsTest.kt
index ee483f98e..4faa532a3 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/SponsoredShortcutsTest.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/SponsoredShortcutsTest.kt
@@ -9,7 +9,6 @@ import androidx.test.uiautomator.UiDevice
import okhttp3.mockwebserver.MockWebServer
import org.junit.After
import org.junit.Before
-import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.mozilla.fenix.customannotations.SmokeTest
@@ -90,7 +89,6 @@ class SponsoredShortcutsTest {
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1729335
- @Ignore("Failing, see: https://github.com/mozilla-mobile/fenix/issues/25926")
@Test
fun openSponsorsAndYourPrivacyOptionTest() {
homeScreen {
@@ -102,7 +100,6 @@ class SponsoredShortcutsTest {
}
// TestRail link: https://testrail.stage.mozaws.net/index.php?/cases/view/1729336
- @Ignore("Failing, see: https://bugzilla.mozilla.org/show_bug.cgi?id=1807268")
@Test
fun openSponsoredShortcutsSettingsOptionTest() {
homeScreen {
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt
index 338876d45..7a0b7c479 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/BrowserRobot.kt
@@ -17,6 +17,7 @@ import androidx.compose.ui.test.performClick
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.action.ViewActions.longClick
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.PickerActions
import androidx.test.espresso.matcher.RootMatchers.isDialog
@@ -40,7 +41,6 @@ import org.junit.Assert.assertTrue
import org.junit.Assert.fail
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
-import org.mozilla.fenix.helpers.Constants.LONG_CLICK_DURATION
import org.mozilla.fenix.helpers.Constants.RETRY_COUNT
import org.mozilla.fenix.helpers.Constants.TAG
import org.mozilla.fenix.helpers.DataGenerationHelper.getStringResource
@@ -686,24 +686,29 @@ class BrowserRobot {
fun verifyCookieBannerExists(exists: Boolean) {
for (i in 1..RETRY_COUNT) {
+ Log.i(TAG, "verifyCookieBannerExists: For loop: $i")
try {
- assertUIObjectExists(cookieBanner(), exists = exists)
+ // Wait for the blocker to kick-in and make the cookie banner disappear
+ itemWithResId("CybotCookiebotDialog").waitUntilGone(waitingTime)
+ Log.i(TAG, "verifyCookieBannerExists: Waiting for window update")
+ // Assert that the blocker properly dismissed the cookie banner
+ assertUIObjectExists(itemWithResId("CybotCookiebotDialog"), exists = exists)
+
break
} catch (e: AssertionError) {
if (i == RETRY_COUNT) {
throw e
- } else {
- browserScreen {
- }.openThreeDotMenu {
- }.refreshPage {
- waitForPageToLoad()
- }
}
}
}
- assertUIObjectExists(cookieBanner(), exists = exists)
}
+ fun verifyCookieBannerBlockerCFRExists(exists: Boolean) =
+ assertUIObjectExists(
+ itemContainingText(getStringResource(R.string.cookie_banner_cfr_message)),
+ exists = exists,
+ )
+
fun verifyOpenLinkInAnotherAppPrompt() {
assertUIObjectExists(
itemWithResId("$packageName:id/parentPanel"),
@@ -841,7 +846,7 @@ class BrowserRobot {
button.click()
}
- fun longClickToolbar() = mDevice.findObject(By.res("$packageName:id/mozac_browser_toolbar_url_view")).click(LONG_CLICK_DURATION)
+ fun longClickToolbar() = onView(withId(R.id.mozac_browser_toolbar_url_view)).perform(longClick())
fun verifyDownloadPromptIsDismissed() =
assertUIObjectExists(
@@ -1149,6 +1154,7 @@ class BrowserRobot {
"$packageName:id/action",
getStringResource(R.string.open_in_app_cfr_positive_button_text),
).clickAndWaitForNewWindow(waitingTime)
+ Log.i(TAG, "clickOpenLinksInAppsGoToSettingsCFRButton: Clicked \"Go to settings\" open links in apps CFR button")
SettingsRobot().interact()
return SettingsRobot.Transition()
@@ -1302,8 +1308,6 @@ fun clearTextFieldItem(item: UiObject) {
item.clearTextField()
}
-private fun cookieBanner() = itemWithResId("startsiden-gdpr-disclaimer")
-
// Context menu items
// Link URL
private fun contextMenuLinkUrl(linkUrl: String) =
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt
index e5912965e..d3e78c462 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/HomeScreenRobot.kt
@@ -26,6 +26,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.action.ViewActions.longClick
import androidx.test.espresso.assertion.PositionAssertions.isCompletelyAbove
import androidx.test.espresso.assertion.PositionAssertions.isPartiallyBelow
import androidx.test.espresso.assertion.ViewAssertions.matches
@@ -51,7 +52,6 @@ import org.junit.Assert
import org.junit.Assert.assertTrue
import org.mozilla.fenix.R
import org.mozilla.fenix.helpers.Constants.LISTS_MAXSWIPES
-import org.mozilla.fenix.helpers.Constants.LONG_CLICK_DURATION
import org.mozilla.fenix.helpers.Constants.TAG
import org.mozilla.fenix.helpers.DataGenerationHelper.getStringResource
import org.mozilla.fenix.helpers.HomeActivityComposeTestRule
@@ -86,9 +86,9 @@ class HomeScreenRobot {
" service provider, it makes it easier to keep what you do online private from anyone" +
" else who uses this device."
- fun verifyNavigationToolbar() = assertUIObjectExists(navigationToolbar)
+ fun verifyNavigationToolbar() = assertUIObjectExists(navigationToolbar())
- fun verifyHomeScreen() = assertUIObjectExists(homeScreen)
+ fun verifyHomeScreen() = assertUIObjectExists(homeScreen())
fun verifyPrivateBrowsingHomeScreenItems() {
verifyHomeScreenAppBarItems()
@@ -97,19 +97,19 @@ class HomeScreenRobot {
}
fun verifyHomeScreenAppBarItems() =
- assertUIObjectExists(homeScreen, privateBrowsingButton, homepageWordmark)
+ assertUIObjectExists(homeScreen(), privateBrowsingButton(), homepageWordmark())
fun verifyNavigationToolbarItems(numberOfOpenTabs: String = "0") =
- assertUIObjectExists(navigationToolbar, menuButton, tabCounter(numberOfOpenTabs))
+ assertUIObjectExists(navigationToolbar(), menuButton, tabCounter(numberOfOpenTabs))
- fun verifyHomePrivateBrowsingButton() = assertUIObjectExists(privateBrowsingButton)
+ fun verifyHomePrivateBrowsingButton() = assertUIObjectExists(privateBrowsingButton())
fun verifyHomeMenuButton() = assertUIObjectExists(menuButton)
fun verifyTabButton() = assertTabButton()
fun verifyCollectionsHeader() = assertCollectionsHeader()
fun verifyNoCollectionsText() = assertNoCollectionsText()
fun verifyHomeWordmark() {
homeScreenList().scrollToBeginning(3)
- assertUIObjectExists(homepageWordmark)
+ assertUIObjectExists(homepageWordmark())
}
fun verifyHomeComponent() = assertHomeComponent()
@@ -140,7 +140,7 @@ class HomeScreenRobot {
).assertExists()
it.onNodeWithText(
- getStringResource(R.string.juno_onboarding_default_browser_description_nimbus_2),
+ getStringResource(R.string.juno_onboarding_default_browser_description_nimbus_3),
).assertExists()
it.onNodeWithText(
@@ -292,7 +292,7 @@ class HomeScreenRobot {
mDevice.waitNotNull(findObject(By.text(expectedText)), waitingTime)
}
- fun clickFirefoxLogo() = homepageWordmark.click()
+ fun clickFirefoxLogo() = homepageWordmark().click()
fun verifyThoughtProvokingStories(enabled: Boolean) {
if (enabled) {
@@ -481,8 +481,8 @@ class HomeScreenRobot {
}
fun openSearch(interact: SearchRobot.() -> Unit): SearchRobot.Transition {
- navigationToolbar.waitForExists(waitingTime)
- navigationToolbar.click()
+ navigationToolbar().waitForExists(waitingTime)
+ navigationToolbar().click()
mDevice.waitForIdle()
SearchRobot().interact()
@@ -502,14 +502,14 @@ class HomeScreenRobot {
fun togglePrivateBrowsingMode(switchPBModeOn: Boolean = true) {
// Switch to private browsing homescreen
if (switchPBModeOn && !isPrivateModeEnabled()) {
- privateBrowsingButton.waitForExists(waitingTime)
- privateBrowsingButton.click()
+ privateBrowsingButton().waitForExists(waitingTime)
+ privateBrowsingButton().click()
}
// Switch to normal browsing homescreen
if (!switchPBModeOn && isPrivateModeEnabled()) {
- privateBrowsingButton.waitForExists(waitingTime)
- privateBrowsingButton.click()
+ privateBrowsingButton().waitForExists(waitingTime)
+ privateBrowsingButton().click()
}
}
@@ -521,7 +521,7 @@ class HomeScreenRobot {
waitingTime,
)
- privateBrowsingButton.click()
+ privateBrowsingButton().click()
}
AddToHomeScreenRobot().interact()
@@ -535,7 +535,7 @@ class HomeScreenRobot {
fun openNavigationToolbar(interact: NavigationToolbarRobot.() -> Unit): NavigationToolbarRobot.Transition {
mDevice.findObject(UiSelector().resourceId("$packageName:id/toolbar"))
.waitForExists(waitingTime)
- navigationToolbar.click()
+ navigationToolbar().click()
NavigationToolbarRobot().interact()
return NavigationToolbarRobot.Transition()
@@ -557,7 +557,8 @@ class HomeScreenRobot {
}
fun openContextMenuOnSponsoredShortcut(sponsoredShortcutTitle: String, interact: HomeScreenRobot.() -> Unit): Transition {
- sponsoredShortcut(sponsoredShortcutTitle).click(LONG_CLICK_DURATION)
+ sponsoredShortcut(sponsoredShortcutTitle).perform(longClick())
+ Log.i(TAG, "openContextMenuOnSponsoredShortcut: Long clicked to open context menu for $sponsoredShortcutTitle sponsored shortcut")
HomeScreenRobot().interact()
return Transition()
@@ -631,8 +632,10 @@ class HomeScreenRobot {
}
fun clickSponsoredShortcutsSettingsButton(interact: SettingsSubMenuHomepageRobot.() -> Unit): SettingsSubMenuHomepageRobot.Transition {
+ Log.i(TAG, "clickSponsoredShortcutsSettingsButton: Looking for: ${sponsoredShortcutsSettingsButton.selector}")
sponsoredShortcutsSettingsButton.waitForExists(waitingTime)
sponsoredShortcutsSettingsButton.clickAndWaitForNewWindow(waitingTime)
+ Log.i(TAG, "clickSponsoredShortcutsSettingsButton: Clicked ${sponsoredShortcutsSettingsButton.selector} and waiting for $waitingTime for a new window")
SettingsSubMenuHomepageRobot().interact()
return SettingsSubMenuHomepageRobot.Transition()
@@ -939,18 +942,19 @@ private fun saveTabsToCollectionButton() = onView(withId(R.id.add_tabs_to_collec
private fun tabsCounter() = onView(withId(R.id.tab_button))
private fun sponsoredShortcut(sponsoredShortcutTitle: String) =
- mDevice.findObject(
- By
- .res("$packageName:id/top_site_title")
- .textContains(sponsoredShortcutTitle),
+ onView(
+ allOf(
+ withId(R.id.top_site_title),
+ withText(sponsoredShortcutTitle),
+ ),
)
private fun storyByTopicItem(composeTestRule: ComposeTestRule, position: Int) =
composeTestRule.onNodeWithTag("pocket.categories").onChildAt(position - 1)
-private val homeScreen =
+private fun homeScreen() =
itemWithResId("$packageName:id/homeLayout")
-private val privateBrowsingButton =
+private fun privateBrowsingButton() =
itemWithResId("$packageName:id/privateBrowsingButton")
private fun isPrivateModeEnabled(): Boolean =
@@ -959,10 +963,10 @@ private fun isPrivateModeEnabled(): Boolean =
"Disable private browsing",
).exists()
-private val homepageWordmark =
+private fun homepageWordmark() =
itemWithResId("$packageName:id/wordmark")
-private val navigationToolbar =
+private fun navigationToolbar() =
itemWithResId("$packageName:id/toolbar")
private val menuButton =
itemWithResId("$packageName:id/menuButton")
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt
index 0aafaef64..2cb540324 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/NavigationToolbarRobot.kt
@@ -15,6 +15,7 @@ import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.IdlingRegistry
import androidx.test.espresso.IdlingResource
import androidx.test.espresso.action.ViewActions
+import androidx.test.espresso.action.ViewActions.longClick
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.contrib.RecyclerViewActions
@@ -43,7 +44,6 @@ import org.mozilla.fenix.helpers.MatcherHelper.assertUIObjectExists
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResId
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdAndText
import org.mozilla.fenix.helpers.MatcherHelper.itemWithResIdContainingText
-import org.mozilla.fenix.helpers.MatcherHelper.itemWithText
import org.mozilla.fenix.helpers.SessionLoadedIdlingResource
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTime
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeShort
@@ -149,7 +149,7 @@ class NavigationToolbarRobot {
assertTrue(
itemWithResId("$packageName:id/browserLayout").waitForExists(waitingTime) ||
itemWithResId("$packageName:id/download_button").waitForExists(waitingTime) ||
- itemWithText(getStringResource(R.string.tcp_cfr_message)).waitForExists(waitingTime),
+ itemWithResId("cfr.dismiss").waitForExists(waitingTime),
)
}
@@ -272,9 +272,19 @@ class NavigationToolbarRobot {
return HomeScreenRobot.Transition()
}
+ fun goBackToBrowserScreen(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
+ mDevice.pressBack()
+ Log.i(TAG, "goBackToBrowserScreen: Dismiss awesome bar using device back button")
+ mDevice.waitForWindowUpdate(packageName, waitingTimeShort)
+ Log.i(TAG, "goBackToBrowserScreen: Waited $waitingTimeShort for window update")
+
+ BrowserRobot().interact()
+ return BrowserRobot.Transition()
+ }
+
fun openTabButtonShortcutsMenu(interact: NavigationToolbarRobot.() -> Unit): Transition {
mDevice.waitNotNull(Until.findObject(By.res("$packageName:id/counter_root")))
- tabsCounter().click(LONG_CLICK_DURATION)
+ tabsCounter().perform(longClick())
Log.i(TAG, "Tabs counter long-click successful.")
NavigationToolbarRobot().interact()
@@ -388,8 +398,7 @@ private fun awesomeBar() =
mDevice.findObject(UiSelector().resourceId("$packageName:id/mozac_browser_toolbar_edit_url_view"))
private fun threeDotButton() = onView(withId(R.id.mozac_browser_toolbar_menu))
private fun tabTrayButton() = onView(withId(R.id.tab_button))
-private fun tabsCounter() =
- mDevice.findObject(By.res("$packageName:id/counter_root"))
+private fun tabsCounter() = onView(withId(R.id.mozac_browser_toolbar_browser_actions))
private fun fillLinkButton() = onView(withId(R.id.fill_link_from_clipboard))
private fun clearAddressBarButton() = itemWithResId("$packageName:id/mozac_browser_toolbar_clear_view")
private fun readerViewToggle() =
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsRobot.kt
index c459ce42d..84da4f5d1 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsRobot.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsRobot.kt
@@ -107,6 +107,27 @@ class SettingsRobot {
fun verifyPrivacyHeading() = assertPrivacyHeading()
fun verifyHTTPSOnlyModeButton() = assertHTTPSOnlyModeButton()
+
+ fun verifyCookieBannerBlockerButton(enabled: Boolean) {
+ scrollToElementByText(getStringResource(R.string.preferences_cookie_banner_reduction_private_mode))
+ onView(withText(R.string.preferences_cookie_banner_reduction_private_mode))
+ .check(
+ matches(
+ hasCousin(
+ CoreMatchers.allOf(
+ withClassName(endsWith("Switch")),
+ if (enabled) {
+ isChecked()
+ } else {
+ isNotChecked()
+ },
+ ),
+ ),
+ ),
+ )
+ Log.i(TAG, "verifyCookieBannerBlockerButton: Verified if cookie banner blocker toggle is enabled: $enabled")
+ }
+
fun verifyEnhancedTrackingProtectionButton() = assertEnhancedTrackingProtectionButton()
fun verifyLoginsAndPasswordsButton() = assertLoginsAndPasswordsButton()
fun verifyPrivateBrowsingButton() = assertPrivateBrowsingButton()
@@ -583,6 +604,7 @@ private fun assertOpenLinksInAppsButton() {
scrollToElementByText("Open links in apps")
openLinksInAppsButton()
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
+ Log.i(TAG, "clickOpenLinksInAppsGoToSettingsCFRButton: Verified \"Open links in apps\" setting option")
}
// ADVANCED SECTION
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt
index dd0133f39..a7c569874 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuAboutRobot.kt
@@ -124,7 +124,8 @@ private fun assertCurrentTimestamp() {
private fun assertWhatIsNewInFirefoxPreview() {
aboutMenuList.scrollToEnd(LISTS_MAXSWIPES)
- onView(withText("What’s new in $appName"))
+ val firefox = TestHelper.appContext.getString(R.string.firefox)
+ onView(withText("What’s new in $firefox"))
.check(matches(withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
.perform(click())
}
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuHomepageRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuHomepageRobot.kt
index df60d2d44..b6c9f1c7c 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuHomepageRobot.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuHomepageRobot.kt
@@ -4,6 +4,7 @@
package org.mozilla.fenix.ui.robots
+import android.util.Log
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.ViewMatchers
@@ -21,6 +22,7 @@ import org.hamcrest.CoreMatchers
import org.hamcrest.CoreMatchers.allOf
import org.hamcrest.Matchers
import org.mozilla.fenix.R
+import org.mozilla.fenix.helpers.Constants
import org.mozilla.fenix.helpers.MatcherHelper.assertUIObjectExists
import org.mozilla.fenix.helpers.MatcherHelper.itemContainingText
import org.mozilla.fenix.helpers.TestAssetHelper.waitingTimeShort
@@ -61,6 +63,7 @@ class SettingsSubMenuHomepageRobot {
assertHomepageButton()
assertLastTabButton()
assertHomepageAfterFourHoursButton()
+ Log.i(Constants.TAG, "verifyHomePageView: Verified the home page elements")
}
fun verifySelectedOpeningScreenOption(openingScreenOption: String) =
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot.kt
index 6afee5f39..e358ca9e8 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot.kt
@@ -118,7 +118,7 @@ class SettingsSubMenuLoginsAndPasswordsSavedLoginsRobot {
)
fun searchLogin(searchTerm: String) =
- itemContainingText(getStringResource(R.string.preferences_passwords_saved_logins_search)).setText(searchTerm)
+ itemWithResId("$packageName:id/search").setText(searchTerm)
fun verifySavedLoginsSectionUsername(username: String) =
mDevice.waitNotNull(Until.findObjects(By.text(username)))
diff --git a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt
index 3a9b43691..39f73df1e 100644
--- a/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt
+++ b/app/src/androidTest/java/org/mozilla/fenix/ui/robots/ThreeDotMenuMainRobot.kt
@@ -54,9 +54,9 @@ import org.mozilla.fenix.nimbus.FxNimbus
class ThreeDotMenuMainRobot {
fun verifyShareAllTabsButton() = assertShareAllTabsButton()
fun verifySettingsButton() = assertUIObjectExists(settingsButton())
- fun verifyHistoryButton() = assertUIObjectExists(historyButton)
+ fun verifyHistoryButton() = assertUIObjectExists(historyButton())
fun verifyThreeDotMenuExists() = threeDotMenuRecyclerViewExists()
- fun verifyAddBookmarkButton() = assertUIObjectExists(addBookmarkButton)
+ fun verifyAddBookmarkButton() = assertUIObjectExists(addBookmarkButton())
fun verifyEditBookmarkButton() = assertEditBookmarkButton()
fun verifyCloseAllTabsButton() = assertCloseAllTabsButton()
fun verifyReaderViewAppearance(visible: Boolean) = assertReaderViewAppearanceButton(visible)
@@ -76,9 +76,9 @@ class ThreeDotMenuMainRobot {
fun verifyShareTabButton() = assertShareTabButton()
fun verifySelectTabs() = assertSelectTabsButton()
- fun verifyFindInPageButton() = assertUIObjectExists(findInPageButton)
+ fun verifyFindInPageButton() = assertUIObjectExists(findInPageButton())
fun verifyAddToShortcutsButton(shouldExist: Boolean) =
- assertUIObjectExists(addToShortcutsButton, exists = shouldExist)
+ assertUIObjectExists(addToShortcutsButton(), exists = shouldExist)
fun verifyRemoveFromShortcutsButton() = assertRemoveFromShortcutsButton()
fun verifyShareTabsOverlay() = assertShareTabsOverlay()
@@ -90,20 +90,21 @@ class ThreeDotMenuMainRobot {
fun verifyPageThreeDotMainMenuItems(isRequestDesktopSiteEnabled: Boolean) {
expandMenu()
assertUIObjectExists(
- normalBrowsingNewTabButton,
- bookmarksButton,
- historyButton,
- downloadsButton,
- addOnsButton,
- syncAndSaveDataButton,
- findInPageButton,
- desktopSiteButton,
- reportSiteIssueButton,
- addToHomeScreenButton,
- addToShortcutsButton,
- saveToCollectionButton,
- addBookmarkButton,
+ normalBrowsingNewTabButton(),
+ bookmarksButton(),
+ historyButton(),
+ downloadsButton(),
+ addOnsButton(),
+ syncAndSaveDataButton(),
+ findInPageButton(),
+ desktopSiteButton(),
+ reportSiteIssueButton(),
+ addToHomeScreenButton(),
+ addToShortcutsButton(),
+ saveToCollectionButton(),
+ addBookmarkButton(),
desktopSiteToggle(isRequestDesktopSiteEnabled),
+ translateButton(),
)
// Swipe to second part of menu
expandMenu()
@@ -111,28 +112,28 @@ class ThreeDotMenuMainRobot {
settingsButton(),
)
if (FxNimbus.features.print.value().browserPrintEnabled) {
- assertUIObjectExists(printContentButton)
+ assertUIObjectExists(printContentButton())
}
assertUIObjectExists(
- backButton,
- forwardButton,
- shareButton,
- refreshButton,
+ backButton(),
+ forwardButton(),
+ shareButton(),
+ refreshButton(),
)
}
fun verifyHomeThreeDotMainMenuItems(isRequestDesktopSiteEnabled: Boolean) {
assertUIObjectExists(
- bookmarksButton,
- historyButton,
- downloadsButton,
- addOnsButton,
+ bookmarksButton(),
+ historyButton(),
+ downloadsButton(),
+ addOnsButton(),
// Disabled step due to https://github.com/mozilla-mobile/fenix/issues/26788
// syncAndSaveDataButton,
- desktopSiteButton,
- whatsNewButton,
- helpButton,
- customizeHomeButton,
+ desktopSiteButton(),
+ whatsNewButton(),
+ helpButton(),
+ customizeHomeButton(),
settingsButton(),
desktopSiteToggle(isRequestDesktopSiteEnabled),
)
@@ -202,7 +203,7 @@ class ThreeDotMenuMainRobot {
fun openDownloadsManager(interact: DownloadRobot.() -> Unit): DownloadRobot.Transition {
threeDotMenuRecyclerView().perform(swipeDown())
Log.i(TAG, "openDownloadsManager: Swiped up main menu")
- downloadsButton.click()
+ downloadsButton().click()
Log.i(TAG, "openDownloadsManager: Clicked main menu \"DOWNLOADS\" button")
DownloadRobot().interact()
@@ -212,7 +213,7 @@ class ThreeDotMenuMainRobot {
fun openSyncSignIn(interact: SyncSignInRobot.() -> Unit): SyncSignInRobot.Transition {
threeDotMenuRecyclerView().perform(swipeDown())
mDevice.waitNotNull(Until.findObject(By.text("Sync and save data")), waitingTime)
- syncAndSaveDataButton.click()
+ syncAndSaveDataButton().click()
SyncSignInRobot().interact()
return SyncSignInRobot.Transition()
@@ -222,7 +223,7 @@ class ThreeDotMenuMainRobot {
threeDotMenuRecyclerView().perform(swipeDown())
mDevice.waitNotNull(Until.findObject(By.text("Bookmarks")), waitingTime)
- bookmarksButton.click()
+ bookmarksButton().click()
assertUIObjectExists(itemWithResId("$packageName:id/bookmark_list"))
BookmarksRobot().interact()
@@ -230,7 +231,7 @@ class ThreeDotMenuMainRobot {
}
fun clickNewTabButton(interact: SearchRobot.() -> Unit): SearchRobot.Transition {
- normalBrowsingNewTabButton.click()
+ normalBrowsingNewTabButton().click()
SearchRobot().interact()
return SearchRobot.Transition()
@@ -239,7 +240,7 @@ class ThreeDotMenuMainRobot {
fun openHistory(interact: HistoryRobot.() -> Unit): HistoryRobot.Transition {
threeDotMenuRecyclerView().perform(swipeDown())
mDevice.waitNotNull(Until.findObject(By.text("History")), waitingTime)
- historyButton.click()
+ historyButton().click()
HistoryRobot().interact()
return HistoryRobot.Transition()
@@ -247,7 +248,7 @@ class ThreeDotMenuMainRobot {
fun bookmarkPage(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
mDevice.waitNotNull(Until.findObject(By.text("Bookmarks")), waitingTime)
- addBookmarkButton.click()
+ addBookmarkButton().click()
BrowserRobot().interact()
return BrowserRobot.Transition()
@@ -263,7 +264,7 @@ class ThreeDotMenuMainRobot {
fun openHelp(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
mDevice.waitNotNull(Until.findObject(By.text("Help")), waitingTime)
- helpButton.click()
+ helpButton().click()
BrowserRobot().interact()
return BrowserRobot.Transition()
@@ -278,7 +279,7 @@ class ThreeDotMenuMainRobot {
waitingTime,
)
- customizeHomeButton.click()
+ customizeHomeButton().click()
mDevice.findObject(
UiSelector().resourceId("$packageName:id/recycler_view"),
@@ -289,21 +290,21 @@ class ThreeDotMenuMainRobot {
}
fun goForward(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
- forwardButton.click()
+ forwardButton().click()
BrowserRobot().interact()
return BrowserRobot.Transition()
}
fun goToPreviousPage(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
- backButton.click()
+ backButton().click()
BrowserRobot().interact()
return BrowserRobot.Transition()
}
fun clickShareButton(interact: ShareOverlayRobot.() -> Unit): ShareOverlayRobot.Transition {
- shareButton.click()
+ shareButton().click()
Log.i(TAG, "clickShareButton: Clicked main menu share button")
mDevice.waitNotNull(Until.findObject(By.text("ALL ACTIONS")), waitingTime)
@@ -320,7 +321,7 @@ class ThreeDotMenuMainRobot {
}
fun refreshPage(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
- refreshButton.also {
+ refreshButton().also {
Log.i(TAG, "refreshPage: Looking for refresh button")
it.waitForExists(waitingTime)
it.click()
@@ -349,7 +350,7 @@ class ThreeDotMenuMainRobot {
fun openReportSiteIssue(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
threeDotMenuRecyclerView().perform(swipeUp())
threeDotMenuRecyclerView().perform(swipeUp())
- reportSiteIssueButton.click()
+ reportSiteIssueButton().click()
BrowserRobot().interact()
return BrowserRobot.Transition()
@@ -359,7 +360,7 @@ class ThreeDotMenuMainRobot {
threeDotMenuRecyclerView().perform(swipeUp())
threeDotMenuRecyclerView().perform(swipeUp())
mDevice.waitNotNull(Until.findObject(By.text("Find in page")), waitingTime)
- findInPageButton.click()
+ findInPageButton().click()
FindInPageRobot().interact()
return FindInPageRobot.Transition()
@@ -367,7 +368,7 @@ class ThreeDotMenuMainRobot {
fun openWhatsNew(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
mDevice.waitNotNull(Until.findObject(By.text("What’s new")), waitingTime)
- whatsNewButton.click()
+ whatsNewButton().click()
BrowserRobot().interact()
return BrowserRobot.Transition()
@@ -385,7 +386,7 @@ class ThreeDotMenuMainRobot {
fun addToFirefoxHome(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
for (i in 1..RETRY_COUNT) {
try {
- addToShortcutsButton.also {
+ addToShortcutsButton().also {
it.waitForExists(waitingTime)
it.click()
}
@@ -416,7 +417,7 @@ class ThreeDotMenuMainRobot {
}
fun openAddToHomeScreen(interact: AddToHomeScreenRobot.() -> Unit): AddToHomeScreenRobot.Transition {
- addToHomeScreenButton.clickAndWaitForNewWindow(waitingTime)
+ addToHomeScreenButton().clickAndWaitForNewWindow(waitingTime)
AddToHomeScreenRobot().interact()
return AddToHomeScreenRobot.Transition()
@@ -437,7 +438,7 @@ class ThreeDotMenuMainRobot {
threeDotMenuRecyclerView().perform(swipeUp())
mDevice.waitNotNull(Until.findObject(By.text("Save to collection")), waitingTime)
- saveToCollectionButton.click()
+ saveToCollectionButton().click()
CollectionRobot().interact()
return CollectionRobot.Transition()
}
@@ -465,7 +466,7 @@ class ThreeDotMenuMainRobot {
fun switchDesktopSiteMode(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
threeDotMenuRecyclerView().perform(swipeUp())
threeDotMenuRecyclerView().perform(swipeUp())
- desktopSiteButton.click()
+ desktopSiteButton().click()
BrowserRobot().interact()
return BrowserRobot.Transition()
@@ -481,8 +482,8 @@ class ThreeDotMenuMainRobot {
fun clickPrintButton(interact: BrowserRobot.() -> Unit): BrowserRobot.Transition {
threeDotMenuRecyclerView().perform(swipeUp())
threeDotMenuRecyclerView().perform(swipeUp())
- printButton.waitForExists(waitingTime)
- printButton.click()
+ printButton().waitForExists(waitingTime)
+ printButton().click()
BrowserRobot().interact()
return BrowserRobot.Transition()
@@ -558,7 +559,7 @@ private fun openInAppButton() =
private fun clickAddonsManagerButton() {
onView(withId(R.id.mozac_browser_menu_menuView)).perform(swipeDown())
- addOnsButton.click()
+ addOnsButton().click()
}
private fun shareAllTabsButton() =
@@ -571,15 +572,15 @@ private fun assertShareAllTabsButton() {
)
}
-private val bookmarksButton =
+private fun bookmarksButton() =
itemContainingText(getStringResource(R.string.library_bookmarks))
-private val historyButton =
+private fun historyButton() =
itemContainingText(getStringResource(R.string.library_history))
-private val downloadsButton =
+private fun downloadsButton() =
itemContainingText(getStringResource(R.string.library_downloads))
-private val addOnsButton =
+private fun addOnsButton() =
itemContainingText(getStringResource(R.string.browser_menu_add_ons))
-private val desktopSiteButton =
+private fun desktopSiteButton() =
itemContainingText(getStringResource(R.string.browser_menu_desktop_site))
private fun desktopSiteToggle(state: Boolean) =
checkedItemWithResIdAndText(
@@ -587,31 +588,32 @@ private fun desktopSiteToggle(state: Boolean) =
getStringResource(R.string.browser_menu_desktop_site),
state,
)
-private val whatsNewButton =
+private fun whatsNewButton() =
itemContainingText(getStringResource(R.string.browser_menu_whats_new))
-private val helpButton =
+private fun helpButton() =
itemContainingText(getStringResource(R.string.browser_menu_help))
-private val customizeHomeButton =
+private fun customizeHomeButton() =
itemContainingText(getStringResource(R.string.browser_menu_customize_home_1))
private fun settingsButton(localizedText: String = getStringResource(R.string.browser_menu_settings)) =
itemContainingText(localizedText)
-private val syncAndSaveDataButton =
+private fun syncAndSaveDataButton() =
itemContainingText(getStringResource(R.string.sync_menu_sync_and_save_data))
-private val normalBrowsingNewTabButton =
+private fun normalBrowsingNewTabButton() =
itemContainingText(getStringResource(R.string.library_new_tab))
-private val addBookmarkButton =
+private fun addBookmarkButton() =
itemWithResIdAndText(
"$packageName:id/checkbox",
getStringResource(R.string.browser_menu_add),
)
-private val findInPageButton = itemContainingText(getStringResource(R.string.browser_menu_find_in_page))
-private val reportSiteIssueButton = itemContainingText("Report Site Issue")
-private val addToHomeScreenButton = itemContainingText(getStringResource(R.string.browser_menu_add_to_homescreen))
-private val addToShortcutsButton = itemContainingText(getStringResource(R.string.browser_menu_add_to_shortcuts))
-private val saveToCollectionButton = itemContainingText(getStringResource(R.string.browser_menu_save_to_collection_2))
-private val printContentButton = itemContainingText(getStringResource(R.string.menu_print))
-private val backButton = itemWithDescription(getStringResource(R.string.browser_menu_back))
-private val forwardButton = itemWithDescription(getStringResource(R.string.browser_menu_forward))
-private val shareButton = itemWithDescription(getStringResource(R.string.share_button_content_description))
-private val refreshButton = itemWithDescription(getStringResource(R.string.browser_menu_refresh))
-private val printButton = itemWithText("Print")
+private fun findInPageButton() = itemContainingText(getStringResource(R.string.browser_menu_find_in_page))
+private fun translateButton() = itemContainingText(getStringResource(R.string.browser_menu_translations))
+private fun reportSiteIssueButton() = itemContainingText("Report Site Issue")
+private fun addToHomeScreenButton() = itemContainingText(getStringResource(R.string.browser_menu_add_to_homescreen))
+private fun addToShortcutsButton() = itemContainingText(getStringResource(R.string.browser_menu_add_to_shortcuts))
+private fun saveToCollectionButton() = itemContainingText(getStringResource(R.string.browser_menu_save_to_collection_2))
+private fun printContentButton() = itemContainingText(getStringResource(R.string.menu_print))
+private fun backButton() = itemWithDescription(getStringResource(R.string.browser_menu_back))
+private fun forwardButton() = itemWithDescription(getStringResource(R.string.browser_menu_forward))
+private fun shareButton() = itemWithDescription(getStringResource(R.string.share_button_content_description))
+private fun refreshButton() = itemWithDescription(getStringResource(R.string.browser_menu_refresh))
+private fun printButton() = itemWithText("Print")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 87aeaa9f0..8905679a5 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -354,6 +354,7 @@
-
+
+
+
APP_ICON
- intent.action == Intent.ACTION_VIEW -> "LINK"
- else -> null
- }
- }
-
/**
* External sources such as 3rd party links and shortcuts use this function to enter
* private mode directly before the content view is created. Returns the mode set by the intent
@@ -984,8 +961,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
}
}
- protected open fun getIntentSessionId(intent: SafeIntent): String? = null
-
/**
* Navigates to the browser fragment and loads a URL or performs a search (depending on the
* value of [searchTermOrURL]).
@@ -1003,7 +978,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
* was opened from history.
* @param additionalHeaders The extra headers to use when loading the URL.
*/
- @Suppress("LongParameterList")
fun openToBrowserAndLoad(
searchTermOrURL: String,
newTab: Boolean,
@@ -1038,65 +1012,6 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
}
}
- protected open fun getNavDirections(
- from: BrowserDirection,
- customTabSessionId: String?,
- ): NavDirections? = when (from) {
- BrowserDirection.FromGlobal ->
- NavGraphDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromHome ->
- HomeFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromWallpaper ->
- WallpaperSettingsFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromSearchDialog ->
- SearchDialogFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromSettings ->
- SettingsFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromBookmarks ->
- BookmarkFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromHistory ->
- HistoryFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromHistoryMetadataGroup ->
- HistoryMetadataGroupFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromTrackingProtectionExceptions ->
- TrackingProtectionExceptionsFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromHttpsOnlyMode ->
- HttpsOnlyFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromAbout ->
- AboutFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromTrackingProtection ->
- TrackingProtectionFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromTrackingProtectionDialog ->
- TrackingProtectionPanelDialogFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromSavedLoginsFragment ->
- SavedLoginsAuthFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromAddNewDeviceFragment ->
- AddNewDeviceFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromSearchEngineFragment ->
- SearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromSaveSearchEngineFragment ->
- SaveSearchEngineFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromAddonDetailsFragment ->
- AddonDetailsFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromAddonPermissionsDetailsFragment ->
- AddonPermissionsDetailsFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromLoginDetailFragment ->
- LoginDetailFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromTabsTray ->
- TabsTrayFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromRecentlyClosed ->
- RecentlyClosedFragmentDirections.actionGlobalBrowser(customTabSessionId)
- BrowserDirection.FromStudiesFragment -> StudiesFragmentDirections.actionGlobalBrowser(
- customTabSessionId,
- )
- BrowserDirection.FromReviewQualityCheck -> ReviewQualityCheckFragmentDirections.actionGlobalBrowser(
- customTabSessionId,
- )
- BrowserDirection.FromAddonsManagementFragment -> AddonsManagementFragmentDirections.actionGlobalBrowser(
- customTabSessionId,
- )
- }
-
/**
* Loads a URL or performs a search (depending on the value of [searchTermOrURL]).
*
@@ -1194,7 +1109,12 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
settings().openNextTabInDesktopMode = false
}
- open fun navigateToBrowserOnColdStart() {
+ @VisibleForTesting
+ internal fun navigateToBrowserOnColdStart() {
+ if (this is ExternalAppBrowserActivity) {
+ return
+ }
+
// Normal tabs + cold start -> Should go back to browser if we had any tabs open when we left last
// except for PBM + Cold Start there won't be any tabs since they're evicted so we never will navigate
if (settings().shouldReturnToBrowser && !browsingModeManager.mode.isPrivate) {
@@ -1203,8 +1123,13 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
}
}
- open fun navigateToHome() {
- navHost.navController.navigate(NavGraphDirections.actionStartupHome())
+ @VisibleForTesting
+ internal fun navigateToHome(navController: NavController) {
+ if (this is ExternalAppBrowserActivity) {
+ return
+ }
+
+ navController.navigate(NavGraphDirections.actionStartupHome())
}
override fun attachBaseContext(base: Context) {
diff --git a/app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledBackgroundController.kt b/app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledBackgroundController.kt
new file mode 100644
index 000000000..d3cf9234f
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledBackgroundController.kt
@@ -0,0 +1,49 @@
+/* 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 org.mozilla.fenix.addons
+
+import android.os.Handler
+import android.os.Looper
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.support.webextensions.ExtensionsProcessDisabledPromptObserver
+import org.mozilla.fenix.components.AppStore
+import kotlin.system.exitProcess
+
+/**
+ * Controller for handling extensions process spawning disabled events. This is for when the app is
+ * in background, the app is killed to prevent extensions from being disabled and network requests
+ * continuing.
+ *
+ * @param browserStore The [BrowserStore] which holds the state for showing the dialog.
+ * @param appStore The [AppStore] containing the application state.
+ * @param onExtensionsProcessDisabled Invoked when the app is in background and extensions process
+ * is disabled.
+ */
+class ExtensionsProcessDisabledBackgroundController(
+ browserStore: BrowserStore,
+ appStore: AppStore,
+ onExtensionsProcessDisabled: () -> Unit = { killApp() },
+) : ExtensionsProcessDisabledPromptObserver(
+ store = browserStore,
+ shouldCancelOnStop = false,
+ onShowExtensionsProcessDisabledPrompt = {
+ if (!appStore.state.isForeground) {
+ onExtensionsProcessDisabled()
+ }
+ },
+) {
+
+ companion object {
+ /**
+ * When a dialog can't be shown because the app is in the background, instead the app will
+ * be killed to prevent leaking network data without extensions enabled.
+ */
+ private fun killApp() {
+ Handler(Looper.getMainLooper()).post {
+ exitProcess(0)
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledController.kt b/app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledForegroundController.kt
similarity index 84%
rename from app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledController.kt
rename to app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledForegroundController.kt
index 83317400c..6432ef735 100644
--- a/app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledController.kt
+++ b/app/src/main/java/org/mozilla/fenix/addons/ExtensionsProcessDisabledForegroundController.kt
@@ -5,8 +5,6 @@
package org.mozilla.fenix.addons
import android.content.Context
-import android.os.Handler
-import android.os.Looper
import android.view.LayoutInflater
import android.widget.Button
import android.widget.TextView
@@ -20,35 +18,30 @@ import mozilla.components.support.webextensions.ExtensionsProcessDisabledPromptO
import org.mozilla.fenix.R
import org.mozilla.fenix.components.AppStore
import org.mozilla.fenix.ext.components
-import kotlin.system.exitProcess
/**
* Controller for handling extensions process spawning disabled events. When the app is in
* foreground this will call for a dialog to decide on correct action to take (retry enabling
- * process spawning or disable extensions). When in background, we kill the app to prevent
- * extensions from being disabled and network requests continuing.
+ * process spawning or disable extensions).
*
* @param context to show the AlertDialog
* @param browserStore The [BrowserStore] which holds the state for showing the dialog
* @param appStore The [AppStore] containing the application state
* @param builder to use for creating the dialog which can be styled as needed
* @param appName to be added to the message. Optional and mainly relevant for testing
- * @param onKillApp called when the app is backgrounded and extensions process is disabled
*/
-class ExtensionsProcessDisabledController(
+class ExtensionsProcessDisabledForegroundController(
@UiContext context: Context,
browserStore: BrowserStore = context.components.core.store,
appStore: AppStore = context.components.appStore,
builder: AlertDialog.Builder = AlertDialog.Builder(context),
appName: String = context.appName,
- onKillApp: () -> Unit = { killApp() },
) : ExtensionsProcessDisabledPromptObserver(
- browserStore,
+ store = browserStore,
+ shouldCancelOnStop = true,
{
if (appStore.state.isForeground) {
presentDialog(context, browserStore, builder, appName)
- } else {
- onKillApp.invoke()
}
},
) {
@@ -61,16 +54,6 @@ class ExtensionsProcessDisabledController(
companion object {
private var shouldCreateDialog: Boolean = true
- /**
- * When a dialog can't be shown because the app is in the background, instead the app will
- * be killed to prevent leaking network data without extensions enabled.
- */
- private fun killApp() {
- Handler(Looper.getMainLooper()).post {
- exitProcess(0)
- }
- }
-
/**
* Present a dialog to the user notifying of extensions process spawning disabled and also asking
* whether they would like to continue trying or disable extensions. If the user chooses to retry,
diff --git a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
index b44da3d45..5ecc95688 100644
--- a/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/browser/BaseBrowserFragment.kt
@@ -12,6 +12,7 @@ import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import android.provider.Settings
+import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
@@ -31,9 +32,11 @@ import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
import androidx.preference.PreferenceManager
import com.google.android.material.snackbar.Snackbar
+import kotlinx.coroutines.Deferred
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.Job
+import kotlinx.coroutines.async
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.distinctUntilChangedBy
import kotlinx.coroutines.flow.map
@@ -59,6 +62,7 @@ import mozilla.components.browser.thumbnails.BrowserThumbnails
import mozilla.components.concept.base.crash.Breadcrumb
import mozilla.components.concept.engine.permission.SitePermissions
import mozilla.components.concept.engine.prompt.ShareData
+import mozilla.components.concept.storage.LoginEntry
import mozilla.components.feature.accounts.FxaCapability
import mozilla.components.feature.accounts.FxaWebChannelFeature
import mozilla.components.feature.app.links.AppLinksFeature
@@ -79,6 +83,7 @@ import mozilla.components.feature.prompts.dialog.FullScreenNotificationDialog
import mozilla.components.feature.prompts.identitycredential.DialogColors
import mozilla.components.feature.prompts.identitycredential.DialogColorsProvider
import mozilla.components.feature.prompts.login.LoginDelegate
+import mozilla.components.feature.prompts.login.SuggestStrongPasswordDelegate
import mozilla.components.feature.prompts.share.ShareDelegate
import mozilla.components.feature.readerview.ReaderViewFeature
import mozilla.components.feature.search.SearchFeature
@@ -95,6 +100,8 @@ import mozilla.components.lib.state.ext.flowScoped
import mozilla.components.service.glean.private.NoExtras
import mozilla.components.service.sync.autofill.DefaultCreditCardValidationDelegate
import mozilla.components.service.sync.logins.DefaultLoginValidationDelegate
+import mozilla.components.service.sync.logins.LoginsApiException
+import mozilla.components.service.sync.logins.SyncableLoginsStorage
import mozilla.components.support.base.feature.ActivityResultHandler
import mozilla.components.support.base.feature.PermissionsFeature
import mozilla.components.support.base.feature.UserInteractionHandler
@@ -108,6 +115,7 @@ import mozilla.components.support.locale.ActivityContextWrapper
import mozilla.components.ui.widgets.withCenterAlignedButtons
import org.mozilla.fenix.BuildConfig
import org.mozilla.fenix.FeatureFlags
+import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.GleanMetrics.MediaState
import org.mozilla.fenix.GleanMetrics.PullToRefreshInBrowser
import org.mozilla.fenix.HomeActivity
@@ -160,6 +168,7 @@ import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.utils.allowUndo
import org.mozilla.fenix.wifi.SitePermissionsWifiIntegration
import java.lang.ref.WeakReference
+import kotlin.coroutines.cancellation.CancellationException
import mozilla.components.feature.session.behavior.ToolbarPosition as MozacToolbarPosition
/**
@@ -460,6 +469,7 @@ abstract class BaseBrowserFragment :
browserToolbarView.view.display.setOnSiteSecurityClickedListener {
showQuickSettingsDialog()
+ Events.browserToolbarSecurityIndicatorTapped.record()
}
contextMenuFeature.set(
@@ -731,6 +741,18 @@ abstract class BaseBrowserFragment :
}
}
},
+ suggestStrongPasswordDelegate = object : SuggestStrongPasswordDelegate {
+ override val strongPasswordPromptViewListenerView
+ get() = binding.suggestStrongPasswordBar
+ },
+ isSuggestStrongPasswordEnabled = context.settings().enableSuggestStrongPassword,
+ onSaveLoginWithStrongPassword = { url, password ->
+ handleOnSaveLoginWithGeneratedStrongPassword(
+ passwordsStorage = context.components.core.passwordsStorage,
+ url = url,
+ password = password,
+ )
+ },
creditCardDelegate = object : CreditCardDelegate {
override val creditCardPickerView
get() = binding.creditCardSelectBar
@@ -894,9 +916,12 @@ abstract class BaseBrowserFragment :
binding.swipeRefresh.isEnabled = shouldPullToRefreshBeEnabled(false)
if (binding.swipeRefresh.isEnabled) {
- val primaryTextColor =
- ThemeManager.resolveAttribute(R.attr.textPrimary, context)
- binding.swipeRefresh.setColorSchemeColors(primaryTextColor)
+ val primaryTextColor = ThemeManager.resolveAttribute(R.attr.textPrimary, context)
+ val primaryBackgroundColor = ThemeManager.resolveAttribute(R.attr.layer2, context)
+ binding.swipeRefresh.apply {
+ setColorSchemeResources(primaryTextColor)
+ setProgressBackgroundColorSchemeResource(primaryBackgroundColor)
+ }
swipeRefreshFeature.set(
feature = SwipeRefreshFeature(
requireComponents.core.store,
@@ -1651,4 +1676,38 @@ abstract class BaseBrowserFragment :
return isValidStatus && isSameTab
}
+
+ private fun handleOnSaveLoginWithGeneratedStrongPassword(
+ passwordsStorage: SyncableLoginsStorage,
+ url: String,
+ password: String,
+ ) {
+ val loginToSave = LoginEntry(
+ origin = url,
+ httpRealm = url,
+ username = "",
+ password = password,
+ )
+ var saveLoginJob: Deferred? = null
+ lifecycleScope.launch(IO) {
+ saveLoginJob = async {
+ try {
+ passwordsStorage.add(loginToSave)
+ } catch (loginException: LoginsApiException) {
+ loginException.printStackTrace()
+ Log.e(
+ "Add new login",
+ "Failed to add new login with generated password.",
+ loginException,
+ )
+ }
+ saveLoginJob?.await()
+ }
+ saveLoginJob?.invokeOnCompletion {
+ if (it is CancellationException) {
+ saveLoginJob?.cancel()
+ }
+ }
+ }
+ }
}
diff --git a/app/src/main/java/org/mozilla/fenix/browser/infobanner/DynamicInfoBanner.kt b/app/src/main/java/org/mozilla/fenix/browser/infobanner/DynamicInfoBanner.kt
index 132369dcb..379da8bb3 100644
--- a/app/src/main/java/org/mozilla/fenix/browser/infobanner/DynamicInfoBanner.kt
+++ b/app/src/main/java/org/mozilla/fenix/browser/infobanner/DynamicInfoBanner.kt
@@ -22,7 +22,6 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout
* @param dismissAction Optional callback invoked when the user dismisses the banner.
* @param actionToPerform The action to be performed on action button press.
*/
-@Suppress("LongParameterList")
class DynamicInfoBanner(
private val context: Context,
container: ViewGroup,
diff --git a/app/src/main/java/org/mozilla/fenix/browser/infobanner/InfoBanner.kt b/app/src/main/java/org/mozilla/fenix/browser/infobanner/InfoBanner.kt
index 1cefa8529..3c2b31bdb 100644
--- a/app/src/main/java/org/mozilla/fenix/browser/infobanner/InfoBanner.kt
+++ b/app/src/main/java/org/mozilla/fenix/browser/infobanner/InfoBanner.kt
@@ -26,7 +26,6 @@ import org.mozilla.fenix.ext.settings
* @property dismissAction Optional callback invoked when the user dismisses the banner.
* @param actionToPerform The action to be performed on action button press.
*/
-@SuppressWarnings("LongParameterList")
open class InfoBanner(
private val context: Context,
private val container: ViewGroup,
diff --git a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt
index 48b56ca57..726c81b0a 100644
--- a/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/IntentProcessors.kt
@@ -53,7 +53,7 @@ class IntentProcessors(
* Provides intent processing functionality for ACTION_VIEW and ACTION_SEND intents in private tabs.
*/
val privateIntentProcessor by lazyMonitored {
- TabIntentProcessor(tabsUseCases, searchUseCases.newTabSearch, isPrivate = true)
+ TabIntentProcessor(tabsUseCases, searchUseCases.newPrivateTabSearch, isPrivate = true)
}
val customTabIntentProcessor by lazyMonitored {
diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt
index 234c59379..5239560b0 100644
--- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt
@@ -223,7 +223,9 @@ class DefaultBrowserToolbarController(
override fun handleTranslationsButtonClick() {
val directions =
- BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment()
+ BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment(
+ sessionId = currentSession?.id,
+ )
navController.navigateSafe(R.id.browserFragment, directions)
}
diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt
index 3bb573b61..8d12d3139 100644
--- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMenuController.kt
@@ -406,6 +406,14 @@ class DefaultBrowserToolbarMenuController(
.show()
}
}
+
+ ToolbarMenu.Item.Translate -> {
+ val directions =
+ BrowserFragmentDirections.actionBrowserFragmentToTranslationsDialogFragment(
+ sessionId = currentSession?.id,
+ )
+ navController.navigateSafe(R.id.browserFragment, directions)
+ }
}
}
@@ -420,7 +428,7 @@ class DefaultBrowserToolbarMenuController(
}
}
- @Suppress("ComplexMethod")
+ @Suppress("ComplexMethod", "LongMethod")
private fun trackToolbarItemInteraction(item: ToolbarMenu.Item) {
when (item) {
is ToolbarMenu.Item.OpenInFenix ->
@@ -433,10 +441,19 @@ class DefaultBrowserToolbarMenuController(
Events.browserMenuAction.record(Events.BrowserMenuActionExtra("open_in_app"))
is ToolbarMenu.Item.CustomizeReaderView ->
Events.browserMenuAction.record(Events.BrowserMenuActionExtra("reader_mode_appearance"))
- is ToolbarMenu.Item.Back ->
- Events.browserMenuAction.record(Events.BrowserMenuActionExtra("back"))
+ is ToolbarMenu.Item.Back -> {
+ if (item.viewHistory) {
+ Events.browserMenuAction.record(Events.BrowserMenuActionExtra("back_long_press"))
+ } else {
+ Events.browserMenuAction.record(Events.BrowserMenuActionExtra("back"))
+ }
+ }
is ToolbarMenu.Item.Forward ->
- Events.browserMenuAction.record(Events.BrowserMenuActionExtra("forward"))
+ if (item.viewHistory) {
+ Events.browserMenuAction.record(Events.BrowserMenuActionExtra("forward_long_press"))
+ } else {
+ Events.browserMenuAction.record(Events.BrowserMenuActionExtra("forward"))
+ }
is ToolbarMenu.Item.Reload ->
Events.browserMenuAction.record(Events.BrowserMenuActionExtra("reload"))
is ToolbarMenu.Item.Stop ->
@@ -483,6 +500,12 @@ class DefaultBrowserToolbarMenuController(
Events.browserMenuAction.record(Events.BrowserMenuActionExtra("set_default_browser"))
is ToolbarMenu.Item.RemoveFromTopSites ->
Events.browserMenuAction.record(Events.BrowserMenuActionExtra("remove_from_top_sites"))
+
+ ToolbarMenu.Item.Translate -> Events.browserMenuAction.record(
+ Events.BrowserMenuActionExtra(
+ "translate",
+ ),
+ )
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt
index 5085d5423..c820a384c 100644
--- a/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/DefaultToolbarMenu.kt
@@ -42,7 +42,6 @@ import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.theme.ThemeManager
-import org.mozilla.fenix.utils.Settings
/**
* Builds the toolbar object used with the 3-dot menu in the browser fragment.
@@ -55,7 +54,7 @@ import org.mozilla.fenix.utils.Settings
* @param pinnedSiteStorage Used to check if the current url is a pinned site.
* @property isPinningSupported true if the launcher supports adding shortcuts.
*/
-@Suppress("LargeClass", "LongParameterList", "TooManyFunctions")
+@Suppress("LargeClass", "TooManyFunctions")
open class DefaultToolbarMenu(
private val context: Context,
private val store: BrowserStore,
@@ -193,6 +192,14 @@ open class DefaultToolbarMenu(
fun shouldShowReaderViewCustomization(): Boolean = selectedSession?.let {
store.state.findTab(it.id)?.readerState?.active
} ?: false
+
+ /**
+ * Should Translations menu item be visible?
+ */
+ @VisibleForTesting(otherwise = PRIVATE)
+ fun shouldShowTranslations(): Boolean = selectedSession?.let {
+ context.settings().enableTranslations
+ } ?: false
// End of predicates //
private val installToHomescreen = BrowserMenuHighlightableItem(
@@ -248,6 +255,14 @@ open class DefaultToolbarMenu(
onItemTapped.invoke(ToolbarMenu.Item.FindInPage)
}
+ private val translationsItem = BrowserMenuImageText(
+ label = context.getString(R.string.browser_menu_translations),
+ imageResource = R.drawable.mozac_ic_translate_24,
+ iconTintColorResource = primaryTextColor(),
+ ) {
+ onItemTapped.invoke(ToolbarMenu.Item.Translate)
+ }
+
private val desktopSiteItem = BrowserMenuImageSwitch(
imageResource = R.drawable.ic_desktop,
label = context.getString(R.string.browser_menu_desktop_site),
@@ -405,6 +420,7 @@ open class DefaultToolbarMenu(
syncMenuItem(),
BrowserMenuDivider(),
findInPageItem,
+ translationsItem.apply { visible = ::shouldShowTranslations },
desktopSiteItem,
openInRegularTabItem.apply { visible = ::shouldShowOpenInRegularTab },
customizeReaderView.apply { visible = ::shouldShowReaderViewCustomization },
diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt
index eb458ea2e..94a927d2a 100644
--- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt
@@ -76,7 +76,6 @@ abstract class ToolbarIntegration(
}
}
-@Suppress("LongParameterList")
class DefaultToolbarIntegration(
context: Context,
toolbar: BrowserToolbar,
diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt
index 120026d3c..179d30db5 100644
--- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt
+++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarMenu.kt
@@ -18,6 +18,11 @@ interface ToolbarMenu {
*/
object OpenInRegularTab : Item()
object FindInPage : Item()
+
+ /**
+ * Opens the translations flow.
+ */
+ object Translate : Item()
object Share : Item()
data class Back(val viewHistory: Boolean) : Item()
data class Forward(val viewHistory: Boolean) : Item()
diff --git a/app/src/main/java/org/mozilla/fenix/compose/Image.kt b/app/src/main/java/org/mozilla/fenix/compose/Image.kt
index a9db9f4ca..e1c321bb6 100644
--- a/app/src/main/java/org/mozilla/fenix/compose/Image.kt
+++ b/app/src/main/java/org/mozilla/fenix/compose/Image.kt
@@ -41,7 +41,6 @@ import org.mozilla.fenix.theme.FirefoxTheme
* By default set to a solid color in [DefaultImagePlaceholder].
*/
@Composable
-@Suppress("LongParameterList")
fun Image(
url: String,
modifier: Modifier = Modifier,
diff --git a/app/src/main/java/org/mozilla/fenix/compose/LinkText.kt b/app/src/main/java/org/mozilla/fenix/compose/LinkText.kt
index 10114cbb3..fed86767c 100644
--- a/app/src/main/java/org/mozilla/fenix/compose/LinkText.kt
+++ b/app/src/main/java/org/mozilla/fenix/compose/LinkText.kt
@@ -7,10 +7,22 @@ package org.mozilla.fenix.compose
import androidx.annotation.VisibleForTesting
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.ClickableText
+import androidx.compose.material.Card
+import androidx.compose.material.Text
+import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.onClick
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.AnnotatedString
@@ -20,6 +32,9 @@ import androidx.compose.ui.text.buildAnnotatedString
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.window.Dialog
+import org.mozilla.fenix.R
import org.mozilla.fenix.theme.FirefoxTheme
/**
@@ -67,6 +82,12 @@ fun LinkText(
linkTextDecoration,
)
+ val showDialog = remember { mutableStateOf(false) }
+ val linksAvailable = stringResource(id = R.string.a11y_links_available)
+
+ if (showDialog.value) {
+ LinksDialog(linkTextStates) { showDialog.value = false }
+ }
// When using UrlAnnotation, talkback shows links in a separate dialog and
// opens them in the default browser. Since this component allows the caller to define the
// onClick behaviour - e.g. to open the link in in-app custom tab, here StringAnnotation is used
@@ -76,12 +97,17 @@ fun LinkText(
style = style,
modifier = Modifier.semantics(mergeDescendants = true) {
onClick {
- linkTextStates.firstOrNull()?.let {
- it.onClick(it.url)
+ if (linkTextStates.size > 1) {
+ showDialog.value = true
+ } else {
+ linkTextStates.firstOrNull()?.let {
+ it.onClick(it.url)
+ }
}
return@onClick true
}
+ contentDescription = "$annotatedString $linksAvailable"
},
onClick = { charOffset ->
onTextClick(annotatedString, charOffset, linkTextStates)
@@ -89,6 +115,60 @@ fun LinkText(
)
}
+@Composable
+private fun LinksDialog(
+ linkTextStates: List,
+ onDismissRequest: () -> Unit,
+) {
+ Dialog(onDismissRequest = { onDismissRequest() }) {
+ Card(
+ modifier = Modifier
+ .fillMaxWidth(),
+ shape = RoundedCornerShape(8.dp),
+ ) {
+ Column(
+ modifier = Modifier
+ .background(color = FirefoxTheme.colors.layer2)
+ .padding(all = 16.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ ) {
+ Text(
+ text = stringResource(id = R.string.a11y_links_title),
+ color = FirefoxTheme.colors.textPrimary,
+ style = FirefoxTheme.typography.headline5,
+ )
+
+ linkTextStates.forEach { linkText ->
+ TextButton(
+ onClick = { linkText.onClick(linkText.url) },
+ modifier = Modifier
+ .align(Alignment.Start),
+ ) {
+ Text(
+ text = linkText.text,
+ color = FirefoxTheme.colors.textAccent,
+ textDecoration = TextDecoration.Underline,
+ style = FirefoxTheme.typography.button,
+ )
+ }
+ }
+
+ TextButton(
+ onClick = { onDismissRequest() },
+ modifier = Modifier
+ .align(Alignment.End),
+ ) {
+ Text(
+ text = stringResource(id = R.string.standard_snackbar_error_dismiss),
+ color = FirefoxTheme.colors.textAccent,
+ style = FirefoxTheme.typography.button,
+ )
+ }
+ }
+ }
+ }
+}
+
@VisibleForTesting
internal fun onTextClick(
annotatedString: AnnotatedString,
@@ -231,3 +311,27 @@ private fun MultipleLinksPreview() {
}
}
}
+
+@Preview
+@Composable
+private fun LinksDialogPreview() {
+ val state1 = LinkTextState(
+ text = "clickable text",
+ url = "www.mozilla.com",
+ onClick = {},
+ )
+
+ val state2 = LinkTextState(
+ text = "another clickable text",
+ url = "www.mozilla.com",
+ onClick = {},
+ )
+
+ val linkTextStateList = listOf(state1, state2)
+ FirefoxTheme {
+ LinksDialog(
+ linkTextStates = linkTextStateList,
+ onDismissRequest = {},
+ )
+ }
+}
diff --git a/app/src/main/java/org/mozilla/fenix/compose/SwitchWithLabel.kt b/app/src/main/java/org/mozilla/fenix/compose/SwitchWithLabel.kt
index 3462940cf..71d6d5b6c 100644
--- a/app/src/main/java/org/mozilla/fenix/compose/SwitchWithLabel.kt
+++ b/app/src/main/java/org/mozilla/fenix/compose/SwitchWithLabel.kt
@@ -35,6 +35,7 @@ private const val DISABLED_ALPHA = 0.5f
* UI for a switch with label that can be on or off.
*
* @param label Text to be displayed next to the switch.
+ * @param description An optional description text below the label.
* @param checked Whether or not the switch is checked.
* @param onCheckedChange Invoked when Switch is being clicked, therefore the change of checked
* state is requested.
@@ -44,6 +45,7 @@ private const val DISABLED_ALPHA = 0.5f
@Composable
fun SwitchWithLabel(
label: String,
+ description: String? = null,
checked: Boolean,
onCheckedChange: ((Boolean) -> Unit),
modifier: Modifier = Modifier,
@@ -60,16 +62,28 @@ fun SwitchWithLabel(
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalAlignment = Alignment.CenterVertically,
) {
- Text(
- text = label,
- color = if (enabled) {
- FirefoxTheme.colors.textPrimary
- } else {
- FirefoxTheme.colors.textDisabled
- },
- style = FirefoxTheme.typography.subtitle1,
- modifier = Modifier.weight(1f),
- )
+ Column(
+ modifier = Modifier
+ .weight(1f),
+ ) {
+ Text(
+ text = label,
+ color = if (enabled) {
+ FirefoxTheme.colors.textPrimary
+ } else {
+ FirefoxTheme.colors.textDisabled
+ },
+ style = FirefoxTheme.typography.subtitle1,
+ )
+
+ description?.let {
+ Text(
+ text = description,
+ color = FirefoxTheme.colors.textSecondary,
+ style = FirefoxTheme.typography.body2,
+ )
+ }
+ }
Switch(
modifier = Modifier.clearAndSetSemantics {},
@@ -139,6 +153,7 @@ private fun SwitchWithLabelPreview() {
var enabledSwitchState by remember { mutableStateOf(false) }
SwitchWithLabel(
label = if (enabledSwitchState) "On" else "Off",
+ description = "Description text",
checked = enabledSwitchState,
onCheckedChange = { enabledSwitchState = it },
)
diff --git a/app/src/main/java/org/mozilla/fenix/compose/TabThumbnail.kt b/app/src/main/java/org/mozilla/fenix/compose/TabThumbnail.kt
index 3e77de1d6..373283529 100644
--- a/app/src/main/java/org/mozilla/fenix/compose/TabThumbnail.kt
+++ b/app/src/main/java/org/mozilla/fenix/compose/TabThumbnail.kt
@@ -42,7 +42,6 @@ private const val FALLBACK_ICON_SIZE = 36
* @param alignment [Alignment] used to draw the image content.
*/
@Composable
-@Suppress("LongParameterList")
fun TabThumbnail(
tab: TabSessionState,
storage: ThumbnailStorage,
diff --git a/app/src/main/java/org/mozilla/fenix/compose/ThumbnailImage.kt b/app/src/main/java/org/mozilla/fenix/compose/ThumbnailImage.kt
index 1bdb4c553..34707d484 100644
--- a/app/src/main/java/org/mozilla/fenix/compose/ThumbnailImage.kt
+++ b/app/src/main/java/org/mozilla/fenix/compose/ThumbnailImage.kt
@@ -38,7 +38,6 @@ import org.mozilla.fenix.theme.FirefoxTheme
* @param fallbackContent The content to display with a thumbnail is unable to be loaded.
*/
@Composable
-@Suppress("LongParameterList")
fun ThumbnailImage(
request: ImageLoadRequest,
storage: ThumbnailStorage,
diff --git a/app/src/main/java/org/mozilla/fenix/compose/list/ExpandableListHeader.kt b/app/src/main/java/org/mozilla/fenix/compose/list/ExpandableListHeader.kt
index d729dec68..9a595a4f7 100644
--- a/app/src/main/java/org/mozilla/fenix/compose/list/ExpandableListHeader.kt
+++ b/app/src/main/java/org/mozilla/fenix/compose/list/ExpandableListHeader.kt
@@ -38,7 +38,6 @@ import org.mozilla.fenix.theme.FirefoxTheme
* @param onClick Optional lambda for handling header clicks.
* @param actions Optional Composable for adding UI to the end of the header.
*/
-@Suppress("LongParameterList")
@Composable
fun ExpandableListHeader(
headerText: String,
diff --git a/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabGridItem.kt b/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabGridItem.kt
index 26b135283..02ee66a30 100644
--- a/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabGridItem.kt
+++ b/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabGridItem.kt
@@ -91,7 +91,7 @@ import org.mozilla.fenix.theme.FirefoxTheme
*/
@OptIn(ExperimentalMaterialApi::class, ExperimentalFoundationApi::class)
@Composable
-@Suppress("MagicNumber", "LongParameterList", "LongMethod")
+@Suppress("MagicNumber", "LongMethod")
fun TabGridItem(
tab: TabSessionState,
storage: ThumbnailStorage,
diff --git a/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabListItem.kt b/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabListItem.kt
index 054cb4509..0563af574 100644
--- a/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabListItem.kt
+++ b/app/src/main/java/org/mozilla/fenix/compose/tabstray/TabListItem.kt
@@ -75,7 +75,7 @@ import org.mozilla.fenix.theme.FirefoxTheme
*/
@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterialApi::class)
@Composable
-@Suppress("MagicNumber", "LongMethod", "LongParameterList")
+@Suppress("MagicNumber", "LongMethod")
fun TabListItem(
tab: TabSessionState,
storage: ThumbnailStorage,
@@ -209,7 +209,6 @@ private fun clickableColor() = when (isSystemInDarkTheme()) {
}
@Composable
-@Suppress("LongParameterList")
private fun Thumbnail(
tab: TabSessionState,
size: Int,
diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt
index 2b70d5551..774c0525a 100644
--- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt
+++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserActivity.kt
@@ -5,24 +5,16 @@
package org.mozilla.fenix.customtabs
import android.app.assist.AssistContent
-import android.content.Intent
import android.net.Uri
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.annotation.VisibleForTesting
-import androidx.navigation.NavDestination
-import androidx.navigation.NavDirections
import mozilla.components.browser.state.selector.findCustomTab
import mozilla.components.browser.state.state.SessionState
-import mozilla.components.concept.engine.manifest.WebAppManifestParser
-import mozilla.components.feature.intent.ext.getSessionId
-import mozilla.components.feature.pwa.ext.getWebAppManifest
import mozilla.components.support.utils.SafeIntent
-import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
-import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.ext.components
-import java.security.InvalidParameterException
+import org.mozilla.fenix.ext.getIntentSessionId
const val EXTRA_IS_SANDBOX_CUSTOM_TAB = "org.mozilla.fenix.customtabs.EXTRA_IS_SANDBOX_CUSTOM_TAB"
@@ -45,52 +37,6 @@ open class ExternalAppBrowserActivity : HomeActivity() {
}
}
- final override fun getBreadcrumbMessage(destination: NavDestination): String {
- val fragmentName = resources.getResourceEntryName(destination.id)
- return "Changing to fragment $fragmentName, isCustomTab: true"
- }
-
- final override fun getIntentSource(intent: SafeIntent) = "CUSTOM_TAB"
-
- final override fun getIntentSessionId(intent: SafeIntent) = intent.getSessionId()
-
- override fun navigateToBrowserOnColdStart() {
- // No-op for external app
- }
-
- override fun navigateToHome() {
- // No-op for external app
- }
-
- override fun handleNewIntent(intent: Intent) {
- // No-op for external app
- }
-
- override fun getNavDirections(
- from: BrowserDirection,
- customTabSessionId: String?,
- ): NavDirections? {
- if (customTabSessionId == null) {
- finishAndRemoveTask()
- return null
- }
-
- val manifest = intent
- .getWebAppManifest()
- ?.let { WebAppManifestParser().serialize(it).toString() }
- return when (from) {
- BrowserDirection.FromGlobal ->
- NavGraphDirections.actionGlobalExternalAppBrowser(
- activeSessionId = customTabSessionId,
- webAppManifest = manifest,
- isSandboxCustomTab = intent.getBooleanExtra(EXTRA_IS_SANDBOX_CUSTOM_TAB, false),
- )
- else -> throw InvalidParameterException(
- "Tried to navigate to ExternalAppBrowserFragment from $from",
- )
- }
- }
-
override fun onDestroy() {
super.onDestroy()
diff --git a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt
index 3b4e88833..be147c039 100644
--- a/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/customtabs/ExternalAppBrowserFragment.kt
@@ -26,7 +26,6 @@ import mozilla.components.feature.pwa.feature.WebAppActivityFeature
import mozilla.components.feature.pwa.feature.WebAppContentFeature
import mozilla.components.feature.pwa.feature.WebAppHideToolbarFeature
import mozilla.components.feature.pwa.feature.WebAppSiteControlsFeature
-import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import mozilla.components.support.ktx.android.arch.lifecycle.addObservers
import org.mozilla.fenix.BuildConfig
@@ -44,7 +43,7 @@ import org.mozilla.fenix.settings.quicksettings.protections.cookiebanners.getCoo
/**
* Fragment used for browsing the web within external apps.
*/
-class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
+class ExternalAppBrowserFragment : BaseBrowserFragment() {
private val args by navArgs()
@@ -212,9 +211,4 @@ class ExternalAppBrowserFragment : BaseBrowserFragment(), UserInteractionHandler
view,
FenixSnackbarDelegate(view),
)
-
- companion object {
- // We only care about millisecond precision for telemetry events
- internal const val MS_PRECISION = 1_000_000L
- }
}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/navigation/DebugDrawerDestination.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/navigation/DebugDrawerDestination.kt
new file mode 100644
index 000000000..c58d9898d
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/navigation/DebugDrawerDestination.kt
@@ -0,0 +1,24 @@
+/* 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 org.mozilla.fenix.debugsettings.navigation
+
+import androidx.annotation.StringRes
+import androidx.compose.runtime.Composable
+
+/**
+ * A navigation destination for screens within the Debug Drawer.
+ *
+ * @property route The unique route used to navigate to the destination. This string can also contain
+ * optional parameters for arguments or deep linking.
+ * @property title The string ID of the destination's title.
+ * @property onClick Invoked when the destination is clicked to be navigated to.
+ * @property content The destination's [Composable].
+ */
+data class DebugDrawerDestination(
+ val route: String,
+ @StringRes val title: Int,
+ val onClick: () -> Unit,
+ val content: @Composable () -> Unit,
+)
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/navigation/DebugDrawerRoute.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/navigation/DebugDrawerRoute.kt
new file mode 100644
index 000000000..85d6376e5
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/navigation/DebugDrawerRoute.kt
@@ -0,0 +1,70 @@
+/* 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 org.mozilla.fenix.debugsettings.navigation
+
+import androidx.annotation.StringRes
+import androidx.compose.runtime.Composable
+import mozilla.components.browser.state.store.BrowserStore
+import org.mozilla.fenix.R
+import org.mozilla.fenix.debugsettings.store.DebugDrawerAction
+import org.mozilla.fenix.debugsettings.store.DebugDrawerStore
+import org.mozilla.fenix.debugsettings.tabs.TabTools as TabToolsScreen
+
+/**
+ * The navigation routes for screens within the Debug Drawer.
+ *
+ * @property route The unique route used to navigate to the destination. This string can also contain
+ * optional parameters for arguments or deep linking.
+ * @property title The string ID of the destination's title.
+ */
+enum class DebugDrawerRoute(val route: String, @StringRes val title: Int) {
+ /**
+ * The navigation route for [TabToolsScreen].
+ */
+ TabTools(
+ route = "tab_tools",
+ title = R.string.debug_drawer_tab_tools_title,
+ ),
+ ;
+
+ companion object {
+ /**
+ * Transforms the values of [DebugDrawerRoute] into a list of [DebugDrawerDestination]s.
+ *
+ * @param debugDrawerStore [DebugDrawerStore] used to dispatch navigation actions.
+ * @param browserStore [BrowserStore] used to add tabs in [TabToolsScreen].
+ * @param inactiveTabsEnabled Whether the inactive tabs feature is enabled.
+ */
+ fun generateDebugDrawerDestinations(
+ debugDrawerStore: DebugDrawerStore,
+ browserStore: BrowserStore,
+ inactiveTabsEnabled: Boolean,
+ ): List =
+ DebugDrawerRoute.values().map { debugDrawerRoute ->
+ val onClick: () -> Unit
+ val content: @Composable () -> Unit
+ when (debugDrawerRoute) {
+ TabTools -> {
+ onClick = {
+ debugDrawerStore.dispatch(DebugDrawerAction.NavigateTo.TabTools)
+ }
+ content = {
+ TabToolsScreen(
+ store = browserStore,
+ inactiveTabsEnabled = inactiveTabsEnabled,
+ )
+ }
+ }
+ }
+
+ DebugDrawerDestination(
+ route = debugDrawerRoute.route,
+ title = debugDrawerRoute.title,
+ onClick = onClick,
+ content = content,
+ )
+ }
+ }
+}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerAction.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerAction.kt
new file mode 100644
index 000000000..5e06df088
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerAction.kt
@@ -0,0 +1,46 @@
+/* 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 org.mozilla.fenix.debugsettings.store
+
+import mozilla.components.lib.state.Action
+import org.mozilla.fenix.debugsettings.ui.DebugDrawerHome
+import org.mozilla.fenix.debugsettings.tabs.TabTools as TabToolsScreen
+
+/**
+ * [Action] implementation related to [DebugDrawerStore].
+ */
+sealed class DebugDrawerAction : Action {
+
+ /**
+ * [DebugDrawerAction] fired when the user opens the drawer.
+ */
+ object DrawerOpened : DebugDrawerAction()
+
+ /**
+ * [DebugDrawerAction] fired when the user closes the drawer.
+ */
+ object DrawerClosed : DebugDrawerAction()
+
+ /**
+ * [DebugDrawerAction] fired when a navigation event occurs for a specific destination.
+ */
+ sealed class NavigateTo : DebugDrawerAction() {
+
+ /**
+ * [NavigateTo] action fired when the debug drawer needs to navigate to [DebugDrawerHome].
+ */
+ object Home : NavigateTo()
+
+ /**
+ * [NavigateTo] action fired when the debug drawer needs to navigate to [TabToolsScreen].
+ */
+ object TabTools : NavigateTo()
+ }
+
+ /**
+ * [DebugDrawerAction] fired when a back navigation event occurs.
+ */
+ object OnBackPressed : DebugDrawerAction()
+}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerNavigationMiddleware.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerNavigationMiddleware.kt
new file mode 100644
index 000000000..0d91798b3
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerNavigationMiddleware.kt
@@ -0,0 +1,45 @@
+/* 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 org.mozilla.fenix.debugsettings.store
+
+import androidx.navigation.NavHostController
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.launch
+import mozilla.components.lib.state.Middleware
+import mozilla.components.lib.state.MiddlewareContext
+import org.mozilla.fenix.debugsettings.navigation.DebugDrawerRoute
+import org.mozilla.fenix.debugsettings.ui.DEBUG_DRAWER_HOME_ROUTE
+
+/**
+ * Middleware that handles navigation events for the Debug Drawer feature.
+ *
+ * @param navController [NavHostController] used to execute any navigation actions on the UI.
+ * @param scope [CoroutineScope] used to make calls to the main thread.
+ */
+class DebugDrawerNavigationMiddleware(
+ private val navController: NavHostController,
+ private val scope: CoroutineScope,
+) : Middleware {
+
+ override fun invoke(
+ context: MiddlewareContext,
+ next: (DebugDrawerAction) -> Unit,
+ action: DebugDrawerAction,
+ ) {
+ next(action)
+ scope.launch {
+ when (action) {
+ is DebugDrawerAction.NavigateTo.Home -> navController.popBackStack(
+ route = DEBUG_DRAWER_HOME_ROUTE,
+ inclusive = false,
+ )
+ is DebugDrawerAction.NavigateTo.TabTools ->
+ navController.navigate(route = DebugDrawerRoute.TabTools.route)
+ is DebugDrawerAction.OnBackPressed -> navController.popBackStack()
+ is DebugDrawerAction.DrawerOpened, DebugDrawerAction.DrawerClosed -> Unit // no-op
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerState.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerState.kt
new file mode 100644
index 000000000..496ea240c
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerState.kt
@@ -0,0 +1,16 @@
+/* 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 org.mozilla.fenix.debugsettings.store
+
+import mozilla.components.lib.state.State
+
+/**
+ * UI state of the debug drawer feature.
+ *
+ * @property drawerStatus The [DrawerStatus] indicating the physical state of the drawer.
+ */
+data class DebugDrawerState(
+ val drawerStatus: DrawerStatus = DrawerStatus.Closed,
+) : State
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerStore.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerStore.kt
new file mode 100644
index 000000000..db6bcaa25
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerStore.kt
@@ -0,0 +1,27 @@
+/* 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 org.mozilla.fenix.debugsettings.store
+
+import mozilla.components.lib.state.Middleware
+import mozilla.components.lib.state.Store
+
+/**
+ * A [Store] that holds the [DebugDrawerState] for the Debug Drawer and reduces [DebugDrawerAction]s
+ * dispatched to the store.
+ */
+class DebugDrawerStore(
+ initialState: DebugDrawerState = DebugDrawerState(),
+ middlewares: List> = emptyList(),
+) : Store(
+ initialState,
+ ::reduce,
+ middlewares,
+)
+
+private fun reduce(state: DebugDrawerState, action: DebugDrawerAction): DebugDrawerState = when (action) {
+ is DebugDrawerAction.DrawerOpened -> state.copy(drawerStatus = DrawerStatus.Open)
+ is DebugDrawerAction.DrawerClosed -> state.copy(drawerStatus = DrawerStatus.Closed)
+ is DebugDrawerAction.NavigateTo, DebugDrawerAction.OnBackPressed -> state // handled by [DebugDrawerNavigationMiddleware]
+}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/store/DrawerStatus.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DrawerStatus.kt
new file mode 100644
index 000000000..71513f877
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/store/DrawerStatus.kt
@@ -0,0 +1,20 @@
+/* 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 org.mozilla.fenix.debugsettings.store
+
+/**
+ * Possible values of the debug drawer's physical state.
+ */
+enum class DrawerStatus {
+ /**
+ * The state of the drawer when it is closed.
+ */
+ Closed,
+
+ /**
+ * The state of the drawer when it is open.
+ */
+ Open,
+}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/tabs/TabTools.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/tabs/TabTools.kt
new file mode 100644
index 000000000..c6daa5d80
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/tabs/TabTools.kt
@@ -0,0 +1,328 @@
+/* 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 org.mozilla.fenix.debugsettings.tabs
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.text.KeyboardActions
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.Text
+import androidx.compose.material.TextField
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.ExperimentalComposeUiApi
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.tooling.preview.PreviewParameter
+import androidx.compose.ui.tooling.preview.PreviewParameterProvider
+import androidx.compose.ui.unit.dp
+import androidx.core.text.isDigitsOnly
+import mozilla.components.browser.state.action.TabListAction
+import mozilla.components.browser.state.state.createTab
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.lib.state.ext.observeAsState
+import org.mozilla.fenix.R
+import org.mozilla.fenix.compose.Divider
+import org.mozilla.fenix.compose.annotation.LightDarkPreview
+import org.mozilla.fenix.compose.button.PrimaryButton
+import org.mozilla.fenix.debugsettings.ui.DebugDrawer
+import org.mozilla.fenix.ext.maxActiveTime
+import org.mozilla.fenix.tabstray.ext.isNormalTabInactive
+import org.mozilla.fenix.theme.FirefoxTheme
+
+/**
+ * Tab Tools UI for [DebugDrawer] that displays the tab counts and allows easy bulk-opening of tabs.
+ *
+ * @param store [BrowserStore] used to obtain the tab counts and fire any tab creation actions.
+ * @param inactiveTabsEnabled Whether the inactive tabs feature is enabled.
+ */
+@Composable
+fun TabTools(
+ store: BrowserStore,
+ inactiveTabsEnabled: Boolean,
+) {
+ val tabs by store.observeAsState(initialValue = emptyList()) { state -> state.tabs }
+ val totalTabCount = remember(tabs) { tabs.size }
+ val privateTabCount = remember(tabs) { tabs.filter { it.content.private }.size }
+ val inactiveTabCount = remember(tabs) {
+ if (inactiveTabsEnabled) {
+ tabs.filter { it.isNormalTabInactive(maxActiveTime) }.size
+ } else {
+ 0
+ }
+ }
+ val activeTabCount = remember(tabs) { totalTabCount - privateTabCount - inactiveTabCount }
+
+ TabToolsContent(
+ activeTabCount = activeTabCount,
+ inactiveTabCount = inactiveTabCount,
+ privateTabCount = privateTabCount,
+ totalTabCount = totalTabCount,
+ inactiveTabsEnabled = inactiveTabsEnabled,
+ onCreateTabsClick = { quantity, isInactive, isPrivate ->
+ store.dispatch(
+ TabListAction.AddMultipleTabsAction(
+ tabs = generateTabList(
+ quantity = quantity,
+ isInactive = isInactive,
+ isPrivate = isPrivate,
+ ),
+ ),
+ )
+ },
+ )
+}
+
+private fun generateTabList(
+ quantity: Int,
+ isInactive: Boolean = false,
+ isPrivate: Boolean = false,
+) = List(quantity) {
+ createTab(
+ url = "www.example.com",
+ private = isPrivate,
+ createdAt = if (isInactive) 0L else System.currentTimeMillis(),
+ )
+}
+
+@Composable
+private fun TabToolsContent(
+ activeTabCount: Int,
+ inactiveTabCount: Int,
+ privateTabCount: Int,
+ totalTabCount: Int,
+ inactiveTabsEnabled: Boolean,
+ onCreateTabsClick: ((quantity: Int, isInactive: Boolean, isPrivate: Boolean) -> Unit),
+) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(all = 16.dp),
+ verticalArrangement = Arrangement.spacedBy(16.dp),
+ ) {
+ TabCounter(
+ activeTabCount = activeTabCount,
+ inactiveTabCount = inactiveTabCount,
+ privateTabCount = privateTabCount,
+ totalTabCount = totalTabCount,
+ inactiveTabsEnabled = inactiveTabsEnabled,
+ )
+
+ TabCreationTool(
+ inactiveTabsEnabled = inactiveTabsEnabled,
+ onCreateTabsClick = onCreateTabsClick,
+ )
+ }
+}
+
+@Composable
+private fun TabCounter(
+ activeTabCount: Int,
+ inactiveTabCount: Int,
+ privateTabCount: Int,
+ totalTabCount: Int,
+ inactiveTabsEnabled: Boolean,
+) {
+ Column {
+ Text(
+ text = stringResource(R.string.debug_drawer_tab_tools_tab_count_title),
+ color = FirefoxTheme.colors.textPrimary,
+ style = FirefoxTheme.typography.headline5,
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ TabCountRow(
+ tabType = stringResource(R.string.debug_drawer_tab_tools_tab_count_normal),
+ count = activeTabCount.toString(),
+ )
+
+ if (inactiveTabsEnabled) {
+ TabCountRow(
+ tabType = stringResource(R.string.debug_drawer_tab_tools_tab_count_inactive),
+ count = inactiveTabCount.toString(),
+ )
+ }
+
+ TabCountRow(
+ tabType = stringResource(R.string.debug_drawer_tab_tools_tab_count_private),
+ count = privateTabCount.toString(),
+ )
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ Divider()
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ TabCountRow(
+ tabType = stringResource(R.string.debug_drawer_tab_tools_tab_count_total),
+ count = totalTabCount.toString(),
+ )
+ }
+}
+
+@Composable
+private fun TabCountRow(
+ tabType: String,
+ count: String,
+) {
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .padding(start = 16.dp),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Text(
+ text = tabType,
+ color = FirefoxTheme.colors.textSecondary,
+ style = FirefoxTheme.typography.headline6,
+ )
+
+ Text(
+ text = count,
+ color = FirefoxTheme.colors.textSecondary,
+ style = FirefoxTheme.typography.headline6,
+ )
+ }
+}
+
+private const val DEFAULT_TABS_TO_ADD = "1"
+
+@OptIn(ExperimentalComposeUiApi::class)
+@Composable
+private fun TabCreationTool(
+ inactiveTabsEnabled: Boolean,
+ onCreateTabsClick: ((quantity: Int, isInactive: Boolean, isPrivate: Boolean) -> Unit),
+) {
+ var tabQuantityToCreate by rememberSaveable { mutableStateOf(DEFAULT_TABS_TO_ADD) }
+ var hasError by rememberSaveable { mutableStateOf(false) }
+ val keyboardController = LocalSoftwareKeyboardController.current
+
+ Column {
+ Text(
+ text = stringResource(R.string.debug_drawer_tab_tools_tab_creation_tool_title),
+ color = FirefoxTheme.colors.textPrimary,
+ style = FirefoxTheme.typography.headline5,
+ )
+
+ TextField(
+ value = tabQuantityToCreate,
+ onValueChange = {
+ tabQuantityToCreate = it
+ hasError = it.isEmpty() || !it.isDigitsOnly() || it.toInt() == 0
+ },
+ modifier = Modifier.fillMaxWidth(),
+ textStyle = FirefoxTheme.typography.subtitle1,
+ label = {
+ Text(
+ text = stringResource(R.string.debug_drawer_tab_tools_tab_creation_tool_text_field_label),
+ color = FirefoxTheme.colors.textPrimary,
+ style = FirefoxTheme.typography.caption,
+ )
+ },
+ isError = hasError,
+ keyboardOptions = KeyboardOptions(
+ keyboardType = KeyboardType.Number,
+ ),
+ keyboardActions = KeyboardActions(
+ onDone = {
+ keyboardController?.hide()
+ },
+ ),
+ singleLine = true,
+ colors = TextFieldDefaults.textFieldColors(
+ textColor = FirefoxTheme.colors.textPrimary,
+ backgroundColor = Color.Transparent,
+ cursorColor = FirefoxTheme.colors.borderFormDefault,
+ errorCursorColor = FirefoxTheme.colors.borderWarning,
+ focusedIndicatorColor = FirefoxTheme.colors.borderPrimary,
+ unfocusedIndicatorColor = FirefoxTheme.colors.borderPrimary,
+ errorIndicatorColor = FirefoxTheme.colors.borderWarning,
+ ),
+ )
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ PrimaryButton(
+ text = stringResource(id = R.string.debug_drawer_tab_tools_tab_creation_tool_button_text_active),
+ enabled = !hasError,
+ onClick = {
+ onCreateTabsClick(tabQuantityToCreate.toInt(), false, false)
+ },
+ )
+
+ Spacer(modifier = Modifier.height(8.dp))
+
+ if (inactiveTabsEnabled) {
+ PrimaryButton(
+ text = stringResource(id = R.string.debug_drawer_tab_tools_tab_creation_tool_button_text_inactive),
+ enabled = !hasError,
+ onClick = {
+ onCreateTabsClick(tabQuantityToCreate.toInt(), true, false)
+ },
+ )
+
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+
+ PrimaryButton(
+ text = stringResource(id = R.string.debug_drawer_tab_tools_tab_creation_tool_button_text_private),
+ enabled = !hasError,
+ onClick = {
+ onCreateTabsClick(tabQuantityToCreate.toInt(), false, true)
+ },
+ )
+ }
+}
+
+private data class TabToolsPreviewModel(
+ val inactiveTabsEnabled: Boolean = true,
+)
+
+private class TabToolsPreviewParameterProvider : PreviewParameterProvider {
+ override val values: Sequence
+ get() = sequenceOf(
+ TabToolsPreviewModel(
+ inactiveTabsEnabled = true,
+ ),
+ TabToolsPreviewModel(
+ inactiveTabsEnabled = false,
+ ),
+ )
+}
+
+@Composable
+@LightDarkPreview
+private fun TabToolsPreview(
+ @PreviewParameter(TabToolsPreviewParameterProvider::class) model: TabToolsPreviewModel,
+) {
+ FirefoxTheme {
+ Box(
+ modifier = Modifier.background(color = FirefoxTheme.colors.layer1),
+ ) {
+ TabTools(
+ store = BrowserStore(),
+ inactiveTabsEnabled = model.inactiveTabsEnabled,
+ )
+ }
+ }
+}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugDrawer.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugDrawer.kt
new file mode 100644
index 000000000..dd3557018
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugDrawer.kt
@@ -0,0 +1,138 @@
+/* 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 org.mozilla.fenix.debugsettings.ui
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
+import androidx.compose.material.Text
+import androidx.compose.material.TopAppBar
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.NavHost
+import androidx.navigation.compose.composable
+import androidx.navigation.compose.rememberNavController
+import org.mozilla.fenix.R
+import org.mozilla.fenix.compose.annotation.LightDarkPreview
+import org.mozilla.fenix.debugsettings.navigation.DebugDrawerDestination
+import org.mozilla.fenix.theme.FirefoxTheme
+
+/**
+ * The debug drawer UI.
+ *
+ * @param navController [NavHostController] used to perform navigation actions on the [NavHost].
+ * @param destinations The list of [DebugDrawerDestination]s (excluding home) used to populate
+ * the [NavHost] with screens.
+ * @param onBackButtonClick Invoked when the user taps on the back button in the app bar.
+ */
+@Composable
+fun DebugDrawer(
+ navController: NavHostController,
+ destinations: List,
+ onBackButtonClick: () -> Unit,
+) {
+ var backButtonVisible by remember { mutableStateOf(false) }
+ var toolbarTitle by remember { mutableStateOf("") }
+
+ Column(modifier = Modifier.fillMaxSize()) {
+ TopAppBar(
+ title = {
+ Text(
+ text = toolbarTitle,
+ color = FirefoxTheme.colors.textPrimary,
+ style = FirefoxTheme.typography.headline6,
+ )
+ },
+ navigationIcon = if (backButtonVisible) {
+ topBarBackButton(onClick = onBackButtonClick)
+ } else {
+ null
+ },
+ backgroundColor = FirefoxTheme.colors.layer1,
+ elevation = 5.dp,
+ )
+
+ NavHost(
+ navController = navController,
+ startDestination = DEBUG_DRAWER_HOME_ROUTE,
+ modifier = Modifier.fillMaxSize(),
+ ) {
+ composable(route = DEBUG_DRAWER_HOME_ROUTE) {
+ toolbarTitle = stringResource(id = R.string.debug_drawer_title)
+ backButtonVisible = false
+ DebugDrawerHome(destinations = destinations)
+ }
+
+ destinations.forEach { destination ->
+ composable(route = destination.route) {
+ toolbarTitle = stringResource(id = destination.title)
+ backButtonVisible = true
+
+ destination.content()
+ }
+ }
+ }
+ }
+}
+
+@Composable
+private fun topBarBackButton(onClick: () -> Unit): @Composable () -> Unit = {
+ IconButton(
+ onClick = onClick,
+ ) {
+ Icon(
+ painter = painterResource(R.drawable.mozac_ic_back_24),
+ contentDescription = stringResource(R.string.debug_drawer_back_button_content_description),
+ tint = FirefoxTheme.colors.iconPrimary,
+ )
+ }
+}
+
+@Composable
+@LightDarkPreview
+private fun DebugDrawerPreview() {
+ val navController = rememberNavController()
+ val destinations = remember {
+ List(size = 15) { index ->
+ DebugDrawerDestination(
+ route = "screen_$index",
+ title = R.string.debug_drawer_title,
+ onClick = {
+ navController.navigate(route = "screen_$index")
+ },
+ content = {
+ Text(
+ text = "Tool $index",
+ color = FirefoxTheme.colors.textPrimary,
+ style = FirefoxTheme.typography.headline6,
+ )
+ },
+ )
+ }
+ }
+
+ FirefoxTheme {
+ Box(modifier = Modifier.background(color = FirefoxTheme.colors.layer1)) {
+ DebugDrawer(
+ navController = navController,
+ destinations = destinations,
+ onBackButtonClick = {
+ navController.popBackStack()
+ },
+ )
+ }
+ }
+}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugDrawerHome.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugDrawerHome.kt
new file mode 100644
index 000000000..d73838a0b
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugDrawerHome.kt
@@ -0,0 +1,144 @@
+/* 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 org.mozilla.fenix.debugsettings.ui
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.items
+import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.material.Snackbar
+import androidx.compose.material.SnackbarHost
+import androidx.compose.material.SnackbarHostState
+import androidx.compose.material.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import kotlinx.coroutines.launch
+import mozilla.components.support.ktx.android.content.appName
+import mozilla.components.support.ktx.android.content.appVersionName
+import org.mozilla.fenix.R
+import org.mozilla.fenix.compose.Divider
+import org.mozilla.fenix.compose.annotation.LightDarkPreview
+import org.mozilla.fenix.compose.inComposePreview
+import org.mozilla.fenix.compose.list.TextListItem
+import org.mozilla.fenix.debugsettings.navigation.DebugDrawerDestination
+import org.mozilla.fenix.theme.FirefoxTheme
+
+/**
+ * The navigation route for [DebugDrawerHome].
+ */
+const val DEBUG_DRAWER_HOME_ROUTE = "debug_drawer_home"
+
+/**
+ * The home screen of the [DebugDrawer].
+ *
+ * @param destinations The list of [DebugDrawerDestination]s to display.
+ */
+@Composable
+fun DebugDrawerHome(
+ destinations: List,
+) {
+ val lazyListState = rememberLazyListState()
+
+ val appName: String
+ val appVersion: String
+ if (inComposePreview) {
+ appName = "App Name Preview"
+ appVersion = "100.00.000"
+ } else {
+ appName = LocalContext.current.appName
+ appVersion = LocalContext.current.appVersionName
+ }
+
+ LazyColumn(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(color = FirefoxTheme.colors.layer1),
+ state = lazyListState,
+ ) {
+ item(key = "home_header") {
+ Row(
+ modifier = Modifier
+ .padding(all = 16.dp)
+ .fillMaxWidth(),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ ) {
+ Text(
+ text = appName,
+ color = FirefoxTheme.colors.textPrimary,
+ style = FirefoxTheme.typography.headline5,
+ )
+
+ Text(
+ text = appVersion,
+ color = FirefoxTheme.colors.textSecondary,
+ style = FirefoxTheme.typography.headline5,
+ )
+ }
+
+ Divider()
+ }
+
+ items(
+ items = destinations,
+ key = { destination ->
+ destination.route
+ },
+ ) { destination ->
+ TextListItem(
+ label = stringResource(id = destination.title),
+ onClick = destination.onClick,
+ )
+
+ Divider()
+ }
+ }
+}
+
+@Composable
+@LightDarkPreview
+private fun DebugDrawerHomePreview() {
+ val scope = rememberCoroutineScope()
+ val snackbarState = remember { SnackbarHostState() }
+
+ FirefoxTheme {
+ Box {
+ DebugDrawerHome(
+ destinations = List(size = 30) {
+ DebugDrawerDestination(
+ route = "screen_$it",
+ title = R.string.debug_drawer_title,
+ onClick = {
+ scope.launch {
+ snackbarState.showSnackbar("item $it clicked")
+ }
+ },
+ content = {},
+ )
+ },
+ )
+
+ SnackbarHost(
+ hostState = snackbarState,
+ modifier = Modifier.align(Alignment.BottomCenter),
+ ) { snackbarData ->
+ Snackbar(
+ snackbarData = snackbarData,
+ )
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugOverlay.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugOverlay.kt
index c305da383..fcb87b71a 100644
--- a/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugOverlay.kt
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/ui/DebugOverlay.kt
@@ -4,33 +4,78 @@
package org.mozilla.fenix.debugsettings.ui
-import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
+import androidx.compose.material.DrawerValue
+import androidx.compose.material.ModalDrawer
import androidx.compose.material.Snackbar
import androidx.compose.material.SnackbarHost
import androidx.compose.material.SnackbarHostState
+import androidx.compose.material.Text
+import androidx.compose.material.rememberDrawerState
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.CompositionLocalProvider
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
-import kotlinx.coroutines.launch
+import androidx.navigation.NavHostController
+import androidx.navigation.compose.rememberNavController
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.filter
import org.mozilla.fenix.R
import org.mozilla.fenix.compose.annotation.LightDarkPreview
import org.mozilla.fenix.compose.button.FloatingActionButton
+import org.mozilla.fenix.debugsettings.navigation.DebugDrawerDestination
+import org.mozilla.fenix.debugsettings.store.DrawerStatus
import org.mozilla.fenix.theme.FirefoxTheme
/**
- * Overlay for presenting Fenix-wide debugging content.
+ * Overlay for presenting app-wide debugging content.
+ *
+ * @param navController [NavHostController] used to perform navigation actions.
+ * @param drawerStatus The [DrawerStatus] indicating the physical state of the drawer.
+ * @param debugDrawerDestinations The complete list of [DebugDrawerDestination]s used to populate
+ * the [DebugDrawer] with sub screens.
+ * @param onDrawerOpen Invoked when the drawer is opened.
+ * @param onDrawerClose Invoked when the drawer is closed.
+ * @param onDrawerBackButtonClick Invoked when the user taps on the back button in the app bar.
*/
@Composable
-fun DebugOverlay() {
+fun DebugOverlay(
+ navController: NavHostController,
+ drawerStatus: DrawerStatus,
+ debugDrawerDestinations: List,
+ onDrawerOpen: () -> Unit,
+ onDrawerClose: () -> Unit,
+ onDrawerBackButtonClick: () -> Unit,
+) {
val snackbarState = remember { SnackbarHostState() }
- val scope = rememberCoroutineScope()
+ val drawerState = rememberDrawerState(initialValue = DrawerValue.Closed)
+
+ LaunchedEffect(drawerStatus) {
+ if (drawerStatus == DrawerStatus.Open) {
+ drawerState.open()
+ }
+ }
+
+ LaunchedEffect(drawerState) {
+ snapshotFlow { drawerState.currentValue }
+ .distinctUntilChanged()
+ .filter { it == DrawerValue.Closed }
+ .collect {
+ onDrawerClose()
+ }
+ }
Box(
modifier = Modifier.fillMaxSize(),
@@ -41,12 +86,41 @@ fun DebugOverlay() {
.align(Alignment.CenterStart)
.padding(start = 16.dp),
onClick = {
- scope.launch {
- snackbarState.showSnackbar("Show debug drawer")
- }
+ onDrawerOpen()
},
)
+ // ModalDrawer utilizes a Surface, which blocks ALL clicks behind it, preventing the app
+ // from being interactable. This cannot be overridden in the Surface API, so we must hide
+ // the entire drawer when it is closed.
+ if (drawerStatus == DrawerStatus.Open) {
+ val currentLayoutDirection = LocalLayoutDirection.current
+ val sheetLayoutDirection = when (currentLayoutDirection) {
+ LayoutDirection.Rtl -> LayoutDirection.Ltr
+ LayoutDirection.Ltr -> LayoutDirection.Rtl
+ }
+
+ // Force the drawer to always open from the opposite side of the screen. We need to reset
+ // this below with `drawerContent` to ensure the content follows the correct direction.
+ CompositionLocalProvider(LocalLayoutDirection provides sheetLayoutDirection) {
+ ModalDrawer(
+ drawerContent = {
+ CompositionLocalProvider(LocalLayoutDirection provides currentLayoutDirection) {
+ DebugDrawer(
+ navController = navController,
+ destinations = debugDrawerDestinations,
+ onBackButtonClick = onDrawerBackButtonClick,
+ )
+ }
+ },
+ drawerBackgroundColor = FirefoxTheme.colors.layer1,
+ scrimColor = FirefoxTheme.colors.scrim,
+ drawerState = drawerState,
+ content = {},
+ )
+ }
+ }
+
// This must be the last element in the Box
SnackbarHost(
hostState = snackbarState,
@@ -62,13 +136,41 @@ fun DebugOverlay() {
@Composable
@LightDarkPreview
private fun DebugOverlayPreview() {
- FirefoxTheme {
- Box(
- modifier = Modifier
- .fillMaxSize()
- .background(color = FirefoxTheme.colors.layer1),
- ) {
- DebugOverlay()
+ val navController = rememberNavController()
+ var drawerStatus by remember { mutableStateOf(DrawerStatus.Closed) }
+ val destinations = remember {
+ List(size = 15) { index ->
+ DebugDrawerDestination(
+ route = "screen_$index",
+ title = R.string.debug_drawer_title,
+ onClick = {
+ navController.navigate(route = "screen_$index")
+ },
+ content = {
+ Text(
+ text = "Tool $index",
+ color = FirefoxTheme.colors.textPrimary,
+ style = FirefoxTheme.typography.headline6,
+ )
+ },
+ )
}
}
+
+ FirefoxTheme {
+ DebugOverlay(
+ navController = navController,
+ drawerStatus = drawerStatus,
+ debugDrawerDestinations = destinations,
+ onDrawerOpen = {
+ drawerStatus = DrawerStatus.Open
+ },
+ onDrawerClose = {
+ drawerStatus = DrawerStatus.Closed
+ },
+ onDrawerBackButtonClick = {
+ navController.popBackStack()
+ },
+ )
+ }
}
diff --git a/app/src/main/java/org/mozilla/fenix/debugsettings/ui/FenixOverlay.kt b/app/src/main/java/org/mozilla/fenix/debugsettings/ui/FenixOverlay.kt
new file mode 100644
index 000000000..c3992fda8
--- /dev/null
+++ b/app/src/main/java/org/mozilla/fenix/debugsettings/ui/FenixOverlay.kt
@@ -0,0 +1,83 @@
+/* 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 org.mozilla.fenix.debugsettings.ui
+
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.navigation.compose.rememberNavController
+import mozilla.components.browser.state.store.BrowserStore
+import mozilla.components.lib.state.ext.observeAsState
+import org.mozilla.fenix.compose.annotation.LightDarkPreview
+import org.mozilla.fenix.debugsettings.navigation.DebugDrawerRoute
+import org.mozilla.fenix.debugsettings.store.DebugDrawerAction
+import org.mozilla.fenix.debugsettings.store.DebugDrawerNavigationMiddleware
+import org.mozilla.fenix.debugsettings.store.DebugDrawerStore
+import org.mozilla.fenix.debugsettings.store.DrawerStatus
+import org.mozilla.fenix.debugsettings.tabs.TabTools
+import org.mozilla.fenix.theme.FirefoxTheme
+import org.mozilla.fenix.theme.Theme
+
+/**
+ * Overlay for presenting Fenix-wide debugging content.
+ *
+ * @param browserStore [BrowserStore] used to access tab data for [TabTools].
+ * @param inactiveTabsEnabled Whether the inactive tabs feature is enabled.
+ */
+@Composable
+fun FenixOverlay(
+ browserStore: BrowserStore,
+ inactiveTabsEnabled: Boolean,
+) {
+ val navController = rememberNavController()
+ val coroutineScope = rememberCoroutineScope()
+ val debugDrawerStore = remember {
+ DebugDrawerStore(
+ middlewares = listOf(
+ DebugDrawerNavigationMiddleware(
+ navController = navController,
+ scope = coroutineScope,
+ ),
+ ),
+ )
+ }
+ val debugDrawerDestinations = remember {
+ DebugDrawerRoute.generateDebugDrawerDestinations(
+ debugDrawerStore = debugDrawerStore,
+ browserStore = browserStore,
+ inactiveTabsEnabled = inactiveTabsEnabled,
+ )
+ }
+ val drawerStatus by debugDrawerStore.observeAsState(initialValue = DrawerStatus.Closed) { state ->
+ state.drawerStatus
+ }
+
+ FirefoxTheme(theme = Theme.getTheme(allowPrivateTheme = false)) {
+ DebugOverlay(
+ navController = navController,
+ drawerStatus = drawerStatus,
+ debugDrawerDestinations = debugDrawerDestinations,
+ onDrawerOpen = {
+ debugDrawerStore.dispatch(DebugDrawerAction.DrawerOpened)
+ },
+ onDrawerClose = {
+ debugDrawerStore.dispatch(DebugDrawerAction.DrawerClosed)
+ },
+ onDrawerBackButtonClick = {
+ debugDrawerStore.dispatch(DebugDrawerAction.OnBackPressed)
+ },
+ )
+ }
+}
+
+@LightDarkPreview
+@Composable
+private fun FenixOverlayPreview() {
+ FenixOverlay(
+ browserStore = BrowserStore(),
+ inactiveTabsEnabled = true,
+ )
+}
diff --git a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt
index f6ecca1cf..8682e1614 100644
--- a/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt
+++ b/app/src/main/java/org/mozilla/fenix/experiments/NimbusSetup.kt
@@ -70,7 +70,9 @@ fun createNimbus(context: Context, urlString: String?): NimbusApi {
onFetchCallback = {
context.settings().nimbusExperimentsFetched = true
}
- }.build(appInfo)
+ }.build(appInfo).also { nimbusApi ->
+ nimbusApi.recordIsReady(FxNimbus.features.nimbusIsReady.value().eventCount)
+ }
}
private fun Context.reportError(message: String, e: Throwable) {
diff --git a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt
index b78fad924..35c6b6253 100644
--- a/app/src/main/java/org/mozilla/fenix/ext/Activity.kt
+++ b/app/src/main/java/org/mozilla/fenix/ext/Activity.kt
@@ -15,12 +15,47 @@ import androidx.annotation.DrawableRes
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.os.bundleOf
+import androidx.navigation.NavDestination
+import androidx.navigation.NavDirections
import mozilla.components.concept.base.crash.Breadcrumb
import mozilla.components.concept.engine.EngineSession
+import mozilla.components.concept.engine.manifest.WebAppManifestParser
+import mozilla.components.feature.intent.ext.getSessionId
+import mozilla.components.feature.pwa.ext.getWebAppManifest
+import mozilla.components.support.utils.SafeIntent
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
+import org.mozilla.fenix.NavGraphDirections
import org.mozilla.fenix.R
+import org.mozilla.fenix.addons.AddonDetailsFragmentDirections
+import org.mozilla.fenix.addons.AddonPermissionsDetailsFragmentDirections
+import org.mozilla.fenix.addons.AddonsManagementFragmentDirections
+import org.mozilla.fenix.customtabs.EXTRA_IS_SANDBOX_CUSTOM_TAB
+import org.mozilla.fenix.customtabs.ExternalAppBrowserActivity
+import org.mozilla.fenix.exceptions.trackingprotection.TrackingProtectionExceptionsFragmentDirections
+import org.mozilla.fenix.home.HomeFragmentDirections
+import org.mozilla.fenix.library.bookmarks.BookmarkFragmentDirections
+import org.mozilla.fenix.library.history.HistoryFragmentDirections
+import org.mozilla.fenix.library.historymetadata.HistoryMetadataGroupFragmentDirections
+import org.mozilla.fenix.library.recentlyclosed.RecentlyClosedFragmentDirections
+import org.mozilla.fenix.search.SearchDialogFragmentDirections
+import org.mozilla.fenix.settings.HttpsOnlyFragmentDirections
+import org.mozilla.fenix.settings.SettingsFragmentDirections
import org.mozilla.fenix.settings.SupportUtils
+import org.mozilla.fenix.settings.TrackingProtectionFragmentDirections
+import org.mozilla.fenix.settings.about.AboutFragmentDirections
+import org.mozilla.fenix.settings.logins.fragment.LoginDetailFragmentDirections
+import org.mozilla.fenix.settings.logins.fragment.SavedLoginsAuthFragmentDirections
+import org.mozilla.fenix.settings.search.SaveSearchEngineFragmentDirections
+import org.mozilla.fenix.settings.search.SearchEngineFragmentDirections
+import org.mozilla.fenix.settings.studies.StudiesFragmentDirections
+import org.mozilla.fenix.settings.wallpaper.WallpaperSettingsFragmentDirections
+import org.mozilla.fenix.share.AddNewDeviceFragmentDirections
+import org.mozilla.fenix.shopping.ReviewQualityCheckFragmentDirections
+import org.mozilla.fenix.tabstray.TabsTrayFragmentDirections
+import org.mozilla.fenix.trackingprotection.TrackingProtectionPanelDialogFragmentDirections
+import org.mozilla.fenix.translations.TranslationsDialogFragmentDirections
+import java.security.InvalidParameterException
/**
* Attempts to call immersive mode using the View to hide the status bar and navigation buttons.
@@ -170,7 +205,164 @@ fun Activity.setNavigationIcon(
}
}
+/**
+ * Delegate to the relevant 'get nav directions' function based on the given [Activity].
+ *
+ * @param from The [BrowserDirection] to indicate which fragment the browser is being opened from.
+ * @param customTabSessionId Optional custom tab session ID if navigating from a custom tab.
+ *
+ * @return the [NavDirections] for the given [Activity].
+ */
+fun Activity.getNavDirections(
+ from: BrowserDirection,
+ customTabSessionId: String? = null,
+): NavDirections? = when (this) {
+ is ExternalAppBrowserActivity -> {
+ getExternalAppBrowserNavDirections(from, customTabSessionId)
+ }
+
+ else -> {
+ getHomeNavDirections(from)
+ }
+}
+
+private fun Activity.getExternalAppBrowserNavDirections(
+ from: BrowserDirection,
+ customTabSessionId: String?,
+): NavDirections? {
+ if (customTabSessionId == null) {
+ finishAndRemoveTask()
+ return null
+ }
+
+ val manifest =
+ intent.getWebAppManifest()?.let { WebAppManifestParser().serialize(it).toString() }
+
+ return when (from) {
+ BrowserDirection.FromGlobal ->
+ NavGraphDirections.actionGlobalExternalAppBrowser(
+ activeSessionId = customTabSessionId,
+ webAppManifest = manifest,
+ isSandboxCustomTab = intent.getBooleanExtra(EXTRA_IS_SANDBOX_CUSTOM_TAB, false),
+ )
+
+ else -> throw InvalidParameterException(
+ "Tried to navigate to ExternalAppBrowserFragment from $from",
+ )
+ }
+}
+
+private fun getHomeNavDirections(
+ from: BrowserDirection,
+): NavDirections = when (from) {
+ BrowserDirection.FromGlobal -> NavGraphDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromHome -> HomeFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromWallpaper -> WallpaperSettingsFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromSearchDialog -> SearchDialogFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromSettings -> SettingsFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromBookmarks -> BookmarkFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromHistory -> HistoryFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromHistoryMetadataGroup -> HistoryMetadataGroupFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromTrackingProtectionExceptions ->
+ TrackingProtectionExceptionsFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromHttpsOnlyMode -> HttpsOnlyFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromAbout -> AboutFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromTrackingProtection -> TrackingProtectionFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromTrackingProtectionDialog ->
+ TrackingProtectionPanelDialogFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromSavedLoginsFragment -> SavedLoginsAuthFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromAddNewDeviceFragment -> AddNewDeviceFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromSearchEngineFragment -> SearchEngineFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromSaveSearchEngineFragment -> SaveSearchEngineFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromAddonDetailsFragment -> AddonDetailsFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromAddonPermissionsDetailsFragment ->
+ AddonPermissionsDetailsFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromLoginDetailFragment -> LoginDetailFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromTabsTray -> TabsTrayFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromRecentlyClosed -> RecentlyClosedFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromStudiesFragment -> StudiesFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromReviewQualityCheck -> ReviewQualityCheckFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromAddonsManagementFragment -> AddonsManagementFragmentDirections.actionGlobalBrowser()
+
+ BrowserDirection.FromTranslationsDialogFragment -> TranslationsDialogFragmentDirections.actionGlobalBrowser()
+}
+
const val REQUEST_CODE_BROWSER_ROLE = 1
const val SETTINGS_SELECT_OPTION_KEY = ":settings:fragment_args_key"
const val SETTINGS_SHOW_FRAGMENT_ARGS = ":settings:show_fragment_args"
const val DEFAULT_BROWSER_APP_OPTION = "default_browser"
+const val EXTERNAL_APP_BROWSER_INTENT_SOURCE = "CUSTOM_TAB"
+
+/**
+ * Depending on the [Activity], maybe derive the source of the given [intent].
+ *
+ * @param intent the [SafeIntent] to derive the source from.
+ */
+fun Activity.getIntentSource(intent: SafeIntent): String? = when (this) {
+ is ExternalAppBrowserActivity -> EXTERNAL_APP_BROWSER_INTENT_SOURCE
+ else -> getHomeIntentSource(intent)
+}
+
+private fun getHomeIntentSource(intent: SafeIntent): String? {
+ return when {
+ intent.isLauncherIntent -> HomeActivity.APP_ICON
+ intent.action == Intent.ACTION_VIEW -> "LINK"
+ else -> null
+ }
+}
+
+/**
+ * Depending on the [Activity], maybe derive the session ID of the given [intent].
+ *
+ * @param intent the [SafeIntent] to derive the session ID from.
+ */
+fun Activity.getIntentSessionId(intent: SafeIntent): String? = when (this) {
+ is ExternalAppBrowserActivity -> getExternalAppBrowserIntentSessionId(intent)
+ else -> null
+}
+
+private fun getExternalAppBrowserIntentSessionId(intent: SafeIntent) = intent.getSessionId()
+
+/**
+ * Get the breadcrumb message for the [Activity].
+ *
+ * @param destination the [NavDestination] required to provide the destination ID.
+ */
+fun Activity.getBreadcrumbMessage(destination: NavDestination): String = when (this) {
+ is ExternalAppBrowserActivity -> getExternalAppBrowserBreadcrumbMessage(destination.id)
+ else -> getHomeBreadcrumbMessage(destination.id)
+}
+
+private fun Activity.getExternalAppBrowserBreadcrumbMessage(destinationId: Int): String {
+ val fragmentName = resources.getResourceEntryName(destinationId)
+ return "Changing to fragment $fragmentName, isCustomTab: true"
+}
+
+private fun Activity.getHomeBreadcrumbMessage(destinationId: Int): String {
+ val fragmentName = resources.getResourceEntryName(destinationId)
+ return "Changing to fragment $fragmentName, isCustomTab: false"
+}
diff --git a/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt b/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt
index eaeba9b04..0ab92423d 100644
--- a/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt
+++ b/app/src/main/java/org/mozilla/fenix/gecko/GeckoProvider.kt
@@ -19,7 +19,6 @@ import mozilla.components.service.sync.logins.GeckoLoginStorageDelegate
import org.mozilla.fenix.Config
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
-import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.geckoview.ContentBlocking
import org.mozilla.geckoview.ContentBlocking.SafeBrowsingProvider
import org.mozilla.geckoview.GeckoRuntime
@@ -134,7 +133,7 @@ object GeckoProvider {
.consoleOutput(context.components.settings.enableGeckoLogs)
.debugLogging(Config.channel.isDebug || context.components.settings.enableGeckoLogs)
.aboutConfigEnabled(true)
- .extensionsProcessEnabled(FxNimbus.features.extensionsProcess.value().enabled)
+ .extensionsProcessEnabled(true)
.extensionsWebAPIEnabled(true)
.build()
}
diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
index 30904f087..6ed9c9620 100644
--- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
@@ -49,7 +49,9 @@ import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.MainScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.map
+import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.state.selector.normalTabs
@@ -119,7 +121,6 @@ import org.mozilla.fenix.messaging.FenixNimbusMessagingController
import org.mozilla.fenix.messaging.MessagingFeature
import org.mozilla.fenix.nimbus.FxNimbus
import org.mozilla.fenix.perf.MarkersFragmentLifecycleCallbacks
-import org.mozilla.fenix.perf.runBlockingIncrement
import org.mozilla.fenix.search.toolbar.DefaultSearchSelectorController
import org.mozilla.fenix.search.toolbar.SearchSelectorMenu
import org.mozilla.fenix.tabstray.TabsTrayAccessPoint
@@ -1008,17 +1009,18 @@ class HomeFragment : Fragment() {
lastAppliedWallpaperName = wallpaperName
}
else -> {
- runBlockingIncrement {
+ viewLifecycleOwner.lifecycleScope.launch {
// loadBitmap does file lookups based on name, so we don't need a fully
// qualified type to load the image
val wallpaper = Wallpaper.Default.copy(name = wallpaperName)
val wallpaperImage =
- requireComponents.useCases.wallpaperUseCases.loadBitmap(wallpaper)
+ context?.let { requireComponents.useCases.wallpaperUseCases.loadBitmap(it, wallpaper) }
wallpaperImage?.let {
it.scaleToBottomOfView(binding.wallpaperImageView)
binding.wallpaperImageView.isVisible = true
lastAppliedWallpaperName = wallpaperName
} ?: run {
+ if (!isActive) return@run
with(binding.wallpaperImageView) {
isVisible = false
showSnackBar(
@@ -1052,11 +1054,15 @@ class HomeFragment : Fragment() {
}
private fun observeWallpaperUpdates() {
- consumeFrom(requireComponents.appStore) {
- val currentWallpaper = it.wallpaperState.currentWallpaper
- if (currentWallpaper.name != lastAppliedWallpaperName) {
- applyWallpaper(wallpaperName = currentWallpaper.name, orientationChange = false)
- }
+ consumeFlow(requireComponents.appStore, viewLifecycleOwner) { flow ->
+ flow.filter { it.mode == BrowsingMode.Normal }
+ .map { it.wallpaperState.currentWallpaper }
+ .distinctUntilChanged()
+ .collect {
+ if (it.name != lastAppliedWallpaperName) {
+ applyWallpaper(wallpaperName = it.name, orientationChange = false)
+ }
+ }
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeMenuView.kt b/app/src/main/java/org/mozilla/fenix/home/HomeMenuView.kt
index 6a2dfedf7..7a94a7837 100644
--- a/app/src/main/java/org/mozilla/fenix/home/HomeMenuView.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/HomeMenuView.kt
@@ -47,7 +47,6 @@ import org.mozilla.fenix.GleanMetrics.HomeMenu as HomeMenuMetrics
* clicked.
* @param fxaEntrypoint The source entry point to FxA.
*/
-@Suppress("LongParameterList")
class HomeMenuView(
private val view: View,
private val context: Context,
diff --git a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt
index 3b224dc82..db81bc244 100644
--- a/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/pocket/PocketStoriesComposables.kt
@@ -239,7 +239,7 @@ fun PocketSponsoredStory(
* @param onDiscoverMoreClicked Callback for when the user taps an element which contains an
*/
@OptIn(ExperimentalComposeUiApi::class)
-@Suppress("LongParameterList", "LongMethod")
+@Suppress("LongMethod")
@Composable
fun PocketStories(
@PreviewParameter(PocketStoryProvider::class) stories: List,
@@ -367,7 +367,6 @@ private fun alignColumnToTitlePadding(screenWidth: Dp, contentPadding: Dp) =
* @param onCategoryClick Callback for when the user taps a category.
*/
@OptIn(ExperimentalComposeUiApi::class)
-@Suppress("LongParameterList")
@Composable
fun PocketStoriesCategories(
categories: List,
diff --git a/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarks.kt b/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarks.kt
index 797ea0977..df32d3940 100644
--- a/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarks.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/recentbookmarks/view/RecentBookmarks.kt
@@ -5,7 +5,6 @@
package org.mozilla.fenix.home.recentbookmarks.view
import androidx.compose.foundation.ExperimentalFoundationApi
-import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.isSystemInDarkTheme
@@ -42,10 +41,10 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import mozilla.components.browser.icons.compose.Loader
import mozilla.components.browser.icons.compose.Placeholder
-import mozilla.components.browser.icons.compose.WithIcon
import mozilla.components.ui.colors.PhotonColors
import org.mozilla.fenix.components.components
import org.mozilla.fenix.compose.ContextualMenu
+import org.mozilla.fenix.compose.Favicon
import org.mozilla.fenix.compose.Image
import org.mozilla.fenix.compose.MenuItem
import org.mozilla.fenix.compose.annotation.LightDarkPreview
@@ -172,6 +171,11 @@ private fun RecentBookmarkImage(bookmark: RecentBookmark) {
modifier = imageModifier,
targetSize = imageWidth,
contentScale = ContentScale.Crop,
+ fallback = {
+ if (!bookmark.url.isNullOrEmpty()) {
+ FallbackBookmarkFaviconImage(url = bookmark.url)
+ }
+ },
)
}
!bookmark.url.isNullOrEmpty() && !inComposePreview -> {
@@ -180,23 +184,7 @@ private fun RecentBookmarkImage(bookmark: RecentBookmark) {
PlaceholderBookmarkImage()
}
- WithIcon { icon ->
- Box(
- modifier = imageModifier.background(
- color = FirefoxTheme.colors.layer2,
- ),
- contentAlignment = Alignment.Center,
- ) {
- Image(
- painter = icon.painter,
- contentDescription = null,
- modifier = Modifier
- .size(36.dp)
- .clip(cardShape),
- contentScale = ContentScale.Crop,
- )
- }
- }
+ FallbackBookmarkFaviconImage(bookmark.url)
}
}
inComposePreview -> {
@@ -217,6 +205,20 @@ private fun PlaceholderBookmarkImage() {
)
}
+@Composable
+private fun FallbackBookmarkFaviconImage(
+ url: String,
+) {
+ Box(
+ modifier = imageModifier.background(
+ color = FirefoxTheme.colors.layer2,
+ ),
+ contentAlignment = Alignment.Center,
+ ) {
+ Favicon(url = url, size = 36.dp)
+ }
+}
+
@Composable
@LightDarkPreview
private fun RecentBookmarksPreview() {
diff --git a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt
index d999471e4..fa58db55c 100644
--- a/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/recentsyncedtabs/view/RecentSyncedTab.kt
@@ -69,7 +69,7 @@ private const val THUMBNAIL_SIZE = 108
* @param onRemoveSyncedTab Invoked when user clicks on the "Remove" dropdown menu option.
*/
@OptIn(ExperimentalFoundationApi::class)
-@Suppress("LongMethod", "LongParameterList")
+@Suppress("LongMethod")
@Composable
fun RecentSyncedTab(
tab: RecentSyncedTab?,
diff --git a/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabs.kt b/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabs.kt
index 1ce322624..b56da7c7a 100644
--- a/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabs.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/recenttabs/view/RecentTabs.kt
@@ -240,6 +240,15 @@ fun RecentTabImage(
modifier = modifier,
targetSize = THUMBNAIL_SIZE.dp,
contentScale = ContentScale.Crop,
+ fallback = {
+ TabThumbnail(
+ tab = tab.state,
+ size = LocalDensity.current.run { THUMBNAIL_SIZE.dp.toPx().toInt() },
+ storage = storage,
+ modifier = modifier,
+ contentScale = contentScale,
+ )
+ },
)
}
else -> TabThumbnail(
diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
index 258ded268..ff9326010 100644
--- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlAdapter.kt
@@ -190,7 +190,6 @@ class AdapterItemDiffCallback : DiffUtil.ItemCallback() {
}
}
-@Suppress("LongParameterList")
class SessionControlAdapter(
private val interactor: SessionControlInteractor,
private val viewLifecycleOwner: LifecycleOwner,
diff --git a/app/src/main/java/org/mozilla/fenix/home/topsites/TopSites.kt b/app/src/main/java/org/mozilla/fenix/home/topsites/TopSites.kt
index 53d4aaddc..a2bfcc3ae 100644
--- a/app/src/main/java/org/mozilla/fenix/home/topsites/TopSites.kt
+++ b/app/src/main/java/org/mozilla/fenix/home/topsites/TopSites.kt
@@ -239,7 +239,7 @@ data class TopSiteColors(
* @param onTopSiteLongClick Invoked when the user long clicks on a top site.
* @param onTopSitesItemBound Invoked during the composition of a top site item.
*/
-@Suppress("LongParameterList", "LongMethod")
+@Suppress("LongMethod")
@OptIn(ExperimentalFoundationApi::class, ExperimentalComposeUiApi::class)
@Composable
private fun TopSiteItem(
@@ -401,7 +401,6 @@ private fun TopSiteFavicon(url: String, imageUrl: String? = null) {
}
@Composable
-@Suppress("LongParameterList")
private fun getMenuItems(
topSite: TopSite,
onOpenInPrivateTabClicked: (topSite: TopSite) -> Unit,
diff --git a/app/src/main/java/org/mozilla/fenix/library/history/viewholders/HistoryListItemViewHolder.kt b/app/src/main/java/org/mozilla/fenix/library/history/viewholders/HistoryListItemViewHolder.kt
index 154cee636..d94c4a187 100644
--- a/app/src/main/java/org/mozilla/fenix/library/history/viewholders/HistoryListItemViewHolder.kt
+++ b/app/src/main/java/org/mozilla/fenix/library/history/viewholders/HistoryListItemViewHolder.kt
@@ -54,7 +54,6 @@ class HistoryListItemViewHolder(
* @param groupPendingDeletionCount allows to properly display the number of items inside a
* history group, taking into account pending removal of items inside.
*/
- @Suppress("LongParameterList")
fun bind(
item: History,
timeGroup: HistoryItemTimeGroup?,
diff --git a/app/src/main/java/org/mozilla/fenix/messaging/MessageNotificationWorker.kt b/app/src/main/java/org/mozilla/fenix/messaging/MessageNotificationWorker.kt
index 4d8d9ade4..7211e0047 100644
--- a/app/src/main/java/org/mozilla/fenix/messaging/MessageNotificationWorker.kt
+++ b/app/src/main/java/org/mozilla/fenix/messaging/MessageNotificationWorker.kt
@@ -4,26 +4,26 @@
package org.mozilla.fenix.messaging
-import android.app.Activity
import android.app.Notification
import android.app.PendingIntent
-import android.app.Service
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import android.os.IBinder
+import androidx.activity.ComponentActivity
+import androidx.lifecycle.LifecycleService
+import androidx.lifecycle.lifecycleScope
import androidx.work.CoroutineWorker
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.WorkerParameters
+import kotlinx.coroutines.launch
import mozilla.components.service.nimbus.messaging.FxNimbusMessaging
import mozilla.components.service.nimbus.messaging.Message
import mozilla.components.support.base.ids.SharedIdsHelper
import mozilla.components.support.utils.BootUtils
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.onboarding.ensureMarketingChannelExists
-import org.mozilla.fenix.perf.runBlockingIncrement
import org.mozilla.fenix.utils.IntentUtils
import org.mozilla.fenix.utils.createBaseNotification
import java.util.concurrent.TimeUnit
@@ -170,28 +170,27 @@ class MessageNotificationWorker(
* When a [Message] [Notification] is dismissed by the user record telemetry data and update the
* [Message.metadata].
*
- * This [Service] is only intended to be used by the [MessageNotificationWorker.createOnDismissPendingIntent] function.
+ * This Service is only intended to be used by the [MessageNotificationWorker.createOnDismissPendingIntent] function.
*/
-class NotificationDismissedService : Service() {
-
- /**
- * This service cannot be bound to.
- */
- override fun onBind(intent: Intent?): IBinder? = null
+class NotificationDismissedService : LifecycleService() {
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
+ super.onStartCommand(intent, flags, startId)
+
if (intent != null) {
val nimbusMessagingController =
FenixNimbusMessagingController(applicationContext.components.analytics.messagingStorage)
- // Get the relevant message.
- val message = intent.getStringExtra(DISMISSED_MESSAGE_ID)?.let { messageId ->
- runBlockingIncrement { nimbusMessagingController.getMessage(messageId) }
- }
+ lifecycleScope.launch {
+ // Get the relevant message.
+ val message = intent.getStringExtra(DISMISSED_MESSAGE_ID)?.let { messageId ->
+ nimbusMessagingController.getMessage(messageId)
+ }
- if (message != null) {
- // Update message as 'dismissed'.
- runBlockingIncrement { nimbusMessagingController.onMessageDismissed(message.metadata) }
+ if (message != null) {
+ // Update message as 'dismissed'.
+ nimbusMessagingController.onMessageDismissed(message.metadata)
+ }
}
}
@@ -203,9 +202,9 @@ class NotificationDismissedService : Service() {
* When a [Message] [Notification] is clicked by the user record telemetry data and update the
* [Message.metadata].
*
- * This [Activity] is only intended to be used by the [MessageNotificationWorker.createOnClickPendingIntent] function.
+ * This Activity is only intended to be used by the [MessageNotificationWorker.createOnClickPendingIntent] function.
*/
-class NotificationClickedReceiverActivity : Activity() {
+class NotificationClickedReceiverActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -213,22 +212,24 @@ class NotificationClickedReceiverActivity : Activity() {
val nimbusMessagingController =
FenixNimbusMessagingController(components.analytics.messagingStorage)
- // Get the relevant message.
- val message = intent.getStringExtra(CLICKED_MESSAGE_ID)?.let { messageId ->
- runBlockingIncrement { nimbusMessagingController.getMessage(messageId) }
- }
+ lifecycleScope.launch {
+ // Get the relevant message.
+ val message = intent.getStringExtra(CLICKED_MESSAGE_ID)?.let { messageId ->
+ nimbusMessagingController.getMessage(messageId)
+ }
- if (message != null) {
- // Update message as 'clicked'.
- runBlockingIncrement { nimbusMessagingController.onMessageClicked(message.metadata) }
+ if (message != null) {
+ // Update message as 'clicked'.
+ nimbusMessagingController.onMessageClicked(message.metadata)
- // Create the intent.
- val intent = nimbusMessagingController.getIntentForMessage(message)
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ // Create the intent.
+ val intent = nimbusMessagingController.getIntentForMessage(message)
+ intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
- // Start the message intent.
- startActivity(intent)
+ // Start the message intent.
+ startActivity(intent)
+ }
}
// End this activity.
diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
index 3791607f4..d46adfac3 100644
--- a/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/onboarding/OnboardingFragment.kt
@@ -18,21 +18,23 @@ import android.view.ViewGroup
import androidx.annotation.RequiresApi
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.ComposeView
-import androidx.compose.ui.platform.LocalContext
import androidx.core.app.NotificationManagerCompat
import androidx.fragment.app.Fragment
import androidx.localbroadcastmanager.content.LocalBroadcastManager
import androidx.navigation.fragment.findNavController
import mozilla.components.service.nimbus.evalJexlSafe
import mozilla.components.support.base.ext.areNotificationsEnabledSafe
+import mozilla.components.support.utils.BrowsersCache
import org.mozilla.fenix.R
import org.mozilla.fenix.components.accounts.FenixFxAEntryPoint
+import org.mozilla.fenix.compose.LinkTextState
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.hideToolbar
import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.ext.openSetDefaultBrowserOption
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.nimbus.FxNimbus
+import org.mozilla.fenix.onboarding.view.Caption
import org.mozilla.fenix.onboarding.view.OnboardingPageUiData
import org.mozilla.fenix.onboarding.view.OnboardingScreen
import org.mozilla.fenix.onboarding.view.sequencePosition
@@ -49,6 +51,7 @@ class OnboardingFragment : Fragment() {
private val pagesToDisplay by lazy {
pagesToDisplay(
+ shouldShowDefaultBrowserCard(requireContext()),
canShowNotificationPage(requireContext()),
canShowAddWidgetCard(),
)
@@ -59,6 +62,11 @@ class OnboardingFragment : Fragment() {
@SuppressLint("SourceLockedOrientationActivity")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
+ if (pagesToDisplay.isEmpty()) {
+ /* do not continue if there's no onboarding pages to display */
+ onFinish(null)
+ }
+
if (isNotATablet()) {
activity?.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
@@ -97,7 +105,6 @@ class OnboardingFragment : Fragment() {
@Composable
@Suppress("LongMethod")
private fun ScreenContent() {
- val context = LocalContext.current
OnboardingScreen(
pagesToDisplay = pagesToDisplay,
onMakeFirefoxDefaultClick = {
@@ -113,18 +120,6 @@ class OnboardingFragment : Fragment() {
pagesToDisplay.sequencePosition(OnboardingPageUiData.Type.DEFAULT_BROWSER),
)
},
- onPrivacyPolicyClick = { url ->
- startActivity(
- SupportUtils.createSandboxCustomTabIntent(
- context = context,
- url = url,
- ),
- )
- telemetryRecorder.onPrivacyPolicyClick(
- pagesToDisplay.telemetrySequenceId(),
- pagesToDisplay.sequencePosition(OnboardingPageUiData.Type.DEFAULT_BROWSER),
- )
- },
onSignInButtonClick = {
findNavController().nav(
id = R.id.onboardingFragment,
@@ -172,10 +167,7 @@ class OnboardingFragment : Fragment() {
)
},
onFinish = {
- onFinish(
- sequenceId = pagesToDisplay.telemetrySequenceId(),
- sequencePosition = pagesToDisplay.sequencePosition(it.type),
- )
+ onFinish(it)
},
onImpression = {
telemetryRecorder.onImpression(
@@ -200,18 +192,28 @@ class OnboardingFragment : Fragment() {
}
}
- private fun onFinish(sequenceId: String, sequencePosition: String) {
+ private fun onFinish(onboardingPageUiData: OnboardingPageUiData?) {
+ /* onboarding page UI data can be null if there was no pages to display */
+ if (onboardingPageUiData != null) {
+ val sequenceId = pagesToDisplay.telemetrySequenceId()
+ val sequencePosition = pagesToDisplay.sequencePosition(onboardingPageUiData.type)
+
+ telemetryRecorder.onOnboardingComplete(
+ sequenceId = sequenceId,
+ sequencePosition = sequencePosition,
+ )
+ }
+
requireComponents.fenixOnboarding.finish()
findNavController().nav(
id = R.id.onboardingFragment,
directions = OnboardingFragmentDirections.actionHome(),
)
- telemetryRecorder.onOnboardingComplete(
- sequenceId = sequenceId,
- sequencePosition = sequencePosition,
- )
}
+ private fun shouldShowDefaultBrowserCard(context: Context) =
+ !BrowsersCache.all(context.applicationContext).isDefaultBrowser
+
private fun canShowNotificationPage(context: Context) =
!NotificationManagerCompat.from(context.applicationContext)
.areNotificationsEnabledSafe() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU
@@ -221,13 +223,35 @@ class OnboardingFragment : Fragment() {
private fun isNotATablet() = !resources.getBoolean(R.bool.tablet)
private fun pagesToDisplay(
+ showDefaultBrowserPage: Boolean,
showNotificationPage: Boolean,
showAddWidgetPage: Boolean,
): List {
val jexlConditions = FxNimbus.features.junoOnboarding.value().conditions
val jexlHelper = requireContext().components.analytics.messagingStorage.helper
+ val privacyCaption = Caption(
+ text = getString(R.string.juno_onboarding_privacy_notice_text),
+ linkTextState = LinkTextState(
+ text = getString(R.string.juno_onboarding_privacy_notice_text),
+ url = SupportUtils.getMozillaPageUrl(SupportUtils.MozillaPage.PRIVATE_NOTICE),
+ onClick = {
+ startActivity(
+ SupportUtils.createSandboxCustomTabIntent(
+ context = requireContext(),
+ url = it,
+ ),
+ )
+ telemetryRecorder.onPrivacyPolicyClick(
+ pagesToDisplay.telemetrySequenceId(),
+ pagesToDisplay.sequencePosition(OnboardingPageUiData.Type.DEFAULT_BROWSER),
+ )
+ },
+ ),
+ )
return FxNimbus.features.junoOnboarding.value().cards.values.toPageUiData(
+ privacyCaption,
+ showDefaultBrowserPage,
showNotificationPage,
showAddWidgetPage,
jexlConditions,
diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingMapper.kt b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingMapper.kt
index 685587b27..9e3853a1d 100644
--- a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingMapper.kt
+++ b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingMapper.kt
@@ -4,15 +4,15 @@
package org.mozilla.fenix.onboarding.view
-import org.mozilla.fenix.compose.LinkTextState
import org.mozilla.fenix.nimbus.OnboardingCardData
import org.mozilla.fenix.nimbus.OnboardingCardType
-import org.mozilla.fenix.settings.SupportUtils
/**
* Returns a list of all the required Nimbus 'cards' that have been converted to [OnboardingPageUiData].
*/
internal fun Collection.toPageUiData(
+ privacyCaption: Caption,
+ showDefaultBrowserPage: Boolean,
showNotificationPage: Boolean,
showAddWidgetPage: Boolean,
jexlConditions: Map,
@@ -21,16 +21,25 @@ internal fun Collection.toPageUiData(
// we are first filtering the cards based on Nimbus configuration
return filter { it.shouldDisplayCard(func, jexlConditions) }
// we are then filtering again based on device capabilities
- .filter { it.isCardEnabled(showNotificationPage, showAddWidgetPage) }
+ .filter { it.isCardEnabled(showDefaultBrowserPage, showNotificationPage, showAddWidgetPage) }
.sortedBy { it.ordering }
- .map { it.toPageUiData() }
+ .mapIndexed {
+ index, onboardingCardData ->
+ // only first onboarding card shows privacy caption
+ onboardingCardData.toPageUiData(if (index == 0) privacyCaption else null)
+ }
}
private fun OnboardingCardData.isCardEnabled(
+ showDefaultBrowserPage: Boolean,
showNotificationPage: Boolean,
showAddWidgetPage: Boolean,
): Boolean =
when (cardType) {
+ OnboardingCardType.DEFAULT_BROWSER -> {
+ enabled && showDefaultBrowserPage
+ }
+
OnboardingCardType.NOTIFICATION_PERMISSION -> {
enabled && showNotificationPage
}
@@ -91,14 +100,14 @@ private fun OnboardingCardData.shouldDisplayCard(
return validPrerequisites && !hasDisqualifiers
}
-private fun OnboardingCardData.toPageUiData() = OnboardingPageUiData(
+private fun OnboardingCardData.toPageUiData(privacyCaption: Caption?) = OnboardingPageUiData(
type = cardType.toPageUiDataType(),
imageRes = imageRes.resourceId,
title = title,
description = body,
- linkText = linkText,
primaryButtonLabel = primaryButtonLabel,
secondaryButtonLabel = secondaryButtonLabel,
+ privacyCaption = privacyCaption,
)
private fun OnboardingCardType.toPageUiDataType() = when (this) {
@@ -117,7 +126,6 @@ internal fun mapToOnboardingPageState(
onboardingPageUiData: OnboardingPageUiData,
onMakeFirefoxDefaultClick: () -> Unit,
onMakeFirefoxDefaultSkipClick: () -> Unit,
- onPrivacyPolicyClick: (String) -> Unit,
onSignInButtonClick: () -> Unit,
onSignInSkipClick: () -> Unit,
onNotificationPermissionButtonClick: () -> Unit,
@@ -129,14 +137,12 @@ internal fun mapToOnboardingPageState(
onboardingPageUiData = onboardingPageUiData,
onPositiveButtonClick = onMakeFirefoxDefaultClick,
onNegativeButtonClick = onMakeFirefoxDefaultSkipClick,
- onUrlClick = onPrivacyPolicyClick,
)
OnboardingPageUiData.Type.ADD_SEARCH_WIDGET -> createOnboardingPageState(
onboardingPageUiData = onboardingPageUiData,
onPositiveButtonClick = onAddFirefoxWidgetClick,
onNegativeButtonClick = onAddFirefoxWidgetSkipClick,
- onUrlClick = onPrivacyPolicyClick,
)
OnboardingPageUiData.Type.SYNC_SIGN_IN -> createOnboardingPageState(
@@ -156,18 +162,11 @@ private fun createOnboardingPageState(
onboardingPageUiData: OnboardingPageUiData,
onPositiveButtonClick: () -> Unit,
onNegativeButtonClick: () -> Unit,
- onUrlClick: (String) -> Unit = {},
): OnboardingPageState = OnboardingPageState(
imageRes = onboardingPageUiData.imageRes,
title = onboardingPageUiData.title,
description = onboardingPageUiData.description,
- linkTextState = onboardingPageUiData.linkText?.let {
- LinkTextState(
- text = it,
- url = SupportUtils.getMozillaPageUrl(SupportUtils.MozillaPage.PRIVATE_NOTICE),
- onClick = onUrlClick,
- )
- },
primaryButton = Action(onboardingPageUiData.primaryButtonLabel, onPositiveButtonClick),
secondaryButton = Action(onboardingPageUiData.secondaryButtonLabel, onNegativeButtonClick),
+ privacyCaption = onboardingPageUiData.privacyCaption,
)
diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPage.kt b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPage.kt
index e590f1f35..743beec38 100644
--- a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPage.kt
+++ b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPage.kt
@@ -30,7 +30,6 @@ import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import org.mozilla.fenix.R
import org.mozilla.fenix.compose.LinkText
-import org.mozilla.fenix.compose.LinkTextState
import org.mozilla.fenix.compose.annotation.LightDarkPreview
import org.mozilla.fenix.compose.button.PrimaryButton
import org.mozilla.fenix.compose.button.SecondaryButton
@@ -61,6 +60,7 @@ private const val IMAGE_HEIGHT_RATIO_SMALL = 0.28f
* it doesn't show the close button.
*/
@Composable
+@Suppress("LongMethod")
fun OnboardingPage(
pageState: OnboardingPageState,
modifier: Modifier = Modifier,
@@ -116,10 +116,21 @@ fun OnboardingPage(
Spacer(modifier = Modifier.height(16.dp))
- DescriptionText(
- description = pageState.description,
- linkTextState = pageState.linkTextState,
+ Text(
+ text = pageState.description,
+ color = FirefoxTheme.colors.textSecondary,
+ textAlign = TextAlign.Center,
+ style = FirefoxTheme.typography.body2,
)
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ pageState.privacyCaption?.let { privacyCaption ->
+ LinkText(
+ text = privacyCaption.text,
+ linkTextStates = listOf(privacyCaption.linkTextState),
+ )
+ }
}
Column(
@@ -147,26 +158,6 @@ fun OnboardingPage(
}
}
-@Composable
-private fun DescriptionText(
- description: String,
- linkTextState: LinkTextState?,
-) {
- if (linkTextState != null && description.contains(linkTextState.text, ignoreCase = true)) {
- LinkText(
- text = description,
- linkTextStates = listOf(linkTextState),
- )
- } else {
- Text(
- text = description,
- color = FirefoxTheme.colors.textSecondary,
- textAlign = TextAlign.Center,
- style = FirefoxTheme.typography.body2,
- )
- }
-}
-
/**
* Calculates the image height to be set. The ratio is selected based on parent height.
*/
diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPageState.kt b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPageState.kt
index befd3febc..11becda2e 100644
--- a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPageState.kt
+++ b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPageState.kt
@@ -13,7 +13,7 @@ import org.mozilla.fenix.compose.LinkTextState
* @property imageRes [DrawableRes] displayed on the page.
* @property title [String] title of the page.
* @property description [String] description of the page.
- * @property linkTextState [LinkTextState] part of description text with a link.
+ * @property privacyCaption privacy caption to show and allow user to view on privacy policy.
* @property primaryButton [Action] action for the primary button.
* @property secondaryButton [Action] action for the secondary button.
* @property onRecordImpressionEvent Callback for recording impression event.
@@ -22,7 +22,7 @@ data class OnboardingPageState(
@DrawableRes val imageRes: Int,
val title: String,
val description: String,
- val linkTextState: LinkTextState? = null,
+ val privacyCaption: Caption? = null,
val primaryButton: Action,
val secondaryButton: Action? = null,
val onRecordImpressionEvent: () -> Unit = {},
@@ -35,3 +35,11 @@ data class Action(
val text: String,
val onClick: () -> Unit,
)
+
+/**
+ * Model containing text and [LinkTextState] for a caption.
+ */
+data class Caption(
+ val text: String,
+ val linkTextState: LinkTextState,
+)
diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPageUiData.kt b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPageUiData.kt
index f9713d102..2781b01f3 100644
--- a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPageUiData.kt
+++ b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingPageUiData.kt
@@ -15,9 +15,9 @@ data class OnboardingPageUiData(
@DrawableRes val imageRes: Int,
val title: String,
val description: String,
- val linkText: String? = null,
val primaryButtonLabel: String,
val secondaryButtonLabel: String,
+ val privacyCaption: Caption?,
) {
/**
* Model for different types of Onboarding Pages.
diff --git a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingScreen.kt b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingScreen.kt
index 6f3bb73de..9ae34da5b 100644
--- a/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingScreen.kt
+++ b/app/src/main/java/org/mozilla/fenix/onboarding/view/OnboardingScreen.kt
@@ -37,6 +37,7 @@ import kotlinx.coroutines.launch
import mozilla.components.lib.state.ext.observeAsComposableState
import org.mozilla.fenix.R
import org.mozilla.fenix.components.components
+import org.mozilla.fenix.compose.LinkTextState
import org.mozilla.fenix.compose.PagerIndicator
import org.mozilla.fenix.compose.annotation.LightDarkPreview
import org.mozilla.fenix.onboarding.WidgetPinnedReceiver.WidgetPinnedState
@@ -48,7 +49,6 @@ import org.mozilla.fenix.theme.FirefoxTheme
* @param pagesToDisplay List of pages to be displayed in onboarding pager ui.
* @param onMakeFirefoxDefaultClick Invoked when positive button on default browser page is clicked.
* @param onSkipDefaultClick Invoked when negative button on default browser page is clicked.
- * @param onPrivacyPolicyClick Invoked when the privacy policy link text is clicked.
* @param onSignInButtonClick Invoked when the positive button on the sign in page is clicked.
* @param onSkipSignInClick Invoked when the negative button on the sign in page is clicked.
* @param onNotificationPermissionButtonClick Invoked when positive button on notification page is
@@ -65,7 +65,6 @@ fun OnboardingScreen(
pagesToDisplay: List,
onMakeFirefoxDefaultClick: () -> Unit,
onSkipDefaultClick: () -> Unit,
- onPrivacyPolicyClick: (url: String) -> Unit,
onSignInButtonClick: () -> Unit,
onSkipSignInClick: () -> Unit,
onNotificationPermissionButtonClick: () -> Unit,
@@ -127,9 +126,6 @@ fun OnboardingScreen(
scrollToNextPageOrDismiss()
onSkipDefaultClick()
},
- onPrivacyPolicyClick = {
- onPrivacyPolicyClick(it)
- },
onSignInButtonClick = {
onSignInButtonClick()
scrollToNextPageOrDismiss()
@@ -167,7 +163,6 @@ private fun OnboardingContent(
pagerState: PagerState,
onMakeFirefoxDefaultClick: () -> Unit,
onMakeFirefoxDefaultSkipClick: () -> Unit,
- onPrivacyPolicyClick: (String) -> Unit,
onSignInButtonClick: () -> Unit,
onSignInSkipClick: () -> Unit,
onNotificationPermissionButtonClick: () -> Unit,
@@ -195,7 +190,6 @@ private fun OnboardingContent(
onboardingPageUiData = pageUiState,
onMakeFirefoxDefaultClick = onMakeFirefoxDefaultClick,
onMakeFirefoxDefaultSkipClick = onMakeFirefoxDefaultSkipClick,
- onPrivacyPolicyClick = onPrivacyPolicyClick,
onSignInButtonClick = onSignInButtonClick,
onSignInSkipClick = onSignInSkipClick,
onNotificationPermissionButtonClick = onNotificationPermissionButtonClick,
@@ -251,7 +245,6 @@ private fun OnboardingScreenPreview() {
},
onMakeFirefoxDefaultClick = {},
onMakeFirefoxDefaultSkipClick = {},
- onPrivacyPolicyClick = {},
onSignInButtonClick = {},
onSignInSkipClick = {},
onNotificationPermissionButtonClick = {},
@@ -268,10 +261,17 @@ private fun defaultPreviewPages() = listOf(
type = OnboardingPageUiData.Type.DEFAULT_BROWSER,
imageRes = R.drawable.ic_onboarding_welcome,
title = stringResource(R.string.juno_onboarding_default_browser_title_nimbus_2),
- description = stringResource(R.string.juno_onboarding_default_browser_description_nimbus_2),
- linkText = stringResource(R.string.juno_onboarding_default_browser_description_link_text),
+ description = stringResource(R.string.juno_onboarding_default_browser_description_nimbus_3),
primaryButtonLabel = stringResource(R.string.juno_onboarding_default_browser_positive_button),
secondaryButtonLabel = stringResource(R.string.juno_onboarding_default_browser_negative_button),
+ privacyCaption = Caption(
+ text = stringResource(R.string.juno_onboarding_privacy_notice_text),
+ linkTextState = LinkTextState(
+ text = stringResource(R.string.juno_onboarding_privacy_notice_text),
+ url = "",
+ onClick = {},
+ ),
+ ),
),
OnboardingPageUiData(
type = OnboardingPageUiData.Type.SYNC_SIGN_IN,
@@ -280,6 +280,14 @@ private fun defaultPreviewPages() = listOf(
description = stringResource(R.string.juno_onboarding_sign_in_description_2),
primaryButtonLabel = stringResource(R.string.juno_onboarding_sign_in_positive_button),
secondaryButtonLabel = stringResource(R.string.juno_onboarding_sign_in_negative_button),
+ privacyCaption = Caption(
+ text = stringResource(R.string.juno_onboarding_privacy_notice_text),
+ linkTextState = LinkTextState(
+ text = stringResource(R.string.juno_onboarding_privacy_notice_text),
+ url = "",
+ onClick = {},
+ ),
+ ),
),
OnboardingPageUiData(
type = OnboardingPageUiData.Type.NOTIFICATION_PERMISSION,
@@ -288,5 +296,13 @@ private fun defaultPreviewPages() = listOf(
description = stringResource(R.string.juno_onboarding_enable_notifications_description_nimbus_2),
primaryButtonLabel = stringResource(R.string.juno_onboarding_enable_notifications_positive_button),
secondaryButtonLabel = stringResource(R.string.juno_onboarding_enable_notifications_negative_button),
+ privacyCaption = Caption(
+ text = stringResource(R.string.juno_onboarding_privacy_notice_text),
+ linkTextState = LinkTextState(
+ text = stringResource(R.string.juno_onboarding_privacy_notice_text),
+ url = "",
+ onClick = {},
+ ),
+ ),
),
)
diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt
index 84d527b1b..f6fd7de78 100644
--- a/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/search/SearchDialogFragment.kt
@@ -672,6 +672,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
}.show()
}
}
+ Events.browserToolbarQrScanCompleted.record()
},
)
}
diff --git a/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt b/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt
index 05df95aea..e31daec28 100644
--- a/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt
+++ b/app/src/main/java/org/mozilla/fenix/search/SearchFragmentStore.kt
@@ -141,7 +141,6 @@ data class SearchFragmentState(
/**
* Creates the initial state for the search fragment.
*/
-@Suppress("LongParameterList")
fun createInitialSearchFragmentState(
activity: HomeActivity,
components: Components,
diff --git a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt
index 7fbb4cf13..fc186e8da 100644
--- a/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt
+++ b/app/src/main/java/org/mozilla/fenix/search/toolbar/ToolbarView.kt
@@ -13,6 +13,7 @@ import mozilla.components.feature.toolbar.ToolbarAutocompleteFeature
import mozilla.components.support.ktx.android.content.getColorFromAttr
import mozilla.components.support.ktx.android.content.res.resolveAttribute
import mozilla.components.support.ktx.android.view.hideKeyboard
+import org.mozilla.fenix.GleanMetrics.Events
import org.mozilla.fenix.R
import org.mozilla.fenix.components.Components
import org.mozilla.fenix.search.SearchEngineSource
@@ -116,6 +117,10 @@ class ToolbarView(
url = text
interactor.onTextChanged(text)
}
+
+ override fun onInputCleared() {
+ Events.browserToolbarInputCleared.record()
+ }
},
)
}
diff --git a/app/src/main/java/org/mozilla/fenix/session/PrivateNotificationService.kt b/app/src/main/java/org/mozilla/fenix/session/PrivateNotificationService.kt
index 49f5fcdfb..cab2ea8eb 100644
--- a/app/src/main/java/org/mozilla/fenix/session/PrivateNotificationService.kt
+++ b/app/src/main/java/org/mozilla/fenix/session/PrivateNotificationService.kt
@@ -6,6 +6,7 @@ package org.mozilla.fenix.session
import android.annotation.SuppressLint
import android.content.Intent
+import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import mozilla.components.browser.state.selector.selectedTab
@@ -35,17 +36,22 @@ class PrivateNotificationService : AbstractPrivateNotificationService() {
override fun NotificationCompat.Builder.buildNotification() {
setSmallIcon(R.drawable.ic_private_browsing)
- setContentTitle(
- applicationContext.getString(
- R.string.app_name_private_4,
- getString(R.string.app_name),
- ),
- )
- setContentText(
- applicationContext.getString(
- R.string.notification_pbm_delete_text_2,
- ),
- )
+
+ val contentTitle = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ applicationContext.getString(R.string.notification_erase_title_android_14)
+ } else {
+ applicationContext.getString(R.string.app_name_private_4, getString(R.string.app_name))
+ }
+
+ val contentText = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ getString(R.string.notification_erase_text_android_14)
+ } else {
+ getString(R.string.notification_pbm_delete_text_2)
+ }
+
+ setContentTitle(contentTitle)
+ setContentText(contentText)
+
color = ContextCompat.getColor(
this@PrivateNotificationService,
R.color.pbm_notification_color,
diff --git a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
index f9ef5b09a..0f241ebd7 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/SupportUtils.kt
@@ -59,6 +59,7 @@ object SupportUtils {
UNSIGNED_ADDONS("unsigned-addons"),
REVIEW_QUALITY_CHECK("review_checker_mobile"),
FX_SUGGEST("search-suggestions-firefox"),
+ TRANSLATIONS("android-translation"),
}
enum class MozillaPage(internal val path: String) {
diff --git a/app/src/main/java/org/mozilla/fenix/settings/SyncPreferenceView.kt b/app/src/main/java/org/mozilla/fenix/settings/SyncPreferenceView.kt
index f88973c02..8f71e2d0b 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/SyncPreferenceView.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/SyncPreferenceView.kt
@@ -30,7 +30,6 @@ import mozilla.components.service.fxa.manager.SyncEnginesStorage
* @param onReconnectClicked A callback executed when the [syncPreference] is clicked with a
* preference status of "Reconnect".
*/
-@Suppress("LongParameterList")
class SyncPreferenceView(
private val syncPreference: SyncPreference,
lifecycleOwner: LifecycleOwner,
diff --git a/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt
index e027124f9..49254f5c1 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/about/AboutFragment.kt
@@ -136,7 +136,8 @@ class AboutFragment : Fragment(), AboutPageListener {
WHATS_NEW,
SupportUtils.WHATS_NEW_URL,
),
- getString(R.string.about_whats_new, getString(R.string.app_name)),
+ // Note: Fenix only has release notes for 'Release' versions, NOT 'Beta' & 'Nightly'.
+ getString(R.string.about_whats_new, getString(R.string.firefox)),
),
AboutPageItem(
AboutItem.ExternalLink(
diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/controller/LoginsListController.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/controller/LoginsListController.kt
index 2208e08e2..5f9e85f3c 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/logins/controller/LoginsListController.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/logins/controller/LoginsListController.kt
@@ -22,6 +22,7 @@ import org.mozilla.fenix.utils.Settings
* @param loginsFragmentStore Store used to hold in-memory collection state.
* @param navController NavController manages app navigation within a NavHost.
* @param browserNavigator Controller allowing browser navigation to any Uri.
+ * @param addLoginCallback Callback used for add login
* @param settings SharedPreferences wrapper for easier usage.
*/
class LoginsListController(
@@ -32,6 +33,7 @@ class LoginsListController(
newTab: Boolean,
from: BrowserDirection,
) -> Unit,
+ private val addLoginCallback: () -> Unit,
private val settings: Settings,
) {
@@ -46,6 +48,7 @@ class LoginsListController(
fun handleAddLoginClicked() {
Logins.managementAddTapped.record(NoExtras())
+ addLoginCallback.invoke()
navController.navigate(
SavedLoginsFragmentDirections.actionSavedLoginsFragmentToAddLoginFragment(),
)
diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/LoginDetailFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/LoginDetailFragment.kt
index ddfe391a1..a7681d547 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/LoginDetailFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/LoginDetailFragment.kt
@@ -14,8 +14,12 @@ import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
+import androidx.activity.addCallback
import androidx.appcompat.app.AlertDialog
+import androidx.core.os.bundleOf
import androidx.core.view.MenuProvider
+import androidx.fragment.app.setFragmentResult
+import androidx.fragment.app.setFragmentResultListener
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
@@ -108,6 +112,16 @@ class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail), Menu
setUpPasswordReveal()
}
togglePasswordReveal(binding.passwordText, binding.revealPasswordButton)
+
+ setFragmentResultListener(HAS_QUERY_KEY) { _, bundle ->
+ val hasSearchQuery = bundle.getString(HAS_QUERY_BUNDLE)
+ if (hasSearchQuery == null) {
+ requireActivity().onBackPressedDispatcher.addCallback(this) {
+ val directions = LoginDetailFragmentDirections.actionLoginDetailFragmentToSavedLogins()
+ findNavController().navigate(directions)
+ }
+ }
+ }
}
/**
@@ -219,6 +233,12 @@ class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail), Menu
Logins.deleteSavedLogin.record(NoExtras())
Logins.deleted.add()
interactor.onDeleteLogin(args.savedLoginId)
+
+ setFragmentResult(
+ LOGIN_REQUEST_KEY,
+ bundleOf(LOGIN_BUNDLE_ARGS to args.savedLoginId),
+ )
+
dialog.dismiss()
}
create().withCenterAlignedButtons()
@@ -233,5 +253,10 @@ class LoginDetailFragment : SecureFragment(R.layout.fragment_login_detail), Menu
companion object {
private const val BUTTON_INCREASE_DPS = 24
+ const val LOGIN_REQUEST_KEY = "logins"
+ const val LOGIN_BUNDLE_ARGS = "loginsBundle"
+
+ const val HAS_QUERY_KEY = "hasSearchQueryKey"
+ const val HAS_QUERY_BUNDLE = "hasSearchQueryBundle"
}
}
diff --git a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt
index 94d78a9cc..31bc79344 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt
@@ -13,11 +13,15 @@ import android.view.View
import android.view.ViewGroup
import android.view.inputmethod.EditorInfo
import android.widget.FrameLayout
+import android.widget.ImageView
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar
import androidx.constraintlayout.widget.ConstraintLayout
+import androidx.core.os.bundleOf
import androidx.core.view.MenuProvider
+import androidx.fragment.app.setFragmentResult
+import androidx.fragment.app.setFragmentResultListener
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
@@ -36,6 +40,7 @@ import org.mozilla.fenix.ext.settings
import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.settings.logins.LoginsAction
import org.mozilla.fenix.settings.logins.LoginsFragmentStore
+import org.mozilla.fenix.settings.logins.LoginsListState
import org.mozilla.fenix.settings.logins.SavedLoginsSortingStrategyMenu
import org.mozilla.fenix.settings.logins.SortingStrategy
import org.mozilla.fenix.settings.logins.controller.LoginsListController
@@ -56,6 +61,11 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider {
private lateinit var loginsListController: LoginsListController
private lateinit var savedLoginsStorageController: SavedLoginsStorageController
+ private lateinit var loginState: LoginsListState
+ private var removedLoginGuid: String? = null
+ private var deletedGuid = mutableSetOf()
+ private var searchQuery: LoginsListState? = null
+
override fun onResume() {
super.onResume()
initToolbar()
@@ -81,6 +91,9 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider {
loginsFragmentStore = savedLoginsStore,
navController = findNavController(),
browserNavigator = ::openToBrowserAndLoad,
+ addLoginCallback = {
+ searchQuery = null
+ },
settings = requireContext().settings(),
)
savedLoginsStorageController =
@@ -107,9 +120,24 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- consumeFrom(savedLoginsStore) {
+ setFragmentResultListener(LoginDetailFragment.LOGIN_REQUEST_KEY) { _, bundle ->
+ removedLoginGuid = bundle.getString(LoginDetailFragment.LOGIN_BUNDLE_ARGS)
+ deletedGuid.add(removedLoginGuid.toString())
+ }
+ consumeFrom(savedLoginsStore) { loginsListState ->
sortingStrategyMenu.updateMenu(savedLoginsStore.state.highlightedItem)
- savedLoginsListView.update(it)
+ loginState = loginsListState
+ val currentList = loginState.filteredItems.toMutableList()
+
+ if (removedLoginGuid != null) {
+ val newList = currentList.filter { !deletedGuid.contains(it.guid) }
+
+ loginState = loginState.copy(
+ loginList = newList,
+ filteredItems = newList,
+ )
+ }
+ savedLoginsListView.update(loginState)
}
}
@@ -121,6 +149,13 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider {
searchView.queryHint = getString(R.string.preferences_passwords_saved_logins_search)
searchView.maxWidth = Int.MAX_VALUE
+ if (searchQuery?.searchedForText?.isNotEmpty() == true) {
+ searchItem.expandActionView()
+ searchView.setQuery(searchQuery?.searchedForText, true)
+ searchView.clearFocus()
+ filterSavedLogins(searchQuery?.searchedForText)
+ }
+
searchView.setOnQueryTextListener(
object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
@@ -128,15 +163,32 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider {
}
override fun onQueryTextChange(newText: String?): Boolean {
- savedLoginsStore.dispatch(
- LoginsAction.FilterLogins(
- newText,
- ),
- )
+ if (newText?.isNotEmpty() == true) {
+ searchQuery = savedLoginsStore.state.copy(
+ searchedForText = newText,
+ )
+ }
+ filterSavedLogins(newText)
return false
}
},
)
+
+ val closeButton: ImageView = searchView.findViewById(R.id.search_close_btn) as ImageView
+ closeButton.setOnClickListener {
+ searchView.setQuery("", false)
+ searchQuery = savedLoginsStore.state.copy(
+ searchedForText = null,
+ )
+ }
+ }
+
+ private fun filterSavedLogins(query: String?) {
+ savedLoginsStore.dispatch(
+ LoginsAction.FilterLogins(
+ query,
+ ),
+ )
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean = false
@@ -152,6 +204,11 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider {
sortingStrategyMenu.menuController.dismiss()
sortLoginsMenuRoot.setOnClickListener(null)
+ setFragmentResult(
+ LoginDetailFragment.HAS_QUERY_KEY,
+ bundleOf(LoginDetailFragment.HAS_QUERY_BUNDLE to searchQuery?.searchedForText),
+ )
+
redirectToReAuth(
listOf(R.id.loginDetailFragment, R.id.addLoginFragment),
findNavController().currentDestination?.id,
diff --git a/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineShortcuts.kt b/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineShortcuts.kt
index 29b751197..46ca337e4 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineShortcuts.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/search/SearchEngineShortcuts.kt
@@ -60,7 +60,6 @@ import org.mozilla.fenix.theme.FirefoxTheme
* @param onDeleteEngineClicked Invoked when the user clicks on the delete item of the three dot menu.
* @param onAddEngineClicked Invoked when the user clicks on the add search engine button.
*/
-@Suppress("LongParameterList")
@Composable
fun SearchEngineShortcuts(
categoryTitle: String,
@@ -125,7 +124,7 @@ private fun Title(title: String) {
}
}
-@Suppress("LongParameterList", "LongMethod")
+@Suppress("LongMethod")
@Composable
private fun SearchItem(
engine: SearchEngine,
diff --git a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt
index fe31ee967..2f07d9541 100644
--- a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt
+++ b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt
@@ -68,7 +68,6 @@ import org.mozilla.fenix.wallpapers.Wallpaper
*/
@SuppressLint("UnusedMaterialScaffoldPaddingParameter")
@Composable
-@Suppress("LongParameterList")
fun WallpaperSettings(
wallpaperGroups: Map>,
defaultWallpaper: Wallpaper,
@@ -193,7 +192,6 @@ private fun WallpaperGroupHeading(
* @param numColumns The number of columns that will occupy the grid.
*/
@Composable
-@Suppress("LongParameterList")
fun WallpaperThumbnails(
wallpapers: List,
defaultWallpaper: Wallpaper,
@@ -244,7 +242,6 @@ fun WallpaperThumbnails(
* @param onSelect Action to take when a new wallpaper is selected.
*/
@Composable
-@Suppress("LongParameterList")
private fun WallpaperThumbnailItem(
wallpaper: Wallpaper,
defaultWallpaper: Wallpaper,
diff --git a/app/src/main/java/org/mozilla/fenix/shopping/ui/ProductAnalysis.kt b/app/src/main/java/org/mozilla/fenix/shopping/ui/ProductAnalysis.kt
index f8739f7bd..bc934ca2f 100644
--- a/app/src/main/java/org/mozilla/fenix/shopping/ui/ProductAnalysis.kt
+++ b/app/src/main/java/org/mozilla/fenix/shopping/ui/ProductAnalysis.kt
@@ -10,6 +10,7 @@ import androidx.compose.animation.core.spring
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
+import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -38,6 +39,7 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.CollectionInfo
import androidx.compose.ui.semantics.CollectionItemInfo
+import androidx.compose.ui.semantics.clearAndSetSemantics
import androidx.compose.ui.semantics.collectionInfo
import androidx.compose.ui.semantics.collectionItemInfo
import androidx.compose.ui.semantics.contentDescription
@@ -499,33 +501,51 @@ private enum class Highlight(
),
}
+@Suppress("LongMethod")
@Composable
private fun ProductRecommendation(
product: RecommendedProductState.Product,
onClick: (String, String) -> Unit,
onImpression: (String) -> Unit,
) {
+ val titleContentDescription = headingResource(id = R.string.review_quality_check_ad_title)
+ val interactionSource = remember { MutableInteractionSource() }
+
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
ReviewQualityCheckCard(
modifier = Modifier
.fillMaxWidth()
- .semantics { heading() }
- .clickable {
- onClick(product.aid, product.productUrl)
- }
.onShown(
threshold = PRODUCT_RECOMMENDATION_IMPRESSION_THRESHOLD,
settleTime = PRODUCT_RECOMMENDATION_SETTLE_TIME_MS,
onVisible = { onImpression(product.aid) },
),
) {
- Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
+ Column(
+ modifier = Modifier
+ .fillMaxWidth(1f)
+ .clearAndSetSemantics {
+ heading()
+ contentDescription = titleContentDescription
+ }
+ .clickable(interactionSource = interactionSource, indication = null) {
+ onClick(product.aid, product.productUrl)
+ },
+ ) {
Text(
text = stringResource(R.string.review_quality_check_ad_title),
color = FirefoxTheme.colors.textPrimary,
style = FirefoxTheme.typography.headline8,
)
+ Spacer(modifier = Modifier.height(8.dp))
+ }
+
+ Column(
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ modifier = Modifier
+ .clickable { onClick(product.aid, product.productUrl) },
+ ) {
Row(horizontalArrangement = Arrangement.spacedBy(12.dp)) {
Image(
url = product.imageUrl,
diff --git a/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckContextualOnboarding.kt b/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckContextualOnboarding.kt
index 6d15e9ea2..e5c53777b 100644
--- a/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckContextualOnboarding.kt
+++ b/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckContextualOnboarding.kt
@@ -48,7 +48,7 @@ private const val MAX_SUPPORTED_VENDORS_PER_TLD = 3
* @param onPrimaryButtonClick Invoked when a user clicks on the primary button.
* @param onSecondaryButtonClick Invoked when a user clicks on the secondary button.
*/
-@Suppress("LongParameterList", "LongMethod")
+@Suppress("LongMethod")
@Composable
fun ReviewQualityCheckContextualOnboarding(
productVendors: List,
@@ -61,9 +61,9 @@ fun ReviewQualityCheckContextualOnboarding(
val learnMoreText =
stringResource(id = R.string.review_quality_check_contextual_onboarding_learn_more_link)
val privacyPolicyText =
- stringResource(id = R.string.review_quality_check_contextual_onboarding_privacy_policy_2)
+ stringResource(id = R.string.review_quality_check_contextual_onboarding_privacy_policy)
val termsOfUseText =
- stringResource(id = R.string.review_quality_check_contextual_onboarding_terms_use_2)
+ stringResource(id = R.string.review_quality_check_contextual_onboarding_terms_use)
val titleContentDescription =
headingResource(R.string.review_quality_check_contextual_onboarding_title)
@@ -111,19 +111,13 @@ fun ReviewQualityCheckContextualOnboarding(
Spacer(modifier = Modifier.height(16.dp))
- Text(
+ LinkText(
text = stringResource(
- id = R.string.review_quality_check_contextual_onboarding_caption_2,
+ id = R.string.review_quality_check_contextual_onboarding_caption,
stringResource(id = R.string.shopping_product_name),
+ privacyPolicyText,
+ termsOfUseText,
),
- color = FirefoxTheme.colors.textPrimary,
- style = FirefoxTheme.typography.caption,
- )
-
- Spacer(modifier = Modifier.height(16.dp))
-
- LinkText(
- text = privacyPolicyText,
linkTextStates = listOf(
LinkTextState(
text = privacyPolicyText,
@@ -132,16 +126,6 @@ fun ReviewQualityCheckContextualOnboarding(
onPrivacyPolicyClick()
},
),
- ),
- style = FirefoxTheme.typography.body2,
- linkTextDecoration = TextDecoration.Underline,
- )
-
- Spacer(modifier = Modifier.height(24.dp))
-
- LinkText(
- text = termsOfUseText,
- linkTextStates = listOf(
LinkTextState(
text = termsOfUseText,
url = "",
@@ -150,7 +134,10 @@ fun ReviewQualityCheckContextualOnboarding(
},
),
),
- style = FirefoxTheme.typography.body2,
+ style = FirefoxTheme.typography.caption
+ .copy(
+ color = FirefoxTheme.colors.textSecondary,
+ ),
linkTextDecoration = TextDecoration.Underline,
)
diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt b/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt
index f30b42584..9d31caeaa 100644
--- a/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt
+++ b/app/src/main/java/org/mozilla/fenix/tabstray/NavigationInteractor.kt
@@ -61,7 +61,7 @@ interface NavigationInteractor {
/**
* A default implementation of [NavigationInteractor].
*/
-@Suppress("LongParameterList", "TooManyFunctions")
+@Suppress("TooManyFunctions")
class DefaultNavigationInteractor(
private val browserStore: BrowserStore,
private val navController: NavController,
diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTray.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTray.kt
index 79f3dded0..cff61af7d 100644
--- a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTray.kt
+++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTray.kt
@@ -481,7 +481,7 @@ private fun TabsTrayAutoCloseBannerPreview() {
)
}
-@Suppress("LongMethod", "LongParameterList")
+@Suppress("LongMethod")
@Composable
private fun TabsTrayPreviewRoot(
displayTabsInGrid: Boolean = true,
diff --git a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayBanner.kt b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayBanner.kt
index 53450efc7..2779acc4f 100644
--- a/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayBanner.kt
+++ b/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayBanner.kt
@@ -184,7 +184,7 @@ fun TabsTrayBanner(
}
}
-@Suppress("LongMethod", "LongParameterList")
+@Suppress("LongMethod")
@Composable
private fun SingleSelectBanner(
menuItems: List
Levinumad müüdid privaatse veebilehitsemise kohta
+
+
+ Ära jäta sellesse seadmesse jälgi
+
+ %1$s kustutab küpsised, ajaloo ja saidiandmed, kui sulged kõik privaatsed kaardid. %2$s
+
+ Kes võib minu tegevusi näha?
+
+
+
+ Ava järgmine privaatne kaart ühe puudutusega.
+
+ Lisa avaekraanile
Tänan, ei soovi
@@ -68,6 +97,19 @@
Peida
+
+
+ Meie võimsaim privaatsusfunktsioon, mis siiski eraldab saidiülesed jälitajad.
+
+
+
+ Rohkem teavet täielikust küpsiste vastasest kaitsest
+
+
+
+ Uue privaatseansi alustamiseks puuduta siit. Kustuta ajalugu, küpsised – kõik.
+
+
Vajalik on ligipääs kaamerale. Mine Androidi sätetesse, puuduta õigusi ja seejärel puuduta lubamise valikut.
@@ -103,6 +145,9 @@
Uus privaatne kaart
+
+ Paroolide otsetee
+
Hiljutised kaardid
@@ -115,6 +160,8 @@
Kuva kõiki sünkroniseeritud kaarte
Sünkroniseeritud seade
+
+ Eemalda
Eemalda
@@ -140,6 +187,8 @@
Peata
Lisad
+
+ Konto andmed
Lisad puuduvad
@@ -153,6 +202,8 @@
Kogumik
Töölaua versioon
+
+ Ava tavalisel kaardil
Lisa avaekraanile
@@ -163,6 +214,8 @@
Otsi lehelt
+
+ Tõlgi leht
Salvesta kollektsiooni
@@ -192,10 +245,17 @@
Muuda
Kohanda avalehte
+
Avaleht
+
+ Kustuta lehitsemise ajalugu
+
+ Tõlgi leht
+
Valitud keel
@@ -208,8 +268,6 @@
Skanni
-
- Otsingumootor
Otsingumootori sätted
@@ -223,7 +281,7 @@
%s jagab vaikeotsingumootoriga kõike, mida aadressiribale sisestad.
-
+
Otsi otsingumootoriga %s
Otsi otse aadressiribalt
@@ -231,6 +289,46 @@
Otsingusätted
+
+ Otsi seekord järgneva otsingumootoriga:
+
+
+ %s otsingumootor
+
+
+
+ Tutvu oma isikupärastatud kodulehega. Siin kuvatakse hiljutised kaardid, järjehoidjad ja otsingutulemused.
+
+ Tere tulemast isikupärasemasse internetti
+
+
+ Rohkem värve. Parem privaatsus. Sama pühendunud inimestele kasumi asemel.
+
+
+ Ekraani vahetamine on lihtsam kui kunagi varem
+
+ Jätka sealt, kus pooleli jäid, kasutades kaarte teistest seadmetest avalehel.
+
+ Tee algust
+
+ Logi sisse
+
+ Jäta vahele
+
+ Kaarte sünkroonitakse! Jätka teises seadmes sealt, kus pooleli jäid.
+
+ Sulge
+
+
+
+ Teavitused aitavad %siga rohkem ära teha
+
+ Sünkrooni kaarte seadmete vahel, halda allalaadimisi ning hangi näpunäiteid %si privaatsuskaitse maksimaalse kasutamise kohta ja palju muud.
+
+ Jätka
+
Ava uus kaart %1$sis
@@ -253,8 +351,6 @@
Vaikeotsingumootor
Otsimine
-
- Aadressiriba
Hinda Google Plays
Ainult HTTPS-režiim
+
+ Sellel saidil väljas
+
+ Sellel saidil sees
+
Kõrgendatud turvalisuse nimel üritatakse saitidega ühenduda ainult HTTPSi krüptitud protokolli vahendusel.
-
- Sees
Väljas
@@ -303,12 +402,8 @@
Siiski on võimalik, et sellega on seotud ka ründaja. Saidi külastamise jätkamisel ära sisesta tundliku teavet. Jätkamisel lülitatakse saidi jaoks ajutiselt ainult HTTPSi režiim välja.
Hõlbustus
-
- Kohandatud Firefoxi konto server
Kohandatud sünkroonimise server
-
- Firefoxi konto/sünkroniseerimise server muutus. Muudatuste rakendumiseks väljutakse äpist…
Konto
@@ -321,8 +416,6 @@
Žestid
Kohandamine
-
- Firefoxi konto
Sünkroniseerimise jätkamiseks loo ühendus uuesti
@@ -334,8 +427,6 @@
Andmete kogumine
Remote debugging via USB
-
- Kuvatakse otsingumootoreid
Kuvatakse otsingu soovitusi
@@ -364,6 +455,7 @@
Mitte kunagi
Kasutatakse välist allalaadimishaldurit
+
Lisad
@@ -413,13 +505,6 @@
Vaata
-
-
- Lisa pole toetatud
-
- Lisa on juba paigaldatud
-
-
Sünkroniseeri kohe
@@ -558,13 +643,6 @@
Loobu
-
- %d sait
-
- %d saiti
-
Hiljuti suletud kaardid
@@ -699,10 +777,10 @@
Ava kaardid
Kollektsiooni nimi
-
- Muuda nime
-
- Eemalda
+
+ Muuda nime
+
+ Eemalda
Kustuta ajaloost
@@ -879,10 +957,10 @@
Keelatud Androidi poolt
Erandid
-
- Sees
Väljas
+
+ Tavaline
Range
@@ -971,7 +1049,7 @@
Jaga
Salvesta PDFina
-
+
PDFi loomine pole võimalik
Edasta seadmele
@@ -1080,13 +1158,9 @@
Avatud kaardid
%d kaarti
-
- Lehitsemise ajalugu ja saitide andmed
%d aadressi
-
- Küpsised
Sind logitakse enamikest saitidest välja
@@ -1124,39 +1198,11 @@
Grupp kustutatud
+
Sync on sisse lülitatud
-
- Tavaline (vaikimisi)
-
- Tasakaalustatud privaatsuse ja jõudluse jaoks. Lehed laaditakse tavapäraselt.
-
- Range
-
- Blokib rohkem jälitajaid ning lehed laadivad kiiremini, aga mõned lehtedel olevad funktsionaalsused võivad katki minna.
-
- Vali oma tööriistariba asukoht
-
- Loe meie privaatsuspoliitikat
-
-
- Alusta veebilehitsemist
-
-
- Vali oma teema
-
- Säästa akut ja oma silmi, lubades tume teema.
-
- Automaatne
-
- Kohandub sinu seadme sätetega
-
- Tume teema
-
- Hele teema
-
Kaardid on saadetud!
@@ -1192,23 +1238,21 @@
Kaitse sätted
Täiustatud jälitamisvastane kaitse
-
- Lehitse veebi ilma jälitamiseta
-
- Hoia oma andmed endale. %s kaitseb sind paljude tuntud jälitajate eest, kes jälgivad, mida sa võrgus olles teed.
+
+ %s kaitseb sind paljude tuntud jälitajate eest, kes jälgivad, mida sa võrgus olles teed.
Rohkem teavet
Tavaline (vaikimisi)
- Tasakaalustatud privaatsuse ja jõudluse jaoks. Lehed laaditakse tavapäraselt.
+ Lehed laadivad normaalselt, kuid blokitakse vähem jälitajaid.
Mis on blokitud tavalise jälitamisvastase kaitse poolt
Range
- Blokib rohkem jälitajaid ning lehed laadivad kiiremini, aga mõned lehtedel olevad funktsionaalsused võivad katki minna.
+ Tugevam jälitamisvastane kaitse ja suurem jõudlus, kuid mõned saidid ei pruugi korralikult töötada.
Mis on blokitud tugevama jälitamisvastase kaitse poolt
@@ -1228,6 +1272,10 @@
kõik kolmanda osapoole küpsised (võib põhjustada mõnel veebisaidil probleeme)
kõik küpsised (mõned veebisaidid lähevad katki)
+
+ Eraldatakse saidiülesed küpsised
+
+ Veebisaite juhendatakse andmeid mitte müüma ega jagama
Jälitav sisu
@@ -1252,8 +1300,12 @@
Saitideülesed jälitamisküpsised
+
+ Saidiülesed küpsised
Blokib küpsised, mida reklaami- ja analüüsiettevõtted üle paljude saitide sinu andmete kogumiseks kasutavad.
+
+ Täielik küpsistevastane eraldab külastatava saidi küpsiseid, nii et jälitajad, nt reklaamivõrgustikud, ei saa nende abil sind saitide üleselt jälitada.
Krüptorahakaevurid
@@ -1557,21 +1609,11 @@
Otsingumootori lisamine
Otsingumootori muutmine
-
- Lisa
-
- Salvesta
Muuda
Kustuta
-
- Muu
-
- Nimi
-
- Kasutatav otsingustring
Päringu asendamiseks kasuta “%s”. Näiteks \nhttps://www.google.com/search?q=%s
@@ -1702,14 +1744,14 @@
Olgu, sain aru
Otseteed
-
- Nimi
+
+ Nimi
Otsetee nimi
-
- Olgu
-
- Loobu
+
+ Olgu
+
+ Loobu
Sätted
@@ -1738,7 +1780,7 @@
Automaatne sulgemine on lubatud
-
+
Määra Firefox automaatselt avama linke, e-posti ja sõnumeid.
@@ -1773,4 +1815,6 @@
Mine sätetesse
+
+
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index fe73b76fc..e0e4cb55e 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -211,6 +211,8 @@
Sinkronizatu berriro
Bilatu orrian
+
+ Itzuli orria
Gorde bilduman
@@ -1334,6 +1336,11 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du.
Itxi fitxa pribatuak
+
+
+ Itxi fitxa pribatuak?
+ Sakatu edo pasatu zeharka jakinarazpen hau fitxa pribatuak ixteko.
+
Marketina
@@ -2274,17 +2281,17 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du.
Argibide gehiago
- "Bai, probatu" aukeratuta, Mozillaren %1$s(r)en %2$s eta %3$s onartzen dituzu.
+ "Bai, probatu" aukeratuta, Mozillaren %1$s(r)en %2$s eta %3$s onartzen dituzu.
- "Bai, probatu" hautatuz gero, ondorengoa onartzen duzu %1$s(e)tik:
+ "Bai, probatu" hautatuz gero, ondorengoa onartzen duzu %1$s(e)tik:
- pribatutasun-politika
+ pribatutasun-politika
- Pribatutasun-politika
+ Pribatutasun-politika
- erabilera-baldintzak
+ erabilera-baldintzak
- Erabilera-baldintzak
+ Erabilera-baldintzak
Bai, probatu
@@ -2341,6 +2348,11 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du.
%s, Goiburua
+
+ Loturak
+
+ Loturak erabilgarri
+
@@ -2358,13 +2370,26 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du.
Itzuli hona
Une honetan ez
+
+ Eginda
Itzuli
+
+ Saiatu berriro
Itzultzen
Itzulpena burutzen
+
+ Arazo bat gertatu da itzultzean. Saiatu berriro mesedez.
+
+ Ezin dira hizkuntzak kargatu. Egiaztatu zure Interneterako konexioa eta saiatu berriro.
+
+ Barkatu, %1$s ez dugu onartzen oraindik.
+
+ Argibide gehiago
+
Itzulpenen aukerak
@@ -2496,8 +2521,12 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du.
Utzi
+
+ Arazketa-tresnak
+
+ Nabigatu atzera
- Fitxen tresnak
+ Fitxen tresnak
Fitxa kopurua
@@ -2508,4 +2537,14 @@ zure pasahitzak, laster-markak eta gehiago zifratzen du.
Pribatua
Guztira
+
+ Fitxak sortzeko tresna
+
+ Sortu beharreko fitxa kopurua
+
+ Gehitu fitxa aktiboetara
+
+ Gehitu fitxa inaktiboetara
+
+ Gehitu fitxa pribatuetara
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 33519fbb0..dd93a180e 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -247,6 +247,7 @@
Mukauta kotisivua
+
Aloitusnäkymä
@@ -254,6 +255,9 @@
Tyhjennä selaushistoria
+
+ Käännä sivu
+
Valittu kieli
@@ -265,8 +269,6 @@
Skannaa
-
- Hakukone
Hakukoneasetukset
@@ -322,23 +324,28 @@
- Ilmoitukset auttavat sinua tekemään enemmän %silla
+ Ilmoitukset auttavat sinua tekemään enemmän %silla
- Synkronoi välilehdet laitteiden välillä, hallitse latauksia, hanki vinkkejä %sin yksityisyyden suojan hyödyntämiseen liittyen ja paljon muuta.
+ Synkronoi välilehdet laitteiden välillä, hallitse latauksia, hanki vinkkejä %sin yksityisyyden suojan hyödyntämiseen liittyen ja paljon muuta.
- Jatka
+ Jatka
- Ei nyt
+ Ei nyt
+
+ Firefoxin tietosuojakäytäntö
+
Turvaamisesi on tärkeää meille
- Voittoa tavoittelemattoman tahon tukema selaimemme auttaa estämään yrityksiä seuraamasta sinua salaa verkossa.\n\nLisätietoja on tietosuojakäytännössämme.
+ Voittoa tavoittelemattoman tahon tukema selaimemme auttaa estämään yrityksiä seuraamasta sinua salaa verkossa.
+
+ Voittoa tavoittelemattoman tahon tukema selaimemme auttaa estämään yrityksiä seuraamasta sinua salaa verkossa.\n\nLisätietoja on tietosuojakäytännössämme.
- tietosuojaselosteessamme
+ tietosuojaselosteessamme
Aseta oletusselaimeksi
@@ -443,21 +450,11 @@
Vain HTTPS -tila
-
- Evästeilmoitusten vähennys
Evästeilmoitusten esto
Evästeilmoitusten esto yksityisessä selaamisessa
-
- Vähennä evästeisiin liittyviä ilmoituksia
-
- Pois
-
- Päällä
-
-
- %1$s yrittää hylätä automaattisesti evästeilmoituksissa olevat evästepyynnöt.
+
Ei käytössä tällä sivustolla
@@ -475,35 +472,16 @@
Sivusto ei ole tuettu tällä hetkellä
- Haluatko ottaa evästeilmoitusten vähennystoiminnon käyttöön sivustolla %1$s?
-
Haluatko ottaa evästeilmoitusten eston käyttöön sivustolla %1$s?
- Haluatko poistaa evästeilmoitusten vähennystoiminnon käytöstä sivustolla %1$s?
-
Haluatko poistaa evästeilmoitusten eston käytöstä sivustolla %1$s?
%1$s ei voi automaattisesti hylätä tämän sivuston evästepyyntöjä. Voit lähettää pyynnön ja pyytää tukea tälle sivustolle tulevaisuudessa.
-
- %1$s poistaa tämän sivuston evästeet ja päivittää sivun. Kaikkien evästeiden poistaminen saattaa kirjata sinut ulos tai tyhjentää ostoskorit.
Poista käytöstä ja %1$s poistaa evästeet sekä lataa tämän sivuston uudelleen. Tämä voi kirjata sinut ulos tai tyhjentää ostoskorin.
- %1$s yrittää hylätä kaikki evästepyynnöt automaattisesti tuetuilla sivustoilla.
-
Ota käyttöön ja %1$s yrittää automaattisesti hylätä evästeilmoitukset tällä sivustolla.
-
- Saako %1$s vastata evästepyyntöihin kielteisesti?
-
- %1$s voi automaattisesti vastata moniin evästepyyntöihin kielteisesti.
-
- Ei nyt
-
- Näet vähemmän evästepyyntöjä
-
-
- Salli
%1$s kieltäytyi juuri evästeistä
@@ -721,6 +699,8 @@
Kirjanmerkit
Kirjautumistiedot
+
+ Salasanat
Avoimet välilehdet
@@ -747,6 +727,8 @@
Luottokortit
+
+ Maksutavat
Osoitteet
@@ -1291,8 +1273,6 @@
Hylkää
- Tulostaminen ei onnistu
-
Sivun tulostaminen ei onnistunut
Tulosta
@@ -1702,8 +1682,12 @@
Käyttäjätunnukset ja salasanat
+
+ Salasanat
Tallenna käyttäjätunnukset ja salasanat
+
+ Tallenna salasanat
Kysy tallennusta
@@ -1721,26 +1705,45 @@
Lisää kirjautumistieto
+
+ Lisää salasana
+
Synkronoi kirjautumistiedot
+
+ Synkronoi salasanat
Synkronoi kirjautumistiedot laitteiden välillä
+
+ Synkronoi salasanat eri laitteiden välillä
Tallennetut kirjautumistiedot
+
+ Tallennetut salasanat
%siin tallentamasi tai synkronoimasi kirjautumistiedot näkyvät täällä.
+
+ %siin tallentamasi tai synkronoimasi salasanat näkyvät tässä. Kaikki tallentamasi salasanat ovat salattuja.
Lue lisää Syncista.
+
+ Lisätietoja synkronoinnista
Poikkeukset
Käyttäjätunnukset ja salanat, joita ei tallenneta, näytetään täällä.
+
+ %s ei tallenna tässä lueteltujen sivustojen salasanoja.
Käyttäjätunnuksia ja salasanoja ei tallenneta näille sivustoille.
+
+ %s ei tallenna näiden sivustojen salasanoja.
Poista kaikki poikkeukset
Etsi kirjautumistiedoista
+
+ Etsi salasanoja
Sivusto
@@ -1769,10 +1772,16 @@
Piilota salasana
Avaa lukitus nähdäksesi tallennetut kirjautumistiedot
+
+ Avaa lukitus nähdäksesi tallennetut salasanat
Suojaa käyttäjätunnuksesi ja salasanasi
+
+ Suojaa tallennetut salasanat
Aseta laitteen avaukseen tarkoitettu kuvio, PIN-koodi tai salasana suojataksesi tallennetut kirjautumistiedot ja salasanat siltä varalta, että joku saa laitteesi haltuunsa.
+
+ Määritä laitteen lukituskuvio, PIN-koodi tai salasana suojataksesi tallennettuja salasanojasi, jos laitteesi on jollain toisella.
Myöhemmin
@@ -1792,6 +1801,9 @@
Järjestä kirjautumistietojen valikko
+
+ Salasanojen järjestysvalikko
+
Automaattinen täyttö
@@ -1799,10 +1811,16 @@
Osoitteet
Luottokortit
+
+ Maksutavat
Tallenna ja täytä kortit automaattisesti
+
+ Tallenna ja täytä maksutavat
Tiedot on salattu
+
+ %s salaa kaikki tallentamasi maksutavat
Synkronoi kortit laitteiden välillä
@@ -1810,17 +1828,26 @@
Lisää luottokortti
+
+ Lisää kortti
Hallinnoi tallennettuja kortteja
+
+ Hallitse kortteja
Lisää osoite
Hallitse osoitteita
Tallenna ja täytä osoitteet automaattisesti
+
+ Tallenna ja täytä osoitteet
Sisällytä tiedot kuten numerot, sähköpostiosoitteet ja toimitusosoitteet
+
+ Sisältää puhelinnumerot ja sähköpostiosoitteet
+
Lisää kortti
@@ -1841,6 +1868,8 @@
Poista kortti
Haluatko varmasti poistaa tämän luottokortin?
+
+ Poistetaanko kortti?
Poista
@@ -1856,14 +1885,22 @@
Kirjoita kelvollinen luottokortin numero
+
+ Anna kelvollinen kortin numero
Täytä tämä kenttä
+
+ Lisää nimi
Avaa lukitus nähdäksesi tallennetut kortit
Suojaa luottokorttisi
+
+ Suojaa tallennetut maksutavat
Aseta laitteen avaukseen tarkoitettu kuvio, PIN-koodi tai salasana suojataksesi tallennetut luottokorttitiedot siltä varalta, että joku saa laitteesi haltuunsa.
+
+ Määritä laitteen lukituskuvio, PIN-koodi tai salasana suojataksesi tallennettuja maksutapojasi, jos laitteesi on jollain toisella.
Aseta nyt
@@ -1874,6 +1911,8 @@
Avaa lukitus käyttääksesi tallennettuja luottokorttitietoja
+
+ Avaa lukitus käyttääksesi tallennettuja maksutapoja
Lisää osoite
@@ -1911,6 +1950,8 @@
Haluatko varmasti poistaa tämän osoitteen?
+
+ Poistetaanko tämä osoite?
Poista
@@ -2010,30 +2051,52 @@
Muokkaa
Haluatko varmasti poistaa tämän kirjautumistiedon?
+
+ Haluatko varmasti poistaa tämän salasanan?
Poista
Peruuta
Kirjautumistietojen valinnat
+
+ Salasanojen asetukset
Muokattava tekstikenttä kirjautumisen verkkosivua varten.
+
+ Verkkosivuston muokattava tekstikenttä.
Muokattava tekstikenttä kirjautumisen käyttäjätunnusta varten.
+
+ Käyttäjätunnuksen muokattava tekstikenttä.
Muokattava tekstikenttä kirjautumisen salasanaa varten.
+
+ Salasanan muokattava tekstikenttä.
Tallenna muutokset kirjautumistietoihin.
+
+ Tallenna muutokset.
Muokkaa
+
+ Muokkaa salasanaa
Lisää uusi kirjautumistieto
+
+ Lisää salasana
Salasana vaaditaan
+
+ Kirjoita salasana
Käyttäjätunnus vaaditaan
+
+ Kirjoita käyttäjätunnus
Isäntänimi vaaditaan
+
+ Kirjoita verkko-osoite
Äänihaku
@@ -2130,6 +2193,9 @@
%s-haku
+
+ Vaihda oletusselain
+
Aseta verkkosivustojen, sähköpostien ja viestien linkit avautumaan automaattisesti Firefoxissa.
@@ -2271,8 +2337,14 @@
Tarkista arvostelun laatu, jos haluat tietää, ovatko tämän tuotteen arvostelut luotettavia. Se kestää vain noin 60 sekuntia.
Tarkista arvostelun laatu
+
+ Kokeile luotettavaa tuotearvosteluopastamme
Lue lisää
+
+ Tietosuojakäytäntö
+
+ Käyttöehdot
Kyllä, kokeile
@@ -2361,6 +2433,8 @@
Käännös käynnissä
+
+ Valitse kieli
Käännettäessä ilmeni ongelma. Yritä uudelleen.
@@ -2382,6 +2456,10 @@
Älä koskaan käännä %1$s
Älä koskaan käännä sivustoa
+
+ Ohittaa kaikki muut asetukset
+
+ Ohittaa käännöstarjoukset
Käännösasetukset
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 2b7597602..0ca0df558 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -247,6 +247,7 @@
Personnaliser la page d’accueil
+
Écran d’accueil
@@ -254,6 +255,9 @@
Effacer l’historique de navigation
+
+ Traduire la page
+
Langue sélectionnée
@@ -265,8 +269,6 @@
Scanner
-
- Moteur de recherche
Paramètres du moteur de recherche
@@ -322,23 +324,28 @@
- Les notifications vous aident à en faire plus avec %s
+ Les notifications vous aident à en faire plus avec %s
- Synchronisez les onglets entre vos appareils, gérez les téléchargements, obtenez des conseils pour tirer le meilleur parti de la protection de la vie privée de %s, et bien plus.
+ Synchronisez les onglets entre vos appareils, gérez les téléchargements, obtenez des conseils pour tirer le meilleur parti de la protection de la vie privée de %s, et bien plus.
- Continuer
+ Continuer
- Plus tard
+ Plus tard
+
+ Politique de confidentialité de Firefox
+
Votre protection compte pour nous
- Notre navigateur soutenu par une organisation à but non lucratif empêche les entreprises de vous suivre secrètement sur le Web.\n\nPour en savoir plus, consultez notre politique de confidentialité.
+ Notre navigateur soutenu par une organisation à but non lucratif empêche les entreprises de vous suivre secrètement sur le Web.
+
+ Notre navigateur soutenu par une organisation à but non lucratif empêche les entreprises de vous suivre secrètement sur le Web.\n\nPour en savoir plus, consultez notre politique de confidentialité.
- politique de confidentialité
+ politique de confidentialité
Définir comme navigateur par défaut
@@ -443,21 +450,11 @@
Mode HTTPS uniquement
-
- Réduction des bannières de cookies
Bloqueur de bannières de cookies
Bloqueur de bannières de cookies en navigation privée
-
- Réduire les bannières de cookies
-
- Désactivée
-
- Activée
-
-
- %1$s essaie automatiquement de refuser les demandes de dépôt de cookies quand une bannière de cookies s’affiche.
+
Désactivée pour ce site
@@ -475,35 +472,16 @@
Site actuellement non pris en charge
- Activer la réduction des bannières de cookies pour %1$s ?
-
Activer le bloqueur de bannières de cookies pour %1$s ?
- Désactiver la réduction des bannières de cookies pour %1$s ?
-
Désactiver le bloqueur de bannières de cookies pour %1$s ?
%1$s ne peut pas refuser automatiquement les demandes de dépôt de cookies sur ce site. Vous pouvez envoyer une demande afin que ce site soit pris en charge ultérieurement.
-
- %1$s effacera les cookies de ce site et actualisera la page. La suppression de tous les cookies peut vous déconnecter ou vider les paniers d’achats.
Désactivez-le et %1$s effacera les cookies puis rechargera le site. Ces actions peuvent vous déconnecter ou vider votre panier.
- %1$s peut essayer de refuser automatiquement les demandes de dépôt de cookies sur les sites compatibles.
-
Activez-le et %1$s tentera de refuser automatiquement les bannières de cookies sur ce site.
-
- Autoriser %1$s à refuser les bannières de cookies ?
-
- %1$s peut refuser automatiquement les demandes de dépôt de cookies.
-
- Plus tard
-
- Vous verrez moins de demandes de cookies
-
-
- Autoriser
%1$s a refusé les cookies pour vous
@@ -720,6 +698,8 @@
Marque-pages
Identifiants
+
+ Mots de passe
Onglets ouverts
@@ -746,6 +726,8 @@
Cartes bancaires
+
+ Moyens de paiement
Adresses
@@ -1304,8 +1286,6 @@
Fermer
- Impression impossible
-
Impression de la page impossible
Imprimer
@@ -1355,6 +1335,8 @@
Fermer les onglets privés ?
+ Appuyez sur cette notification ou faites-la glisser pour fermer les onglets privés.
+
Marketing
@@ -1714,8 +1696,12 @@
Identifiants et mots de passe
+
+ Mots de passe
Enregistrer les identifiants et les mots de passe
+
+ Enregistrer les mots de passe
Demander pour enregistrer
@@ -1733,26 +1719,45 @@
Ajouter un identifiant
+
+ Ajouter un mot de passe
+
Synchroniser les identifiants
+
+ Synchroniser les mots de passe
Synchroniser les identifiants entre vos appareils
+
+ Synchronisez les mots de passe entre vos appareils
Identifiants enregistrés
+
+ Mots de passe enregistrés
Les identifiants que vous enregistrez ou synchronisez avec %s s’afficheront ici.
+
+ Les mots de passe que vous enregistrez ou synchronisez avec %s seront répertoriés ici. Tous les mots de passe que vous enregistrez sont chiffrés.
En savoir plus sur Sync.
+
+ En savoir plus sur la synchronisation
Exceptions
Les identifiants et les mots de passe qui ne sont pas enregistrés seront affichés ici.
+
+ %s n’enregistrera pas les mots de passe pour les sites listés ici.
Les identifiants et les mots de passe ne seront pas enregistrés pour ces sites.
+
+ %s n’enregistrera pas les mots de passe pour ces sites.
Supprimer toutes les exceptions
Rechercher des identifiants
+
+ Rechercher des mots de passe
Site
@@ -1781,10 +1786,16 @@
Masquer le mot de passe
Déverrouillez pour afficher vos identifiants enregistrés
+
+ Déverrouillez pour afficher vos mots de passe enregistrés
Protégez vos identifiants et mots de passe
+
+ Sécurisez les mots de passe enregistrés
Configurez un schéma de verrouillage, un code PIN ou un mot de passe pour protéger vos identifiants de connexion et mots de passe enregistrés pour le cas où quelqu’un accède à votre appareil.
+
+ Configurez un schéma de verrouillage, un code PIN ou un mot de passe pour protéger vos mots de passe enregistrés si jamais quelqu’un accède à votre appareil.
Plus tard
@@ -1803,6 +1814,9 @@
Menu de tri des identifiants
+
+ Menu de tri des mots de passe
+
Remplissage automatique
@@ -1810,10 +1824,16 @@
Adresses
Cartes bancaires
+
+ Moyens de paiement
Enregistrer et remplir automatiquement les cartes
+
+ Enregistrer et renseigner les moyens de paiement
Les données sont chiffrées
+
+ %s chiffre tous les moyens de paiement que vous enregistrez
Synchroniser les cartes entre vos appareils
@@ -1821,17 +1841,26 @@
Ajouter une carte bancaire
+
+ Ajouter une carte
Gérer les cartes enregistrées
+
+ Gérer les cartes
Ajouter une adresse
Gérer les adresses
Enregistrer et remplir automatiquement les adresses
+
+ Enregistrer et remplir automatiquement les adresses
Cela comprend des informations telles que des numéros, des adresses e-mail et des adresses d’expédition
+
+ Y compris les numéros de téléphone et les adresses e-mail
+
Ajouter une carte
@@ -1852,6 +1881,8 @@
Supprimer la carte
Voulez-vous vraiment supprimer cette carte bancaire ?
+
+ Supprimer la carte ?
Supprimer
@@ -1867,14 +1898,22 @@
Veuillez saisir un numéro de carte bancaire valide
+
+ Saisissez un numéro de carte valide
Veuillez compléter ce champ
+
+ Ajouter un nom
Déverrouillez pour afficher vos cartes enregistrées
Protégez vos cartes bancaires
+
+ Sécurisez vos moyens de paiement enregistrés
Configurez un schéma de verrouillage, un code PIN ou un mot de passe pour protéger vos cartes bancaires enregistrées si jamais quelqu’un accède à votre appareil.
+
+ Configurez un schéma de verrouillage, un code PIN ou un mot de passe pour protéger vos moyens de paiement enregistrés si jamais quelqu’un accède à votre appareil.
Configurer maintenant
@@ -1884,6 +1923,8 @@
Déverrouillez pour utiliser les informations de cartes bancaires enregistrées
+
+ Déverrouillez pour utiliser des moyens de paiement enregistrés
Ajouter une adresse
@@ -1921,6 +1962,8 @@
Voulez-vous vraiment supprimer cette adresse ?
+
+ Supprimer cette adresse ?
Supprimer
@@ -2019,30 +2062,52 @@
Modifier
Voulez-vous vraiment supprimer cet identifiant ?
+
+ Voulez-vous vraiment supprimer ce mot de passe ?
Supprimer
Annuler
Options de l’identifiant
+
+ Options de mot de passe
Le champ de texte modifiable pour l’adresse web de l’identifiant.
+
+ Le champ de texte modifiable pour l’adresse du site web.
Le champ de texte modifiable pour le nom d’utilisateur de l’identifiant.
+
+ Le champ de texte modifiable pour le nom d’utilisateur.
Le champ de texte modifiable pour le mot de passe de l’identifiant.
+
+ Le champ de texte modifiable pour le mot de passe.
Enregistrez les modifications de l’identifiant.
+
+ Enregistrer les modifications.
Modifier
+
+ Modifier le mot de passe
Ajouter un nouvel identifiant
+
+ Ajouter un mot de passe
Mot de passe requis
+
+ Saisissez un mot de passe
Le nom d’utilisateur doit être renseigné.
+
+ Saisissez un nom d’utilisateur
Le nom d’hôte est requis
+
+ Saisissez une adresse web
Recherche vocale
@@ -2139,6 +2204,9 @@
Recherche %s
+
+ Changez de navigateur par défaut
+
Faites en sorte que les liens des sites web, des e-mails et des messages s’ouvrent automatiquement dans Firefox.
@@ -2212,8 +2280,6 @@
points essentiels proviennent des avis laissés sur %s au cours des 80 derniers jours que nous estimons fiables.]]>
En savoir plus sur %s.
-
- la façon dont %s par Mozilla détermine la qualité d’un avis
la façon dont %s détermine la qualité d’un avis
@@ -2399,6 +2465,8 @@
Traduction en cours
+
+ Choisissez une langue
Un problème s’est produit lors de la traduction. Veuillez réessayer.
@@ -2420,6 +2488,10 @@
Ne jamais traduire les pages en %1$s
Ne jamais traduire ce site
+
+ Remplace tous les autres paramètres
+
+ Remplace les propositions de traduction
Paramètres de traduction
@@ -2542,6 +2614,8 @@
Outils de débogage
+
+ Revenir
Outils d’onglets
diff --git a/app/src/main/res/values-fur/strings.xml b/app/src/main/res/values-fur/strings.xml
index c51838da3..1360e9100 100644
--- a/app/src/main/res/values-fur/strings.xml
+++ b/app/src/main/res/values-fur/strings.xml
@@ -242,6 +242,7 @@
Modifiche
Personalize pagjine iniziâl
+
Schermade principâl
@@ -249,6 +250,9 @@
Scancele la cronologjie di navigazion
+
+ Tradûs pagjine
+
Lenghe selezionade
@@ -260,8 +264,6 @@
Scansione
-
- Motôr di ricercje
Impostazions motôr di ricercje
@@ -313,24 +315,29 @@
- Lis notifichis ti judin a jessi plui produtîf cun %s
+ Lis notifichis ti judin a jessi plui produtîf cun %s
- Sincronize lis tôs schedis tra i dispositîfs, gjestìs i discjariaments, oten conseis par sfrutâ miôr che si pues la protezion de riservatece di %s, e tant altri.
+ Sincronize lis tôs schedis tra i dispositîfs, gjestìs i discjariaments, oten conseis par sfrutâ miôr che si pues la protezion de riservatece di %s, e tant altri.
- Continue
+ Continue
- No cumò
+ No cumò
+
+ Informative su la riservatece di Firefox
+
Nus plâs tignîti di cont
- Il nestri navigadôr, supuartât di une organizazion cence fins di vuadagn, ti jude a blocâ in automatic lis societâts che, di scuindon, a cirin di stâti daûr a ce che tu fasis in rêt.\n\nScuvierç di plui te nestre informative su la riservatece.
+ Il nestri navigadôr, supuartât di une organizazion cence fins di vuadagn, al bloche in automatic lis societâts che, di scuindon, a cirin di stâti daûr tes tôs ativitâts ator pal web.
+
+ Il nestri navigadôr, supuartât di une organizazion cence fins di vuadagn, ti jude a blocâ in automatic lis societâts che, di scuindon, a cirin di stâti daûr a ce che tu fasis in rêt.\n\nScuvierç di plui te nestre informative su la riservatece.
- informative su la riservatece
+ informative su la riservatece
Met come navigadôr predefinît
@@ -434,22 +441,12 @@
Modalitât dome-HTTPS
-
- Riduzion strissons pai cookies
Bloc strissons pai cookies
Bloc strissons pai cookies te navigazion privade
-
- Ridûs i strissons pai cookies
-
- Disativât
-
- Ativât
-
- %1$s al cîr in automatic di refudâ lis richiestis dai cookies sui strissons dai cookies.
Disative par chest sît
@@ -467,35 +464,16 @@
Sît pal moment no supuartât
- Ativâ la riduzion strissons dai cookies par %1$s?
-
Ativâ il bloc strissons pai cookies in %1$s?
- Disativâ la riduzion strissons dai cookies par %1$s?
-
Disativâ il bloc strissons pai cookies in %1$s?
%1$s nol pues refudâ in automatic lis richiestis dai cookies su chest sît. Tu puedis inviâ une richieste par supuartâ un doman chest sît.
-
- %1$s al netarà vie i cookies di chest sît e al inzornarà la pagjine. Al è pussibil che netant vie ducj i cookies tu vegnis disconetût dal sît opûr che i carei des spesis a sedin disvuedâts.
Dopo la disativazion, %1$s al netarà vie i cookies e al tornarà a cjariâ il sît. Cheste operazion e podarès fâti disconeti dal sît o disvuedâ i carei pes compris tal sît.
- %1$s al cîr di refudâ in automatic dutis lis richiestis dai cookies sui sîts supuartâts.
-
Ativilu e %1$s al cirarà di refudâ in automatic ducj i strissons dai cookies su chest sît.
-
- Permeti a %1$s di refudâ i strissons dai cookies?
-
- %1$s al pues refudâ in automatic tantis richiestis dai strissons dai cookies.
-
- No cumò
-
- Tu viodarâs mancul richiestis di cookies
-
-
- Permet
%1$s al à a pene refudât i cookies par te
@@ -719,6 +697,8 @@
Segnelibris
Credenziâls
+
+ Passwords
Schedis viertis
@@ -743,6 +723,8 @@
%1$s su %2$s %3$s
Cjartis di credit
+
+ Metodis di paiament
Recapits
@@ -1285,8 +1267,6 @@
Siere
- Impussibil stampâ
-
Impussibil stampâ cheste pagjine
Stampe
@@ -1689,8 +1669,12 @@
Credenziâls e passwords
+
+ Passwords
Salve credenziâls e passwords
+
+ Salve passwords
Domande prime di salvâ
@@ -1706,27 +1690,47 @@
Zonte credenziâl
+
+ Zonte password
+
Sincronize lis credenziâls
+
+ Sincronize passwords
Sincronize lis credenziâls tra dispositîfs
+
+ Sincronize passwords tra i tiei dispositîfs
Credenziâls salvadis
+
+ Passwords salvadis
Lis credenziâls che tu salvis o sincronizis su %s a vignaran fûr achì.
+
+ Lis passwords salvadis o sincronizadis su %s a vignaran listadis achì. Dutis lis passwords che tu salvis a vegnin cifradis.
+
Plui informazions su Sync.
+
+ Plui informazions su la sincronizazion
Ecezions
Lis credenziâls e lis passwords che no tu âs salvât a vignaran fûr achì.
+
+ %s nol salvarà lis passwords pai sîts listâts achì.
Lis credenziâls e lis passwords no vignaran salvadis par chescj sîts.
+
+ %s nol salvarà lis passwords par chescj sîts.
Elimine dutis lis ecezions
Cîr credenziâls
+
+ Cîr tes passwords
Sît
@@ -1755,10 +1759,16 @@
Plate password
Sbloche par visualizâ lis credenziâls salvadis
+
+ Sbloche par viodi lis passwords salvadis
Protêç lis tôs credenziâls di acès
+
+ Protêç lis passwords salvadis
Configure une secuence di bloc, PIN o password par protezi lis tôs credenziâls e lis passwords salvadis, cussì che se cualchidun altri al varà il to dispositîf nol rivarà a doprâlis.
+
+ Configure une secuence di bloc, PIN o password par protezi lis passwords salvadis, cussì che se cualchidun altri al varà il to dispositîf nol rivarà a doprâlis.
Plui indenant
@@ -1776,6 +1786,9 @@
Ordene il menù des credenziâls
+
+ Menù par ordenâ lis passwords
+
Compilazion automatiche
@@ -1783,28 +1796,43 @@
Recapits
Cjartis di credit
+
+ Metodis di paiament
Salve e compile in automatic lis cjartis
+
+ Salve e compile i metodis di paiament
I dâts a son cifrâts
+
+ %s al cifre ducj i metodis di paiaments salvâts
Sincronize lis cjartis tra plui dispositîfs
Sincronize cjartis di credit
Zonte cjarte di credit
+
+ Zonte cjarte
Gjestìs cjartis salvadis
+
+ Gjestìs cjartis
Zonte recapit
Gjestìs recapits
Salve e compile in automatic i recapits
+
+ Salve e compile direzions
Includi informazions come numars, e-mail e recapits di spedizion
+
+ Inclût numars di telefon e direzions e-mail
+
Zonte cjarte
@@ -1825,6 +1853,8 @@
Elimine cjarte
Eliminâ pardabon cheste cjarte di credit?
+
+ Eliminâ la cjarte?
Elimine
@@ -1837,15 +1867,23 @@
Cjartis salvadis
Inserìs un numar di cjarte di credit valit
+
+ Inserìs un numar di cjarte valit
Compile chest cjamp
+
+ Zonte un non
Sbloche par visualizâ lis cjartis di credit salvadis
Protêç lis tôs cjartis di credit
+
+ Protêç i metodis di paiament salvâts
Configure une secuence di bloc, PIN o password par protezi lis tôs cjartis di credit salvadis, cussì che se cualchidun altri al varà il to dispositîf nol rivarà a doprâlis.
+
+ Configure une secuence di bloc, PIN o password par protezi i tiei metodis di paiament salvâts, cussì che se cualchidun altri al varà il to dispositîf nol rivarà a doprâju.
Configure cumò
@@ -1854,6 +1892,8 @@
Sbloche il dispositîf
Sbloche par doprâ lis informazions des cjartis di credit memorizadis
+
+ Sbloche par doprâ i metodis di paiament
Zonte recapit
@@ -1890,6 +1930,8 @@
Elimine recapit
Eliminâ pardabon chest recapit?
+
+ Eliminâ cheste direzion?
Elimine
@@ -1988,30 +2030,52 @@
Modifiche
Eliminâ pardabon cheste credenziâl?
+
+ Eliminâ pardabon cheste password?
Elimine
Anule
Opzions credenziâls
+
+ Opzions password
Il cjamp di test modificabil pe direzion web de credenziâl.
+
+ Il cjamp di test che si pues modificâ pe direzion dal sît web.
Il cjamp di test modificabil pal non utent de credenziâl.
+
+ Il cjamp di test che si pues modificâ pal non utent.
Il cjamp di test modificabil pe password de credenziâl.
+
+ Il cjamp di test che si pues modificâ pe password.
Salve lis modifichis ae credenziâl.
+
+ Salve modifichis.
Modifiche
+
+ Modifiche password
Zonte gnove credenziâl
+
+ Zonte password
Password necessarie
+
+ Inserìs une password
Non utent necessari
+
+ Inserìs un non utent
Non servidôr necessari
+
+ Inserìs une direzion web
Ricercje vocâl
@@ -2099,6 +2163,9 @@
Ricercje %s
+
+ Cambie il navigadôr predefinît
+
Configure i colegaments di sîts web, e-mails e messaçs in mût che a vegnin vierts in automatic cun Firefox.
@@ -2174,8 +2241,6 @@
in evidence a rivin des recensions su %s dai ultins 80 dîs che o ritignìn afidabilis.]]>
Scuvierç altris informazions su %s.
-
- cemût che %s di Mozilla al determine la cualitât des recensions
cemût che %s al determine la cualitât des recensions
@@ -2368,6 +2433,8 @@
Traduzion in cors
+
+ Sielç une lenghe
Al è vignût fûr un probleme tal tradusi. Torne prove.
@@ -2389,6 +2456,10 @@
No sta tradusi mai dal %1$s
No sta voltâ mai chest sît
+
+ Al sostituìs dutis lis altris impostazions
+
+ Al sostituìs la sielte par proponi la traduzion
Impostazions di traduzion
diff --git a/app/src/main/res/values-fy-rNL/strings.xml b/app/src/main/res/values-fy-rNL/strings.xml
index 9307c57c6..f6b4d6541 100644
--- a/app/src/main/res/values-fy-rNL/strings.xml
+++ b/app/src/main/res/values-fy-rNL/strings.xml
@@ -244,6 +244,7 @@
Startside oanpasse
+
Startskerm
@@ -251,6 +252,9 @@
Navigaasjeskiednis wiskje
+
+ Side oersette
+
Selektearre taal
@@ -262,8 +266,6 @@
Scanne
-
- Sykmasine
Ynstellingen sykmasine
@@ -319,23 +321,28 @@
- Meldingen helpe jo mear te dwaan mei %s
+ Meldingen helpe jo mear te dwaan mei %s
- Syngronisearje jo ljepblêden tusken apparaten, behear downloads, krij tips oer it optimaal benutten fan de privacybeskerming fan %s en mear.
+ Syngronisearje jo ljepblêden tusken apparaten, behear downloads, krij tips oer it optimaal benutten fan de privacybeskerming fan %s en mear.
- Trochgean
+ Trochgean
- No net
+ No net
+
+ Firefox-privacyferklearring
+
Wy hâlde jo graach feilich
- Us troch in non-profitorganisaasje stipe browser helpt foar te kommen dat bedriuwen jo stikem folgje op ynternet.\n\nMear ynfo yn ús privacyferklearring.
+ Us troch in non-profitorganisaasje browser helpt bedriuwen foar te kommen dat bedriuwen jo stikem folgje op ynternet.
+
+ Us troch in non-profitorganisaasje stipe browser helpt foar te kommen dat bedriuwen jo stikem folgje op ynternet.\n\nMear ynfo yn ús privacyferklearring.
- privacyferklearring
+ privacyferklearring
As standertbrowser ynstelle
@@ -438,21 +445,11 @@
Allinnich-HTTPS-modus
-
- Reduksje fan cookiebanners
Blokkearring fan cookiebanners
Blokkearring fan cookiebanners wylst priveenavigaasje
-
- Cookiebanners redusearje
-
- Ut
-
- Oan
-
-
- %1$s probearret automatysk cookiefersiken op cookiebanners te wegerjen.
+
Ut foar dizze website
@@ -470,35 +467,16 @@
Website wurdt op dit stuit net stipe
- Reduksje fan cookiebanners ynskeakelje foar %1$s?
-
Blokkearring fan cookiebanners ynskeakelje foar %1$s?
- Reduksje fan cookiebanners útskeakelje foar %1$s?
-
Blokkearring fan cookiebanners útskeakelje foar %1$s?
%1$s kin cookiefersiken op dizze website net automatysk wegerje. Jo kinne in oanfraach stjoere om dizze website yn de takomst te stypjen.
-
- %1$s wisket de cookies foar dizze website en fernijt de side. As alle cookies wiske wurde, wurde jo mooglik ôfmeld of wurde winkelweintsjes lege.
Skeakelje dit út en %1$s sil cookies wiskje en dizze website opnij lade. Dit kin jo ôfmelde of winkelweintsjes leegje.
- %1$s probearret alle cookiefersiken op stipe websites automatysk te wegerjen.
-
Skeakelje dit yn en %1$s sil probearje cookiebanners op dizze website automatysk te wegerjen.
-
- %1$s tastean om cookiebanners te wegerjen?
-
- %1$s kin in protte cookiebannerfersiken automatysk wegerje.
-
- No net
-
- Jo sille minder cookie-oanfragen sjen
-
-
- Tastean
%1$s hat sakrekt cookies foar jo wegere
@@ -715,6 +693,8 @@
Blêdwizers
Oanmeldingen
+
+ Wachtwurden
Iepen ljeplêden
@@ -741,6 +721,8 @@
Creditcards
+
+ Betellingsmetoaden
Adressen
@@ -1274,8 +1256,6 @@
Slute
- Kin net ôfdrukke
-
Kin dizze side net ôfdrukke
Ofdrukke
@@ -1679,8 +1659,12 @@
Oanmeldingen en wachtwurden
+
+ Wachtwurden
Oanmeldingen en wachtwurden bewarje
+
+ Wachtwurden bewarje
Freegje om te bewarjen
@@ -1697,26 +1681,46 @@
Oanmelding tafoegje
+
+ Wachtwurd tafoegje
+
Oanmeldingen syngronisearje
+
+ Wachtwurden syngronisearje
Oanmeldingen op apparaten syngronisearje
+
+ Wachtwurden syngronisearje tusken apparaten
Bewarre oanmeldingen
+
+ Bewarre wachtwurden
De oanmeldingen dy’t jo bewarje of syngronisearje mei %s wurde hjir toand.
+
+ De wachtwurden dy’t jo bewarje of syngronisearje mei %s sille hjir fermeld wurde. Alle wachtwurden dy’t jo bewarje binne fersifere.
+
Mear ynfo oer Sync.
+
+ Mear ynfo oer syngronisaasje
Utsûnderingen
Net-bewarre oanmeldingen en wachtwurden wurde hjir werjûn.
+
+ %s sil gjin wachtwurden foar de hjir fermelde websites bewarje.
Oanmeldingen en wachtwurden wurde foar dizze websites net bewarre.
+
+ %s sil gjin wachtwurden foar dizze websites bewarje.
Alle útsûnderingen fuortsmite
Oanmeldingen sykje
+
+ Wachtwurden sykje
Website
@@ -1745,10 +1749,16 @@
Wachtwurd ferstopje
Untskoattelje om jo bewarre oanmeldingen te besjen
+
+ Untskoattelje om jo bewarre wachtwurden te besjen
Befeiligje jo oanmeldingen en wachtwurden
+
+ Befeiligje jo bewarre wachtwurden
Stel in beskoattelingspatroan, pinkoade of wachtwurd foar jo apparaat yn om jo bewarre oanmeldingen en wachtwurden te beskermjen tsjin tagong as in oar jo apparaat hat.
+
+ Stel in beskoattelingspatroan, pinkoade of wachtwurd foar jo apparaat yn om jo bewarre wachtwurden te beskermjen tsjin tagong as in oar jo apparaat hat.
Letter
@@ -1767,6 +1777,9 @@
Menu Oanmeldingen sortearje
+
+ Wachtwurdmenu sortearje
+
Automatysk ynfolje
@@ -1774,10 +1787,16 @@
Adressen
Creditcards
+
+ Betellingsmetoaden
Kaarten bewarje en automatysk ynfolje
+
+ Betellingsmetoaden bewarje en ynfolje
Gegevens binne fersifere
+
+ %s fersiferet alle betellingsmetoaden dy’t jo bewarje
Kaarten syngronisearje tusken apparaten
@@ -1785,17 +1804,26 @@
Creditcard tafoegje
+
+ Kaart tafoegje
Bewarre kaarten beheare
+
+ Kaarten beheare
Adres tafoegje
Adressen beheare
Adressen bewarje en automatysk ynfolje
+
+ Adressen bewarje en ynfolje
Ynformaasje lykas nûmers, e-mail- en ferstjoeradressen tafoegje
+
+ Ynklusyf telefoannûmers en e-mailadressen
+
Kaart tafoegje
@@ -1817,6 +1845,8 @@
Kaart fuortsmite
Binne jo wis dat jo dizze creditcard fuortsmite wolle?
+
+ Kaart fuortsmite?
Fuortsmite
@@ -1832,15 +1862,23 @@
Fier in jildich creditkaartnûmer yn
+
+ Fier in jildich kaartnûmer yn
Folje dit fjild yn
+
+ Foegje in namme ta
Untskoattelje om jo bewarre kaarten te besjen
Befeiligje jo creditcards
+
+ Befeiligje jo bewarre betelmetoaden
Stel in beskoattelingspatroan, pinkoade of wachtwurd foar jo apparaat yn om jo bewarre creditcards te beskermjen tsjin tagong as in oar jo apparaat hat.
+
+ Stel in beskoattelingspatroan, pinkoade of wachtwurd foar jo apparaat yn om jo bewarre betellingsmetoaden te beskermjen tsjin tagong as in oar jo apparaat hat.
No ynstelle
@@ -1851,6 +1889,8 @@
Untskoattelje om bewarre creditkaartynformaasje te brûken
+
+ Untskoattelje om bewarre betellingsmetoaden te brûken
Adres tafoegje
@@ -1888,6 +1928,8 @@
Binne jo wis dat jo dit adres fuortsmite wolle?
+
+ Dit adres fuortsmite?
Fuortsmite
@@ -1986,30 +2028,52 @@
Bewurkje
Binne jo wis dat jo dizze oanmelding fuortsmite wolle?
+
+ Binne jo wis dat jo dit wachtwurd fuortsmite wolle?
Fuortsmite
Annulearje
Oanmeldopsjes
+
+ Wachtwurdopsjes
It bewurkbere tekstfjild foar it webadres fan de oanmelding.
+
+ It bewurkbere tekstfjild foar it websiteadres.
It bewurkbere tekstfjild foar de brûkersnamme fan de oanmelding.
+
+ It bewurkbere tekstfjild foar de brûkersnamme.
It bewurkbere tekstfjild foar it wachtwurd fan de oanmelding.
+
+ It bewurkbere tekstfjild foar it wachtwurd.
Wizigingen oan oanmelding bewarje.
+
+ Wizigingen bewarje.
Bewurkje
+
+ Wachtwurd bewurkje
Nije oanmelding tafoegje
+
+ Wachtwurd tafoegje
Wachtwurd fereaske
+
+ Folje in wachtwurd yn
Brûkersnamme fereaske
+
+ Folje in brûkersnamme yn
Hostnamme fereaske
+
+ Fier in websiteadres yn
Sprutsen sykopdracht
@@ -2181,8 +2245,6 @@ Dizze analyze sil jo allinnich helpe om de beoardielingskwaliteit te beoardielen
Hichtepunten binne ôfkomstich fan beoardielingen fan %s yn de ôfrûne 80 dagen dy’t neffens ús betrouber binne.]]>
Mear ynfo oer %s.
-
- hoe %s troch Mozilla de beoardielingskwaliteit bepaalt
hoe %s de beoardielingskwaliteit bepaalt
@@ -2368,6 +2430,8 @@ Dizze analyze sil jo allinnich helpe om de beoardielingskwaliteit te beoardielen
Oersetting wurdt útfierd
+
+ Kies in taal
Der is in probleem bard by it oersetten. Probearje it opnij.
@@ -2388,6 +2452,10 @@ Dizze analyze sil jo allinnich helpe om de beoardielingskwaliteit te beoardielen
%1$s nea oersette
Dizze website nea oersette
+
+ Oerskriuwt alle oare ynstellingen
+
+ Negearret oersetoanbiedingen
Oersetynstellingen
diff --git a/app/src/main/res/values-gn/strings.xml b/app/src/main/res/values-gn/strings.xml
index 36ffdb618..5d0da0318 100644
--- a/app/src/main/res/values-gn/strings.xml
+++ b/app/src/main/res/values-gn/strings.xml
@@ -330,13 +330,18 @@
Ani ko’ág̃a
+
+ Firefox marandu’i ñemigua
+
Rovy’ã eimére tekorosãme
- Ore kundahára ojeykekóva viru rehegua’ỹva oipytyvõ mba’apohaguasukuéra nde rapykuehóvo ñemihápe ñandutípe.\n\nEikuaavéta ore marandu’i ñemiguápe.
+ Ore kundahára oykeko atyguasu viru’ỹgua oipytyvõ omboykévo umi mba’apohaguasu ani nde rapykueho ñanduti rupive.
+
+ Ore kundahára ojeykekóva viru rehegua’ỹva oipytyvõ mba’apohaguasukuéra nde rapykuehóvo ñemihápe ñandutípe.\n\nEikuaavéta ore marandu’i ñemiguápe.
- marandu’i ñemiguáva
+ marandu’i ñemiguáva
Ejapo kundahára ijypyguávarõ
@@ -726,6 +731,8 @@
Techaukaha
Tembiapo ñepyrũ
+
+ Ñe’ẽñemi
Tendayke ijurujáva
@@ -752,6 +759,8 @@
Kuatia’atã ñemurã
+
+ Mba’éicha ehepyme’ẽta
Kundaharape
@@ -1720,8 +1729,12 @@
Tembiapo ñepyrũ ha ñe’ẽñemi
+
+ Ñe’ẽñemi
Eñongatu tembiapo ñepyrũ ha ñe’ẽñemi
+
+ Eñongatu ñe’ẽñemi
Ejerure ñemoneĩ eñongatu hag̃ua
@@ -1740,16 +1753,25 @@
Embojuaju jeike
+
+ Embojuaju ñe’ẽñemi
+
Embojuehe tembiapo ñepyrũ
+
+ Embojuehe ñe’ẽñemi
Embojuehe tembiapo ñepyrũ mba’e’oka pa’ũme
Tembiapo ñepyrũ ñongatupyre
+
+ Ñe’ẽñemi ñongatupyre
Ko’ápe ojehecháta tembiapo ñepyrũ eñongatu térã embojuehéva %s ndive.
Eikuaave Sync rehegua
+
+ Eikuaave ñembojuehe rehegua
Oĩ’ỹva
@@ -1760,6 +1782,8 @@
Emboguete opaite oĩ’ỹva
Eheka tembiapo ñepyrũ
+
+ Eheka ñe’ẽñemi
Tenda
@@ -1812,6 +1836,9 @@
Emoĩporã poravorã tembiapo ñepyrũgua
+
+ Emoĩporã ñe’ẽñemi poravorã
+
Myanyhẽ jehegui
@@ -1819,9 +1846,13 @@
Kundaharape
Kuatia’atã ñemurã
+
+ Mba’éicha ehepyme’ẽta
Eñongatu ha emyanyhẽ kuatia’atã
+
+ Eñongatu ha emyanyhẽ mba’éicha ehepyme’ẽta
Mba’ekuaarã ipapapypa
@@ -1831,8 +1862,12 @@
Embojuaju kuatia’atã ñemurã
+
+ Embojuaju kuatia’atã
Eñangareko kuatia’atã ñongatupyrére
+
+ Eñangareko kuatia’atã
Embojuaju kundaharape
@@ -1840,6 +1875,8 @@
Eñongatu ha emyanyhẽ kundaharape
+
+ Eñongatu ha emyanyhẽ kundaharape
Emoĩ marandu ipapapy, ñanduti veve ha kundaharape ñemondorãva
@@ -1863,6 +1900,8 @@
Emboguete kuatia’atã
¿Emboguesépa añetehápe ko kuatia’atã ñemurã?
+
+ ¿Emboguete kuatia’atã?
Mboguete
@@ -1880,6 +1919,8 @@
Ikatúpiko emyanyhẽ ko kora
+
+ Embojuaju téra
Embojuruja ehecha hag̃ua kuatia’atã ñongatupyre
@@ -2039,6 +2080,8 @@
Heja
Jeporavorã tembiapo ñepyrũgua
+
+ Ñe’ẽñemi jeporavorã
Moñe’ẽha kora isako’ikuaáava ñanduti kundaharape rembiapo ñepyrũme.
@@ -2047,14 +2090,24 @@
Moñe’ẽha kora isako’ikuaáava ñe’ẽñemi rembiapo ñepyrũme.
Eñongatu moambue tembiapo ñepyrũme.
+
+ Moambue ñongatu.
Mbosako’i
+
+ Embosako’i ñe’ẽñemi
Embojuaju terarenda pyahu
+
+ Embojuaju ñe’ẽñemi
Tekotevẽ ñe’ẽñemi
+
+ Emoinge ñe’ẽñemi
Poruhára réra jerurepyre
+
+ Ehai poruhára réra
Mohendahavusu réra jerurepyre
diff --git a/app/src/main/res/values-hsb/strings.xml b/app/src/main/res/values-hsb/strings.xml
index 0a156da5d..a43969e12 100644
--- a/app/src/main/res/values-hsb/strings.xml
+++ b/app/src/main/res/values-hsb/strings.xml
@@ -243,6 +243,7 @@
Startowu stronu přiměrić
+
Startowa wobrazowka
@@ -250,6 +251,9 @@
Přehladowansku historiju zhašeć
+
+ Stronu přełožić
+
Wubrana rěč
@@ -261,8 +265,6 @@
Skenować
-
- Pytawa
Nastajenja pytawy
@@ -316,23 +318,28 @@
- Zdźělenki wam pomhaja, wjace z %s činić
+ Zdźělenki wam pomhaja, wjace z %s činić
- Synchronizujće swoje rajtarki mjez gratami, rjadujće sćehnjenja, dóstańće pokiwy, zo byšće móhł škit priwatnosće %s najlěpje zwužitkować, a wjace.
+ Synchronizujće swoje rajtarki mjez gratami, rjadujće sćehnjenja, dóstańće pokiwy, zo byšće móhł škit priwatnosće %s najlěpje zwužitkować, a wjace.
- Dale
+ Dale
- Nic nětko
+ Nic nětko
+
+ Zdźělenka priwatnosće Firefox
+
Škitamy was rady
- Naš powšitkownosći wužitny wobhladowak tomu zadźěwa, zo předewzaća wam skradźu po interneće slěduja.\n\nDalše informacije w našej zdźělence priwatnosće.
+ Naš powšitkownosći wužitny wobhladowak zadźěwa tomu, zo předewzaća wam skradźu po interneće slěduja.
+
+ Naš powšitkownosći wužitny wobhladowak tomu zadźěwa, zo předewzaća wam skradźu po interneće slěduja.\n\nDalše informacije w našej zdźělence priwatnosće.
- zdźělenka priwatnosće
+ zdźělenka priwatnosće
Jako standardny wobhladowak nastajić
@@ -436,21 +443,11 @@
Modus Jenož-HTTPS
-
- Redukowanje plackowych chorhojow
Blokowak plackowych chorhojow
Blokowak plackowych chorhojow w priwatnym modusu
-
- Plackowe chorhoje redukować
-
-
- Wupinjeny
-
- Zapinjeny
-
- %1$s awtomatisce pospytuje, plackowe naprašowanja na plackowych chorhojach wotpokazać.
+
Za tute sydło znjemóžnjeny
@@ -468,35 +465,15 @@
Sydło so tuchwilu njepodpěruje
- Redukowanje plackowych chorhojow za %1$s zmóžnić?
-
Blokowak plackowych chorhojow za %1$s zmóžnić?
- Redukowanje plackowych chorhojow za %1$s znjemóžnić?
-
Blokowak plackowych chorhojow za %1$s znjemóžnić?
%1$s njemóže plackowe naprašowanja na tutym sydle awtomatisce wotpokazać. Móžeće próstwu wo podpěru tutoho sydła w přichodźe pósłać.
- %1$s placki sydła zhaša a budźe stronu aktualizować. Zhašenje wšěch plackow móže was přizjewić abo nakupowanske wozyčki wuprózdnić.
-
Při znjemóžnjenju %1$s placki zhaša a tute sydło znowa začita. To móže was wotzjewić abo nakupowanske koše wuprózdnić.
- %1$s pospytuje wšě plackowe naprašowanja na podpěranych sydłach awtomatisce wotpokazać.
-
Zmóžńće tute nastajenje a %1$s spyta, wšě plackowe chorhoje na tutym sydle awtomatisce wotpokazać.
-
- %1$s dowolić, plackowe chorhoje wotpokazać?
-
- %1$s móže wjele naprašowanjow wo plackowych chorhojach awtomatisce wotpokazać.
-
- Nic nětko
-
-
- Budźeće mjenje plackowych naprašowanjow widźeć
-
-
- Dowolić
%1$s je runje placki za was wotpokazał
@@ -714,6 +691,8 @@
Zapołožki
Přizjewjenja
+
+ Hesła
Wočinjene rajtarki
@@ -741,6 +720,8 @@
Kreditne karty
+
+ Płaćenske metody
Adresy
@@ -1283,8 +1264,6 @@
Zaćisnyć
- Njeda so ćišćeć
-
Tuta strona njeda so ćišćeć
Ćišćeć
@@ -1689,8 +1668,12 @@
Přizjewjenja a hesła
+
+ Hesła
Přizjewjenja a hesła składować
+
+ Hesła składować
Před składowanjom so prašeć
@@ -1708,26 +1691,45 @@
Přizjewjenje přidać
+
+ Hesło přidać
+
Přizjewjenja synchronizować
+
+ Hesła synchronizować
Přizjewjenja mjez gratami synchronizować
+
+ Hesła přez graty synchronizować
Składowane přizjewjenja
+
+ Składowane hesła
Přizjewjenja, kotrež składujeće abo z %s synchronizujeće, so tu pokazaja.
+
+ Hesła, kotrež składujeće abo z %s synchronizujeće, so tu nalistuja. Wšě hesła, kotrež składujeće, so zaklučuja.
Zhońće wjace wo Sync.
+
+ Zhońće wjace wo sync
Wuwzaća
Přizjewjenja a hesła, kotrež so njeskładuja, so tu pokazaja.
+
+ %s hesła za sydła njeskładuje, kotrež su tu nalistowane.
Přizjewjenja a hesła so za tute sydła njeskładuja.
+
+ %s hesła za tute sydła njeskładuje.
Wšě wuwzaća zhašeć
Přizjewjenja pytać
+
+ Hesła přepytać
Sydło
@@ -1756,10 +1758,16 @@
Hesło schować
Za zwobraznjenje wašich składowanych přizjewjenjow wotewrěć
+
+ Za zwobraznjenje wašich składowanych hesłow wotewrěć
Zawěsćće swoje přizjewjenja a hesła
+
+ Zawěsćće swoje składowane hesła
Nastajće gratowy zawrjenski muster, PIN abo hesło, zo byšće přistupej k swojim składowanym přizjewjenjam a hesłam zadźěwał, jeli něchtó druhi waš grat ma.
+
+ Nastajće gratowy zawrjenski muster, PIN abo hesło, zo byšće přistupej k swojim składowanym hesłam zadźěwał, jeli něchtó druhi waš grat ma.
Pozdźišo
@@ -1780,6 +1788,9 @@
Meni přizjewjenskich datow sortěrować
+
+ Meni „Hesła sortěrować“
+
Awtomatisce wupjelnić
@@ -1787,10 +1798,16 @@
Adresy
Kreditne karty
+
+ Płaćenske metody
Karty składować a awtomatisce wupjelnić
+
+ Płaćenske metody składować a wupjelnić
Daty su zaklučowane
+
+ %s wšě płaćenske metody zaklučuje, kotrež składujeće
Karty přez graty synchronizować
@@ -1798,17 +1815,26 @@
Kreditnu kartu přidać
+
+ Kartu přidać
Składowane karty rjadować
+
+ Karty rjadować
Adresu přidać
Adresy rjadować
Adresy składować a awtomatisce wupjelnić
+
+ Adresy składować a wupjelnić
Informacije kaž ličby, e-mejlowe a rozsyłanske adresy zapřijeć
+
+ Wobsahuje telefonowe čisła a e-mejlowe adresy
+
Kartu přidać
@@ -1829,6 +1855,8 @@
Kartu zhašeć
Chceće woprawdźe tutu kreditnu kartu zhašeć?
+
+ Kartu zhašeć?
Zhašeć
@@ -1844,14 +1872,22 @@
Prošu zapodajće płaćiwe čisło kreditneje karty
+
+ Zapodajće płaćiwe kartowe čisło
Prošu wupjelńće tute polo
+
+ Přidajće mjeno
Za zwobraznjenje wašich składowanych kartow wotewrěć
Waše kreditne karty zawěsćić
+
+ Zawěsćće swoje składowane płaćenske metody
Nastajće gratowy zawrjenski muster, PIN abo hesło, zo byšće přistupej k swojim składowanym kreditnym kartam zadźěwał, jeli něchtó druhi waš grat ma.
+
+ Nastajće gratowy zawrjenski muster, PIN abo hesło, zo byšće přistupej k swojim składowanym płácenskim metodam zadźěwał, jeli něchtó druhi waš grat ma.
Nětko konfigurować
@@ -1862,6 +1898,8 @@
Blokowanje zběhnyć, zo bychu so składowane informacije kreditneje karty wužiwali
+
+ Wotewrěć, zo byšće składowane płaćenske metody wužiwał
Adresu přidać
@@ -1899,6 +1937,8 @@
Chceće woprawdźe tutu adresu zhašeć?
+
+ Tutu adresu zhašeć?
Zhašeć
@@ -1998,30 +2038,52 @@
Wobdźěłać
Chceće woprawdźe tute přizjewjenje zhašeć?
+
+ Chceće woprawdźe tute hesło zhašeć?
Zhašeć
Přetorhnyć
Přizjewjenske nastajenja
+
+ Hesłowe nastajenja
Wobdźěłujomne tekstowe polo za webadresu přizjewjenja.
+
+ Wobdźěłujomne tekstowe polo za adresu websydła.
Wobdźěłujomne tekstowe polo za wužiwarske mjeno přizjewjenja.
+
+ Wobdźěłujomne tekstowe polo za wužiwarske mjeno.
Wobdźěłujomne tekstowe polo za hesło přizjewjenja.
+
+ Wobdźěłujomne tekstowe polo za hesło.
Změny přizjewjenja składować
+
+ Změny składować.
Wobdźěłać
+
+ Hesło wobdźěłać
Nowe přizjewjenje přidać
+
+ Hesło přidać
Hesło trěbne
+
+ Hesło zapodać
Wužiwarske mjeno trěbne
+
+ Wužiwarske mjeno zapodać
Hostmjeno trěbne
+
+ Webadresu zapodać
Rěčenske pytanje
@@ -2117,6 +2179,9 @@
Z %s pytać
+
+ Waš standardny wobhladowak změnić
+
Nastajće wotkazy z websydłow, mejlkow a powěsćow, zo bychu so awtomatisce we Firefox wočinili.
@@ -2191,8 +2256,6 @@ To budźe jenož pomhać, kwalitu pohódnoćenjow posudźić, nic kwalitu produk
Wjerški su z pohódnoćenjow %s w běhu poslednich 80 dnjow, kotrež mamy za spušćomne.]]>
Zhońće wjace wo %s.
-
- kak %s wot Mozilla kwalitu pohódnoćenja postaja
kak %s kwalitu pohódnoćenja postaja
@@ -2377,6 +2440,8 @@ To budźe jenož pomhać, kwalitu pohódnoćenjow posudźić, nic kwalitu produk
Přełoženje běži
+
+ Rěč wubrać
Při přełožowanju je problem nastał. Prošu spytajće hišće raz.
@@ -2397,6 +2462,10 @@ To budźe jenož pomhać, kwalitu pohódnoćenjow posudźić, nic kwalitu produk
Ženje njepřełožować: %1$s
Tute websydło ženje njepřełožić
+
+ Přepisuje wšě druhe nastajenja
+
+ Přepisuje poskitki za přełožowanje
Přełožowanske nastajenja
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 2557530b8..0550f503e 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -244,6 +244,7 @@
Kezdőoldal testreszabása
+
Kezdőképernyő
@@ -251,6 +252,9 @@
Böngészési előzmények törlése
+
+ Oldal fordítása
+
Kiválasztott nyelv
@@ -262,8 +266,6 @@
Beolvasás
-
- Keresőszolgáltatás
Keresőszolgáltatás-beállítások
@@ -319,23 +321,28 @@
- Az értesítések segítségével még többet tehet a %s alkalmazással
+ Az értesítések segítségével még többet tehet a %s alkalmazással
- Szinkronizálhatja lapjait az eszközök között, kezelheti a letöltéseket, tippeket kaphat a %s adatvédelmi funkcióinak maximális kihasználásához stb.
+ Szinkronizálhatja lapjait az eszközök között, kezelheti a letöltéseket, tippeket kaphat a %s adatvédelmi funkcióinak maximális kihasználásához stb.
- Folytatás
+ Folytatás
- Most nem
+ Most nem
+
+ Firefox adatvédelmi nyilatkozat
+
Szeretjük biztonságban tartani Önt
- A nonprofit szervezet által támogatott böngészőnk segít megakadályozni, hogy a cégek titokban nyomon kövessék Önt az interneten.\n\nTovábbi információk az adatvédelmi nyilatkozatban találhatók.
+ A nonprofit szervezet által támogatott böngészőnk segít megakadályozni, hogy a cégek titokban kövessék Önt a weben.
+
+ A nonprofit szervezet által támogatott böngészőnk segít megakadályozni, hogy a cégek titokban nyomon kövessék Önt az interneten.\n\nTovábbi információk az adatvédelmi nyilatkozatban találhatók.
- adatvédelmi nyilatkozatban
+ adatvédelmi nyilatkozatban
Beállítás alapértelmezett böngészőként
@@ -438,21 +445,11 @@
Csak HTTPS mód
-
- Sütibannerek számának csökkentése
Sütibanner-blokkoló
Sütibanner-blokkoló privát böngészésben
-
- A sütibannerek számának csökkentése
-
- Ki
-
- Be
-
-
- A %1$s automatikusan megpróbálja elutasítani a sütibannereken lévő sütikéréseket.
+
Kikapcsolva erre az oldalra
@@ -470,35 +467,16 @@
A webhely jelenleg nem támogatott
- Bekapcsolja a sütibanner-csökkentést a következőnél: %1$s?
-
Bekapcsolja a sütibanner-blokkolót ennél a webhelynél: %1$s?
- Kikapcsolja a sütibanner-csökkentést a következőnél: %1$s?
-
Kikapcsolja a sütibanner-blokkolót ennél a webhelynél: %1$s?
A %1$s nem tudja automatikusan elutasítani a sütikéréseket ezen az oldalon. Küldhet egy kérést, hogy támogassák ezt az oldalt a jövőben.
-
- A %1$s törli a webhely sütijeit, és frissíti az oldalt. Az összes süti törlésével kijelentkezhet, vagy kiürítheti a kosarait.
Kapcsolja ki, és a %1$s törli a sütiket, és újratölti a webhelyet. Ez kijelentkeztetheti, vagy kiürítheti a kosarait.
- A %1$s automatikusan megpróbálja elutasítani az összes sütikérést a támogatott oldalakon.
-
Kapcsolja be, és a %1$s automatikusan megpróbálja elutasítani a sütibannereket ezen az oldalon.
-
- Engedélyezi a %1$s számára a sütibannerek elutasítását?
-
- A %1$s automatikusan elutasíthat számos sütibanneres kérést.
-
- Most nem
-
- Kevesebb sütikérést fog látni
-
-
- Engedélyezés
A %1$s most elutasította a sütiket Önnek
@@ -717,6 +695,8 @@
Könyvjelzők
Bejelentkezések
+
+ Jelszavak
Nyitott lapok
@@ -743,6 +723,8 @@
Bankkártyák
+
+ Fizetési módok
Címek
@@ -1285,8 +1267,6 @@
Eltüntetés
- Nem lehet kinyomtatni
-
Az oldal nem nyomtatható
Nyomtatás
@@ -1333,6 +1313,11 @@
Privát lapok bezárása
+
+
+ Bezárja a privát lapokat?
+ Koppintson vagy csúsztassa félre az értesítést a privát lapok bezárásához.
+
Marketing
@@ -1690,8 +1675,12 @@
Bejelentkezések és jelszavak
+
+ Jelszavak
Bejelentkezések és jelszavak mentése
+
+ Jelszavak mentése
Kérdés mentés előtt
@@ -1708,26 +1697,45 @@
Bejelentkezés hozzáadása
+
+ Jelszó hozzáadása
+
Bejelentkezések szinkronizálása
+
+ Jelszavak szinkronizálása
Bejelentkezések szinkronizálása az eszközök között
+
+ Jelszavak szinkronizálása az eszközök közt
Mentett bejelentkezések
+
+ Mentett jelszavak
Itt jelennek meg a mentett vagy a %s böngészővel szinkronizált bejelentkezések.
+
+ Itt jelennek meg a %sba mentett vagy szinkronizált jelszavak. Az összes mentett jelszó titkosítva van.
Tudjon meg többet a Syncről.
+
+ Tudjon meg többet a szinkronizálásról
Kivételek
Itt jelennek meg a nem mentett bejelentkezések és jelszavak.
+
+ A %s nem menti el a jelszavakat az itt felsorolt webhelyektől.
A bejelentkezéseket és a jelszavak nem lesznek elmentve ezeknél a webhelyeknél.
+
+ A %s nem menti el a jelszavakat ezekről a webhelyektől.
Összes kivétel törlése
Bejelentkezések keresése
+
+ Jelszavak keresése
Webhely
@@ -1756,10 +1764,16 @@
Jelszó elrejtése
Feloldás a mentett bejelentkezések megtekintéshez
+
+ Feloldás a mentett jelszavak megtekintéshez
Helyezze biztonságba bejelentkezéseit és jelszavait
+
+ Helyezze biztonságba a mentett jelszavait
Állítsa be az eszköz lezárási mintáját, PIN-kódját vagy jelszavát, hogy megvédje a mentett bejelentkezéseit és jelszavait, ha valaki hozzáfér az eszközéhez.
+
+ Állítsa be az eszköz lezárási mintáját, PIN-kódját vagy jelszavát, hogy megvédje a mentett jelszavait, ha valaki hozzáfér az eszközéhez.
Később
@@ -1778,6 +1792,9 @@
Bejelentkezések menü rendezése
+
+ Jelszavak rendezése menü
+
Automatikus kitöltés
@@ -1785,10 +1802,16 @@
Címek
Bankkártyák
+
+ Fizetési módok
Kártyák mentése és automatikus kitöltése
+
+ Fizetési módok mentése és kitöltése
Az adatok titkosítottak
+
+ A %s titkosítja az összes elmentett fizetési módot
Kártyák szinkronizálása az eszközök közt
@@ -1796,8 +1819,12 @@
Bankkártya hozzáadása
+
+ Kártya hozzáadása
Mentett kártyák kezelése
+
+ Kártyák kezelése
Cím hozzáadása
@@ -1805,9 +1832,14 @@
Címek mentése és automatikus kitöltése
+
+ Címek mentése és kitöltése
Olyan információk belevétele, mint a számok, e-mail-címek és szállítási címek
+
+ Telefonszámok és e-mail-címek belevétele
+
Kártya hozzáadása
@@ -1828,6 +1860,8 @@
Kártya törlése
Biztos, hogy törli ezt a bankkártyát?
+
+ Törli a kártyát?
Törlés
@@ -1843,14 +1877,22 @@
Adjon meg egy érvényes bankkártyaszámot
+
+ Adjon meg egy érvényes kártyaszámot
Töltse ki ezt a mezőt
+
+ Adjon hozzá egy nevet
Feloldás a mentett kártyák megtekintéshez
Biztosítsa bankkártyáit
+
+ Helyezze biztonságba a fizetési módjait
Állítsa be az eszköz lezárási mintáját, PIN-kódját vagy jelszavát, hogy megvédje a mentett bankkártyáit, ha valaki hozzáfér az eszközéhez.
+
+ Állítsa be az eszköz lezárási mintáját, PIN-kódját vagy jelszavát, hogy megvédje a mentett fizetési módjait, ha valaki hozzáfér az eszközéhez.
Beállítás most
@@ -1861,6 +1903,8 @@
Oldja fel, hogy a tárolt bankkártya-információkat használja
+
+ Oldja fel a zárolást a mentett fizetési módok használatához
Cím hozzáadása
@@ -1898,6 +1942,8 @@
Biztos, hogy törli ezt a címet?
+
+ Törli ezt a címet?
Törlés
@@ -1996,30 +2042,52 @@
Szerkesztés
Biztos, hogy törölni szeretné ezt a bejelentkezést?
+
+ Biztos, hogy törli ezt a jelszót?
Törlés
Mégse
Bejelentkezési lehetőségek
+
+ Jelszóbeállítások
A bejelentkezés webcíméhéz használandó szerkeszthető szövegmező.
+
+ A webhely címének szerkeszthető szövegmezője.
A bejelentkezés felhasználónevéhez használandó szerkeszthető szövegmező.
+
+ A felhasználónév szerkeszthető szövegmezője.
A bejelentkezés jelszavához használandó szerkeszthető szövegmező.
+
+ A jelszó szerkeszthető szövegmezője.
Módosítások mentése a bejelentkezéshez.
+
+ Változások mentése.
Szerkesztés
+
+ Jelszó szerkesztése
Új bejelentkezés hozzáadása
+
+ Jelszó hozzáadása
Jelszó szükséges
+
+ Adjon meg egy jelszót
Felhasználónév szükséges
+
+ Adjon meg egy felhasználónevet
Gépnév szükséges
+
+ Adjon meg egy webcímet
Hangalapú keresés
@@ -2189,8 +2257,6 @@
kiemelések a(z) %s értékeléseinek az elmúlt 80 napból származó és megbízhatónak ítélt elemei.]]>
Tudjon meg többet arról, %s.
-
- hogy a %s by Mozilla hogyan határozza meg az értékelések minőségét
hogyan határozza meg a %s az értékelések minőségét
@@ -2278,17 +2344,17 @@
További tudnivalók
- Az „Igen, kipróbálom” kiválasztásával elfogadja a következőt: a %1$s by Mozilla %2$s és %3$s.
+ Az „Igen, kipróbálom” kiválasztásával elfogadja a következőt: a %1$s by Mozilla %2$s és %3$s.
- Az „Igen, kipróbálás” kiválasztásával elfogadja a %1$s dokumentumait:
+ Az „Igen, kipróbálás” kiválasztásával elfogadja a %1$s dokumentumait:
- adatvédelmi irányelvei
+ adatvédelmi irányelvei
- Adatvédelmi irányelvek
+ Adatvédelmi irányelvek
- felhasználási feltételei
+ felhasználási feltételei
- Felhasználási feltételek
+ Felhasználási feltételek
Igen, kipróbálom
@@ -2347,6 +2413,11 @@
%s, címsor
+
+ Hivatkozások
+
+ Hivatkozások érhetők el
+
@@ -2375,6 +2446,8 @@
Fordítás folyamatban
+
+ Válasszon nyelvet
Hiba történt a fordítás során. Próbálja meg újra.
@@ -2395,6 +2468,10 @@
Soha ne fordítsa ezt: %1$s
Sose fordítsa le ezt az oldalt
+
+ Felülbírál minden más beállítást
+
+ Felülbírálja a fordítás felajánlását
Fordítási beállítások
@@ -2519,8 +2596,12 @@
Mégse
+
+ Hibakeresési eszközök
+
+ Navigálás visszafelé
- Lapeszközök
+ Lapeszközök
Lapok száma
diff --git a/app/src/main/res/values-hy-rAM/strings.xml b/app/src/main/res/values-hy-rAM/strings.xml
index 0db4a0590..2e0696586 100644
--- a/app/src/main/res/values-hy-rAM/strings.xml
+++ b/app/src/main/res/values-hy-rAM/strings.xml
@@ -242,6 +242,7 @@
Հարմարեցնել տնայինը
+
Հիմնական էկրան
@@ -249,6 +250,9 @@
Ջնջել դիտարկման պատմությունը
+
+ Թարգմանել էջը
+
Ընտրված լեզուն
@@ -260,8 +264,6 @@
Սկանավորել
-
- Որոնիչ
Որոնիչի կարգավորումներ
@@ -315,23 +317,28 @@
- Ծանուցումներն օգնում են ձեզ ավելին անել %s-ի հետ
+ Ծանուցումներն օգնում են ձեզ ավելին անել %s-ի հետ
- Համաժամացրեք ձեր ներդիրները սարքերի միջև, կառավարեք ներբեռնումները, ստացեք խորհուրդներ %s-ի գաղտնիության պաշտպանությունից առավելագույնս օգտագործելու մասին և այլն:
+ Համաժամացրեք ձեր ներդիրները սարքերի միջև, կառավարեք ներբեռնումները, ստացեք խորհուրդներ %s-ի գաղտնիության պաշտպանությունից առավելագույնս օգտագործելու մասին և այլն:
- Շարունակել
+ Շարունակել
- Ոչ հիմա
+ Ոչ հիմա
+
+ Firefox֊ի գաղտնիության ծանուցում
+
Մենք սիրում ենք ձեզ ապահով պահել
- Մեր շահույթ չհետապնդող զննարկիչը օգնում է դադարեցնել ընկերություններին գաղտնի հետևել ձեզ համացանցում:\n\nԻմացեք ավելին մեր գաղտնիության ծանուցման մեջ:
+ Մեր շահույթ չհետապնդող զննարկիչն օգնում է դադարեցնել ընկերությունների կողմից համացանցում ձեզ գաղտնի հետևելը:
+
+ Մեր շահույթ չհետապնդող զննարկիչը օգնում է դադարեցնել ընկերություններին գաղտնի հետևել ձեզ համացանցում:\n\nԻմացեք ավելին մեր գաղտնիության ծանուցման մեջ:
- գաղտնիության ծանուցում
+ գաղտնիության ծանուցում
Կայել որպես սկզբնադիր դիտարկիչ
@@ -434,21 +441,11 @@
HTTPS կերպ միայն
-
- Թխուկների դրոշակի կրճատում
Թխուկների ազդերիզի արգելափակիչ
Թխուկների ազդերիզի արգելափակիչ մասնավոր զննարկումում
-
- Նվազեցնել թխուկների պաստառները
-
- Անջ.
-
- Միաց.
-
-
- %1$s-ն ինքնաբար փորձում է մերժել թխուկների հարցումները թխուկների ցուցանակների վրա:
+
Անջատված է այս կայքի համար
@@ -466,35 +463,16 @@
Կայքը ներկայումս չի աջակցվում
- Միացնե՞լ Cookie Banner կրճատումը %1$s-ի համար:
-
Միացնե՞լ Թխուկների ազդերիզի արգելափակիչը %1$s-ում:
- Անջատե՞լ Cookie Banner կրճատումը %1$s-ի համար:
-
Անջատե՞լ Թխուկների ազդերիզի արգելափակիչը %1$s-ում:
%1$s-ը չի կարող ինքնաշխատ մերժել թխուկների հարցումներն այս կայքում: Դուք կարող եք հարցում ուղարկել այս կայքին ապագայում աջակցելու համար:
-
- %1$s-ը կջնջի այս կայքի թխուկները և կթարմացնի էջը: Բոլոր թխուկները մաքրելը կարող է դուրս գրել Ձեզ կամ դատարկել գնումների զամբյուղները:
Անջատեք և %1$s-ը կմաքրի թխուկները և կրկին կբեռնի այս կայքը: Դա կարող է ձեզ դուրս գրել կամ դատարկել գնումների զամբյուղը:
- %1$s-ը փորձում է ինքնաբար մերժել թխուկների հարցումները աջակցվող կայքերում:
-
Միացրեք և %1$s-ը ինքնաբար կմերժի թխուկների բոլոր ազդերիզները այս կայքում:
-
- Թույլատրե՞լ %1$s-ին մերժել թխուկների պաստառները:
-
- %1$s-ը կարող է ինքնաբար մերժել թխուկների պաստառների հարցումները:
-
- Ոչ հիմա
-
- Դուք կտեսնեք ավելի քիչ թխուկների հարցումներ
-
-
- Թույլատրել
%1$s-ը հենց նոր մերժեց թխուկները ձեզ համար
@@ -711,6 +689,8 @@
Էջանիշեր
Մուտքանուններ
+
+ Գաղտնաբառեր
Բացել ներդիրներ
@@ -737,6 +717,8 @@
Բանկային քարտեր
+
+ Վճարամիջոցներ
Հասցեներ
@@ -1275,8 +1257,6 @@
Բաց թողնել
- Անհնար է տպել
-
Չհաջողվեց տպել այս էջը
Տպել
@@ -1679,8 +1659,12 @@
Մուտքանուններ և գաղտնաբառեր
+
+ Գաղտնաբառեր
Պահպանել մուտքանունները և գաղտնաբառերը
+
+ Պահել գաղտնաբառերը
Հարցնել պահպանելիս
@@ -1697,26 +1681,45 @@
Ավելացնել մուտքագրում
+
+ Հավելել գաղտնաբառ
+
Համաժամեցնել մուտքանունները
+
+ Համաժամեցնել գաղտնաբառերը
Համաժամեցնել մուտքագրումները սարքերի միջև
+
+ Համաժամեցնել գաղտնաբառերը սարքերի միջև
Պահպանված մուտքանուններ
+
+ Պահված գաղտնաբառեր
%s-ի հետ ձեր պահպանած կամ համաժամեցրած մուտքագրումները կցուցադրվեն այստեղ:
+
+ Այն գաղտնաբառերը, որոնք դուք պահում կամ համաժամացնում եք %s-ի հետ, կցուցադրվեն այստեղ: Ձեր պահած բոլոր գաղտնաբառերը գաղտնագրված են:
Իմանալ ավելին համաժամեցման մասին:
+
+ Իմանալ ավելին Սինքի մասին
Բացառություններ
Մուտքանունները և գաղտնաբառերը, որոնք չեն պահպանվել, կցուցադրվեն այստեղ:
+
+ %s-ը չի պահի այստեղ թվարկված կայքերի գաղտնաբառերը:
Մուտքանունները և գաղտնաբառերը չեն պահպանվի այս կայքերի համար:
+
+ %s-ը չի պահի այս կայքերի գաղտնաբառերը:
Ջնջել բոլոր բացառությունները
Որոնել մուտքանուններ
+
+ Որոնել գաղտնաբառեր
Կայք
@@ -1746,10 +1749,16 @@
Թաքցնել գաղտնաբառը
Ապակողպեք՝ դիտելու համար պահպանված մուտքանունները
+
+ Ապակողպեք՝ դիտելու համար պահված գաղտնաբառերը
Անվտանգ դարձրեք ձեր մուտքանունները և գաղտնաբառերը
+
+ Անվտանգ դարձրեք ձեր պահված գաղտնաբառերը
Ստեղծեք սարքի կողպեքի նմուշ, PIN կամ գաղտնաբառ՝ ձեր պահպանված մուտքանունները և գաղտնաբառերը մուտք գործելուց պաշտպանելու համար, եթե ձեր սարքը ուրիշի ձեռքն ընկնի:
+
+ Տեղակայեք սարքի կողպման նախշ, PIN կամ գաղտնաբառ՝ պաշտպանելու պահված գաղտնաբառերն այն դեպքում, եթե որևէ մեկը ևս մուտք ունենա Ձեր սարքին:
Հետո
@@ -1769,6 +1778,9 @@
Տեսակավորել մուտագրումների ցանկը
+
+ Տեսակավորել գաղտնաբառերի ցանկը
+
Ինքնալցում
@@ -1776,27 +1788,42 @@
Հասցեներ
Բանկային քարտեր
+
+ Վճարամիջոցներ
Պահել և ինքնալրացնել քարտերը
+
+ Պահել և լրացնել վճարամիջոցները
Տվյալները գաղտնագրված են
+
+ %s-ը գաղտնագրում է ձեր պահած բոլոր վճարամիջոցները
Համաժամեցնել քարտերը սարքերի միջև
Համաժամեցնել քարտերը
Ավելացնել բանկային քարտ
+
+ Հավելել քարտ
Կառավարել պահված քարտերը
+
+ Կառավարել քարտերը
Ավելացնել հասցե
Կառավարեք հասցեները
Պահել և ինքնալրացնել քարտերը
+
+ Պահել և լրացնել հասցեները
Ներառել տեղեկություններ, ինչպիսիք են համարները, էլ.փոստը և առաքման հասցեները
+
+ Ներառում է հեռախոսահամարներ և էլ. փոստի հասցեներ
+
Ավելացնել քարտ
@@ -1817,6 +1844,8 @@
Ջնջել քարտը
Համոզվա՞ծ եք, որ ցանկանում եք ջնջել այս բանկային քարտը:
+
+ Ջնջե՞լ քարտը
Ջնջել
@@ -1832,14 +1861,22 @@
Մուտքագրեք բանկային վավեր քարտի համար
+
+ Մուտքագրեք ճիշտ քարտի համար
Լրացրեք այս դաշտը
+
+ Հավելել անուն
Ապակողպեք՝ դիտելու համար պահպանված քարտերը
Անվտանգ դարձրեք ձեր բանկային քարտերը
+
+ Անվտանգ դարձրեք ձեր պահած վճարամիջոցները
Տեղակայեք սարքի կողպման նախշ, PIN կամ գաղտնաբառ՝ պաշտպանելու պահված բանկային քարտերը այն դեպքում, եթե որևէ մեկը ևս մուտք ունի Ձեր սարքին:
+
+ Տեղակայեք սարքի կողպման նախշ, PIN կամ գաղտնաբառ՝ պաշտպանելու ձեր քարտերն այն դեպքում, եթե որևէ մեկը ևս մուտք ունենա Ձեր սարքին:
Տեղակայել հիմա
@@ -1849,6 +1886,8 @@
Ապակողպեք՝ օգտագործելու համար բանկային քարտերի պահված տեղեկությունները
+
+ Ապակողպեք՝ պահված վճարամիջոցն օգտագործելու համար
Ավելացնել հասցե
@@ -1885,6 +1924,8 @@
Ջնջել հասցեն
Ջնջե՞լ այս հասցեն:
+
+ Ջնջե՞լ այս հասցեն:
Ջնջել
@@ -1982,30 +2023,52 @@
Խմբագրել
Համոզվա՞ծ եք, որ ցանկանում եք ջնջել այս մուտքանունը:
+
+ Համոզվա՞ծ եք, որ ցանկանում եք ջնջել այս գաղտնաբառը:
Ջնջել
Չեղարկել
Մուտքի ընտրանքներ
+
+ Գաղտնաբառի ընտրանքներ
Խմբագրելի տեքստի դաշտը մուտքի վեբ հասցեի համար:
+
+ Խմբագրելի տեքստի դաշտ կայքի հասցեի համար:
Խմբագրելի տեքստի դաշտը մուտք գործողի համար:
+
+ Խմբագրելի տեքստի դաշտ օգտվողի անվան համար:
Խմբագրելի տեքստի դաշտը մուտքի գաղտնաբառի համար:
+
+ Խմբագրելի տեքստի դաշտ գաղտնաբառի համար:
Պահպանել փոփոխությունները մուտքագրման համար:
+
+ Պահել փոփոխությունները:
Խմբագրել
+
+ Խմբագրել գաղտնաբառը
Հավելել նոր մուտքագրում
+
+ Հավելել գաղտնաբառ
Գաղտնաբառ է պահանջվում
+
+ Մուտքագրեք գաղտնաբառ
Օգտվողի անունը պարտադիր է
+
+ Մուտքագրեք օգտվողի անունը
Հոսթի անունը պարտադիր է
+
+ Մուտքագրել վեբ հասցեն
Ձայնային որոնում
@@ -2102,6 +2165,9 @@
%s որոնում
+
+ Փոխարկեք ձեր սկզբնադիր զննարկիչը
+
Կայեք հղումներ կայքերից, էլ. նամակներից և հաղորդագրություններից, որոնք ինքնաբար կերպով կբացվեն Firefox-ում:
@@ -2176,8 +2242,6 @@
Գունանշումները վերջին 80 օրվա ընթացքում %s կարծիքներից են, որոնք, մեր կարծիքով, հուսալի են:]]>
Իմացեք ավելին %s-ի մասին:
-
- ինչպես %s-ը է Mozilla-ի կողմից որոշում կարծիքների որակը
ինչպես է %s-ը որոշում կարծիքների որակը
@@ -2362,6 +2426,8 @@
Թարգմանությունն ընթացքի մեջ է
+
+ Ընտրեք լեզուն
Թարգմանության հետ կապված խնդիր։ Կրկին փորձեք;
@@ -2382,6 +2448,10 @@
Երբեք չթարգմանել %1$s-ը
Երբեք չթարգմանել այս կայքը
+
+ Անտեսում է բոլոր մյուս կարգավորումները
+
+ Անտեսում է թարգմանելու առաջարկները
Թարգմանության կարգավորումներ
diff --git a/app/src/main/res/values-ia/strings.xml b/app/src/main/res/values-ia/strings.xml
index 0e1bb9ba4..0970b4b78 100644
--- a/app/src/main/res/values-ia/strings.xml
+++ b/app/src/main/res/values-ia/strings.xml
@@ -246,6 +246,7 @@
Personalisar pagina initial
+
Pagina initial
@@ -253,6 +254,9 @@
Eliminar le chronologia de navigation
+
+ Traducer le pagina
+
Lingua seligite
@@ -264,8 +268,6 @@
Scannar
-
- Motor de recerca
Parametros de motor de recerca
@@ -321,24 +323,29 @@
- Le notificationes te adjuta a facer plus con %s
+ Le notificationes te adjuta a facer plus con %s
- Synchronisa tu schedas inter apparatos, gere le discargamentos, recipe le suggestiones re maximisar le protection del confidentialitate de %s e altero ancora.
+ Synchronisa tu schedas inter apparatos, gere le discargamentos, recipe le suggestiones re maximisar le protection del confidentialitate de %s e altero ancora.
- Continuar
+ Continuar
- Non ora
+ Non ora
+
+ Aviso de confidentialitate de Firefox
+
A nos place mantener te secur
- Nostre navigator supportate per un organisation sin fin de lucro adjuta stoppar le companias de sequer te secretemente per le Web.\n\nSape plus in nostre Aviso de confidentialitate.
+ Nostre navigator supportate per un organisation sin fin d lucro adjuta stoppar le companias de sequer secretemente tu movimentos circum le web.
+
+ Nostre navigator supportate per un organisation sin fin de lucro adjuta stoppar le companias de sequer te secretemente per le Web.\n\nSape plus in nostre Aviso de confidentialitate.
- aviso de confidentialitate
+ aviso de confidentialitate
Eliger como navigator predefinite
@@ -443,22 +450,11 @@
Modo solo HTTPS
-
- Reduction de banner pro le cookie
Blocada de bandiera pro cookie
Blocada de bandiera pro cookie in navigation private
-
- Reducer banners pro le cookie
-
- Disactivar
-
- Activar
-
-
- %1$s automaticamente prova a rejectar le requestas de cookies sur banners pro cookies.
Disactivar pro iste sito
@@ -476,36 +472,16 @@
Sito actualmente non supportate
- Activar le reduction de banner pro cookie pro %1$s?
-
Activar le blocada de bandiera pro cookie pro %1$s?
- Disactivar le reduction de banner pro cookie pro %1$s?
-
Disactivar le blocada de bandiera pro cookie pro %1$s?
%1$s non pote automaticamente rejectar requestas de cookies sur iste sito. Tu pote inviar un requesta pro supportar iste sito in futuro.
-
- %1$s clarara le cookies de iste sito e actualisara le pagina. Clarar tote le cookies pote clauder tu connexion o vacuar tu carrettos de compras.
Disactiva lo e %1$s clarara le cookies e recargara iste sito. Isto pote disconnecter le section o vacuara le carrettos de compras.
- %1$s tenta rejectar automaticamente tote le requestas de cookies sur le sitos supportate.
-
Activa lo e %1$s essayara refusar automaticamente le bandieras pro cookies sur iste sito.
-
- Permitter a %1$s de rejectar bandieras pro cookies?
-
- %1$s pote rejectar automaticamente multe requestas de bandieras pro cookie.
-
- Non ora
-
-
- Tu videra minus requestas de cookies
-
-
- Permitter
%1$s justo refusava cookies pro te
@@ -724,6 +700,8 @@
Marcapaginas
Credentiales
+
+ Contrasignos
Schedas aperte
@@ -750,6 +728,8 @@
Cartas de credito
+
+ Methodos de pagamento
Adresses
@@ -1316,8 +1296,6 @@
Ignorar
- Impossibile imprimer
-
Impossibile imprimer iste pagina
Imprimer
@@ -1731,8 +1709,12 @@
Credentiales e contrasignos
+
+ Contrasignos
Salvar credentiales e contrasignos
+
+ Salvar contrasignos
Demandar pro salvar
@@ -1751,26 +1733,45 @@
Adder credentiales
+
+ Adder contrasigno
+
Synchronisar credentiales
+
+ Synchronisar contrasignos
Synchronisar credentiales inter le apparatos
+
+ Synchronisar contrasignos inter apparatos
Credentiales salvate
+
+ Contrasignos salvate
Le credentiales que tu salva o synchronisa a in %s apparera hic.
+
+ Le contrasignos que tu salva o synchronisa in %s sera listate ci. Tote le contrasignos que tu salva es cryptate.
Apprender plus re Sync.
+
+ Apprender plus re le synchronisation
Exceptiones
Credentiales e contrasignos que non es salvate essera monstrate hic.
+
+ %s non salvara le password pro le sitos ci listate.
Credentiales e contrasignos non sera salvate pro iste sitos.
+
+ %s non salvara le contrasignos pro iste sitos.
Deler tote le exceptiones
Cercar credentiales
+
+ Cercar contrasignos
Sito
@@ -1799,10 +1800,16 @@
Celar contrasigno
Disbloca pro vider tu credentiales salvate
+
+ Disbloca pro vider tu contrasignos salvate
Assecurar tu credentiales e contrasignos
+
+ Protege tu contrasignos salvate
Implementa un patrono de blocada apparato, PIN o contrasigno pro proteger tu credentiales e contrasignos salvate de esser accedite, si alcuno altere ha tu apparato.
+
+ Implementa un patrono de blocada apparato, PIN o contrasigno pro proteger tu contrasignos de esser accedite, si alcuno altere ha tu apparato.
Plus tarde
@@ -1822,6 +1829,9 @@
Ordinar menu de credentiales
+
+ Ordinar le menu del contrasignos
+
Autoplenar
@@ -1829,10 +1839,16 @@
Adresses
Cartas de credito
+
+ Methodos de pagamento
Gerer le cartas salvate
+
+ Salvar e compilar methodos de pagamento automaticamente
Datos es cryptate
+
+ %s crypta tote tu methodos de pagamento salvate
Synchronisar cartas inter apparatos
@@ -1840,8 +1856,12 @@
Synchronisar cartas
Adde un carta de credito
+
+ Adder carta
Gerer le cartas salvate
+
+ Gerer le cartas
Adder adresse
@@ -1850,9 +1870,14 @@
Salvar e autoplenar adresses
+
+ Salvar e compilar automaticamente adresses
Includer informationes como numeros, email e adresses de expedition
+
+ Include numeros de telephono e adresses email
+
Adder carta
@@ -1873,6 +1898,8 @@
Deler carta
Desira tu vermente deler iste carta de credito?
+
+ Deler carta?
Deler
@@ -1888,14 +1915,22 @@
Insere un numero valide de carta de credito
+
+ Insere un numero de carta valide
Completa iste campo
+
+ Adde un nomine
Disbloca pro vider tu cartas salvate
Protege tu carta de credito
+
+ Protege tu methodo de pagamento salvate
Implementa un patrono de blocada apparato, PIN o contrasigno pro proteger tu cartas de credito de esser accedite, si alcuno altere ha tu apparato.
+
+ Implementa un patrono de blocada apparato, PIN o contrasigno pro proteger tu methodos de pagamento salvate de esser accedite, si alcun altere ha tu apparato.
Implementar ora
@@ -1906,6 +1941,8 @@
Disbloca pro usar le informationes de carta de credito immagazinate
+
+ Disblocar pro usar le methodo de pagamento salvate
Adder adresse
@@ -1943,6 +1980,8 @@
Desira tu vermente deler iste adresses?
+
+ Deler iste adresses?
Deler
@@ -2043,31 +2082,53 @@
Rediger
Desira tu vermente deler iste credentiales?
+
+ Desira tu vermente deler iste contrasigno?
Deler
Cancellar
Optiones de apertura de session
+
+ Optiones de contrasigno
Le campo de texto redigibile pro le adresse web del credentiales.
+
+ Le campo de texto redigibile pro le adresse del sito web.
Le campo de texto redigibile pro le nomine de usator del accesso.
+
+ Le campo de texto redigibile pro le nomine de usator.
Le campo de texto redigibile pro le contrasigno del credentiales.
+
+ Le campo de texto redigibile pro le contrasigno.
Salvar cambiamentos a credentiales.
+
+ Salvar le cambiamentos.
Rediger
+
+ Modificar le contrasigno
Adder nove credential
+
+ Adder contrasigno
Contrasigno requirite
+
+ Insere un contrasigno
Nomine de usator necesse.
+
+ Insere un nomine de usator
Nomine de servitor necesse.
+
+ Insere un adresse web
Recerca vocal
@@ -2162,6 +2223,9 @@
Cercar %s
+
+ Cambia tu navigator predefinite
+
Stabilir qual ligamines de sitos web, e-mails e messages se aperi automaticamente in Firefox.
@@ -2236,8 +2300,6 @@
Aspectos notabile es ab %s recensiones in le ultime 80 dies que nos crede fidabile.]]>
Pro saper plus re %s.
-
- como %s per Mozilla determina le qualitate de revision
como %s determina le qualitate del revision
@@ -2422,6 +2484,8 @@
Traduction in curso
+
+ Elige un lingua
Il habeva un problema traducente. Retenta.
@@ -2442,6 +2506,10 @@
Non traducer jammais %1$s
Non traducer jammais iste sito
+
+ Supplanta tote le altere parametros
+
+ Supplanta le selection re le proposito de traduction
Parametros de traduction
diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml
index 49b07f1a8..46dd967e5 100644
--- a/app/src/main/res/values-is/strings.xml
+++ b/app/src/main/res/values-is/strings.xml
@@ -211,6 +211,8 @@
Endursamstilla
Finna á síðu
+
+ Þýða síðu
Vista í safn
@@ -240,6 +242,7 @@
Breyta
Sérsníða upphafssíðu
+
Upphafsskjár
@@ -247,6 +250,9 @@
Eyða vafurferli
+
+ Þýða síðu
+
Valið tungumál
@@ -258,8 +264,6 @@
Skanna
-
- Leitarvél
Leitarvélastillingar
@@ -314,23 +318,28 @@
- Tilkynningar hjálpa þér að gera meira með %s
+ Tilkynningar hjálpa þér að gera meira með %s
- Samstilltu flipa á milli tækja, stýrðu niðurhali, fáðu ábendingar um að nýta persónuvernd %s sem best og fleira.
+ Samstilltu flipa á milli tækja, stýrðu niðurhali, fáðu ábendingar um að nýta persónuvernd %s sem best og fleira.
- Halda áfram
+ Halda áfram
- Ekki núna
+ Ekki núna
+
+ Meðferð persónuupplýsinga í Firefox
+
Við fáum kikk út úr því að halda þér öruggum
- Vafrinn okkar, sem ekki er rekinn í hagnaðarskyni, hjálpar til við að koma í veg fyrir að fyrirtæki laumist til að fylgjast með ferðum þínum um vefinn.\n\nFrekari upplýsingar má sjá í persónuverndaryfirlýsingu okkar.
+ Vafrinn okkar, sem ekki er rekinn í hagnaðarskyni, hjálpar til við að koma í veg fyrir að fyrirtæki laumist til að fylgjast með þér á ferðum þínum um vefinn.
+
+ Vafrinn okkar, sem ekki er rekinn í hagnaðarskyni, hjálpar til við að koma í veg fyrir að fyrirtæki laumist til að fylgjast með ferðum þínum um vefinn.\n\nFrekari upplýsingar má sjá í persónuverndaryfirlýsingu okkar.
- upplýsingar um meðferð persónuupplýsinga
+ upplýsingar um meðferð persónuupplýsinga
Setja sem sjálfgefinn vafra
@@ -434,21 +443,11 @@
Einungis-HTTPS-hamur
-
- Fækkun vefkökuborða
Útilokun vefkökuborða
Útilokun vefkökuborða í huliðsvafri
-
- Fækka vefkökuborðum
-
- Óvirkt
-
- Virkt
-
-
- %1$s reynir sjálfkrafa að hafna vefkökubeiðnum á vefkökuborðum.
+
Slökkt fyrir þetta vefsvæði
@@ -466,36 +465,17 @@
Vefsvæðið er ekki stutt í augnablikinu
- Viltu kveikja á fækkun vefkökuborða fyrir %1$s?
-
Viltu kveikja á útilokun vefkökuborða fyrir %1$s?
-
- Viltu slökkva á fækkun vefkökuborða fyrir %1$s?
Viltu slökkva á útilokun vefkökuborða fyrir %1$s?
%1$s getur ekki hafnað sjálfvirkt vefkökubeiðnum á þessari síðu. Þú getur sent beiðni um stuðning við þessa síðu.
-
- %1$s mun hreinsa vefkökur þessa vefsvæðis og endurlesa síðuna. Að hreinsa allar vefkökur gæti skráð þig út eða tæmt innkaupakörfur.
Slökktu á þessu og %1$s mun hreinsa vefkökur og endurlesa þetta vefsvæði. Það gæti skráð þig út eða tæmt innkaupakörfur.
- %1$s reynir að hafna sjálfkrafa beiðnum um vefkökur á þeim vefsvæðum þar sem það er hægt.
-
Kveiktu á þessu og %1$s mun reyna að hafna sjálfkrafa öllum vefkökuborðum á þessu vefsvæði.
-
- Leyfa %1$s að hafna vefkökuborðum?
-
- %1$s getur reynt að hafna sjálfkrafa beiðnum um vefkökur.
-
- Ekki núna
-
- Þú munt sjá færri beiðnir um vefkökur
-
-
- Leyfa
%1$s var að hafna vefkökum fyrir þína hönd
@@ -711,6 +691,8 @@
Bókamerki
Innskráningar
+
+ Lykilorð
Opnir flipar
@@ -737,6 +719,8 @@
Greiðslukort
+
+ Greiðslumátar
Vistföng
@@ -1272,8 +1256,6 @@
Afgreiða
- Ekki hægt að prenta
-
Ekki er hægt að prenta þessa síðu
Prenta
@@ -1318,6 +1300,10 @@
Loka huliðsflipum
+
+ Loka huliðsflipum?
+ Ýttu á eða strjúktu þessari tilkynningu til að loka huliðsflipum.
+
Markaðssetning
@@ -1671,8 +1657,12 @@
Innskráning og lykilorð
+
+ Lykilorð
Vista innskráningu og lykilorð
+
+ Vista lykilorð
Biðja um að vista
@@ -1689,27 +1679,47 @@
Bæta við innskráningu
+
+ Bæta við lykilorði
+
Samstilla innskráningar
+
+ Samstilla lykilorð
Samstilla innskráningar milli tækja
+
+ Samstilla lykilorð milli tækja
Vistaðar innskráningar
+
+ Vistuð lykilorð
Innskráningarnar sem þú vistar eða samstillir við %s birtast hér.
+
+ Lykilorðin sem þú vistar eða samstillir við %s verða skráð hér. Öll lykilorð sem þú vistar eru dulrituð.
+
Læra meira um samstillingu.
+
+ Frekari upplýsingar um samstillingu
Undanþágur
Innskráningar og lykilorð sem ekki eru vistuð sjást hér.
+
+ %s mun ekki vista lykilorð fyrir vefsvæði sem skráð eru hér.
Innskráningar og lykilorð verða ekki vistuð fyrir þessi vefsvæði.
+
+ %s mun ekki vista lykilorð fyrir þessi vefsvæði.
Eyða öllum undantekningum
Leita að innskráningu
+
+ Leita að lykilorðum
Vefsvæði
@@ -1738,10 +1748,16 @@
Fela lykilorð
Aflæstu til að skoða vistaðar innskráningar
+
+ Aflæstu til að skoða vistuð lykilorð
Verndaðu innskráningar þínar og lykilorð
+
+ Tryggðu öryggi vistuðu lykilorðanna þinna
Settu upp læsimynstur, PIN eða lykilorð til að vernda vistaðar innskráningar og lykilorð ef ske kynni að einhver annar komist yfir tækið þitt.
+
+ Settu upp læsimynstur, PIN-númer eða lykilorð til að vernda vistuðu lykilorðin þín ef ske kynni að einhver annar komist yfir tækið þitt.
Síðar
@@ -1761,6 +1777,9 @@
Raða innskráningarvalmyndinni
+
+ Raða lykilorðavalmynd
+
Sjálfvirk útfylling
@@ -1768,27 +1787,42 @@
Tölvupóstföng
Greiðslukort
+
+ Greiðslumátar
Vista og fylla sjálfkrafa út í greiðslukort
+
+ Vista og fylla út greiðslumáta
Gögn eru dulrituð
+
+ %s dulritar alla greiðslumáta sem þú vistar
Samstilla greiðslukort milli tækja
Samstilla kort
Bæta við greiðslukorti
+
+ Bæta við korti
Sýsla með vistuð greiðslukort
+
+ Sýsla með greiðslukort
Bæta við tölvupóstfangi
Sýsla með tölvupóstföng
Vista og fylla sjálfkrafa út heimilisföng
+
+ Vista og fylla út í heimilisföng
Láta upplýsingar eins og símanúmer, tölvupóstföng og heimilisföng fylgja með
+
+ Þar með talin símanúmer og tölvupóstföng
+
Bæta við korti
@@ -1810,6 +1844,8 @@
Eyða korti
Ertu viss um að þú viljir eyða þessu greiðslukorti?
+
+ Eyða korti?
Eyða
@@ -1822,14 +1858,22 @@
Vistuð greiðslukort
Settu inn gilt kortanúmer
+
+ Settu inn gilt kortanúmer
Fylltu út í þennan reit
+
+ Bættu við nafni
Aflæsa til að skoða vistuð greiðslukort
Haltu kreditkortunum þínum öruggum
+
+ Tryggðu öryggi vistuðu greiðslumátanna þinna
Settu upp læsimynstur, PIN-númer eða lykilorð til að vernda vistuðu greiðslukortin þín ef ske kynni að einhver annar komist yfir tækið þitt.
+
+ Settu upp læsimynstur, PIN-númer eða lykilorð til að vernda vistuðu greiðslumátana þína ef ske kynni að einhver annar komist yfir tækið þitt.
Setja upp núna
@@ -1839,6 +1883,8 @@
Aflæstu til að nota geymdar kreditkortaupplýsingar
+
+ Aflæstu til að nota vistaða greiðslumáta
Bæta við tölvupóstfangi
@@ -1876,6 +1922,8 @@
Ertu viss um að þú viljir eyða þessu póstfangi?
+
+ Eyða þessu heimilisfangi?
Eyða
@@ -1975,30 +2023,52 @@
Breyta
Ertu viss um að þú viljir eyða þessari innskráningu?
+
+ Ertu viss um að þú viljir eyða þessu lykilorði?
Eyða
Hætta við
Innskráningarvalkostir
+
+ Valkostir lykilorðs
Breytilegi textareiturinn fyrir veffang þessarar innskráningarinnar.
+
+ Breytanlegi textareiturinn fyrir vistfang vefsvæðisins.
Breytilegi textareiturinn fyrir notandanafn innskráningarinnar.
+
+ Breytanlegi textareiturinn fyrir notandanafnið.
Breytilegi textareiturinn fyrir lykilorð innskráningarinnar.
+
+ Breytanlegi textareiturinn fyrir lykilorðið.
Vista breytingar á innskráningu.
+
+ Vista breytingar.
Breyta
+
+ Breyta lykilorði
Bæta við nýrri innskráningu
+
+ Bæta við lykilorði
Lykilorðs krafist
+
+ Settu inn lykilorð
Notandanafn er nauðsynlegt
+
+ Settu inn notandanafn
Hýsingarheiti er nauðsynlegt
+
+ Settu inn slóð á vefsíðu
Raddleit
@@ -2094,6 +2164,9 @@
%s leit
+
+ Skiptu um sjálfgefinn vafra
+
Stilltu tengla frá vefsvæðum, tölvupósti og skilaboðum til að opna sjálfkrafa í Firefox.
@@ -2168,8 +2241,6 @@
Hápunktar eru úr umsögnum um %s frá síðustu 80 dögum sem við teljum vera áreiðanlegar.]]>
Frekari upplýsingar um %s.
-
- hvernig %s frá Mozilla ákvarðar gæði umsagna
hvernig %s ákvarðar gæði umsagna
@@ -2254,17 +2325,17 @@
Frekari upplýsingar
- Með því að velja „Já, prófum það“ samþykkir þú %2$s og %3$s hjá %1$s frá Mozilla.
+ Með því að velja „Já, prófum það“ samþykkir þú %2$s og %3$s hjá %1$s frá Mozilla.
- Með því að velja „Já, prófa það“ samþykkir þú eftirfarandi frá %1$s:
+ Með því að velja „Já, prófa það“ samþykkir þú eftirfarandi frá %1$s:
- persónuverndarstefnu
+ persónuverndarstefnu
- Meðferð persónuupplýsinga
+ Meðferð persónuupplýsinga
- notkunarskilmála
+ notkunarskilmála
- Notkunarskilmála
+ Notkunarskilmála
Já, prófum það
@@ -2321,6 +2392,11 @@
%s, Fyrirsögn
+
+ Tenglar
+
+ Tenglar í boði
+
@@ -2338,13 +2414,28 @@
Þýða á
Ekki núna
+
+ Lokið
Þýða
+
+ Reyndu aftur
Þýðingar
Þýðing í gangi
+
+ Veldu tungumál
+
+ Vandamál kom upp við að þýða. Reyndu aftur.
+
+ Ekki tókst að hlaða inn tungumálum. Athugaðu nettenginguna þína og reyndu aftur.
+
+ Því miður styðjum við ekki %1$s ennþá.
+
+ Kanna nánar
+
Valkostir þýðinga
@@ -2357,6 +2448,10 @@
Aldrei þýða þetta vefsvæði
+
+ Yfirtekur allar aðrar stillingar
+
+ Yfirtekur tilboð um að þýða
Þýðingastillingar
@@ -2477,8 +2572,12 @@
Hætta við
+
+ Villuleitarverkfæri
+
+ Fara til baka
- Flipaverkfæri
+ Flipaverkfæri
Fjöldi flipa
@@ -2489,4 +2588,14 @@
Huliðs
Alls
+
+ Verkfæri til að búa til flipa
+
+ Fjöldi flipa sem á að búa til
+
+ Bæta við virka flipa
+
+ Bæta við óvirka flipa
+
+ Bæta við huliðsflipa
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index 13a669b64..f71d5f35d 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -247,6 +247,7 @@
Personalizza pagina iniziale
+
Schermata principale
@@ -254,6 +255,9 @@
Elimina cronologia di navigazione
+
+ Traduci pagina
+
Lingua selezionata
@@ -265,8 +269,6 @@
Leggi
-
- Motore di ricerca
Impostazioni motori di ricerca
@@ -322,23 +324,28 @@
- Le notifiche ti aiutano a ottenere di più da %s
+ Le notifiche ti aiutano a ottenere di più da %s
- Sincronizza le schede tra dispositivi, gestisci download, ottieni suggerimenti per sfruttare al meglio la protezione della privacy di %s e molto altro ancora.
+ Sincronizza le schede tra dispositivi, gestisci download, ottieni suggerimenti per sfruttare al meglio la protezione della privacy di %s e molto altro ancora.
- Continua
+ Continua
- Non adesso
+ Non adesso
+
+ Informativa sulla privacy di Firefox
+
Ci piace mantenerti al sicuro
- Il nostro browser, supportato da un’organizzazione senza fini di lucro, blocca automaticamente le società che, di nascosto, cercano di seguire le tue attività sul Web.\n\nScopri ulteriori informazioni nella nostra informativa sulla privacy.
+ Il nostro browser, supportato da un’organizzazione senza fini di lucro, blocca automaticamente le società che, di nascosto, cercano di seguire le tue attività sul Web.
+
+ Il nostro browser, supportato da un’organizzazione senza fini di lucro, blocca automaticamente le società che, di nascosto, cercano di seguire le tue attività sul Web.\n\nScopri ulteriori informazioni nella nostra informativa sulla privacy.
- informativa sulla privacy
+ informativa sulla privacy
Imposta come browser predefinito
@@ -443,21 +450,11 @@
Modalità solo HTTPS
-
- Riduzione banner per i cookie
Blocco banner per i cookie
Blocco banner per i cookie in navigazione anonima
-
- Riduci i banner per i cookie
-
- Disattivata
-
- Attiva
-
-
- %1$s cerca automaticamente di rifiutare le richieste di cookie quando viene visualizzato un banner per i cookie.
+
Disattivata per questo sito
@@ -475,35 +472,16 @@
Sito attualmente non supportato
- Attivare la riduzione banner per i cookie su %1$s?
-
Attivare il blocco banner per i cookie in %1$s?
- Disattivare la riduzione banner per i cookie su %1$s?
-
Disattivare il blocco banner per i cookie in %1$s?
%1$s non può rifiutare automaticamente le richieste di cookie su questo sito. Puoi inviare una richiesta per supportare questo sito in futuro.
-
- %1$s eliminerà i cookie per questo sito e aggiornerà la pagina. L’eliminazione dei cookie potrebbe disconnetterti dal sito o svuotare eventuali carrelli in sospeso.
Dopo la disattivazione %1$s rimuove i cookie e ricarica la pagina. Questo potrebbe disconnetterti dal sito o svuotare eventuali carrelli in sospeso.
- %1$s cerca di rifiutare automaticamente le richieste di cookie nei siti supportati.
-
Attivalo e %1$s cercherà di rifiutare automaticamente i banner per i cookie su questo sito.
-
- Consentire a %1$s di rifiutare i banner per i cookie?
-
- %1$s può rifiutare automaticamente i banner per i cookie in diversi siti.
-
- Non adesso
-
- Vedrai meno richieste per i cookie
-
-
- Consenti
%1$s ha appena rifiutato dei cookie per te
@@ -724,6 +702,8 @@
Segnalibri
Credenziali
+
+ Password
Schede aperte
@@ -750,6 +730,8 @@
Carte di credito
+
+ Metodi di pagamento
Indirizzi
@@ -1308,8 +1290,6 @@
Chiudi
- Impossibile stampare
-
Impossibile stampare questa pagina
Stampa
@@ -1721,8 +1701,12 @@
Credenziali e password
+
+ Password
Salva credenziali e password
+
+ Salva password
Chiedi prima di salvare
@@ -1740,26 +1724,45 @@
Aggiungi credenziali
+
+ Aggiungi password
+
Sincronizza le credenziali
+
+ Sincronizza password
Sincronizza credenziali tra dispositivi
+
+ Sincronizza le password tra i tuoi dispositivi
Credenziali salvate
+
+ Password salvate
Le credenziali salvate o sincronizzate in %s verranno visualizzate qui.
+
+ Le password salvate o sincronizzate con %s verranno visualizzate qui. Tutte le password salvate sono crittate.
Ulteriori informazioni su Sync.
+
+ Ulteriori informazioni sulla sincronizzazione
Eccezioni
Le credenziali e le password non salvate verranno mostrate qui.
+
+ %s non salverà le password per i siti elencati qui.
Le credenziali e le password non verranno salvate per questi siti.
+
+ %s non salverà le password per questi siti.
Elimina tutte le eccezioni
Cerca credenziali
+
+ Cerca nelle password
Sito
@@ -1788,10 +1791,16 @@
Nascondi password
Sblocca per visualizzare le credenziali salvate
+
+ Sblocca per visualizzare le password salvate
Proteggi le credenziali di accesso
+
+ Proteggi le password salvate
Imposta una sequenza di blocco, PIN o password per impedire a chi si impossessa del dispositivo di visualizzare le tue credenziali.
+
+ Imposta una sequenza di blocco, PIN o password per impedire a chi si impossessa del dispositivo di visualizzare le password salvate.
Più tardi
@@ -1811,6 +1820,9 @@
Ordina il menu delle credenziali di accesso
+
+ Menu per ordinare le password
+
Compilazione automatica
@@ -1818,10 +1830,16 @@
Indirizzi
Carte di credito
+
+ Metodi di pagamento
Salvare e compilare automaticamente le carte
+
+ Salva e compila i metodi di pagamento
I dati sono crittati
+
+ %s critta tutti i metodi di pagamento salvati
Sincronizza le carte tra più dispositivi
@@ -1829,17 +1847,26 @@
Aggiungi una carta di credito
+
+ Aggiungi carta
Gestione carte salvate
+
+ Gestisci carte
Aggiungi indirizzo
Gestione indirizzi
Salvare e compilare automaticamente gli indirizzi
+
+ Salva e compila indirizzi
Includere informazioni come numeri, email e indirizzi di spedizione
+
+ Include numeri di telefono e indirizzi email
+
Aggiungi carta
@@ -1861,6 +1888,8 @@
Elimina carta
Eliminare questa carta di credito?
+
+ Eliminare la carta?
Elimina
@@ -1876,14 +1905,22 @@
Inserire un numero di carta di credito valido
+
+ Inserisci un numero di carta valido
Compilare questo campo
+
+ Aggiungi un nome
Sblocca per visualizzare le carte di credito salvate
Proteggi le tue carte di credito
+
+ Proteggi i metodi di pagamento salvati
Imposta una sequenza di blocco, PIN o password per impedire a chi si impossessa del dispositivo di visualizzare le carte di credito salvate.
+
+ Imposta una sequenza di blocco, PIN o password per impedire a chi si impossessa del dispositivo di visualizzare i metodi di pagamento salvati.
Imposta adesso
@@ -1894,6 +1931,8 @@
Sblocca per utilizzare le informazioni delle carte di credito salvate
+
+ Sblocca per utilizzare i metodi di pagamento salvati
Aggiungi indirizzo
@@ -1932,6 +1971,8 @@
Eliminare questo indirizzo?
+
+ Eliminare questo indirizzo?
Elimina
@@ -2030,30 +2071,52 @@
Modifica
Rimuovere queste credenziali?
+
+ Eliminare questa password?
Rimuovi
Annulla
Opzioni credenziali
+
+ Opzioni password
Il campo di testo modificabile per l’indirizzo web delle credenziali
+
+ Il campo di testo modificabile per l’indirizzo del sito web.
Il campo di testo modificabile per il nome utente delle credenziali
+
+ Il campo di testo modificabile per il nome utente.
Il campo di testo modificabile per la password delle credenziali
+
+ Il campo di testo modificabile per la password.
Salva le modifiche alle credenziali.
+
+ Salva modifiche.
Modifica
+
+ Modifica password
Aggiungi nuove credenziali
+
+ Aggiungi password
Password obbligatoria
+
+ Inserisci una password
Nome utente obbligatorio
+
+ Inserisci un nome utente
Nome server obbligatorio
+
+ Inserisci un indirizzo web
Ricerca vocale
@@ -2151,6 +2214,9 @@
Ricerca %s
+
+ Cambia il browser predefinito
+
Apri link da siti web, email e messaggi in Firefox per impostazione predefinita.
@@ -2224,8 +2290,6 @@
in evidenza provengono dalle recensioni su %s degli ultimi 80 giorni che riteniamo affidabili.]]>
Scopri ulteriori informazioni su %s.
-
- come %s by Mozilla determina la qualità delle recensioni
come %s determina la qualità delle recensioni
@@ -2413,6 +2477,8 @@
Traduzione in corso
+
+ Scegli una lingua
Si è verificato un problema durante la traduzione. Riprova.
@@ -2433,6 +2499,10 @@
Non tradurre mai %1$s
Non tradurre mai questo sito
+
+ Sostituisce tutte le altre impostazioni
+
+ Sostituisce la scelta relativa alla proposta di traduzione
Impostazioni traduzione
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 2b64746de..58167cd3b 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -242,6 +242,7 @@
התאמה אישית של מסך הבית
+
מסך הבית
@@ -249,6 +250,9 @@
מחיקת היסטורית גלישה
+
+ תרגום הדף
+
שפה נבחרת
@@ -260,8 +264,6 @@
סריקה
-
- מנוע חיפוש
הגדרות מנוע חיפוש
@@ -316,23 +318,28 @@
- התראות עוזרות לך לעשות יותר עם %s
+ התראות עוזרות לך לעשות יותר עם %s
- סנכרון הלשוניות שלך בין מכשירים, ניהול הורדות, קבלת טיפים להפקת המירב מהגנת הפרטיות של %s ועוד.
+ סנכרון הלשוניות שלך בין מכשירים, ניהול הורדות, קבלת טיפים להפקת המירב מהגנת הפרטיות של %s ועוד.
- המשך
+ המשך
- לא כעת
+ לא כעת
+
+ הצהרת הפרטיות של Firefox
+
אנחנו אוהבים לשמור עליך
- הדפדפן שלנו שמגובה בקרן ללא מטרות רווח מסייע למנוע מחברות לעקוב אחריך בסתר ברחבי הרשת.\n\nמידע נוסף בהצהרת הפרטיות שלנו.
+ הדפדפן שלנו שמגובה בקרן ללא מטרות רווח מסייע למנוע מחברות לעקוב אחריך בסתר ברחבי הרשת.
+
+ הדפדפן שלנו שמגובה בקרן ללא מטרות רווח מסייע למנוע מחברות לעקוב אחריך בסתר ברחבי הרשת.\n\nמידע נוסף בהצהרת הפרטיות שלנו.
- הצהרת פרטיות
+ הצהרת פרטיות
הגדרה כדפדפן ברירת המחדל
@@ -435,20 +442,10 @@
מצב HTTPS בלבד
-
- צמצום כרזות עוגיות
חוסם כרזות עוגיות
חוסם כרזות עוגיות בגלישה פרטית
-
- צמצום כרזות עוגיות
-
- כבוי
-
- פעיל
-
- %1$s מנסה לדחות בקשות עוגיות אוטומטית בכרזות עוגיות.
כבוי עבור אתר זה
@@ -467,33 +464,15 @@
האתר לא נתמך כרגע
- להפעיל צמצום כרזות עוגיות לאתר %1$s?
-
להפעיל חוסם כרזות עוגיות לאתר %1$s?
- להשבית צמצום כרזות עוגיות לאתר %1$s?
-
להשבית חוסם כרזות עוגיות לאתר %1$s?
ל־%1$s אין אפשרות לדחות באופן אוטומטי בקשות עוגיות באתר הזה. אפשר לשלוח בקשה לתמוך באתר הזה בעתיד.
- %1$s ינקה את העוגיות של אתר זה וירענן את הדף. ניקוי כל העוגית עשוי לנתק את החשבון שלך מהאתר או לרוקן את עגלת הקניות שלך.
-
כיבוי אפשרות זו תגרום לכך ש־%1$s ינקה עוגיות ויטען מחדש את אתר זה. פעולה זו עשויה לנתק את החשבון שלך מהאתר או לרוקן את עגלת הקניות שלך.
- %1$s מנסה לדחות באופן אוטומטי את כל בקשות העוגיות באתרים נתמכים.
-
הפעלת אפשרות זו תגרום לכך ש־%1$s ינסה לסרב באופן אוטומטי לכל כרזות העוגיות באתר זה.
-
- לאפשר ל־%1$s לדחות כרזות עוגיות?
-
- %1$s יכול לדחות באופן אוטומטי מגוון רחב של בקשות כרזות עוגיות.
-
- לא כעת
-
- תוצגנה פחות בקשות עוגיות
-
- לאפשר
%1$s הרגע סירב לעוגיות עבורך
@@ -714,6 +693,8 @@
סימניות
כניסות
+
+ ססמאות
לשוניות פתוחות
@@ -740,6 +721,8 @@
כרטיסי אשראי
+
+ אמצעי תשלום
כתובות
@@ -1281,8 +1264,6 @@
סגירה
- לא ניתן להדפיס
-
לא ניתן להדפיס דף זה
הדפסה
@@ -1684,8 +1665,12 @@
כניסות וססמאות
+
+ ססמאות
שמירת כניסות וססמאות
+
+ שמירת ססמאות
לבקש לשמור
@@ -1704,26 +1689,45 @@
הוספת כניסה
+
+ הוספת ססמה
+
סנכרון כניסות
+
+ סנכרון ססמאות
סנכרון כניסות בין מכשירים
+
+ סנכרון ססמאות בין מכשירים
כניסות שמורות
+
+ ססמאות שמורות
הכניסות שיישמרו או יסתנכרנו אל %s יופיעו כאן.
+
+ הססמאות שיישמרו או יסונכרנו עם %s יופיעו כאן. כל הססמאות השמורות הינן מוצפנות.
מידע נוסף על Sync.
+
+ מידע נוסף על סנכרון
חריגות
כניסות וססמאות שאינן שמורות יופיעו כאן.
+
+ %s לא ישמור ססמאות לאתרים המפורטים כאן.
כניסות וססמאות לא יישמרו עבור אתרים אלו.
+
+ %s לא ישמור ססמאות לאתרים אלו.
מחיקת כל החריגות
חיפוש כניסות
+
+ חיפוש ססמאות
אתר
@@ -1752,10 +1756,16 @@
הסתרת ססמה
יש לבטל את הנעילה כדי להציג את הכניסות השמורות שלך
+
+ יש לבטל את הנעילה כדי להציג את הססמאות השמורות שלך
שמירה מאובטחת של הכניסות והססמאות שלך
+
+ אבטחת הססמאות השמורות שלך
ניתן להגדיר תבנית נעילת מכשיר, קוד או ססמה כדי להגן על פרטי הגישה והססמאות השמורות שלך מפני גורמים בלתי מהימנים שמחזיקים במכשיר שלך.
+
+ ניתן להגדיר תבנית נעילת מכשיר, קוד או ססמה כדי להגן על הססמאות השמורות שלך מפני גורמים בלתי מהימנים שמחזיקים במכשיר שלך.
מאוחר יותר
@@ -1775,6 +1785,9 @@
תפריט מיון כניסות
+
+ תפריט מיון ססמאות
+
מילוי אוטומטי
@@ -1782,10 +1795,16 @@
כתובות
כרטיסי אשראי
+
+ אמצעי תשלום
שמירה ומילוי אוטומטי של כרטיסים
+
+ שמירה ומילוי אמצעי תשלום
הנתונים מוצפנים
+
+ %s מצפין את כל אמצעי התשלום השמורים
סנכרון כרטיסים בין מכשירים
@@ -1793,8 +1812,12 @@
הוספת כרטיס אשראי
+
+ הוספת כרטיס
ניהול כרטיסים שמורים
+
+ ניהול כרטיסים
הוספת כתובת
@@ -1802,9 +1825,14 @@
שמירה ומילוי אוטומטי של כתובות
+
+ שמירה ומילוי כתובות
לכלול מידע כמו מספרים, כתובות דוא״ל וכתובות למשלוח
+
+ כולל מספרי טלפון וכתובות דוא״ל
+
הוספת כרטיס
@@ -1825,6 +1853,8 @@
מחיקת כרטיס
האם ברצונך למחוק את כרטיס האשראי הזה?
+
+ למחוק את הכרטיס?
מחיקה
@@ -1840,14 +1870,22 @@
נא להכניס מספר כרטיס אשראי תקין
+
+ נא להכניס מספר כרטיס תקני
נא למלא שדה זה
+
+ הוספת שם
יש לבטל את הנעילה כדי להציג את הכרטיסים השמורים שלך
אבטחת כרטיסי האשראי שלך
+
+ אבטחת אמצעי התשלום השמורים שלך
ניתן להגדיר תבנית נעילת מכשיר, קוד או ססמה כדי להגן על כרטיסי האשראי השמורים שלך מפני גורמים בלתי מהימנים שמחזיקים במכשיר שלך.
+
+ ניתן להגדיר תבנית נעילת מכשיר, קוד או ססמה כדי להגן על אמצעי התשלום השמורים שלך מפני גורמים בלתי מהימנים שמחזיקים במכשיר שלך.
להגדיר כעת
@@ -1858,6 +1896,8 @@
יש לבטל את הנעילה כדי להשתמש בפרטי כרטיס האשראי השמור
+
+ יש לבטל את הנעילה כדי להשתמש באמצעי התשלום השמורים שלך
הוספת כתובת
@@ -1894,6 +1934,8 @@
האם ברצונך למחוק את כתובת זו?
+
+ למחוק את הכתובת הזאת?
מחיקה
@@ -1993,30 +2035,52 @@
עריכה
האם ברצונך למחוק את כניסה זו?
+
+ האם ברצונך למחוק ססמה זו?
מחיקה
ביטול
אפשרויות כניסה
+
+ אפשרויות ססמה
- שדה הטקסט הניתן לעריכה עבור כתובת האינטרנט של הכניסה.
+ שדה הטקסט הניתן לעריכה עבור כתובת האתר של הכניסה.
+
+ שדה הטקסט הניתן לעריכה עבור כתובת האתר.
שדה הטקסט הניתן לעריכה עבור שם המשתמש של הכניסה.
+
+ שדה הטקסט הניתן לעריכה עבור שם המשתמש.
שדה הטקסט הניתן לעריכה עבור הססמה של הכניסה.
+
+ שדה הטקסט הניתן לעריכה עבור הססמה.
שמירת השינויים של הכניסה.
+
+ שמירת שינויים.
עריכה
+
+ עריכת הססמה
הוספת כניסה חדשה
+
+ הוספת ססמה
נדרשת ססמה
+
+ נא להכניס ססמה
דרוש שם משתמש
+
+ נא להכניס שם משתמש
דרוש שם מארח
+
+ נא להכניס כתובת אתר
חיפוש קולי
@@ -2114,6 +2178,9 @@
חיפוש ב־%s
+
+ החלפת דפדפן ברירת המחדל שלך
+
הגדרת קישורים מאתרים, מהודעות דוא״ל ומהודעות לפתיחה אוטומטית ב־Firefox.
@@ -2187,8 +2254,6 @@
הדגשים הם מסקירות של %s במהלך 80 הימים האחרונים, שאנו מאמינים שהן אמינות.]]>
מידע נוסף על %s.
-
- כיצד %s מבית Mozilla קובע את איכות הסקירות
כיצד %s קובע את איכות הסקירות
@@ -2373,6 +2438,8 @@
התרגום בתהליך
+
+ בחירת שפה
אירעה שגיאה בתרגום. נא לנסות שוב.
@@ -2393,6 +2460,10 @@
לעולם לא לתרגם מ%1$s
לעולם לא לתרגם את אתר זה
+
+ עוקף את כל ההגדרות האחרות
+
+ עוקף הצעות לתרגום
הגדרות תרגום
diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml
index 79bbd76de..551805b33 100644
--- a/app/src/main/res/values-ja/strings.xml
+++ b/app/src/main/res/values-ja/strings.xml
@@ -248,6 +248,7 @@
ホームページをカスタマイズ
+
ホーム画面
@@ -255,6 +256,9 @@
閲覧履歴を消去
+
+ ページを翻訳
+
選択した言語
@@ -266,8 +270,6 @@
スキャン
-
- 検索エンジン
検索エンジンの設定
@@ -323,23 +325,28 @@
- 通知は %s を活用するのに役立ちます
+ 通知は %s を活用するのに役立ちます
- 端末間でタブを共有したり、ダウンロードを管理したり、%s のプライバシー保護機能を最大限に活用するためのヒントを入手できます。
+ 端末間でタブを共有したり、ダウンロードを管理したり、%s のプライバシー保護機能を最大限に活用するためのヒントを入手できます。
- 続ける
+ 続ける
- 後で
+ 後で
+
+ Firefox のプライバシー通知
+
私たちはあなたの安全を守りたいと願っています
- 非営利で作られた私たちのブラウザーは、企業によるウェブ上の密かな追跡を阻止するのに役立ちます。\n\n詳細はプライバシー通知をご覧ください。
+ 非営利で作られた私たちのブラウザーは、企業によるウェブ上の密かな追跡を阻止するのに役立ちます。
+
+ 非営利で作られた私たちのブラウザーは、企業によるウェブ上の密かな追跡を阻止するのに役立ちます。\n\n詳細はプライバシー通知をご覧ください。
- プライバシー通知
+ プライバシー通知
既定のブラウザーに設定
@@ -445,22 +452,11 @@
HTTPS-Only モード
-
- Cookie バナーの削減
Cookie バナーブロッカー
プライベートブラウジングでの Cookie バナーブロッカー
-
- Cookie バナーを減らす
-
- オフ
-
- オン
-
-
- %1$s が自動的に Cookie バナー上の Cookie 要求を拒否しようとします。
このサイトでオフ
@@ -479,36 +475,16 @@
現在サポートされていないサイトです
- %1$s で Cookie バナー削減を有効にしますか?
-
%1$s で Cookie バナーブロッカーをオンにしますか?
- %1$s で Cookie バナー削減を無効にしますか?
-
%1$s で Cookie バナーブロッカーをオフにしますか?
%1$s は現在、このサイトの Cookie 使用要求を自動的に拒否できません。このサイトへの対処を要求してください。
-
- %1$s はこのサイトの Cookie を消去してページを読み込み直します。すべての Cookie を消去すると、ログアウトしたり、ショッピングカートが空になったりする場合があります。
オフにすると、%1$s に保存された Cookie を消去してこのサイトを再読み込みします。サイトからログアウトしたり、買い物かごが空になったりする場合があります。
- %1$s はサポートされたサイト上の Cookie 要求を自動的に拒否しようとします。
-
オンにすると、このサイトのすべての Cookie バナーに対して %1$s が自動的に拒否を試みます。
-
- %1$s に Cookie バナーを拒否させますか?
-
- %1$s は多くの Cookie バナーの同意確認を自動的に拒否できます。
-
- 後で
-
-
- Cookie 要求が少なくなります
-
-
- 許可
%1$s が Cookie を拒否しました
@@ -726,6 +702,8 @@
ブックマーク
ログイン情報
+
+ パスワード
開いているタブ
@@ -752,6 +730,8 @@
クレジットカード情報
+
+ 支払い方法
住所
@@ -1298,8 +1278,6 @@
閉じる
- 印刷できません
-
このページを印刷できません
印刷
@@ -1708,8 +1686,12 @@
ログイン情報とパスワード
+
+ パスワード
ログイン情報を保存する
+
+ パスワードを保存
保存するか確認する
@@ -1727,26 +1709,45 @@
ログイン情報を追加
+
+ パスワードを追加
+
ログイン情報を同期
+
+ パスワードを同期
端末間でログイン情報を同期します
+
+ 端末間でパスワードを同期
保存されたログイン情報
+
+ 保存されたパスワード
端末に保存または %s と同期したログイン情報がここに表示されます。
+
+ %s に保存または同期したパスワードがこのリストに表示されます。保存されたすべてのパスワードは暗号化されます。
Sync についての詳細情報。
+
+ Sync についての詳細情報
例外
ログイン情報が保存されないサイトがここに表示されます。
+
+ %s は、このリストに表示されているサイトのパスワードを保存しません。
これらのサイトではログイン情報が保存されません。
+
+ %s はこれらのサイトのパスワードを保存しません。
すべての例外を削除
ログイン情報を検索
+
+ パスワードを検索
サイト
@@ -1775,10 +1776,16 @@
パスワードを隠す
ロック解除して保存されたログイン情報を表示します
+
+ 保存されたパスワードを表示するにはロック解除してください
ログイン情報とパスワードの保護
+
+ 保存されたパスワードを保護してください
端末のロックパターンや PIN、パスワードを設定して、保存されたログイン情報とパスワードを他人の不正なアクセスから保護しましょう。
+
+ 端末のロックパターンや PIN、パスワードを設定して、保存されたパスワードを他人の不正なアクセスから保護しましょう。
後で
@@ -1798,6 +1805,9 @@
ログイン情報メニューの並べ替え
+
+ パスワードを並べ替えます
+
自動入力
@@ -1806,18 +1816,28 @@
クレジットカード
+
+ 支払い方法
カード情報を保存して自動入力する
+
+ 支払い方法を保存して入力する
データは暗号化されています
+
+ %s は保存したすべての支払い方法を暗号化します
端末間でカード情報を同期する
クレジットカード情報を同期
クレジットカードを追加
+
+ カード情報を追加
保存したカードを管理
+
+ カード情報を管理
アドレスを追加
@@ -1825,9 +1845,14 @@
アドレスを保存して自動入力する
+
+ 住所を保存して入力する
カード番号、メールアドレス、配送先などの情報を含める
+
+ 電話番号とメールアドレスを含みます
+
カードの追加
@@ -1849,6 +1874,8 @@
カードを削除
本当にこのクレジットカード情報を削除してもよろしいですか?
+
+ カード情報を削除しますか?
削除
@@ -1864,15 +1891,23 @@
有効なクレジットカード番号を入力してください
+
+ 正しいカード番号を入力してください
このフィールドは入力必須です
+
+ 名前を追加してください
保存されたカード情報を表示するにはロック解除してください
クレジットカード情報の保護
+
+ 保存された支払い方法を保護してください
端末のロックパターンや PIN、パスワードを設定して、保存されたクレジットカード情報とパスワードを他人の不正なアクセスから保護しましょう。
+
+ 端末のロックパターンや PIN、パスワードを設定して、保存された支払い方法を他人の不正なアクセスから保護しましょう。
今すぐ設定
@@ -1883,6 +1918,8 @@
ロックを解除して保存したクレジットカード情報を使用します
+
+ 保存された支払い方法を使用するにはロック解除してください
アドレスを追加
@@ -1920,6 +1957,8 @@
本当にこの住所を削除してもよろしいですか?
+
+ このアドレスを削除しますか?
削除
@@ -2018,6 +2057,8 @@
編集
このログイン情報を削除してもよろしいですか?
+
+ 本当にこのパスワードを削除してもよろしいですか?
削除
@@ -2025,24 +2066,44 @@
キャンセル
ログインオプション
+
+ パスワードのオプション
ログイン情報のウェブアドレスの編集可能なテキストフィールド。
+
+ ウェブサイトのアドレスの編集可能なテキストフィールド。
ログイン情報のユーザー名の編集可能なテキストフィールド。
+
+ ユーザー名の編集可能なテキストフィールド。
ログイン情報のパスワードの編集可能なテキストフィールド。
+
+ パスワードの編集可能なテキストフィールド。
変更を保存してログインします。
+
+ 変更を保存します。
編集
+
+ パスワードを編集
新しいログイン情報の追加
+
+ パスワードを追加
パスワードが必要です
+
+ パスワードを入力してください
ユーザー名は必須です
+
+ ユーザー名を入力してください
ホスト名は必須です
+
+ ウェブアドレスを入力してください
音声検索
@@ -2139,6 +2200,9 @@
%s 検索
+
+ 既定のブラウザーを変更しませんか
+
ウェブサイトやメール、メッセージのリンクを自動的に Firefox で開きます。
@@ -2213,8 +2277,6 @@
注目レビュー は最近 80 日以内の %s からのレビューで私たちが信頼するに足ると評価したものです。]]>
%s についての詳細。
-
- %s by Mozilla がレビュー品質を決定する方法について
%s がレビュー品質を決定する方法について
@@ -2400,6 +2462,8 @@
翻訳中
翻訳中です
+
+ 言語を選択
翻訳時に問題が発生しました。もう一度試してください。
@@ -2420,6 +2484,10 @@
%1$s のページは翻訳しない
このサイトは翻訳しない
+
+ 他のすべての設定を上書きします
+
+ 翻訳機能の設定を上書きします
翻訳設定
diff --git a/app/src/main/res/values-kab/strings.xml b/app/src/main/res/values-kab/strings.xml
index c3a84bcb1..099ae1be7 100644
--- a/app/src/main/res/values-kab/strings.xml
+++ b/app/src/main/res/values-kab/strings.xml
@@ -216,6 +216,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Ales amtawi
Nadi deg usebter
+
+ Suqel asebter
Sekles ɣer tegrumma
@@ -246,6 +248,7 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Sagen asebter agejdan
+
Agilal agejdan
@@ -253,6 +256,10 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Sfeḍ azray n tunigin
+
+
+ Suqel asebter
+
Fren tutlayt
@@ -264,8 +271,6 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Snirem
-
- Amsedday unadi
Iɣewwaṛen n umsedday n unadi
@@ -320,24 +325,29 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
- Ilɣa ttɛawanen ad tgeḍ ugar akked %s
+ Ilɣa ttɛawanen ad tgeḍ ugar akked %s
- Mtawi iccaren-ik•im gar yibenkan, sefrek isadaren, awi iwellihen akken ad tfarseḍ deg ummesten n tbaḍnit n %s, d wugar.
+ Mtawi iccaren-ik•im gar yibenkan, sefrek isadaren, awi iwellihen akken ad tfarseḍ deg ummesten n tbaḍnit n %s, d wugar.
- Kemmel
+ Kemmel
- Mačči tura
+ Mačči tura
+
+ Tasertit tabaḍnit n Firefox
+
Nḥemmel ad teqqimeḍ d aɣellsan
- Iminig-nneɣ tettallit yiwet n tkebbanit ur nettnadi ɣef tedrimt, tessewḥal tikebbaniyin ara ak-iḍefren deg web.\n\nIssin ugar ɣef tsertit-nneɣ n tbaḍnit.
+ Iminig-nneɣ tettallit yiwet n tkebbanit ur nettnadi ɣef tedrimt, tessewḥal tikebbaniyin ara ak-iḍefren deg web.
+
+ Iminig-nneɣ tettallit yiwet n tkebbanit ur nettnadi ɣef tedrimt, tessewḥal tikebbaniyin ara ak-iḍefren deg web.\n\nIssin ugar ɣef tsertit-nneɣ n tbaḍnit.
- tasertit n tbaḍnit
+ tasertit n tbaḍnit
Sbadu-t d iminig amezwer
@@ -436,21 +446,11 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Askar HTTPS-Only
-
- Asenqes n yiɣarracen n yinagan n tuqqna
Amsewḥel n yiɣarracen n yinagan n tuqqna
Amsewḥal n uɣerrac n yinagan n tuqqna deg tunigin tusligt
-
- Senqes iɣarracen n yinagan n tuqqna
-
- Yensa
-
- Yermed
-
-
- %1$s iɛerreḍ s wudem awurman ad yagi isuturen n yinagan n tuqqna deg yiɣarracen n yinagan n tuqqna.
+
Sens i usmel-a
@@ -468,34 +468,15 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Asmel-a ur yettusefrak ara akka tura
- Rmed asenqes n yiɣerracen n yinagan n tuqqna i %1$s?
-
Rmed amsewḥel n yiɣerracen n yinagan n tuqqna i %1$s?
-
- Sens asenqes n yiɣerracen n yinagan n tuqqna i %1$s?
Sens amsewḥel n yiɣerracen n yinagan n tuqqna i %1$s?
%1$s ur yezmir ara ad yagi issutar n trusi n yinagan n tuqqna s wudem awurman ɣef usmel-a. Tzemreḍ ad tazneḍ assuter i tallalt n usmel-a ɣer sdat.
-
- %1$s ad isfeḍ inagan n tuqqna n usmel-a syen ad issesfer asebter. Asfaḍ meṛṛa n yinagan n tuqqna yezmer ad ak·am-isseḥbes tuqqna neɣ ad yenɣel tiqecwalin n tiɣtin.
Sens ma d %1$s ad yesfeḍ inagan n tuqqna sakin ad yales asali n usmel-a. Atagi ad ak-isuffeɣ neɣ ad isilem tikarḍiwin-ik n tiɣin.
-
- %1$s yettaɛraḍ s wudem awurman ad yagi issutar n yinagan n tuqqna deg yismal i ten-yessefraken.
-
- Sireg %1$s ad yagi iɣarracen n yinagan n tuqqna?
-
- %1$s yezmer ad yagi aṭas yissutar n yiɣarracen n yinagan n tuqqna s wudem awurman.
-
- Mačči tura
-
- Ad twaliḍ drus n yissutar n yinagan n tuqqna
-
-
- Sireg
%1$s yugi inagan n tuqqna i kečč
@@ -602,6 +583,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Izegrar
+
+ Sebded azegrir seg ufaylu
Ilɣa
@@ -711,6 +694,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Ticraḍ n yisebtar
Inekcam
+
+ Awalen uffiren
Accaren yeldin
@@ -738,6 +723,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Tikarḍiwin n usmad
+
+ Tarrayin n uxelleṣ
Tansiwin
@@ -1283,8 +1270,6 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Zgel
- Ur yizmir ara ad issigez
-
D awezɣi ad yettwasiggez usebtar-a
Siggez
@@ -1329,6 +1314,10 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Mdel iccaren usligen
+
+
+ Mdel iccaren usligen?
+
Talzuzit
@@ -1569,6 +1558,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Akk inagan n tuqqna (ad rẓen isaml web)
Ɛzel inagan n tuqqna gar yismal
+
+ Ssuter i yismal web ur snuzuyen, ur beṭṭun isefka-w
Agbur n uḍfaṛ
@@ -1686,8 +1677,12 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Inekcam d wawalen uffiren
+
+ Awalen uffiren
Sekles inekcam d wawalen uffiren
+
+ Sekles awalen uffiren
Suter asekles
@@ -1705,16 +1700,25 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Rnu anekcum
+
+ Rnu awal uffir
+
Mtawi inekcam
+
+ Mtawi awalen uffiren
Mtawi inekcam gqr yibenkan
Inekcam yettwakelsen
+
+ Awalen uffiren yettwakelsen
Anekcum i tḥerzeḍ ɣer %s ad d-ittwasken da.
Issin ugar ɣef umtawi.
+
+ Issin ugar ɣef umtawi
Tisuraf
@@ -1725,6 +1729,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Kkes akk tisuraf
Nadi inekcam
+
+ Nadi awalen uffiren
Asmel web
@@ -1755,6 +1761,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Serreḥ akken ad tsekneḍ inekcam-ik yettwaskelsen
Mmesten inekcam d wawalen uffiren
+
+ Seɣles awalen-ik·im uffiren i yettwaskelsen
Sbadu azenziɣ n usekkeṛ, tangal PIN, neɣ awal uffir akken ad temmesteneḍ inekcam-ik akked wawlen-ik uffiren yettwaskelsen ticki yella win ikecmen ɣer yibenk-ik.
@@ -1784,6 +1792,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Tansiwin
Tikarḍiwin n usmad
+
+ Tarrayin n uxelleṣ
Asekles d taččart tawurmant n tkarḍiwin
@@ -1794,14 +1804,20 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Mtawi tikarḍiwin
Rnu takarḍa n usmad
+
+ Rnu takarḍa
Sefrek tikerḍiwin yettwaskelsen
+
+ Sefrek tikarḍiwin
Rnu tansa
Sefrek tansiwin
Asekles d taččart tawurmant n tansiwin
+
+ Sekles; teččareḍ tansiwin
Seddu talɣut am wuṭṭunen, imayl akked tansiwin n usiweḍ
@@ -1825,6 +1841,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Kkes takarḍa
Tebɣiḍ s tidet ad tekkseḍ takarḍa-a n usmad?
+
+ Kkes takarḍa?
Kkes
@@ -1839,8 +1857,12 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Ma ulac aɣilif sekcem uṭṭun ameɣtu n tkarḍa n usmad
+
+ Sekcem uṭṭun n tkarḍa ameɣtu
Ttxil-k·m ččar urti-a
+
+ Rnu isem
Kkes asekkeṛ i wakken ad twaliḍ tikerḍiwin-ik·im yettwaskelsen
@@ -1893,6 +1915,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
D tidet tebɣiḍ ad tekkseḍ tansa-a?
+
+ Kkes tansa-a?
Kkes
@@ -1999,6 +2023,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Sefsex
Iɣewwaren n unekcum
+
+ Tixtiṛiyin n wawal uffir
Urti n uḍris yettusenfal i tansa n unekcum n web.
@@ -2007,16 +2033,28 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Urti n uḍris yettusenfal i wawal uffir n unekcum.
Sekles isenfaln unekcum.
+
+ Sekles isenfal.
Ẓreg
+
+ Ẓreg awal uffir
Rnu anekcum amaynut
+
+ Rnu awal uffir
Awal uffir yettusra
+
+ Sekcem awal uffir
Isem n useqdac yettwasra
+
+ Sekcem isem n useqdac
Asenneftaɣ yettwasra
+
+ Sekcem tansa web
Anadi s taɣect
@@ -2115,6 +2153,9 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Anadi %s
+
+ Beddel iminig-ik·im amezwer
+
Sbadu iseɣwan seg yismal web, seg yimaylen d yiznan i twaledyawt s wudem awurman deg Firefox.
@@ -2204,6 +2245,8 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Adenqed n tɣara n yilɣa
Adenqed n tɣara n yilɣa
+
+ Adenqed n tɣara n yilɣa (%s)
Aya yezmer ad yeṭṭef 60 tsinin.
@@ -2231,13 +2274,13 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Issin ugar
- Tasertit n tbaḍnit
+ Tasertit n tbaḍnit
- Tasertit n tbaḍnit
+ Tasertit n tbaḍnit
- tiwtilin n useqdec
+ tiwtilin n useqdec
- Tiwtilin n useqdec
+ Tiwtilin n useqdec
Ih, ɛreḍ tikkelt niḍen
@@ -2291,11 +2334,21 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
ldi aseɣwen i wakken ad tissineḍ ugar
+
+ %s, azwel
+
+ Iseɣwan
+
+
+ Iseɣwan i yellan
+
Suqqel asebter-a?
+
+ Ԑreḍ tisuqilin tusligin n %1$s
Issin ugar
@@ -2304,22 +2357,60 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Suqqel ɣer
Mačči tura
+
+ Immed
Suqel
+
+ Ɛreḍ tikelt nniḍen
Suqqel
+
+ Asuqel iteddu
+
+ Fren tutlayt
+
+ Yella wugur deg usuqqel. Ttxil-k ɛreḍ tikkelt niḍen.
+
+ Nesḥassef, mazal ur nessefrak ara tutlayt %1$s.
+
+ Issin ugar
+
+
+
+ Tixtiṛiyin n usuqel
Sumer yal tikkelt tasuqqilt
+
+ Sueqqel yal tikkelt %1$s
+
+ Ur suqqul ara %1$s
Werǧin asuqel n usmel-a
+
+ Iɣewwaren n usuqqel
+
+ Γef tsuqqilin deg %1$s
+
Tisuqilin
Ismenyifen n tsuqilt
+
+ Sader tutlayin
+
+
+ Sueqqel yal tikkelt
+
+ Werǧin attsuqleḍ
+
+
+
+ Ur suqqul ara ismal-a
Kkes %1$s
@@ -2340,6 +2431,10 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Tutlayin yellan
iţusra
+
+ %1$s (%2$s)
Sader tutlayin
@@ -2353,6 +2448,14 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Yettwafran
+
+ Kkes %1$s (%2$s)?
+
+ Kkes akk tutlayin (%1$s)?
Kkes
@@ -2360,9 +2463,17 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Sader
+
+ Sader syen suqqel
Sefsex
+
+ Inig ar deffir
+
+ Ifecka n yiccer
+
+ Amḍan n waccaren
Urmid
@@ -2371,4 +2482,4 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara
Tabaḍnit
Asemday
-
+
diff --git a/app/src/main/res/values-kk/strings.xml b/app/src/main/res/values-kk/strings.xml
index 2e6190648..acd6830c3 100644
--- a/app/src/main/res/values-kk/strings.xml
+++ b/app/src/main/res/values-kk/strings.xml
@@ -240,6 +240,7 @@
Үй бетін баптау
+
Бастапқы экран
@@ -247,6 +248,9 @@
Шолу тарихын өшіру
+
+ Парақты аудару
+
Таңдалған тіл
@@ -259,8 +263,6 @@
Сканерлеу
-
- Іздеу жүйесі
Іздеу жүйесінің параметрлері
@@ -315,23 +317,28 @@
- Хабарландырулар %s арқылы көбірек жұмыс бітіруге көмектеседі
+ Хабарландырулар %s арқылы көбірек жұмыс бітіруге көмектеседі
- Беттерді құрылғылар арасында синхрондаңыз, жүктемелерді басқарыңыз, %s жекелігін қорғау мүмкіндігін барынша пайдалану туралы кеңестер алыңыз және т.б.
+ Беттерді құрылғылар арасында синхрондаңыз, жүктемелерді басқарыңыз, %s жекелігін қорғау мүмкіндігін барынша пайдалану туралы кеңестер алыңыз және т.б.
- Жалғастыру
+ Жалғастыру
- Қазір емес
+ Қазір емес
+
+ Firefox жекелік ескертуі
+
Біз сіздің қауіпсіздігіңізді қамтамасыз етуді жақсы көреміз
- Коммерциялық емес ұйымы қолдау көрсететін браузеріміз компаниялардың сізді интернетте жасырын бақылап отыруын тоқтатуға көмектеседі.\n\nЖекелік ескертуімізден толығырақ ақпарат алыңыз.
+ Коммерциялық емес ұйымы қолдауымен жасалатын біздің браузер компанияларды интернетте сізді жасырын түрде бақылауын автоматты түрде тоқтатуға көмектеседі.
+
+ Коммерциялық емес ұйымы қолдау көрсететін браузеріміз компаниялардың сізді интернетте жасырын бақылап отыруын тоқтатуға көмектеседі.\n\nЖекелік ескертуімізден толығырақ ақпарат алыңыз.
- жекелік ескертуі
+ жекелік ескертуі
Негізгі браузер қылу
@@ -435,21 +442,11 @@
Тек-HTTPS режимі
-
- Cookie баннерлерін азайту
Cookie баннерлерін бұғаттаушы
Жекелік шолу режиміндегі cookie баннерлерін бұғаттаушы
-
- Cookie баннерлерін азайту
-
- Сөндірулі
-
- Іске қосулы
-
-
- %1$s cookie баннерлеріндегі cookie сұрауларын автоматты түрде қабылдамау әрекетін жасайды.
+
Бұл сайт үшін сөндірілген
@@ -468,37 +465,17 @@
Сайтқа ағымдағы уақытта қолдау жоқ
- %1$s үшін cookie баннерлерін азайту мүмкіндігін іске қосу керек пе?
-
%1$s үшін cookie баннерлерін бұғаттаушын іске қосу керек пе?
-
- %1$s үшін cookie баннерлерін азайту мүмкіндігін сөндіру керек пе?
%1$s үшін cookie баннерлерін бұғаттаушын сөндіру керек пе?
%1$s бұл сайттағы cookie сұрауларын автоматты түрде қабылдамай алмайды. Болашақта осы сайтқа қолдау көрсету туралы сұраным жібере аласыз.
-
- %1$s осы сайттың cookie файлдарын тазартып, бетті жаңартады. Барлық cookie файлдарын тазарту салдарынан сіз сайттан шығуыңыз мүмкін немесе дүкен себеттері тазартылуы мүмкін.
Сөндіріңіз, %1$s қолданбасы cookie файлдарын тазартып, бұл сайтты қайта жүктейді. Бұл әрекет сайттардан шығуға немесе себетті босатуы мүмкін.
- %1$s қолдау көрсетілетін сайттардағы барлық cookie сұрауларын автоматты түрде қабылдамау әрекетін жасайды.
-
Іске қосыңыз, және де %1$s осы сайттағы барлық cookie баннерлерінен автоматты түрде бас тартуға тырысады.
-
- %1$s үшін cookie баннерлерін қабылдамауға рұқсат бересіз бе?
-
- %1$s көптеген cookie баннер сұрауларын автоматты түрде қабылдамау әрекетін жасай алады.
-
- Қазір емес
-
-
- Сіз азырақ cookie сұрауларын көресіз
-
-
- Рұқсат ету
%1$s сіз үшін жаңа ғана cookie файлдарынан бас тартты
@@ -714,6 +691,8 @@
Бетбелгілер
Логиндер
+
+ Парольдер
Ашық беттер
@@ -739,6 +718,8 @@
Несиелік карталар
+
+ Төлем әдістері
Адрестер
@@ -1275,8 +1256,6 @@
Тайдыру
- Баспаға шығару мүмкін емес
-
Бұл бетті басып шығару мүмкін емес
Баспаға шығару
@@ -1681,8 +1660,12 @@
Логиндер және парольдер
+
+ Парольдер
Логиндер және парольдерді сақтау
+
+ Парольдерді сақтау
Сақтау алдында сұрау
@@ -1701,26 +1684,45 @@
Логинді қосу
+
+ Парольді қосу
+
Логиндерді синхрондау
+
+ Парольдерді синхрондау
Логиндерді құрылғылар арасында синхрондау
+
+ Парольдерді құрылғылар арасында синхрондау
Сақталған логиндер
+
+ Сақталған парольдер
Сіз %s ішінде сақтаған немесе синхрондаған логиндер осында көрсетіледі.
+
+ Сіз %s ішіне сақтаған немесе синхрондаған парольдер осында тізіліп көрсетіледі. Сіз сақтаған барлық парольдер шифрленген.
Синхрондау туралы көбірек біліңіз.
+
+ Синхрондау туралы көбірек біліңіз
Ережеден бөлек
Сақталмаған логиндер мен парольдер осында көрсетіледі.
+
+ %s осы жерде тізімделген сайттар үшін парольдерді сақтамайтын болады.
Бұл сайттар үшін логиндер мен парольдер сақталмайды.
+
+ %s бұл сайттар үшін парольдерді сақтамайтын болады.
Барлық ережеден тыс жағдайларды өшіру
Логиндерден іздеу
+
+ Парольдерді іздеу
Сайт
@@ -1749,10 +1751,16 @@
Парольді жасыру
Сақталған логиндеріңізді көру үшін бұғаттауын ашыңыз
+
+ Сақталған парольдеріңізді көру үшін бұғаттауын ашыңыз
Логиндер және парольдерді қорғаңыз
+
+ Сақталған парольдерді қорғаңыз
Бөтен адам сіздің құрылғыңызда болса, одан сақталған логиндер мен парольдерді қорғау үшін құрылғының бұғаттау үлгісін, PIN-кодын немесе парольді орнатыңыз.
+
+ Бөтен адам сіздің құрылғыңызда болса, одан сақталған парольдеріңізді қорғау үшін құрылғының бұғаттау үлгісін, PIN-кодын немесе парольді орнатыңыз.
Кейінірек
@@ -1771,6 +1779,9 @@
Логиндерді сұрыптау мәзірі
+
+ Парольдерді сұрыптау мәзірі
+
Автотолтыру
@@ -1778,10 +1789,16 @@
Адрестер
Несиелік карталар
+
+ Төлем әдістері
Карталарды сақтау және автотолтыру
+
+ Төлем әдістерін сақтау және толтыру
Деректер шифрленген
+
+ %s сіз сақтаған барлық төлем әдістерін шифрлейді
Карталарды құрылғылар арасында синхрондау
@@ -1789,17 +1806,26 @@
Несиелік картаны қосу
+
+ Картаны қосу
Сақталған карталарды басқару
+
+ Карталарды басқару
Адресті қосу
Адрестерді басқару
Адрестерді сақтау және автотолтыру
+
+ Адрестерді сақтау және толтыру
Нөмірлер, эл. пошта және жеткізу адрестері сияқты ақпаратты қосу
+
+ Телефон нөмірлері мен электрондық пошта адрестерін қамтиды
+
Картаны қосу
@@ -1820,6 +1846,8 @@
Картаны өшіру
Бұл несие картасын өшіруді шынымен қалайсыз ба?
+
+ Картаны өшіру керек пе?
Өшіру
@@ -1835,14 +1863,22 @@
Несиелік картаның жарамды нөмірін енгізіңіз
+
+ Жарамды карта нөмірін енгізіңіз
Бұл өрісті толтырыңыз
+
+ Атын қосыңыз
Сақталған карталарыңызды көру үшін бұғаттауын ашыңыз
Несиелік карталарыңызды қорғаңыз
+
+ Сақталған төлем әдістерін қорғаңыз
Бөтен адам сіздің құрылғыңызда болса, одан сақталған несиелік карталарды қорғау үшін құрылғының бұғаттау үлгісін, PIN-кодын немесе парольді орнатыңыз.
+
+ Бөтен адам сіздің құрылғыңызда болса, одан сақталған төлем әдістерін қорғау үшін құрылғының бұғаттау үлгісін, PIN-кодын немесе парольді орнатыңыз.
Қазір баптау
@@ -1853,6 +1889,8 @@
Сақталған несиелік карта ақпаратын қолдану үшін бұғаттауын ашыңыз
+
+ Сақталған төлем әдістерін қолдану үшін құлыптан босатыңыз
Адресті қосу
@@ -1891,6 +1929,8 @@
Бұл адресті өшіруді шынымен қалайсыз ба?
+
+ Бұл адресті өшіру керек пе?
Өшіру
@@ -1988,31 +2028,53 @@
Түзету
Бұл логинді өшіруді қалайсыз ба?
+
+ Бұл парольді өшіруді шынымен қалайсыз ба?
Өшіру
Бас тарту
Логин баптаулары
+
+ Пароль опциялары
Логиннің веб-адресі үшін түзетуге болатын мәтіндік өрісі.
+
+ Веб-сайт адресі үшін түзетуге болатын мәтіндік өрісі.
Логиннің пайдаланушы аты үшін түзетуге болатын мәтіндік өрісі.
+
+ Пайдаланушы аты үшін түзетуге болатын мәтіндік өрісі.
Логиннің паролі үшін түзетуге болатын мәтіндік өрісі.
+
+ Пароль үшін түзетуге болатын мәтіндік өрісі.
Логин өзгерістерін сақтау.
+
+ Өзгерістерді сақтау.
Түзету
+
+ Парольді түзету
Жаңа логинді қосу
+
+ Парольді қосу
Пароль керек
+
+ Парольді енгізіңіз
Пайдаланушы аты керек
+
+ Пайдаланушы атын енгізіңіз
Хост атауы керек
+
+ Веб адресін енгізіңіз
Дауыстық іздеу
@@ -2108,6 +2170,9 @@
%s іздеуі
+
+ Негізгі браузеріңізді ауыстыру
+
Веб-сайттар, эл. пошта хаттары және хабарламалардан сілтемелерді Firefox-та автоматты түрде ашылатындай етіп баптау.
@@ -2181,8 +2246,6 @@
Маңызды сәттер %s ішінен соңғы 80 күнде алынған, біз сенімді деп ойлайтын пікірлер негізінде алынды.]]>
%s туралы көбірек білу.
-
- Mozilla ұсынған %s пікірлер сапасын қалай анықтайды
%s пікірлер сапасын қалай анықтайды
@@ -2369,6 +2432,8 @@
Аудару орындалуда
+
+ Тілді таңдау
Аудару кезінде мәселе орын алды. Қайталап көріңіз.
@@ -2389,6 +2454,10 @@
%1$s ешқашан аудармау
Бұл сайтты ешқашан аудармау
+
+ Барлық басқа баптауларды қайта анықтайды
+
+ Аудару ұсыныстарын қайта анықтайды
Аударма баптаулары
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index 6e4457b4b..50dff711f 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -250,6 +250,7 @@
홈페이지 개인화
+
홈 화면
@@ -257,6 +258,9 @@
방문 기록 삭제
+
+ 페이지 번역
+
선택된 언어
@@ -268,8 +272,6 @@
스캔
-
- 검색 엔진
검색 엔진 설정
@@ -325,23 +327,28 @@
- 알림은 %s로 더 많은 작업을 수행하는 데 도움이 됩니다.
+ 알림은 %s로 더 많은 작업을 수행하는 데 도움이 됩니다.
- 기기 간에 탭을 동기화하고, 다운로드를 관리하고, %s의 개인 정보 보호를 최대한 활용하는 방법에 대한 팁을 얻으세요.
+ 기기 간에 탭을 동기화하고, 다운로드를 관리하고, %s의 개인 정보 보호를 최대한 활용하는 방법에 대한 팁을 얻으세요.
- 계속
+ 계속
- 나중에
+ 나중에
+
+ Firefox 개인정보처리방침
+
우리는 사용자를 안전하게 지키는 것을 좋아합니다
- 당사의 비영리 지원 브라우저는 회사가 웹에서 비밀리에 사용자를 추적하는 것을 방지하는 데 도움이 됩니다.\n\n개인정보처리방침에서 더 알아보세요.
+ 당사의 비영리 지원 브라우저는 회사가 웹에서 비밀리에 사용자를 추적하는 것을 방지하는 데 도움이 됩니다.
+
+ 당사의 비영리 지원 브라우저는 회사가 웹에서 비밀리에 사용자를 추적하는 것을 방지하는 데 도움이 됩니다.\n\n개인정보처리방침에서 더 알아보세요.
- 개인정보처리방침
+ 개인정보처리방침
기본 브라우저로 설정
@@ -446,21 +453,11 @@
HTTPS 전용 모드
-
- 쿠키 배너 감소
쿠키 배너 차단기
사생활 보호 모드의 쿠키 배너 차단기
-
- 쿠키 배너 줄이기
-
- 꺼짐
-
- 켜짐
-
-
- %1$s는 자동으로 쿠키 배너에서 쿠키 요청을 거부하려고 시도합니다.
+
이 사이트에서 꺼짐
@@ -478,37 +475,17 @@
현재 지원되지 않는 사이트
- %1$s에 대해 쿠키 배너 감소를 켜시겠습니까?
-
%1$s에 쿠키 배너 차단기를 켜시겠습니까?
-
- %1$s에 대해 쿠키 배너 감소를 끄시겠습니까?
%1$s에 쿠키 배너 차단기를 끄시겠습니까?
%1$s는 이 사이트에서 쿠키 요청을 자동으로 거부할 수 없습니다. 나중에 이 사이트를 지원하도록 요청을 보낼 수 있습니다.
-
- %1$s는 이 사이트의 쿠키를 지우고 페이지를 새로 고침합니다. 모든 쿠키를 삭제하면 로그아웃되거나 장바구니가 비워질 수 있습니다.
끄면 %1$s가 쿠키를 지우고 이 사이트를 다시 로드합니다. 로그아웃되거나 장바구니가 비워질 수 있습니다.
- %1$s는 지원되는 사이트에서 모든 쿠키 요청을 자동으로 거부하려고 시도합니다.
-
켜면 %1$s가 이 사이트의 모든 쿠키 배너를 자동으로 거부하려고 시도합니다.
-
- %1$s가 쿠키 배너를 거부하도록 허용하시겠습니까?
-
- %1$s는 많은 쿠키 배너 요청을 자동으로 거부할 수 있습니다.
-
- 나중에
-
-
- 쿠키 요청이 더 적게 표시됩니다.
-
-
- 허용
%1$s가 쿠키를 거부했습니다
@@ -727,6 +704,8 @@
북마크
로그인
+
+ 비밀번호
열린 탭
@@ -753,6 +732,8 @@
신용 카드
+
+ 결제 방법
주소
@@ -1314,8 +1295,6 @@
닫기
- 인쇄할 수 없음
-
이 페이지를 인쇄할 수 없음
인쇄
@@ -1732,8 +1711,12 @@
로그인과 비밀번호
+
+ 비밀번호
로그인과 비밀번호 저장
+
+ 비밀번호 저장
저장할지 묻기
@@ -1751,26 +1734,45 @@
로그인 추가
+
+ 비밀번호 추가
+
Sync 로그인
+
+ 비밀번호 동기화
기기 간에 로그인 동기화
+
+ 기기 간에 비밀번호 동기화
저장된 로그인
+
+ 저장된 비밀번호
%s에 저장하거나 동기화한 로그인이 여기에 표시됩니다.
+
+ %s에 저장하거나 동기화한 비밀번호는 여기에 나열됩니다. 저장한 모든 비밀번호는 암호화됩니다.
Sync에 대해 더 알아보기.
+
+ 동기화에 대해 더 알아보기
예외 목록
저장되지 않은 로그인과 비밀번호가 여기에 표시됩니다.
+
+ %s는 여기에 나열된 사이트의 비밀번호를 저장하지 않습니다.
이 사이트에 대한 로그인과 비밀번호는 저장되지 않습니다.
+
+ %s는 이 사이트의 비밀번호를 저장하지 않습니다.
모든 예외 삭제
로그인 검색
+
+ 비밀번호 검색
사이트
@@ -1798,11 +1800,17 @@
비밀번호 숨기기
- 저장된 로그인을 보려면 잠금 해제
+ 저장된 로그인을 보려면 잠금 해제하세요
+
+ 저장된 비밀번호를 보려면 잠금 해제하세요
로그인과 비밀번호 보안
+
+ 저장된 비밀번호를 보호하세요
다른 사람이 내 기기를 가지고 있는 경우, 저장된 로그인과 비밀번호에 접근하지 못하도록 기기 잠금 패턴, PIN 또는 비밀번호를 설정하세요.
+
+ 다른 사람이 내 기기를 가지고 있는 경우, 저장된 비밀번호에 접근하지 못하도록 기기 잠금 패턴, PIN 또는 비밀번호를 설정하세요.
나중에
@@ -1822,6 +1830,9 @@
로그인 정렬 메뉴
+
+ 비밀번호 정렬 메뉴
+
자동 채우기
@@ -1829,10 +1840,16 @@
주소
신용 카드
+
+ 결제 방법
카드 저장 및 자동 채우기
+
+ 결제 방법 저장 및 채우기
데이터가 암호화됨
+
+ %s는 저장한 모든 결제 방법을 암호화합니다
기기 간에 카드 동기화
@@ -1840,8 +1857,12 @@
신용 카드 추가
+
+ 카드 추가
저장된 카드 관리
+
+ 카드 관리
주소 추가
@@ -1849,9 +1870,14 @@
주소 저장 및 자동 채우기
+
+ 주소 저장 및 채우기
숫자, 이메일 및 배송 주소와 같은 정보 포함
+
+ 전화번호와 이메일 주소가 포함됩니다
+
카드 추가
@@ -1873,6 +1899,8 @@
카드 삭제
이 신용 카드를 삭제하시겠습니까?
+
+ 카드를 삭제하시겠습니까?
삭제
@@ -1888,14 +1916,22 @@
유효한 신용 카드 번호를 입력해 주세요
+
+ 유효한 카드 번호를 입력하세요
이 항목을 입력하세요.
+
+ 이름 추가
- 저장된 카드를 보려면 잠금 해제
+ 저장된 카드를 보려면 잠금 해제하세요
신용 카드 보안
+
+ 저장된 결제 방법을 보호하세요
다른 사람이 내 기기를 가지고 있는 경우, 저장된 신용 카드에 접근하지 못하도록 기기 잠금 패턴, PIN 또는 비밀번호를 설정하세요.
+
+ 다른 사람이 내 기기를 가지고 있는 경우, 저장된 결제 방법에 접근하지 못하도록 기기 잠금 패턴, PIN 또는 비밀번호를 설정하세요.
지금 설정
@@ -1904,8 +1940,10 @@
기기 잠금 해제
- 저장된 신용 카드 정보를 사용하려면 잠금 해제
+ 저장된 신용 카드 정보를 사용하려면 잠금 해제하세요
+
+ 저장된 결제 방법을 사용하려면 잠금 해제하세요
주소 추가
@@ -1943,6 +1981,8 @@
이 주소를 삭제하시겠습니까?
+
+ 이 주소를 삭제하시겠습니까?
삭제
@@ -2042,30 +2082,52 @@
편집
이 로그인을 삭제하시겠습니까?
+
+ 이 비밀번호를 삭제하시겠습니까?
삭제
취소
로그인 옵션
+
+ 비밀번호 옵션
로그인 웹 주소의 편집 가능한 텍스트 필드입니다.
+
+ 웹 사이트 주소에 대한 편집 가능한 텍스트 필드입니다.
로그인 사용자 이름의 편집 가능한 텍스트 필드입니다.
+
+ 사용자 이름에 대한 편집 가능한 텍스트 필드입니다.
로그인 비밀번호의 편집 가능한 텍스트 필드입니다.
+
+ 비밀번호에 대한 편집 가능한 텍스트 필드입니다.
변경 내용을 로그인에 저장.
+
+ 변경 내용 저장.
편집
+
+ 비밀번호 수정
새 로그인 추가
+
+ 비밀번호 추가
비밀번호 필요
+
+ 비밀번호 입력
사용자 이름은 필수입니다
+
+ 사용자 이름 입력
호스트 이름은 필수입니다
+
+ 웹 주소 입력
음성 검색
@@ -2163,6 +2225,9 @@
%s 검색
+
+ 기본 브라우저 전환
+
Firefox에서 자동으로 열리도록 웹 사이트, 이메일 및 메시지의 링크를 설정합니다.
@@ -2236,8 +2301,6 @@
하이라이트는 지난 80일 동안 신뢰할 수 있는 %s의 리뷰에서 나온 것입니다.]]>
%s에 대해 더 알아보세요.
-
- Mozilla의 %s이 리뷰 품질을 결정하는 방법
%s이 리뷰 품질을 결정하는 방법
@@ -2422,6 +2485,8 @@
번역 진행 중
+
+ 언어 선택
번역하는 중에 문제가 발생했습니다. 다시 시도하세요.
@@ -2442,6 +2507,10 @@
항상 %1$s 번역 안 함
항상 이 사이트 번역 안 함
+
+ 다른 모든 설정을 재정의
+
+ 번역 제안을 재정의
번역 설정
diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml
index c6bf155c6..86347ea1a 100644
--- a/app/src/main/res/values-nb-rNO/strings.xml
+++ b/app/src/main/res/values-nb-rNO/strings.xml
@@ -212,6 +212,8 @@
Synkroniser på nytt
Finn på siden
+
+ Oversett siden
Lagre i samling
@@ -241,6 +243,7 @@
Tilpass startsiden
+
Startskjerm
@@ -248,6 +251,9 @@
Slett nettleserhistorikk
+
+ Oversett siden
+
Valgt språk
@@ -260,8 +266,6 @@
Skann
-
- Søkemotor
Innstillinger for søkemotor
@@ -315,24 +319,29 @@
- Varsler hjelper deg å gjøre mer med %s
+ Varsler hjelper deg å gjøre mer med %s
- Synkroniser fanene dine mellom enheter, behandle nedlastinger, få tips om hvordan du får mest mulig ut av %s sitt personvern, og mer.
+ Synkroniser fanene dine mellom enheter, behandle nedlastinger, få tips om hvordan du får mest mulig ut av %s sitt personvern, og mer.
- Fortsett
+ Fortsett
- Ikke nå
+ Ikke nå
+
+ Firefox personvernerklæring
+
Vi beskytter deg gjerne
- Vår ideelle nettleser forhindrer selskaper i å spore aktiviteten din i hemmelighet på nettet.\n\nLes mer i personvernerklæringen vår.
+ Vår ideelle nettleser forhindrer selskaper i å spore aktiviteten din i hemmelighet på nettet.
+
+ Vår ideelle nettleser forhindrer selskaper i å spore aktiviteten din i hemmelighet på nettet.\n\nLes mer i personvernerklæringen vår.
- personvernerklæring
+ personvernerklæring
Bruk som standard nettleser
@@ -435,21 +444,11 @@
Kun-HTTPS-modus
-
- Redusering av infokapselbannere
Blokkering av infokapselbanner
Blokkering av infokapselbanner i privat nettlesing
-
- Reduser infokapselbannere
-
- Av
-
- På
-
-
- %1$s prøver automatisk å avvise infokapselforespørsler på infokapselbannere.
+
Av for dette nettstedet
@@ -467,35 +466,16 @@
Nettstedet støttes for øyeblikket ikke
- Vil du slå på reduksjon av infokapselbannere for %1$s?
-
Vil du slå på blokkering av infokapselbanner for %1$s?
- Vil du slå av reduksjon av infokapselbannere for %1$s?
-
Vil du slå av blokkering av infokapselbanner for %1$s?
%1$s kan ikke automatisk avvise forespørsler om infokapsler på dette nettstedet. Du kan sende en forespørsel om å støtte dette nettstedet i fremtiden.
-
- %1$s vill slette infokapsler og oppdatere siden. Sletting av alle infokapsler kan føre til at du blir logget ut eller at handlekurver blir tømt.
Slå av, og %1$s sletter infokapsler og laster inn dette nettstedet på nytt. Dette kan logge deg ut eller tømme handlekurver.
- %1$s prøver å automatisk avvise alle infokapselforespørsler på støttede nettsteder.
-
Slå på, og %1$s vil prøve å automatisk nekte infokapselbannere på dette nettstedet.
-
- Tillat at %1$s avviser infokapselbannere?
-
- %1$s kan automatisk avvise mange infokapselbanner-forespørsler.
-
- Ikke nå
-
- Du vil se færre forespørsler om infokapsler
-
-
- Tillat
%1$s nektet nettopp infokapsler for deg
@@ -712,6 +692,8 @@
Bokmerker
Innlogginger
+
+ Passord
Åpne faner
@@ -738,6 +720,8 @@
Betalingskort
+
+ Betalingsmetoder
Adresser
@@ -1280,8 +1264,6 @@
Ignorer
- Kan ikke å skrive ut
-
Kan ikke å skrive ut denne siden
Skriv ut
@@ -1325,6 +1307,11 @@
Lukk private faner
+
+
+ Lukk private faner?
+ Trykk eller sveip dette varselet for å lukke private faner.
+
Markedsføring
@@ -1682,8 +1669,12 @@
Innlogginger og passord
+
+ Passord
Lagre innlogginger og passord
+
+ Lagre passord
Spør om å lagre
@@ -1701,27 +1692,46 @@
Legg til innlogging
+
+ Legg til passord
+
Synkroniser innlogginger
+
+ Synkroniser passord
Synkroniser innlogginger på tvers av enheter
+
+ Synkroniser passord på tvers av enheter
Lagrede innlogginger
+
+ Lagrede passord
De innlogginger du lagrer eller synkroniserer til %s vil vises her.
+
+ Passordene du lagrer eller synkroniserer med %s vil bli oppført her. Alle passord du lagrer er kryptert.
Les mer om Sync.
+
+ Les mer om synkronisering
Unntak
Innlogginger og passord som ikke er lagret vil vises her.
+
+ %s vil ikke lagre passord for nettsteder som er oppført her.
Innlogginger og passord vil ikke bli lagret for disse nettstedene.
+
+ %s vil ikke lagre passord for disse nettstedene.
Slett alle unntak
Søk innlogginger
+
+ Søk etter passord
Nettsted
@@ -1751,8 +1761,12 @@
Skjul passord
Lås opp for å se dine lagrede innlogginger
+
+ Lås opp for å se dine lagrede passord
Sikre dine innlogginger og passord
+
+ Sikre dine lagrede passord
Konfigurer en PIN-kode, et passord eller et låsemønster for å forhindre at andre mennesker får tilgang de lagrede innloggingene og passordene dine, hvis de har adgang til din enhet.
@@ -2112,7 +2126,7 @@
%s-søk
-
+
Angi at lenker fra nettsteder, e-postmeldinger og meldinger skal åpnes automatisk i Firefox.
@@ -2186,8 +2200,6 @@
Høydepunkter er fra %s-vurderinger i løpet av de siste 80 dagene som vi mener er pålitelige.]]>
Les mer om %s.
-
- hvordan %s fra Mozilla bestemmer vurderingskvalitet
hvordan %s bestemmer vurderingskvalitet
@@ -2271,17 +2283,17 @@
Les mer
- Ved å velge «Ja, prøv det» godtar du %1$s fra Mozilla sine %2$s og %3$s.
+ Ved å velge «Ja, prøv det» godtar du %1$s fra Mozilla sine %2$s og %3$s.
- Ved å velge «Ja, prøv det» godtar du følgende fra %1$s:
+ Ved å velge «Ja, prøv det» godtar du følgende fra %1$s:
- personvernbestemmelser
+ personvernbestemmelser
- Personvernbestemmelser
+ Personvernbestemmelser
- vilkår for bruk
+ vilkår for bruk
- Vilkår for bruk
+ Vilkår for bruk
Ja, prøv det
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 7ed3c1d2d..055898750 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -249,6 +249,7 @@
Startpagina aanpassen
+
Startscherm
@@ -256,6 +257,9 @@
Navigatiegeschiedenis wissen
+
+ Pagina vertalen
+
Geselecteerde taal
@@ -267,8 +271,6 @@
Scannen
-
- Zoekmachine
Instellingen zoekmachine
@@ -324,23 +326,28 @@
- Meldingen helpen u meer te doen met %s
+ Meldingen helpen u meer te doen met %s
- Synchroniseer uw tabbladen tussen apparaten, beheer downloads, ontvang tips over het optimaal benutten van de privacybescherming van %s en meer.
+ Synchroniseer uw tabbladen tussen apparaten, beheer downloads, ontvang tips over het optimaal benutten van de privacybescherming van %s en meer.
- Doorgaan
+ Doorgaan
- Niet nu
+ Niet nu
+
+ Firefox-privacyverklaring
+
We houden u graag veilig
- Onze door een non-profitorganisatie ondersteunde browser helpt voorkomen dat bedrijven u stiekem volgen op internet.\n\nMeer info in onze privacyverklaring.
+ Onze door een non-profitorganisatie gesteunde browser helpt voorkomen dat bedrijven u stiekem volgen op internet.
+
+ Onze door een non-profitorganisatie ondersteunde browser helpt voorkomen dat bedrijven u stiekem volgen op internet.\n\nMeer info in onze privacyverklaring.
- privacyverklaring
+ privacyverklaring
Als standaardbrowser instellen
@@ -443,21 +450,11 @@
Alleen-HTTPS-modus
-
- Reductie van cookiebanners
Blokkering van cookiebanners
Blokkering van cookiebanners tijdens privénavigatie
-
- Cookiebanners reduceren
-
- Uit
-
- Aan
-
-
- %1$s probeert automatisch cookieverzoeken op cookiebanners te weigeren.
+
Uit voor deze website
@@ -475,35 +472,16 @@
Website wordt momenteel niet ondersteund
- Reductie van cookiebanners inschakelen voor %1$s?
-
Blokkering van cookiebanners inschakelen voor %1$s?
- Reductie van cookiebanners uitschakelen voor %1$s?
-
Blokkering van cookiebanners uitschakelen voor %1$s?
%1$s kan cookieverzoeken op deze website niet automatisch weigeren. U kunt een aanvraag sturen om deze website in de toekomst te ondersteunen.
-
- %1$s wist de cookies voor deze website en vernieuwt de pagina. Als alle cookies worden gewist, wordt u mogelijk afgemeld of worden winkelwagentjes geleegd.
Schakel dit uit en %1$s zal cookies wissen en deze website opnieuw laden. Dit kan u afmelden of winkelwagentjes legen.
- %1$s probeert alle cookieverzoeken op ondersteunde websites automatisch te weigeren.
-
Schakel dit in en %1$s zal proberen alle cookiebanners op deze website automatisch te weigeren.
-
- %1$s toestaan om cookiebanners te weigeren?
-
- %1$s kan veel cookiebannerverzoeken automatisch weigeren.
-
- Niet nu
-
- U ziet minder cookieverzoeken
-
-
- Toestaan
%1$s heeft zojuist cookies voor u geweigerd
@@ -722,6 +700,8 @@
Bladwijzers
Aanmeldingen
+
+ Wachtwoorden
Open tabbladen
@@ -748,6 +728,8 @@
Creditcards
+
+ Betalingsmethoden
Adressen
@@ -1288,8 +1270,6 @@
Sluiten
- Kan niet afdrukken
-
Kan deze pagina niet afdrukken
Afdrukken
@@ -1696,8 +1676,12 @@
Aanmeldingen en wachtwoorden
+
+ Wachtwoorden
Aanmeldingen en wachtwoorden opslaan
+
+ Wachtwoorden opslaan
Vragen om op te slaan
@@ -1714,26 +1698,45 @@
Aanmelding toevoegen
+
+ Wachtwoord toevoegen
+
Aanmeldingen synchroniseren
+
+ Wachtwoorden synchroniseren
Aanmeldingen op apparaten synchroniseren
+
+ Wachtwoorden synchroniseren tussen apparaten
Opgeslagen aanmeldingen
+
+ Opgeslagen wachtwoorden
De aanmeldingen die u opslaat of synchroniseert met %s worden hier getoond.
+
+ De wachtwoorden die u opslaat of synchroniseert met %s zullen hier worden vermeld. Alle wachtwoorden die u opslaat, zijn versleuteld.
Meer info over Sync.
+
+ Meer info over synchronisatie
Uitzonderingen
Niet-opgeslagen aanmeldingen en wachtwoorden worden hier weergegeven.
+
+ %s zal geen wachtwoorden voor de hier vermelde websites opslaan.
Aanmeldingen en wachtwoorden worden voor deze websites niet opgeslagen.
+
+ %s zal geen wachtwoorden voor deze websites opslaan.
Alle uitzonderingen verwijderen
Aanmeldingen zoeken
+
+ Wachtwoorden zoeken
Website
@@ -1762,10 +1765,16 @@
Wachtwoord verbergen
Ontgrendel om uw opgeslagen aanmeldingen te bekijken
+
+ Ontgrendel om uw opgeslagen wachtwoorden te bekijken
Beveilig uw aanmeldingen en wachtwoorden
+
+ Beveilig uw opgeslagen wachtwoorden
Stel een vergrendelingspatroon, pincode of wachtwoord voor uw apparaat in om uw opgeslagen aanmeldingen en wachtwoorden te beschermen tegen toegang als iemand anders uw apparaat heeft.
+
+ Stel een vergrendelingspatroon, pincode of wachtwoord voor uw apparaat in om uw opgeslagen wachtwoorden te beschermen tegen toegang als iemand anders uw apparaat heeft.
Later
@@ -1784,6 +1793,9 @@
Menu Aanmeldingen sorteren
+
+ Wachtwoordmenu sorteren
+
Automatisch invullen
@@ -1791,10 +1803,16 @@
Adressen
Creditcards
+
+ Betalingsmethoden
Kaarten opslaan en automatisch invullen
+
+ Betalingsmethoden opslaan en invullen
Gegevens zijn versleuteld
+
+ %s versleutelt alle betalingsmethoden die u opslaat
Kaarten synchroniseren tussen apparaten
@@ -1802,17 +1820,26 @@
Creditcard toevoegen
+
+ Kaart toevoegen
Opgeslagen kaarten beheren
+
+ Kaarten beheren
Adres toevoegen
Adressen beheren
Adressen opslaan en automatisch invullen
+
+ Adressen opslaan en invullen
Informatie zoals nummers, e-mail- en verzendadressen toevoegen
+
+ Inclusief telefoonnummers en e-mailadressen
+
Kaart toevoegen
@@ -1833,6 +1860,8 @@
Kaart verwijderen
Weet u zeker dat u deze creditcard wilt verwijderen?
+
+ Kaart verwijderen?
Verwijderen
@@ -1848,14 +1877,22 @@
Voer een geldig creditcardnummer in
+
+ Voer een geldig kaartnummer in
Vul dit veld in
+
+ Voeg een naam toe
Ontgrendel om uw opgeslagen kaarten te bekijken
Beveilig uw creditcards
+
+ Beveilig uw opgeslagen betalingsmethoden
Stel een vergrendelingspatroon, pincode of wachtwoord voor uw apparaat in om uw opgeslagen creditcards te beschermen tegen toegang als iemand anders uw apparaat heeft.
+
+ Stel een vergrendelingspatroon, pincode of wachtwoord voor uw apparaat in om uw opgeslagen betalingsmethoden te beschermen tegen toegang als iemand anders uw apparaat heeft.
Nu instellen
@@ -1866,6 +1903,8 @@
Ontgrendelen om opgeslagen creditcardgegevens te gebruiken
+
+ Ontgrendel om opgeslagen betalingsmethoden te gebruiken
Adres toevoegen
@@ -1903,6 +1942,8 @@
Weet u zeker dat u dit adres wilt verwijderen?
+
+ Dit adres verwijderen?
Verwijderen
@@ -2001,30 +2042,52 @@
Bewerken
Weet u zeker dat u deze aanmelding wilt verwijderen?
+
+ Weet u zeker dat u dit wachtwoord wilt verwijderen?
Verwijderen
Annuleren
Aanmeldopties
+
+ Wachtwoordopties
Het bewerkbare tekstveld voor het webadres van de aanmelding.
+
+ Het bewerkbare tekstveld voor het websiteadres.
Het bewerkbare tekstveld voor de gebruikersnaam van de aanmelding.
+
+ Het bewerkbare tekstveld voor de gebruikersnaam.
Het bewerkbare tekstveld voor het wachtwoord van de aanmelding.
+
+ Het bewerkbare tekstveld voor het wachtwoord.
Wijzigingen aan aanmelding opslaan.
+
+ Wijzigingen opslaan.
Bewerken
+
+ Wachtwoord bewerken
Nieuwe aanmelding toevoegen
+
+ Wachtwoord toevoegen
Wachtwoord vereist
+
+ Vul een wachtwoord in
Gebruikersnaam vereist
+
+ Vul een gebruikersnaam in
Hostnaam vereist
+
+ Voer een websiteadres in
Gesproken zoekopdracht
@@ -2121,6 +2184,9 @@
Zoeken met %s
+
+ Uw standaardbrowser wisselen
+
Koppelingen van websites, e-mail en berichten automatisch in Firefox openen.
@@ -2194,8 +2260,6 @@
Hoogtepunten zijn afkomstig van beoordelingen van %s in de afgelopen 80 dagen die volgens ons betrouwbaar zijn.]]>
Meer info over %s.
-
- hoe %s door Mozilla de beoordelingskwaliteit bepaalt
hoe %s de beoordelingskwaliteit bepaalt
@@ -2382,6 +2446,8 @@
Vertaling wordt uitgevoerd
+
+ Kies een taal
Er is een probleem opgetreden bij het vertalen. Probeer het opnieuw.
@@ -2402,6 +2468,10 @@
%1$s nooit vertalen
Deze website nooit vertalen
+
+ Overschrijft alle andere instellingen
+
+ Negeert vertaalaanbiedingen
Vertaalinstellingen
diff --git a/app/src/main/res/values-nn-rNO/strings.xml b/app/src/main/res/values-nn-rNO/strings.xml
index bd93a9b28..1b341ef4a 100644
--- a/app/src/main/res/values-nn-rNO/strings.xml
+++ b/app/src/main/res/values-nn-rNO/strings.xml
@@ -248,6 +248,7 @@
Tilpasse startsida
+
Startskjerm
@@ -255,6 +256,9 @@
Slett nettlesarhistorikk
+
+ Omset sida
+
Valt språk
@@ -266,8 +270,6 @@
Skann
-
- Søkjemotor
Innstillingar for søkjemotor
@@ -322,21 +324,21 @@
- Varsel hjelper deg å gjere meir med %s
+ Varsel hjelper deg å gjere meir med %s
- Synkroniser fanene dine mellom einingar, handsam nedlastingar, få tips om korleis du får mest muleg ut av personvernet til %s, og meir.
+ Synkroniser fanene dine mellom einingar, handsam nedlastingar, få tips om korleis du får mest muleg ut av personvernet til %s, og meir.
- Hald fram
+ Hald fram
- Ikkje no
+ Ikkje no
-
+
Vi vernar deg gjerne
- peronvernerklæring
+ peronvernerklæring
Bruk som standard nettleser
@@ -399,6 +401,8 @@
Søkjemotorar
Forslag frå søkjemotorar
+
+ Adresselinje - Firefox forslag
Les meir om Firefox forslag
@@ -427,20 +431,10 @@
Berre HTTPS-modus
-
- Redusering av infokapselbanner
Blokkering av infokapselbanner
Blokkering av infokapselbanner i privat nettlesing
-
- Reduser infokapselbanner
-
- Av
-
- På
-
- %1$s prøver automatisk å avvise infokapselførespurnadar på infokapselbanner.
Av for denne nettstaden
@@ -459,34 +453,20 @@
Nettstaden er for augneblinken ikkje støtta
- Vill du aktivere reduksjon av infokapselbanner for %1$s?
-
Vil du slå på blokkering av infokapselbanner for %1$s?
- Vil du deaktivere reduksjon av infokapselbanner for %1$s?
-
Vil du slå av blokkering av infokapselbanner for %1$s?
%1$s kan ikkje automatisk avvise førespurnadar om infokapslar på denne nettstaden. Du kan sende ein førespurnad om å støtte denne nettstaden i framtida.
- %1$s vill slette infokapslar og oppdatere sida. Sletting av alle infokapslar kan føre til at du blir logga ut eller at handlekorger vert tømde.
-
Slå av, og %1$s slettar infokapslar og lastar inn denne nettstaden på nytt. Dette kan logge deg ut eller tøme handlekorger.
- %1$s prøver å automatisk avvise alle infokapselførespurnadar på støtta nettstadar.
-
Slå på, og %1$s vil prøve å automatisk nekte infokapselbanner på denne nettstaden.
-
- Tilate %1$s å avvise infokapselbanner?
-
- %1$s kan automatisk avvise fleire førespurnadar om infokapselbanner.
-
- Ikkje no
-
- Du vil sjå færre førespurnadar om infokapslar
-
-
- Tillat
+
+
+ %1$s nekta nettopp infokapslar for deg
+
+ Færre distraksjonar, færre infokapslar som sporar deg på denne sida.
%1$s nekta nettopp infokapslar for deg
@@ -596,6 +576,8 @@
Tillegg
+
+ Installer utviding frå fil
Varsel
@@ -670,6 +652,15 @@
Utforsk fleire bakgrunnsbilde
+
+
+ Nye utvidingar tilgjengelege no
+
+
+ Sjekk ut 100+ nye utvidingar som lèt deg gjere Firefox til din eigen.
+
+ Utforsk utvidingar
+
Tillegg er mellombels deaktivert
@@ -696,6 +687,8 @@
Bokmerke
Innloggingar
+
+ Passord
Opne faner
@@ -722,6 +715,8 @@
Betalingskort
+
+ Betalingsmåtar
Adresser
@@ -1266,8 +1261,6 @@
Ignorer
- Klarte ikkje å skrive ut
-
Klarte ikkje å skrive ut denne sida
Skriv ut
@@ -1314,6 +1307,9 @@
Lat att private faner
+
+ Late att private faner?
+
Marknadsføring
@@ -1551,6 +1547,8 @@
Alle infokapslar (vil føre til feil på nettstadar)
Isoler infokapslar på tvers av nettstadar
+
+ Fortel nettstadar at dei ikkje skal dele eller selje data
Sporingsinnhald
@@ -1667,8 +1665,12 @@
Innloggingar og passord
+
+ Passord
Lagre innloggingar og passord
+
+ Lagre passord
Spør om å lagre
@@ -1687,16 +1689,27 @@
Legg til innlogging
+
+ Legg til passord
+
Synkroniser innloggingar
+
+ Synkroniser passord
Synkroniser innloggingar på tvers av einingar
+
+ Synkroniser passord på tvers av einingar
Lagra innloggingar
+
+ Lagra passord
Innloggingane du lagrar eller synkroniserer til %s vil visast her.
Les meir om Sync.
+
+ Les meir om synkronisering
Unntak
@@ -1707,6 +1720,8 @@
Slett alle unntak
Søk innloggingar
+
+ Søk etter passord
Nettstad
@@ -1765,6 +1780,8 @@
Adresser
Betalingskort
+
+ Betalingsmåtar
Lagre og fyll ut kort automatisk
@@ -1776,8 +1793,12 @@
Legg til betalingskort
+
+ Legg til kort
Handsam lagra kort
+
+ Handsam kort
Legg til adresse
@@ -1808,6 +1829,8 @@
Slett kort
Er du sikker på at du vil slette dette bankkortet?
+
+ Slette kort?
Slett
@@ -1823,8 +1846,12 @@
Skriv inn eit gyldig betalingskortnummer
+
+ Skriv inn eit gyldig kortnummer
Fyll ut dette feltet
+
+ Legg til eit namn
Lås opp for å sjå lagra betalingskort
@@ -1877,6 +1904,8 @@
Slett adresse
Er du sikker på at du vil slette denne adressa?
+
+ Slette denne adressa?
Slett
@@ -1993,16 +2022,28 @@
Det redigerbare tekstfeltet for innloggings-passordet.
Lagre endringar for innlogging.
+
+ Lagre endringar.
Rediger
+
+ Rediger passord
Legg til ny innlogging
+
+ Legg til passord
Passord påkravd
+
+ Skriv inn passord
Brukarnamn påkravd
+
+ Skriv inn eit brukarnamn
Vertsnamn påkravd
+
+ Skriv inn ei nettadresse
Stemmesøk
@@ -2152,6 +2193,8 @@
Juster vurdering
Upålitelege vurderingar er fjerna
+
+ Basert på pålitelege vurderingar
Høgdepunkt frå nylege vurderingar
@@ -2172,8 +2215,8 @@
Høgdepunkt er frå %s vurderingar dei siste 80 dagane som vi meiner er pålitelege.]]>
Les meir om %s.
-
- korleis %s frå Mozilla bestemmer kvaliteten på ei vurdering
+
+ korleis %s avgjer vurderingskvalitet
Innstillingar
@@ -2210,6 +2253,8 @@
Kontrollerer kvaliteten på vurderinga
Kontrollerer kvaliteten på vurderinga
+
+ Kontrollerer kvaliteten på vurderinga (%s)
Dette vil ta omlag 60 sekund.
@@ -2246,12 +2291,16 @@
Prøv den pålitelege guiden vår for produktvurderingar
Sjå kor påliteleg produktvurderingar er på %1$s før du kjøper. Vurderingskontrolløren, ein eksperimentell funksjon frå %2$s, er direkte inbyggd i nettlesaren. Han fungerer på %3$s og på %4$s.
+
+ Sjå kor pålitelege produktvurderinger er på %1$s før du handlar. Vurderingskontrolløren, ein eksperimentell funksjon fra %2$s, er innebygd i nettlesaren.
Med krafta i %1$s frå Mozilla hjelper vi deg med å unngå einsidige og ikkje-truverdige vurderingar. AI-modellen vår vert alltid forbetra for å beskytte deg når du handlar. %2$s
Les meir
Ved å velje «Ja, prøv det» seier du deg samd i %1$s av Mozillas %2$s og %3$s.
+
+ Ved å velje «Ja, prøv det» godtek du følgjande frå %1$s:
personvernpraksis
@@ -2295,6 +2344,9 @@
Konkurranseevne
+
+ “%s”
+
slå saman
@@ -2340,6 +2392,8 @@
Omsetjing i framdrift
+
+ Vel eit språk
Det oppstod eit problem med å omsetje. Prøv på nytt.
@@ -2378,11 +2432,29 @@
Automatisk omsetjing
+
+ Vel eit språk for å handsame innstillingar for «omset alltid» og «omset aldri».
+
+
+
+ Tilby å omsetje (standard)
+
+ %1$s vil tilby å omsetje nettstadar på dette språket.
Omset alltid
+
+ %1$s vil omsetje dette språket automatisk når sida vert lasta inn.
Omset aldri
+
+ %1$s vil aldri tilby å omsetje nettstadar på dette språket.
+
+
+
+ Omset aldri desse nettstadane
+
+ For å leggje til ein ny nettstad: Besøk han, og vel «Omset aldri denne nettstaden» frå omsetjingsmenyen.
Fjern %1$s
@@ -2397,6 +2469,8 @@
Last ned språk
+
+ Last ned komplette språk for raskare omsetjingar, og for å omsetje fråkopla. %1$s
Les meir
@@ -2437,6 +2511,8 @@
Avbryt
+
+ Naviger tilbake
Faneverktøy
@@ -2449,4 +2525,6 @@
Privat
Totalt
-
+
+ Legg til i private faner
+
diff --git a/app/src/main/res/values-oc/strings.xml b/app/src/main/res/values-oc/strings.xml
index 19477523f..25873903b 100644
--- a/app/src/main/res/values-oc/strings.xml
+++ b/app/src/main/res/values-oc/strings.xml
@@ -243,6 +243,7 @@
Personalizar la pagina d’acuèlh
+
Ecran d’acuèlh
@@ -250,6 +251,9 @@
Netejar l’istoric de navegacion
+
+ Traduire la pagina
+
Lenga seleccionada
@@ -261,8 +265,6 @@
Numerizar
-
- Motor de recèrca
Paramètres del motor de recèrca
@@ -317,23 +319,28 @@
- Las notificacions vos ajudan a ne far mai amb %s
+ Las notificacions vos ajudan a ne far mai amb %s
- Sincronizar los onglets entre vòstres aparelhs, gerissètz los telecargaments, obtenètz de conselhs per trapar çò melhor de la proteccion de la vida privada de %s e encara mai.
+ Sincronizar los onglets entre vòstres aparelhs, gerissètz los telecargaments, obtenètz de conselhs per trapar çò melhor de la proteccion de la vida privada de %s e encara mai.
- Contunhar
+ Contunhar
- Mai tard
+ Mai tard
+
+ Politica de confidencialitat de Firefox
+
Nos impòrta vòstra vida privada
- Nòstre navegador sostengut per una organizacion sens but lucratiu empacha las entrepresas de vos seguir secrètament sul Web.\n\nPer ne saber mai consultatz nòstra politica de confidencialitat.
+ Nòstre navegador es sostengut per una organizacion sens tòca lucrativa empacha automaticament las entrepresas de vos pistar secrètament pel web.
+
+ Nòstre navegador sostengut per una organizacion sens but lucratiu empacha las entrepresas de vos seguir secrètament sul Web.\n\nPer ne saber mai consultatz nòstra politica de confidencialitat.
- politica de confidencialitat
+ politica de confidencialitat
Definir coma navegador per defaut
@@ -437,21 +444,11 @@
Mòde HTTPS solament
-
- Reduccion de las bandièras de cookies
Blocador de bandièras de cookies
Blocador de bandièras de cookies en navegacion privada
-
- Reduire las bandièras de cookies
-
- Desactivada
-
- Activada
-
-
- %1$s ensaja de regetar automaticament las demandas de cookies de las banièras de cookies.
+
Desactivada per aqueste site
@@ -469,37 +466,17 @@
Site actualament pas pres en carga
- Activar la reduccion de las bandièras de cookies per %1$s ?
-
Activar lo blocador de bandièras de cookies per aqueste site %1$s ?
-
- Desactivar la reduccion de las bandièras de cookies per %1$s ?
Desactivar lo blocador de bandièras de cookies per %1$s ?
%1$s pòt pas refusar automaticament las demandas de cookies per aqueste site. Podètz enviar una demanda de presa en carga d’aqueste site pel futur.
-
- %1$s escafarà los cookies d’aqueste site e actualizarà la pagina. La supression de totes los cookies pòt vos desconnectar o voidar los panièrs de crompa.
Desactivatz-lo e %1$s escafarà los cookies puèi recargarà aqueste site. Vos poiriá desconnectar de la session o voidar lo panièr de crompas.
- %1$s ensaja de regetar automaticament totas las demandas de cookies suls sites compatibles.
-
Activatz-lo e %1$s ensajarà de refusar automaticament las banièras de cookies sus aqueste site.
-
- Autorizar %1$s a refusar las bandièras de cookies ?
-
-
- %1$s pòt refusar automaticament nombrosas demandas de cookies.
-
- Mai tard
-
- Veiretz mens de demandas de cookies
-
-
- Autorizar
%1$s ven de refusar un cookie per vos
@@ -722,6 +699,8 @@
Identificants
+
+ Senhals
Onglets dobèrts
@@ -749,6 +728,8 @@
Cartas de crèdit
+
+ Metòdes de pagament
Adreças
@@ -1296,8 +1277,6 @@
Ignorar
- Impression impossibla
-
Impossible d’imprimir aquesta pagina
Imprimir
@@ -1713,8 +1692,12 @@
Identificants e senhals
+
+ Senhals
Salvar los identificants e senhals
+
+ Salvar senhals
Demandar per salvar
@@ -1733,26 +1716,46 @@
Apondre un identificant
+
+ Apondre un senhal
+
Sincronizar los identificants
+
+ Sincronizar los senhals
Sincronizar los identificants entre totes los periferics
+
+ Sincronizar los senhals entre los periferics
Identificants salvats
+
+ Senhals salvats
Aquí se mòstran los identificants que salvatz o sincronizatz amb %s.
+
+ Los senhals que salvatz o sincronizatz amb %s seràn listats aquí. Totes los senhals qu’enregistratz son chifrats.
+
Per ne saber mai sus Sync.
+
+ Per ne saber mai sus sync
Excepcions
Los identificants e senhals pas salvats seràn mostrats aquí.
+
+ %s enregistrarà pas los senhals pels sites listats aicí.
Los identificants e senhals seràn pas salvats per aquestes sites.
+
+ %s enregistrarà pas los senhals per aquestes sites.
Suprimir totas las excepcions
Recercar d’identificants
+
+ Recercar de senhals
Site
@@ -1782,10 +1785,16 @@
Desblocatz per veire los identificants enregistrats
+
+ Desblocatz per veire los senhals salvats
Protegissètz vòstres identificants e senhals
+
+ Securizatz los senhals salvats
Configuratz un esquèma de verrolhatge, un còdi PIN o un senhal per protegir vòstres identificants de connexion e senhals enregistrats se per cas qualqu’un accedisca a vòstre periferic.
+
+ Configuratz un esquèma de desverrolhatge, un còdi PIN o un senhal per protegir vòstres senhals salvats se per cas qualqu’un accedisca a vòstre aparelh.
Mai tard
@@ -1804,6 +1813,9 @@
Menú per triar los identificants
+
+ Menú de tria dels senhals
+
Emplenament automatic
@@ -1811,10 +1823,16 @@
Adreças
Cartas de crèdit
+
+ Metòdes de pagament
Salvar e completar automaticament las cartas
+
+ Enregistrar e entresenhar los metòdes de pagament
Donadas chifradas
+
+ %s chifra totes los metòdes de pagament qu’enregistratz
Sincronizar las cartas entre los periferics
@@ -1822,8 +1840,12 @@
Apondre una cartas de crèdit
+
+ Apondre una carta
Gerir las cartas enregistradas
+
+ Gerir las cartas
Apondre una adreça
@@ -1831,9 +1853,14 @@
Salvar e completar automaticament las adreças
+
+ Salvar e emplenar automaticament las adreças
Inclutz las informacions coma los numèros, las adreças electronicas e las adreças de liurason
+
+ Incluses los numèros de telefòn e las adreças electronicas
+
Apondre una carta
@@ -1854,6 +1881,8 @@
Suprimir la carta
Volètz vertadièrament suprimir aquesta carta bancària ?
+
+ Suprimir la carta ?
Suprimir
@@ -1869,15 +1898,23 @@
Picatz un numèro de carta de crèdit valid
+
+ Picatz un numèro de carta valid
Completatz aqueste camp
+
+ Apondre un nom
Desblocatz per veire las cartas enregistradas
Securizatz vòstras cartas de crèdit
+
+ Securizatz los metòdes de pagament enregistrats
Configuratz un esquèma de verrolhatge, un còdi PIN o un senhal per protegir vòstres identificants de cartas de crèdit enregistrats se per cas qualqu’un accedisca a vòstre periferic.
+
+ Configuratz un esquèma de desverrolhatge, un còdi PIN o un senhal per protegir vòstres mejans de pagament se per cas qualqu’un accedisca a vòstre aparelh.
Configurar ara
@@ -1888,6 +1925,8 @@
Desverrolhatz per utilizar las informacions de cartas de crèdit enregistradas
+
+ Desblocatz per utilizar de metòdes de pagament enregistrats
Apondon d’adreça
@@ -1925,6 +1964,8 @@
Volètz vertadièrament suprimir aquesta adreça ?
+
+ Suprimir aquesta adreça ?
Suprimir
@@ -2011,7 +2052,7 @@ Exemple :\nhttps://suggestqueries.google.com/complete/search?client=firefox&
Cap d’excepcions de site
- Sètz segur que volètz suprimir aqueste marcapagina ?
+ Volètz vertadièrament suprimir aqueste marcapagina ?
Apondre als acorchis
@@ -2024,7 +2065,9 @@ Exemple :\nhttps://suggestqueries.google.com/complete/search?client=firefox&
Modificar
- Sètz segur que volètz suprimir aqueste identificant ?
+ Volètz vertadièrament suprimir aqueste identificant ?
+
+ Volètz vertadièrament suprimir aqueste senhal ?
Suprimir
@@ -2032,24 +2075,44 @@ Exemple :\nhttps://suggestqueries.google.com/complete/search?client=firefox&
Anullar
Opcions de l’identificant
+
+ Opcions de senhal
Lo camp de tèxt modificable per l’adreça web de l’identificant.
+
+ Lo camp de tèxt modificable per l’adreça del site web.
Lo camp de tèxt modificable pel nom d’utilizaire de l’identificant.
+
+ Lo camp de tèxt modificable pel nom d’utilizaire.
Lo camp de tèxt modificable pel senhal de l’identificant.
+
+ Lo camp de tèxt modificable pel senhal.
Enregistratz las modificacions de l’identificant.
+
+ Enregistrar las modificacions.
Modificar
+
+ Modificar lo senhal
Apondre un identificant novèl
+
+ Apondre un senhal
Senhal requesit
+
+ Picar lo senhal
Lo nom d’utilizaire es obligatòri
+
+ Picar un nom d’utilizaire
Lo nom d’òste es obligatòri
+
+ Picar una adreça web
Recèrca a la votz
@@ -2204,22 +2267,30 @@ Exemple :\nhttps://suggestqueries.google.com/complete/search?client=firefox&
Elements essencials dels avises recents
Coma determinam la qualitat d’un avís
+
+ Utilizam una tecnologia d’IA de %s per Mozilla per verificar la fisabilitat des avises de produches. Vos ajudarà sonque a jutjar la qualitat dels avises non pas çò dels produches.
notacion alfabetica de A a F.]]>
Avises fisables. Pensam que los avises venon probablament de vertadièrs clients que daissèron d’avises sincèrs e objectius.
Pensam que los avises mesclan d’avises fisables e non fisables.
+
+ Avises pas fisables. Pensam que los avises son probablament de falses o son biaissats.
+
+ evaluacion corregida es basada suls avises que pensam que son fisables.]]>
+
+ Notables venon dels avises de %s dels darrièrs 80 jorns que pensam que son fisables.]]>
Per ne saber mai sus %s.
-
- cossí %s per Mozilla determina la qualitat de l’avís
cossí %s determina la qualitat de l’avís
Paramètres
Afichar de publicitats dins lo verificador d’avises
+
+ Veiretz ocasionalament de publicitats per de produches pertinents. Fasèm sonque la reclama de produches amb avises fisables. %s
Ne saber mai
@@ -2236,20 +2307,68 @@ Exemple :\nhttps://suggestqueries.google.com/complete/search?client=firefox&
Informacions novèlas d’evaluar
Verificar ara
+
+ I a pas encara pro d’avises
+
+ Quand aqueste produch aja mai d’avises, ne poirem verificar la qualitat.
Lo produit es pas disponible
+
+ Se tornatz veire aqueste produch en estòc, senhalatz-lo e verificarem los avises.
+
+ Senhalar que’l produch es en estòc
+
+ Evaluacion de la qualitat dels avises
+
+ Evaluacion de la qualitat dels avises
+
+ Evaluacion de la qualitat dels avises (%s)
+
+ Aquò trigar unes 60 segondas.
+
+ Mercés pel senhalament !
+
+ Deuriam aver d’informacions tocant los avises d’aqueste produch d’aquí 24 oras. Tornatz mai tard.
+
+ Podèm pas verificar aquestes avises
+
+ Malastrosament, podèm pas verificar la qualitat dels avises d’unes tipes de produches. Per exemple, las cartas present, la transmission de vidèo, la musica e los jòcs.
+
+ Mai d’info lèu
+
+ Deuriam aver d’informacions tocant los avises d’aqueste produch d’aquí 24 oras. Tornatz mai tard.
Las analisis son a jorn
Plan realizat
Cap d’info pas disponible pel moment
+
+ Sèm a trabalhar per resòlver aqueste problèma. Mercés de tornar ensajar mai tard.
Cap de connexion ret
+
+ Verificatz la connexion ret puèi tornatz ensajar d’actualizar la pagina.
+
+ Cap d’informacion suls avises pel moment
+
+ Per saber si los avises son fisables, verificatz lor qualitat. Sonque pren 60 segondas.
Valorar la qualitat dels avises
+
+ Ensajatz nòstra guida de fisança pels avises de produches
+
+ Agachatz quina fisabilitat acordar als avises de produches sus %1$s abans de crompar. Lo verificador d’avises, una foncionalitat experimentala de %2$s, es integrada al navegador. Fonciona tanben per %3$s e %4$s.
+
+ Agachatz quina fisabilitat acordar als avises de produches sus %1$s abans de crompar. Lo verificador d’avises, una foncionalitat experimentala de %2$s, es integrada al navegador.
+
+ Amb lo poder de %1$s per Mozilla, vos ajudam a evitar los avises biaissats e non autentics. Nòstre modèl d’IA es a se melhorar en permanéncia per vos protegir quand crompatz. %2$s
Ne saber mai
+
+ En seleccionant « Òc-ben, ensajar », acceptatz la %1$s de %2$s e las %3$s de Mozilla.
+
+ En seleccionant « òc-ben, ensajar » acceptatz los elements seguent de %1$s :
politica de confidencialitat
@@ -2262,8 +2381,12 @@ Exemple :\nhttps://suggestqueries.google.com/complete/search?client=firefox&
Òc-ben, ensajar
Mai tard
+
+ Verificatz se vos podètz fisar dels avises sul produch, abans de crompar.
Ensajar lo verificador d’avises
+
+ Aquestes avises son fisables ? Verificatz-o ara per veire una evaluacion corregida.
Dobrir lo verificador d’avises
@@ -2344,6 +2467,8 @@ Exemple :\nhttps://suggestqueries.google.com/complete/search?client=firefox&
Traduccion en cors
+
+ Causir una lenga
I a agut un problèma al moment de traduire. Ensajatz tornamai.
@@ -2364,6 +2489,10 @@ Exemple :\nhttps://suggestqueries.google.com/complete/search?client=firefox&
Traduire pas jamai las paginas en %1$s
Traduire pas jamai aqueste site
+
+ Remplaça totes los autres paramètres
+
+ Remplaça las proposicions de traduccion
Paramètres de traduccion
diff --git a/app/src/main/res/values-pa-rIN/strings.xml b/app/src/main/res/values-pa-rIN/strings.xml
index b5bbc9c5c..8abee7324 100644
--- a/app/src/main/res/values-pa-rIN/strings.xml
+++ b/app/src/main/res/values-pa-rIN/strings.xml
@@ -249,6 +249,7 @@
ਮੁੱਖ-ਸਫ਼ੇ ਨੂੰ ਕਸਟਮਾਈਜ਼ ਕਰੋ
+
ਮੁੱਖ ਸਕਰੀਨ
@@ -256,6 +257,9 @@
ਬਰਾਊਜ਼ ਕਰਨ ਦਾ ਅਤੀਤ ਮਿਟਾਓ
+
+ ਸਫ਼ੇ ਦਾ ਉਲੱਥਾ ਕਰੋ
+
ਚੁਣੀ ਹੋਈ ਬੋਲੀ
@@ -267,8 +271,6 @@
ਸਕੈਨ ਕਰੋ
-
- ਖੋਜ ਇੰਜਣ
ਖੋਜ ਇੰਜਣ ਸੈਟਿੰਗਾਂ
@@ -324,23 +326,28 @@
- ਨੋਟੀਫ਼ਿਕੇਸ਼ਨ ਤੁਹਾਨੂੰ %s ਨਾਲ ਹੋਰ ਕਰਨ ਦੀ ਮਦਦ ਕਰਦੇ ਹਨ
+ ਨੋਟੀਫ਼ਿਕੇਸ਼ਨ ਤੁਹਾਨੂੰ %s ਨਾਲ ਹੋਰ ਕਰਨ ਦੀ ਮਦਦ ਕਰਦੇ ਹਨ
- ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ ਆਪਣੀਆਂ ਟੈਬਾਂ ਨੂੰ ਸਿੰਕ ਕਰੋ, ਡਾਊਨਲੋਡ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ, %s ਦੀ ਪਰਦੇਦਾਰੀ ਸੁਰੱਖਿਆ ਦਾ ਪੂਰਾ ਫ਼ਾਇਦਾ ਲੈਣ ਲਈ ਗੁਰ ਲਵੋ ਅਤੇ ਹੋਰ
+ ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ ਆਪਣੀਆਂ ਟੈਬਾਂ ਨੂੰ ਸਿੰਕ ਕਰੋ, ਡਾਊਨਲੋਡ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ, %s ਦੀ ਪਰਦੇਦਾਰੀ ਸੁਰੱਖਿਆ ਦਾ ਪੂਰਾ ਫ਼ਾਇਦਾ ਲੈਣ ਲਈ ਗੁਰ ਲਵੋ ਅਤੇ ਹੋਰ
- ਜਾਰੀ ਰੱਖੋ
+ ਜਾਰੀ ਰੱਖੋ
- ਹੁਣੇ ਨਹੀਂ
+ ਹੁਣੇ ਨਹੀਂ
+
+ Firefox ਪਰਦੇਦਾਰੀ ਸੂਚਨਾ
+
ਅਸੀਂ ਤੁਹਾਨੂੰ ਸੁਰੱਖਿਅਤ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹਾਂ
- ਸਾਡਾ ਗ਼ੈਰ-ਮੁਨਾਫ਼ਾ ਸਮਰੱਥ ਬਰਾਊਜ਼ਰ ਕੰਪਨੀਆਂ ਨੂੰ ਵੈੱਬ ਉੱਤੇ ਚੋਰੀ ਛਿਪੇ ਪਿੱਛਾ ਕਰਨ ਤੋਂ ਰੋਕਣ ਲਈ ਮਦਦ ਕਰਦਾ ਹੈ।\n\nਸਾਡੇ ਪਰਦੇਦਾਰੀ ਨੋਟਿਸ ਬਾਰੇ ਹੋਰ ਸਿੱਖੋ।
+ ਕੰਪਨੀਆਂ ਨੂੰ ਚੋਰੀ ਚੋਰੀ ਵੈੱਬ ਉੱਤੇ ਤੁਹਾਡਾ ਪਿੱਛਾ ਕਰਨ ਤੋਂ ਸਾਡਾ ਗ਼ੈਰ-ਫਾਇਦਾ ਸਮਰੱਥ ਬਰਾਊਜ਼ਰ ਆਪਣੇ-ਆਪ ਹੀ ਰੋਕਦਾ ਹੈ।
+
+ ਸਾਡਾ ਗ਼ੈਰ-ਮੁਨਾਫ਼ਾ ਸਮਰੱਥ ਬਰਾਊਜ਼ਰ ਕੰਪਨੀਆਂ ਨੂੰ ਵੈੱਬ ਉੱਤੇ ਚੋਰੀ ਛਿਪੇ ਪਿੱਛਾ ਕਰਨ ਤੋਂ ਰੋਕਣ ਲਈ ਮਦਦ ਕਰਦਾ ਹੈ।\n\nਸਾਡੇ ਪਰਦੇਦਾਰੀ ਨੋਟਿਸ ਬਾਰੇ ਹੋਰ ਸਿੱਖੋ।
- ਪਰਦੇਦਾਰੀ ਸੂਚਨਾ
+ ਪਰਦੇਦਾਰੀ ਸੂਚਨਾ
ਮੂਲ ਬਰਾਊਜ਼ਰ ਬਣਾਓ
@@ -444,22 +451,11 @@
ਸਿਰਫ਼-HTTPS ਢੰਗ
-
- ਕੂਕੀਜ਼ ਬੈਨਰ ਘਟਾਉਣਾ
ਕੂਕੀ ਬੈਨਰ ਰੋਕੂ
ਪ੍ਰਾਈਵੇਟ ਬਰਾਊਜ਼ਿੰਗ ਵਿੱਚ ਕੂਕੀ ਬੈਨਰ ਰੋਕੂ
-
- ਕੂਕੀਜ਼ ਬੈਨਰ ਘਟਾਓ
-
- ਬੰਦ
-
- ਚਾਲੂ
-
-
- %1$s ਕੂਕੀ ਬੈਨਰਾਂ ਤੋਂ ਕੂਕੀ ਬੇਨਤੀਆਂ ਨੂੰ ਆਪਣੇ-ਆਪਹੀ ਰੱਦ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ।
ਇਸ ਸਾਈਟ ਲਈ ਬੰਦ
@@ -478,36 +474,17 @@
ਸਾਈਟ ਇਸ ਵੇਲੇ ਸਹਾਇਕ ਨਹੀਂ ਹੈ
- %1$s ਲਈ ਕੁਕੀ ਬੈਨਰ ਘਟਾਉਣੇ ਚਾਲੂ ਕਰਨੇ ਹਨ?
-
ਕੀ %1$s ਲਈ ਕੂਕੀ ਬੈਨਰ ਰੋਕੂ ਚਾਲੂ ਕਰਨਾ ਹੈ?
-
- %1$s ਲਈ ਕੁਕੀ ਬੈਨਰ ਘਟਾਉਣੇ ਬੰਦ ਕਰਨੇ ਹਨ?
ਕੀ %1$s ਲਈ ਕੂਕੀ ਬੈਨਰ ਰੋਕੂ ਬੰਦ ਕਰਨਾ ਹੈ?
%1$s ਇਸ ਸਾਈਟ ਲਈ ਆਪਣੇ-ਆਪ ਕੂਕੀ ਬੇਨਤੀਆਂ ਨੂੰ ਰੱਦ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ। ਤੁਸੀਂ ਭਵਿੱਖ ਵਿੱਚ ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਸਹਾਇਤਾ ਲਈ ਬੇਨਤੀ ਕਰ ਸਕਦੇ ਹੋ।
-
- %1$s ਇਸ ਸਾਈਟ ਦੀਆਂ ਕੁਕੀਆਂ ਨੂੰ ਸਾਫ਼ ਕਰ ਕੇ ਵਰਕੇ ਨੂੰ ਸੱਜਰਾ ਕਰ ਦੇਵੇਗਾ। ਸਾਰੀਆਂ ਕੁਕੀਆਂ ਨੂੰ ਸਾਫ਼ ਕਰਨ ਨਾਲ ਤੁਸੀਂ ਸਾਈਨ ਆਊਟ ਹੋ ਸਕਦੇ ਹੋ ਜਾਂ ਖਰੀਦਦਾਰੀ ਵਾਲੀ ਟੋਕਰੀ ਖਾਲੀ ਹੋ ਸਕਦੀ ਹੈ।
ਬੰਦ ਕਰਨ ਨਾਲ %1$s ਇਸ ਸਾਈਟ ਲਈ ਕੂਕੀਜ਼ ਮਿਟਾ ਕੇ ਇਸ ਨੂੰ ਮੁੜ ਲੋਡ ਕਰੇਗਾ। ਇਹ ਤੁਹਾਨੂੰ ਸਾਈਟ ਆਉਟ ਜਾਂ ਤੁਹਾਡੀ ਖਰੀਦਦਾਰੀ ਕਾਰਟਾਂ ਨੂੰ ਖਾਲੀ ਕਰੇਗਾ।
- %1$s ਸਹਾਇਤਾ ਪ੍ਰਾਪਤ ਸਾਈਟਾਂ ਉੱਤੇ ਸਾਰੀਆਂ ਕੂਕੀ ਬੇਨਤੀਆਂ ਨੂੰ ਆਪਣੇ-ਆਪ ਰੱਦ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰਦਾ ਹੈ।
-
ਚਾਲੂ ਕਰੋ ਅਤੇ %1$s ਇਸ ਸਾਈਟ ਵਾਸਤੇ ਕੂਕੀ ਬੈਨਰ ਨੂੰ ਆਪਣੇ-ਆਪ ਇਨਕਾਰ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰੇਗਾ।
-
- %1$s ਨੂੰ ਕੂਕੀ ਬੈਨਰ ਰੱਦ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣੀ ਹੈ?
-
- %1$s ਕੂਕੀ ਬੇਨਤੀਆਂ ਨੂੰ ਆਪਣੇ-ਆਪ ਹੀ ਰੱਦ ਕਰ ਸਕਦਾ ਹੈ।
-
- ਹੁਣੇ ਨਹੀਂ
-
- ਤੁਸੀਂ ਬਹੁਤ ਘੱਟ ਕੂਕੀ ਬੇਨਤੀਆਂ ਵੇਖੋਗੇ
-
-
- ਮਨਜ਼ੂਰ
%1$s ਨੇ ਹੁਣੇ ਤੁਹਾਡੇ ਲਈ ਕੂਕੀਜ਼ ਤੋਂ ਇਨਕਾਰ ਕੀਤਾ ਹੈ
@@ -727,6 +704,8 @@
ਬੁੱਕਮਾਰਕ
ਲਾਗਇਨ
+
+ ਪਾਸਵਰਡ
ਟੈਬਾਂ ਖੋਲ੍ਹੋ
@@ -754,6 +733,8 @@
ਕਰੈਡਿਟ ਕਾਰਡ
+
+ ਭੁਗਤਾਨ ਦੇ ਢੰਗ
ਸਿਰਨਾਵੇਂ
@@ -1298,8 +1279,6 @@
ਖ਼ਾਰਜ ਕਰੋ
- ਛਾਪਣ ਲਈ ਅਸਮਰੱਥ ਹੈ
-
ਇਹ ਸਫ਼ਾ ਛਾਪਣ ਲਈ ਅਸਮਰੱਥ ਹੈ
ਪਰਿੰਟ ਕਰੋ
@@ -1707,8 +1686,12 @@
ਲਾਗਇਨ ਅਤੇ ਪਾਸਵਰਡ
+
+ ਪਾਸਵਰਡ
ਲਾਗਇਨ ਅਤੇ ਪਾਸਵਰਡ ਸੰਭਾਲੋ
+
+ ਪਾਸਵਰਡਾਂ ਨੂੰ ਸੰਭਾਲੋ
ਸੰਭਾਲਣ ਲਈ ਪੁੱਛੋ
@@ -1725,26 +1708,45 @@
ਲਾਗਇਨ ਜੋੜੋ
+
+ ਪਾਸਵਰਡ ਜੋੜੋ
+
ਲਾਗਇਨ ਸਿੰਕ ਕਰੋ
+
+ ਪਾਸਵਰਡ ਸਿੰਕ ਕਰੋ
ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ ਲਾਗਇਨਾਂ ਨੂੰ ਸਿੰਕ ਕਰੋ
+
+ ਪਾਸਵਰਡ ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ ਸਿੰਕ ਕਰੋ
ਸੰਭਾਲੇ ਹੋਏ ਲਾਗਇਨ
+
+ ਸੰਭਾਲੇ ਹੋਏ ਪਾਸਵਰਡ
ਤੁਹਾਡੇ ਵਲੋਂ ਸੰਭਾਲੇ ਲਾਗਇਨ ਜਾਂ %s ਨਾਲ ਸਿੰਕ ਕੀਤੇ ਇੱਥੇ ਵੇਖਾਏ ਜਾਣਗੇ।
+
+ ਤੁਹਾਡੇ ਵਲੋਂ %s ਵਿੱਚ ਸੰਭਾਲੇ ਜਾਂ ਸਿੰਕ ਕੀਤੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਇੱਥੇ ਦਿਖਾਇਆ ਜਾਵੇਗਾ। ਤੁਹਾਡੇ ਸਾਰੇ ਸੰਭਾਲੇ ਪਾਸਵਰਡ ਇੰਕ੍ਰਿਪਟ ਕੀਤੇ ਹੁੰਦੇ ਹਨ।
ਸਿੰਕ ਬਾਰੇ ਹੋਰ ਜਾਣੋ।
+
+ ਸਿੰਕ ਬਾਰੇ ਹੋਰ ਜਾਣੋ
ਛੋਟਾਂ
ਨਾ ਸੰਭਾਲੇ ਹੋਏ ਲਾਗਇਨ ਅਤੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਇੱਥੇ ਸੰਭਾਲਿਆ ਜਾਵੇਗਾ।
+
+ %s ਇੱਥੇ ਦਿੱਤੀਆਂ ਹੋਈਆਂ ਸਾਈਟਾਂ ਲਈ ਪਾਸਵਰਡ ਨਹੀਂ ਸੰਭਾਲੇਗਾ।
ਇਹਨਾਂ ਸਾਈਟਾਂ ਲਈ ਲਾਗਇਨ ਅਤੇ ਪਾਸਵਰਡ ਨਹੀਂ ਸੰਭਾਲੇ ਜਾਣਗੇ।
+
+ %s ਇਹਨਾਂ ਸਾਈਟਾਂ ਲਈ ਪਾਸਵਰਡ ਨਹੀਂ ਸੰਭਾਲੇਗਾ।
ਸਾਰੀਆਂ ਛੋਟਾਂ ਹਟਾ ਦਿਓ
ਲਾਗਇਨ ਖੋਜੋ
+
+ ਪਾਸਵਰਡ ਖੋਜੋ
ਸਾਈਟ
@@ -1773,10 +1775,16 @@
ਪਾਸਵਰਡ ਲੁਕਾਓ
ਆਪਣੇ ਸੰਭਾਲੇ ਲਾਗਇਨ ਵੇਖਣ ਲਈ ਅਣ-ਲਾਕ ਕਰੋ
+
+ ਆਪਣੇ ਸੰਭਾਲੇ ਹੋਏ ਪਾਸਵਰਡ ਵੇਖਣ ਲਈ ਅਣ-ਲਾਕ ਕਰੋ
ਆਪਣੇ ਲਾਗਇਨ ਅਤੇ ਪਾਸਵਰਡ ਸੁਰੱਖਿਅਤ ਕਰੋ
+
+ ਆਪਣੇ ਸੰਭਾਲੇ ਹੋਏ ਪਾਸਵਰਡਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ
ਆਪਣੇ ਲਾਗਇਨਾਂ ਅਤੇ ਪਾਸਵਰਡਾਂ ਨੂੰ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਨੂੰ ਰੱਖਣ ਵਾਲੇ ਕਿਸੇ ਦੀ ਪਹੁੰਚ ਤੋਂ ਸੁਰੱਖਿਅਤ ਰੱਖਣ ਲਈ ਡਿਵਾਈਸ ਲਾਕ ਪੈਟਰਨ, ਪਿੰਨ ਜਾਂ ਪਾਸਵਰਡ ਸੈਟ ਅੱਪ ਕਰੋ।
+
+ ਆਪਣੇ ਸੰਭਾਲੇ ਹੋਏ ਪਾਸਵਰਡਾਂ ਨੂੰ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਉੱਤੇ ਕਿਸੇ ਹੋਰ ਵੱਲੋਂ ਪਹੁੰਚ ਕਰਨ ਤੋਂ ਬਚਾਉਣ ਤੋਂ ਸੁਰੱਖਿਅਤ ਕਰਨ ਲਈ ਡਿਵਾਈਸ ਲਾਕ ਪੈਟਰਨ, ਪਿੰਨ ਜਾਂ ਪਾਸਵਰਡ ਸੈੱਟ ਕਰੋ।
ਬਾਅਦ \'ਚ
@@ -1796,6 +1804,9 @@
ਲਾਗਇਨ ਲੜੀਬਧ ਮੇਨੂ
+
+ ਪਾਸਵਰਡ ਮੇਨੂ ਨੂੰ ਲੜੀਬੱਧ ਕਰੋ
+
ਆਪੇ-ਭਰੋ
@@ -1803,27 +1814,42 @@
ਸਿਰਨਾਵੇਂ
ਕਰੈਡਿਟ ਕਾਰਡ
+
+ ਭੁਗਤਾਨ ਦੇ ਢੰਗ
ਕਾਰਡ ਸੰਭਾਲੋ ਅਤੇ ਆਪਣੇ-ਆਪ ਭਰੋ
+
+ ਭੁਗਤਾਨ ਦੇ ਢੰਗ ਸੰਭਾਲੋ ਅਤੇ ਭਰੋ
ਡਾਟਾ ਇੰਕ੍ਰਿਪਟ ਕੀਤਾ ਹੈ
+
+ %s ਤੁਹਾਡੇ ਵਲੋਂ ਸੰਭਾਲੇ ਸਾਰੇ ਭੁਗਤਾਨ ਢੰਗਾਂ ਨੂੰ ਇੰਕ੍ਰਿਪਟ ਕਰਦਾ ਹੈ
ਡਿਵਾਈਸਾਂ ਵਿਚਾਲੇ ਕਾਰਡਾਂ ਨੂੰ ਸਿੰਕ ਕਰੋ
ਕਾਰਡ ਸਿੰਕ ਕਰੋ
ਕਰੈਡਿਟ ਕਾਰਡ ਜੋੜੋ
+
+ ਕਾਰਡ ਜੋੜੋ
ਸੰਭਾਲੇ ਹੋਏ ਕਾਰਡਾਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ
+
+ ਕਾਰਡਾਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ
ਸਿਰਨਾਵਾਂ ਜੋੜੋ
ਸਿਰਨਾਵਿਆਂ ਦਾ ਇੰਤਜ਼ਾਮ ਕਰੋ
ਸਿਰਨਾਵੇਂ ਸੰਭਾਲੋ ਅਤੇ ਆਪਣੇ-ਆਪ ਭਰੋ
+
+ ਸਿਰਨਾਵਿਆਂ ਨੂੰ ਸੰਭਾਲੋ ਅਤੇ ਭਰੋ
ਨੰਬਰ, ਈਮੇਲ ਅਤੇ ਭੇਜਣ ਵਾਲੇ ਸਿਰਨਾਵਿਆਂ ਸਮੇਤ ਜਾਣਕਾਰੀ
+
+ ਫ਼ੋਨ ਨੰਬਰਾਂ ਅਤੇ ਈਮੇਲ ਸਿਰਨਾਵਿਆਂ ਸਮੇਤ
+
ਕਾਰਡ ਜੋੜੋ
@@ -1844,6 +1870,8 @@
ਕਾਰਡ ਨੂੰ ਹਟਾਓ
ਕੀ ਤੁਸੀਂ ਇਹ ਕਰੈਡਿਟ ਕਾਰਡ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?
+
+ ਕਾਰਡ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?
ਹਟਾਓ
@@ -1859,14 +1887,22 @@
ਵਾਜਬ ਕਰੈਡਿਟ ਕਾਰਡ ਨੰਬਰ ਦਿਓ ਜੀ
+
+ ਵਾਜਬ ਕਾਰਡ ਨੰਬਰ ਭਰੋ
ਇਹ ਖੇਤਰ ਭਰੋ
+
+ ਨਾਂ ਜੋੜੋ
ਆਪਣੇ ਸੰਭਾਲੇ ਹੋਏ ਕਾਰਡ ਵੇਖਣ ਲਈ ਅਣ-ਲਾਕ ਕਰੋ
ਆਪਣੇ ਕਰੈਡਿਟ ਕਾਰਡ ਸੁਰੱਖਿਅਤ ਕਰੋ
+
+ ਆਪਣੇ ਸੰਭਾਲੇ ਹੋਏ ਭੁਗਤਾਨ ਢੰਗਾਂ ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰੋ
ਆਪਣੀ ਡਿਵਾਇਸ ਲਈ ਲਾਕ ਪੈਟਰਨ, ਪਿੰਨ, ਜਾਂ ਪਾਸਵਰਡ ਸੈੱਟ ਕਰੋ ਤਾਂ ਜੋ ਕਿਸੇ ਹੋਰ ਹੱਥ ਤੁਹਾਡਾ ਡਿਵਾਇਸ ਹੋਣ ਉੱਤੇ ਤੁਹਾਡੇ ਸੰਭਾਲੇ ਪਾਸਵਰਡ ਸੁਰੱਖਿਅਤ ਰਹਿਣ।
+
+ ਆਪਣੇ ਸੰਭਾਲੇ ਹੋਏ ਪਾਸਵਰਡ ਢੰਗਾਂ ਨੂੰ ਤੁਹਾਡੇ ਡਿਵਾਈਸ ਉੱਤੇ ਕਿਸੇ ਹੋਰ ਵੱਲੋਂ ਪਹੁੰਚ ਕਰਨ ਤੋਂ ਬਚਾਉਣ ਤੋਂ ਸੁਰੱਖਿਅਤ ਕਰਨ ਲਈ ਡਿਵਾਈਸ ਲਾਕ ਪੈਟਰਨ, ਪਿੰਨ ਜਾਂ ਪਾਸਵਰਡ ਸੈੱਟ ਕਰੋ।
ਹੁਣੇ ਸੈਟ ਅੱਪ ਕਰੋ
@@ -1876,6 +1912,8 @@
ਸੰਭਾਲੀ ਕਰੈਡਿਟ ਕਾਰਡ ਜਾਣਕਾਰੀ ਵਰਤਣ ਲਈ ਅਣ-ਲਾਕ ਕਰੋ
+
+ ਸੰਭਾਲੇ ਹੋਏ ਭੁਗਤਾਨ ਢੰਗਾਂ ਨੂੰ ਵਰਤਣ ਲਈ ਅਣ-ਲਾਕ ਕਰੋ
ਸਿਰਨਾਵਾਂ ਜੋੜੋ
@@ -1913,6 +1951,8 @@
ਕੀ ਤੁਸੀਂ ਇਹ ਸਿਰਨਾਵੇਂ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?
+
+ ਇਹ ਸਿਰਨਾਵੇਂ ਨੂੰ ਹਟਾਉਣਾ ਹੈ?
ਹਟਾਓ
@@ -2011,6 +2051,8 @@
ਸੋਧੋ
ਕੀ ਤੁਸੀਂ ਇਹ ਲਾਗਇਨ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?
+
+ ਕੀ ਤੁਸੀਂ ਇਸ ਪਾਸਵਰਡ ਨੂੰ ਹਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?
ਹਟਾਓ
@@ -2018,24 +2060,44 @@
ਰੱਦ ਕਰੋ
ਲਾਗਇਨ ਚੋਣਾਂ
+
+ ਪਾਸਵਰਡ ਚੋਣਾਂ
ਲਾਗਇਨ ਦੇ ਵੈੱਬ ਐਡਰੈਸ ਲਈ ਸੋਧਣਯੋਗ ਲਿਖਤ ਖੇਤਰ ਹੈ।
+
+ ਵੈੱਬਸਾਈਟ ਸਿਰਨਾਵਿਆਂ ਲਈ ਸੋਧ ਕਰਨ ਯੋਗ ਲਿਖਤ ਖੇਤਰ।
ਲਾਗਇਨ ਦੇ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਲਈ ਸੋਧਣਯੋਗ ਲਿਖਤ ਖੇਤਰ ਹੈ।
+
+ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਲਈ ਸੋਧ ਕਰਨ ਯੋਗ ਲਿਖਤ ਖੇਤਰ।
ਲਾਗਇਨ ਦੇ ਪਾਸਵਰਡ ਲਈ ਸੋਧਣਯੋਗ ਲਿਖਤ ਖੇਤਰ ਹੈ।
+
+ ਪਾਸਵਰਡ ਲਈ ਸੋਧ ਕਰਨ ਯੋਗ ਲਿਖਤ ਖੇਤਰ।
ਤਬਦੀਲੀਆਂ ਨੂੰ ਲਾਗਇਨ ਲਈ ਸੰਭਾਲੋ।
+
+ ਤਬਦੀਲੀਆਂ ਨੂੰ ਸੰਭਾਲੋ।
ਸੋਧੋ
+
+ ਪਾਸਵਰਡ ਨੂੰ ਸੋਧੋ
ਨਵਾਂ ਲਾਗਇਨ ਜੋੜੋ
+
+ ਪਾਸਵਰਡ ਜੋੜੋ
ਪਾਸਵਰਡ ਚਾਹੀਦਾ ਹੈ
+
+ ਪਾਸਵਰਡ ਦਿਓ
ਵਰਤੋਂਕਾਰ-ਨਾਂ ਚਾਹੀਦਾ ਹੈ
+
+ ਵਰਤੋਂਕਾਰ-ਨਾਂ ਦਿਓ
ਹੋਸਟ-ਨਾਂ ਚਾਹੀਦਾ ਹੈ
+
+ ਵੈੱਬ ਸਿਰਨਾਵਾਂ ਦਿਓ
ਆਵਾਜ਼ ਰਾਹੀਂ ਖੋਜੋ
@@ -2130,6 +2192,9 @@
%s ਖੋਜ
+
+ ਆਪਣੇ ਮੂਲ ਬਰਾਊਜ਼ਰ ਨੂੰ ਬਦਲੋ
+
ਵੈੱਬਸਾਈਟਾਂ, ਈਮੇਲਾਂ ਅਤੇ ਸੁਨੇਹਿਆਂ ਨੂੰ Firefox ਵਿੱਚ ਆਪਣੇ ਖੋਲ੍ਹਣ ਲਈ ਲਿੰਕ ਸੈੱਟ ਕਰੋ।
@@ -2204,8 +2269,6 @@
ਹਾਈਲਾਈਟ ਹਨ, ਜੋ ਸਾਨੂੰ ਜਾਪਦਾ ਹੈ ਕਿ ਭਰੋਸੇਯੋਗ ਹਨ।]]>
%s ਬਾਰੇ ਹੋਰ ਸਿੱਖੋ।
-
- Mozilla ਵਲੋਂ %s ਰੀਵਿਊ ਦੀ ਕੁਆਲਟੀ ਕਿਵੇਂ ਪਤਾ ਕਰਦਾ ਹੈ
%s ਰੀਵਿਊ ਦੀ ਕੁਆਲਟੀ ਕਿਵੇਂ ਪਤਾ ਕਰਦਾ ਹੈ
@@ -2390,6 +2453,8 @@
ਉਲੱਥਾ ਜਾਰੀ ਹੈ
+
+ ਭਾਸ਼ਾ ਚੁਣੋ
ਅਨੁਵਾਦ ਕਰਨ ਦੌਰਾਨ ਸਮੱਸਿਆ ਆਈ ਸੀ। ਬਾਅਦ ਵਿੱਚ ਮੁੜ ਕੋਸ਼ਿਸ਼ ਕਰੋ।
@@ -2410,6 +2475,10 @@
%1$s ਲਈ ਕਦੇ ਉਲੱਥਾ ਨਾ ਕਰੋ
ਇਹ ਸਾਈਟ ਦਾ ਉਲੱਥਾ ਕਦੇ ਨਾ ਕਰੋ
+
+ ਸਭ ਹੋਰ ਸੈਟਿੰਗਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ
+
+ ਅਨੁਵਾਦ ਲਈ ਪੇਸ਼ਕਸ਼ਾਂ ਨੂੰ ਅਣਡਿੱਠਾ ਕਰੋ
ਉਲੱਥਾ ਸੈਟਿੰਗਾਂ
diff --git a/app/src/main/res/values-pa-rPK/strings.xml b/app/src/main/res/values-pa-rPK/strings.xml
index a77e24283..36245c9b3 100644
--- a/app/src/main/res/values-pa-rPK/strings.xml
+++ b/app/src/main/res/values-pa-rPK/strings.xml
@@ -259,8 +259,6 @@
سکین کرو
-
- کھوج انجݨ
کھوج انجݨ دیاں ترجیحاں
@@ -312,23 +310,28 @@
- اطلاعواں تہانوں %s نال ہور کرن دی مدد کردے ہن
+ اطلاعواں تہانوں %s نال ہور کرن دی مدد کردے ہن
- ڈوائیساں وچالے آپݨیاں ٹیباں نوں ہم وقت کرو، ڈاؤنلوڈ دا انتظام کرو، %s ایپ دی پردہ داری سرکھیا دا پورا فائدہ لیݨ لئی گر لوو تے ہور۔
+ ڈوائیساں وچالے آپݨیاں ٹیباں نوں ہم وقت کرو، ڈاؤنلوڈ دا انتظام کرو، %s ایپ دی پردہ داری سرکھیا دا پورا فائدہ لیݨ لئی گر لوو تے ہور۔
- جاری رکھو
+ جاری رکھو
- ہݨے نہیں
+ ہݨے نہیں
+
+ فائرفاکس پردے داری سوچنا
+
اسیں تہانوں سرکھیت رکھݨا چاہندے آں
- ساڈا غیر منافع سمرتھ براؤزر کمپنیاں نوں ویب اُتے چوری بھِپے پِچھا کرن توں روکݨ لئی مدد کردا اے۔ \n\n ساڈے پردے داری نوٹس بارے ہور سکھو۔
+ کمپنیاں نوں چوری چوری ویب اُتے تہاڈا پچھا کرن توں ساڈا غیر فائدہ سمرتھ براؤزر آپݨے آپ ہی روکدا اے۔
+
+ ساڈا غیر منافع سمرتھ براؤزر کمپنیاں نوں ویب اُتے چوری بھِپے پِچھا کرن توں روکݨ لئی مدد کردا اے۔ \n\n ساڈے پردے داری نوٹس بارے ہور سکھو۔
- پردے داری دا بیان
+ پردے داری دا بیان
مول براؤزر تے طور تے بݨاؤ
@@ -354,6 +357,22 @@
ہݨے نہیں
+
+ فائرفاکس کھوج وجیٹ ازماؤ
+
+ تہاڈی مکھ سکرین اُتے فائرفاکس نال تسیں پرائیویسی ادھارت براؤزر نوں سوکھی طرح ورت سکدے او، جو کہ انتر سائیٹ ٹریکراں اُتے پابندی لاوندا اے۔
+
+
+ فائرفاکس وجیٹ جوڑو
+
+ ہݨے نہیں
+
+
+
+ %1$s نال نویں ٹیب کھولھو
کھوج
@@ -369,34 +388,115 @@
عام
بارے
+
+ اک چݨو
+
+ بدلویں کھوج انجݨاں دا انتئام کرو
+
+ کھوج مینو وچ دسݨ والے انجݨاں نوں سودھو
+
+ کھوج مینو وچ دسݨ والے انجݨ
مول کھوج والا
کھوج
+
+ کھوجݨ والے انجݨ
+
+ کھوجݨ والیاں انجݨاں توں سجھاؤ
+
+ سرناواں پٹی لئی ترجیحاں
+
+ سرناواں پٹی – فائرفاکس سجھاؤ
+
+ فائرفاکس سجھاؤ بارے پور جاݨو
ایپ دکان تے درجہ دیو
%1$s بارے
+
+ مول براؤزر تے طور تے بݨاؤ
اضافی
-
- بند
-
- چالو
+
+ پردے داری تے سرکھیا
+
+ سائیٹ دیاں اجازتاں
+
+ نجی براؤز کرن
+
+ لنک نجی ٹیب وچ کھولھو
+
+ نجی براؤز وچ سکرینشاٹ منظور کرو
+
+ جے اجازت دتی تاں نجی ٹیباں اودوں وی دکھائی دیݨگیاں، جدوں کئی ایپاں کھلھیاں ہندیاں ہن
+
+
+ نجی براؤز کرن شارٹکٹ جوڑو
+
+ سرف HTTPS ڈھنگ
+
+
+ کوکی جھنڈا روکو
+
+ نجی براؤز کرن وچ کوکی جھنڈا روکو
+
+ ایس سائیٹ لئی بند اے
رد کرو
-
- اجازت دیو
+
+ بینتی بھیجیں
+
+ ایس سائیٹ لئی سہایتا دی بینتی کرنی اے؟
+
+ ںینتی بھیجی ہوئی
+
+ ایس سائیٹ لئی چالو
+
+ سہایتا بینتی بھیجی
+
+ سائیٹ ایس ویلے سہایک نہیں اے
+
+ کیہہ %1$s لئی کوکی جھنڈا روکو چالو کرنا اے؟
+
+ کیہہ %1$s لئی کوکی جھنڈا روکو بند کرنا اے؟
+
+ %1$s ایس سائیٹ لئی آپݨے آپ کوکی بینتیاں نوں بند نہیں کر سکدا اے۔ تسیں مستقبل وچ ایس سائیٹ واسطے سہایتا لئی بینتی کر سکدے او۔
+
+ بند کرن نال %1$s ایس سائیٹ لئی کوکیاں مٹا کے ایس نوں مڑ لوڈ کرےگا۔ ایہہ تہانوں لاگ آؤٹ جاں تہاڈی خرید داری کارٹاں نوں خالی کرےگا۔
+
+
+ چاکو کرو تے %1$s ایس سائیٹ واسطے کوکی جھنڈے نوں آپݨے آپ انکار کرن دی کوشش کرےگا۔
+
+ %1$s نے ہݨے تہاڈے لئی کوکیاں توں انکار کیتا اے
+
+
+ ایس سائیٹ لئی تہاڈے لئی گھٹ دھیان بھٹکݨا، گھٹ کوکیاں ٹریک کرن اے۔
+
+
+ وادھا کیتی سرکھیا لئی HTTPS انکرپشن پروٹوکال ورت کے سائیٹاں نال کنیکٹ کرن دی آپݨے آپ کوشش کرو۔
بند
+
+ سبھناں ٹیباں وچ چالو اے
+
+ نجی ٹیباں وچ چالو ہی اے
ہور جاݨو
+
+ ساریاں ٹیباں وچ چالو کرو
+
+ صرف نجی ٹیباں وچ چالو کرو
+
+ سرکھیت سائیٹ دستیاب نہیں اے
+
+ رسائیت
کھاتہ
@@ -416,17 +516,32 @@
ڈیٹا چوݨاں
+
+ اتے پتے دی کھوج
+
+ ہمیشہ
+
+ کدے نہیں
+
وادھے والے
اطلاع نامے
+
+ اجازت دتے
+
+ اجازت نہیں دتے
+
ٹھیک اے
رد کرو
+
+ والپیپر
+
ویکھو
@@ -437,6 +552,18 @@
تریخ
+
+ اتے پتے
+
+ لاگ ان
+
+ پاسورڈ
+
+ ساریاں کھولھو
+
+ لاگ آؤٹ
+
+ ڈوائیس دا ناں
پتے
@@ -811,6 +938,9 @@
ہور جاݨو
+
+ سیٹنگاں نوں جاؤ
+
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index ff697c011..c268fed78 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -244,6 +244,7 @@
Dostosuj stronę startową
+
Strona startowa
@@ -251,6 +252,9 @@
Usuń historię przeglądania
+
+ Przetłumacz stronę
+
Wybrany język
@@ -262,8 +266,6 @@
Skanuj
-
- Wyszukiwarka
Ustawienia wyszukiwarki
@@ -318,23 +320,28 @@
- Dzięki powiadomieniom lepiej wykorzystasz przeglądarkę %s
+ Dzięki powiadomieniom lepiej wykorzystasz przeglądarkę %s
- Synchronizuj karty między urządzeniami, zarządzaj pobieranymi plikami, otrzymuj wskazówki, jak najlepiej wykorzystać ochronę prywatności w przeglądarce %s i nie tylko.
+ Synchronizuj karty między urządzeniami, zarządzaj pobieranymi plikami, otrzymuj wskazówki, jak najlepiej wykorzystać ochronę prywatności w przeglądarce %s i nie tylko.
- Kontynuuj
+ Kontynuuj
- Nie teraz
+ Nie teraz
+
+ Zasady ochrony prywatności Firefoksa
+
Uwielbiamy zapewniać Ci bezpieczeństwo
- Nasza przeglądarka wspierana przez organizację non-profit pomaga powstrzymywać firmy przed potajemnym śledzeniem Cię w Internecie.\n\nWięcej informacji znajdziesz w naszych zasadach ochrony prywatności.
+ Nasza przeglądarka wspierana przez organizację non-profit pomaga powstrzymywać firmy przed potajemnym śledzeniem Cię w Internecie.
+
+ Nasza przeglądarka wspierana przez organizację non-profit pomaga powstrzymywać firmy przed potajemnym śledzeniem Cię w Internecie.\n\nWięcej informacji znajdziesz w naszych zasadach ochrony prywatności.
- zasadach ochrony prywatności
+ zasadach ochrony prywatności
Ustaw jako domyślną przeglądarkę
@@ -438,21 +445,11 @@
Tryb używania wyłącznie protokołu HTTPS
-
- Ograniczanie informacji o ciasteczkach
Blokowanie informacji o ciasteczkach
Blokowanie informacji o ciasteczkach w trybie prywatnym
-
- Ograniczanie informacji o ciasteczkach
-
- Wyłączone
-
- Włączone
-
-
- %1$s automatycznie próbuje odrzucać prośby o akceptację ciasteczek.
+
Wyłączone na tej witrynie
@@ -470,36 +467,17 @@
Witryna obecnie nie jest obsługiwana
- Włączyć ograniczanie informacji o ciasteczkach na witrynie %1$s?
-
Włączyć blokowanie informacji o ciasteczkach na witrynie %1$s?
-
- Wyłączyć ograniczanie informacji o ciasteczkach na witrynie %1$s?
Wyłączyć blokowanie informacji o ciasteczkach na witrynie %1$s?
%1$s nie może automatycznie odrzucać próśb o akceptację ciasteczek na tej witrynie. Można wysłać prośbę o dodanie obsługi tej witryny w przyszłości.
-
- %1$s usunie ciasteczka tej witryny i odświeży stronę. Usunięcie wszystkich ciasteczek może spowodować wylogowanie ze strony lub opróżnienie koszyka w sklepie.
Wyłącz, a %1$s usunie ciasteczka i ponownie wczyta tę stronę. Może to spowodować wylogowanie ze strony lub opróżnienie koszyka w sklepie.
- %1$s próbuje automatycznie odrzucać wszystkie prośby o akceptację ciasteczek na obsługiwanych witrynach.
-
Włącz, a %1$s spróbuje automatycznie odrzucać wszystkie prośby o akceptację ciasteczek na tej witrynie.
-
- Pozwolić przeglądarce %1$s odrzucać prośby o akceptację ciasteczek?
-
- %1$s może automatycznie odrzucać wiele próśb o akceptację ciasteczek.
-
- Nie teraz
-
- Będziesz widzieć mniej próśb o akceptację ciasteczek
-
-
- Pozwól
%1$s właśnie odrzucił ciasteczka za Ciebie
@@ -718,6 +696,8 @@
Zakładki
Dane logowania
+
+ Hasła
Otwarte karty
@@ -746,6 +726,8 @@
Karty płatnicze
+
+ Metody płatności
Adresy
@@ -1284,8 +1266,6 @@
Zamknij
- Nie można wydrukować
-
Nie można wydrukować tej strony
Drukuj
@@ -1693,8 +1673,12 @@
Dane logowania i hasła
+
+ Hasła
Zachowywanie danych logowania i haseł
+
+ Zachowywanie haseł
Pytanie o zachowanie
@@ -1711,26 +1695,45 @@
Dodaj dane logowania
+
+ Dodaj hasło
+
Synchronizowanie danych logowania
+
+ Synchronizowanie haseł
- Synchronizuj karty między urządzeniami
+ Synchronizuj dane logowania między urządzeniami
+
+ Synchronizuj hasła między urządzeniami
Zachowane dane logowania
+
+ Zachowane hasła
Zachowane lub synchronizowane z przeglądarką %s dane logowania będą wyświetlane w tym miejscu.
+
+ Tutaj będą wyświetlane hasła zachowane lub synchronizowane w przeglądarce %s. Wszystkie zachowywane hasła są zaszyfrowane.
Więcej informacji o synchronizacji.
+
+ Więcej informacji o synchronizacji
Wyjątki
Tutaj będą wyświetlane dane logowania i hasła, które nie będą zachowywane.
+
+ %s nie będzie zachowywać haseł do wymienionych tutaj witryn.
Dane logowania i hasła dla tych witryn nie będą zachowywane.
+
+ %s nie będzie zachowywać haseł do tych witryn.
Usuń wszystkie wyjątki
Szukaj danych logowania
+
+ Szukaj haseł
Witryna
@@ -1759,10 +1762,16 @@
Ukryj hasło
Odblokuj, aby wyświetlić zachowane dane logowania
+
+ Odblokuj, aby wyświetlić zachowane hasła
Zabezpiecz dane logowania i hasła
+
+ Zabezpiecz zachowane hasła
Skonfiguruj wzór blokady, kod PIN lub hasło, aby ochronić zachowane dane logowania i hasła w przypadku, gdy ktoś inny uzyska dostęp do urządzenia.
+
+ Skonfiguruj wzór blokady, kod PIN lub hasło, aby ochronić zachowane hasła w przypadku, gdy ktoś inny uzyska dostęp do urządzenia.
Później
@@ -1781,6 +1790,9 @@
Menu sortowania danych logowania
+
+ Menu sortowania haseł
+
Automatyczne wypełnianie
@@ -1789,10 +1801,16 @@
Karty płatnicze
+
+ Metody płatności
Zachowywanie i automatyczne wypełnianie kart
+
+ Zachowywanie i wypełnianie metod płatności
Dane są zaszyfrowane
+
+ %s szyfruje wszystkie zachowywane metody płatności
Synchronizuj karty między urządzeniami
@@ -1800,8 +1818,12 @@
Dodaj kartę płatniczą
+
+ Dodaj kartę
Zarządzaj zachowanymi kartami
+
+ Zarządzaj kartami
Dodaj adres
@@ -1809,9 +1831,14 @@
Zachowywanie i automatyczne wypełnianie adresów
+
+ Zachowywanie i wypełnianie adresów
Zawiera informacje takie jak numery, adresy e-mail i adresy wysyłki
+
+ W tym numery telefonów i adresy e-mail
+
Dodaj kartę
@@ -1832,6 +1859,8 @@
Usuń kartę
Czy na pewno usunąć tę kartę płatniczą?
+
+ Czy usunąć kartę?
Usuń
@@ -1846,14 +1875,22 @@
Wprowadź prawidłowy numer karty płatniczej
+
+ Podaj prawidłowy numer karty
Wypełnij to pole
+
+ Dodaj imię i nazwisko
Odblokuj, aby wyświetlić zachowane karty
Zabezpiecz karty płatnicze
+
+ Zabezpiecz zachowane metody płatności
Skonfiguruj wzór blokady, kod PIN lub hasło, aby ochronić zachowane karty płatnicze w przypadku, gdy ktoś inny uzyska dostęp do urządzenia.
+
+ Skonfiguruj wzór blokady, kod PIN lub hasło, aby ochronić zachowane metody płatności w przypadku, gdy ktoś inny uzyska dostęp do urządzenia.
Skonfiguruj teraz
@@ -1864,6 +1901,8 @@
Odblokuj, aby użyć przechowywanych informacji o kartach płatniczych
+
+ Odblokuj, aby użyć zachowanych metod płatności
Dodaj adres
@@ -1900,6 +1939,8 @@
Usuń adres
Czy na pewno usunąć ten adres?
+
+ Czy usunąć ten adres?
Usuń
@@ -1998,30 +2039,52 @@
Edytuj
Czy na pewno usunąć te dane logowania?
+
+ Czy na pewno usunąć to hasło?
Usuń
Anuluj
Opcje danych logowania
+
+ Opcje haseł
Edytowalne pole tekstowe dla adresu witryny danych logowania.
+
+ Edytowalne pole tekstowe dla adresu witryny.
Edytowalne pole tekstowe dla nazwy użytkownika danych logowania.
+
+ Edytowalne pole tekstowe dla nazwy użytkownika.
Edytowalne pole tekstowe dla hasła danych logowania.
+
+ Edytowalne pole tekstowe dla hasła.
- Zapisz zmiany danych logowania.
+ Zachowaj zmiany danych logowania.
+
+ Zachowaj zmiany.
Edycja
+
+ Edycja hasła
Dodanie nowych danych logowania
+
+ Dodanie hasła
Hasło jest wymagane
+
+ Wpisz hasło
Nazwa użytkownika jest wymagana
+
+ Wpisz nazwę użytkownika
Adres jest wymagany
+
+ Wpisz adres witryny
Wyszukiwanie głosowe
@@ -2117,6 +2180,9 @@
Szukaj w %s
+
+ Przełącz domyślną przeglądarkę
+
Ustaw automatyczne otwieranie odnośników z witryn, wiadomości e-mail i SMS-ów w Firefoksie.
@@ -2206,6 +2272,8 @@
Tłumaczenie
Trwa tłumaczenie
+
+ Wybierz język
Wystąpił problem przy tłumaczeniu. Spróbuj ponownie.
@@ -2226,6 +2294,10 @@
Nigdy nie tłumacz tego języka (%1$s)
Nigdy nie tłumacz tej witryny
+
+ Zastępuje wszystkie pozostałe ustawienia
+
+ Zastępuje propozycje tłumaczenia
Ustawienia tłumaczenia
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 7032e588a..ad71b6832 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -245,6 +245,7 @@
Personalizar tela inicial
+
Tela inicial
@@ -252,6 +253,9 @@
Apagar histórico de navegação
+
+ Traduzir página
+
Selecionar idioma
@@ -264,8 +268,6 @@
Digitalizar
-
- Mecanismo de pesquisa
Configurações de mecanismos de pesquisa
@@ -320,23 +322,28 @@
- Notificações ajudam você a aproveitar mais o %s
+ Notificações ajudam você a aproveitar mais o %s
- Sincronize suas abas entre dispositivos, gerencie arquivos baixados, receba dicas de como aproveitar ao máximo a proteção de privacidade do %s e muito mais.
+ Sincronize suas abas entre dispositivos, gerencie arquivos baixados, receba dicas de como aproveitar ao máximo a proteção de privacidade do %s e muito mais.
- Avançar
+ Avançar
- Agora não
+ Agora não
+
+ Aviso de privacidade do Firefox
+
Adoramos manter você seguro
- Nosso navegador respaldado por uma entidade sem fins lucrativos ajuda a impedir que empresas sigam você secretamente pela web.\n\nSaiba mais em nosso aviso de privacidade.
+ Nosso navegador respaldado por uma entidade sem fins lucrativos ajuda a impedir que empresas sigam você secretamente pela web.
+
+ Nosso navegador respaldado por uma entidade sem fins lucrativos ajuda a impedir que empresas sigam você secretamente pela web.\n\nSaiba mais em nosso aviso de privacidade.
- aviso de privacidade
+ aviso de privacidade
Definir como navegador padrão
@@ -394,7 +401,7 @@
Selecione um
- Gerencie mecanismos de pesquisa alternativos
+ Gerenciar mecanismos de pesquisa alternativos
Editar mecanismos visíveis no menu de pesquisa
@@ -439,21 +446,11 @@
Modo somente HTTPS
-
- Redução de avisos de cookies
Bloqueador de avisos de cookies
Bloqueador de avisos de cookies na navegação privativa
-
- Reduzir avisos de cookies
-
- Desativado
-
- Ativado
-
-
- O %1$s tenta rejeitar automaticamente solicitações de cookies em avisos de cookies.
+
Desativado neste site
@@ -471,37 +468,17 @@
Site atualmente não suportado
- Ativar redução de avisos de cookies em %1$s?
-
Ativar bloqueador de avisos de cookies em %1$s?
-
- Desativar redução de avisos de cookies em %1$s?
Desativar bloqueador de avisos de cookies em %1$s?
O %1$s não pode rejeitar solicitações de cookies automaticamente neste site. Você pode enviar uma solicitação para passar a funcionar neste site.
-
- O %1$s irá limpar os cookies deste site e atualizar a página. Limpar todos os cookies pode encerrar a sessão de acesso no site ou esvaziar carrinhos de compras.
Desative e o %1$s limpa cookies e recarrega este site. Isso pode desconectar você de uma conta ou esvaziar um carrinho de compras.
- O %1$s tenta rejeitar automaticamente todas as solicitações de cookies em sites suportados.
-
Ative e o %1$s tenta recusar avisos de cookies automaticamente neste site.
-
- Permitir que %1$s rejeite avisos de cookies?
-
- %1$s pode rejeitar automaticamente muitas solicitações de avisos de cookies.
-
- Agora não
-
-
- Aparecerão menos solicitações de cookies
-
-
- Permitir
O %1$s acabou de recusar cookies para você
@@ -720,6 +697,8 @@
Favoritos
Contas de acesso
+
+ Senhas
Abas abertas
@@ -746,6 +725,8 @@
Cartões de crédito
+
+ Métodos de pagamento
Endereços
@@ -1284,8 +1265,6 @@
Descartar
- Não foi possível imprimir
-
Não foi possível imprimir esta página
Imprimir
@@ -1692,8 +1671,12 @@
Contas e senhas
+
+ Senhas
Salvar contas e senhas
+
+ Salvar senhas
Perguntar se deve salvar
@@ -1710,26 +1693,45 @@
Adicionar conta
+
+ Adicionar senha
+
Sincronizar contas
+
+ Sincronizar senhas
Sincronizar contas entre dispositivos
+
+ Sincronizar senhas entre dispositivos
Contas salvas
+
+ Senhas salvas
As contas que você salvar ou sincronizar no %s aparecem aqui.
+
+ As senhas que você salva ou sincroniza no %s aparecem aqui. Todas as senhas que você salva são criptografadas.
Saiba mais sobre sincronização.
+
+ Saiba mais sobre sincronização
Exceções
Contas e senhas que não são salvas são mostradas aqui.
+
+ O %s não salva senhas dos sites desta lista.
Contas e senhas desses sites não serão salvas.
+
+ O %s não salva senhas desses sites.
Excluir todas as exceções
Pesquisar contas
+
+ Procurar senhas
Site
@@ -1758,11 +1760,17 @@
Ocultar senha
Desbloqueie para ver suas contas salvas
+
+ Desbloqueie para ver as senhas salvas
Proteja suas contas e senhas
+
+ Proteja as senhas salvas
Configure um método de bloqueio do dispositivo (desenho, código PIN ou senha) para proteger o acesso a suas contas e senhas salvas, caso outras pessoas usem seu dispositivo.
+
+ Configure um método de bloqueio do dispositivo (desenho, código PIN ou senha) para proteger o acesso a suas senhas salvas, caso outras pessoas usem seu dispositivo.
Mais tarde
@@ -1781,6 +1789,9 @@
Menu de ordenação de contas
+
+ Menu de ordenação de senhas
+
Preenchimento automático
@@ -1788,10 +1799,16 @@
Endereços
Cartões de crédito
+
+ Métodos de pagamento
Salvar e preencher cartões automaticamente
+
+ Salvar e preencher métodos de pagamento
Os dados são criptografados
+
+ O %s criptografa todos os métodos de pagamento que você salva
Sincronizar cartões entre dispositivos
@@ -1799,17 +1816,26 @@
Adicionar cartão de crédito
+
+ Adicionar cartão
Gerenciar cartões salvos
+
+ Gerenciar cartões
Adicionar endereço
Gerenciar endereços
Salvar e preencher endereços automaticamente
+
+ Salvar e preencher endereços
Incluir informações como números, email e endereços de entrega
+
+ Incluir números de telefone e endereços de email
+
Adicionar cartão
@@ -1830,6 +1856,8 @@
Excluir cartão
Tem certeza que quer excluir este cartão de crédito?
+
+ Excluir cartão?
Excluir
@@ -1845,14 +1873,22 @@
Digite um número de cartão de crédito válido
+
+ Digite um número de cartão válido
Preencha este campo
+
+ Adicionar um nome
Desbloqueie para ver seus cartões salvos
Proteja seus cartões de crédito
+
+ Proteja seus métodos de pagamento salvos
Configure um método de bloqueio do dispositivo (desenho, código PIN ou senha) para proteger o acesso a seus cartões de crédito salvos, caso outras pessoas usem seu dispositivo.
+
+ Configure um método de bloqueio do dispositivo (desenho, código PIN ou senha) para proteger o acesso a seus métodos de pagamento salvos, caso outras pessoas usem seu dispositivo.
Configurar agora
@@ -1863,6 +1899,8 @@
Desbloqueie para usar informações armazenadas de cartões de crédito
+
+ Desbloqueie para usar formas de pagamento salvas
Adicionar endereço
@@ -1901,6 +1939,8 @@
Tem certeza que quer excluir este endereço?
+
+ Excluir este endereço?
Excluir
@@ -1999,30 +2039,52 @@
Editar
Tem certeza que quer excluir esta conta?
+
+ Tem certeza que quer excluir esta senha?
Excluir
Cancelar
Opções da conta
+
+ Opções de senhas
O campo de texto editável do endereço web da conta.
+
+ O campo de texto editável do endereço do site.
O campo de texto editável do nome de usuário da conta.
+
+ O campo de texto editável do nome de usuário.
O campo de texto editável da senha da conta.
+
+ O campo de texto editável da senha.
Salvar alterações na conta.
+
+ Salvar alterações.
Editar
+
+ Editar senha
Adicionar conta
+
+ Adicionar senha
Senha é obrigatória
+
+ Digite uma senha
Nome de usuário é obrigatório
+
+ Digite um nome de usuário
Nome de servidor é obrigatório
+
+ Digite um endereço web
Pesquisa por voz
@@ -2120,6 +2182,9 @@
Pesquisa do %s
+
+ Mude seu navegador padrão
+
Abra links, emails e mensagens automaticamente no Firefox.
@@ -2194,8 +2259,6 @@
Saiba mais sobre o %s.
-
- como o %s da Mozilla determina a qualidade das avaliações
como o %s determina a qualidade das avaliações
@@ -2383,6 +2446,8 @@
Tradução em andamento
+
+ Escolha um idioma
Houve um problema ao traduzir. Tente novamente.
@@ -2403,6 +2468,10 @@
Nunca traduzir %1$s
Nunca traduzir este site
+
+ Sobrepõe todas as outras configurações
+
+ Sobrepõe ofertas de traduzir
Configurações de tradução
diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml
index 2146d3212..1885805a7 100644
--- a/app/src/main/res/values-pt-rPT/strings.xml
+++ b/app/src/main/res/values-pt-rPT/strings.xml
@@ -69,12 +69,7 @@
- Não deixe evidências neste dispositivo
-
- %1$s exclui os seus cookies, histórico e dados do site quando fecha todas as suas janelas privadas. %2$s
+ Não deixe vestígios neste dispositivo
- Toque aqui para iniciar uma nova sessão privada. Exclua o seu histórico, cookies — tudo.
+ Toque aqui para iniciar uma nova sessão privada. Elimine o seu histórico, cookies – tudo.
@@ -218,6 +213,8 @@
Ressincronizar
Encontrar na página
+
+ Traduzir página
Guardar na coleção
@@ -247,6 +244,7 @@
Personalizar página inicial
+
Ecrã inicial
@@ -254,6 +252,9 @@
Apagar histórico de navegação
+
+ Traduzir página
+
Idioma selecionado
@@ -266,8 +267,6 @@
Digitalizar
-
- Motor de pesquisa
Definições do motor de pesquisa
@@ -322,40 +321,35 @@
- As notificações ajudam a fazer mais com o %s
+ As notificações ajudam a fazer mais com o %s
- Sincronize os seus separadores entre dispositivos, gira transferências, obtenha dicas sobre como aproveitar ao máximo a proteção de privacidade do %s e muito mais.
+ Sincronize os seus separadores entre dispositivos, gira transferências, obtenha dicas sobre como aproveitar ao máximo a proteção de privacidade do %s e muito mais.
- Continuar
+ Continuar
- Agora não
+ Agora não
-
- Faça do Firefox o seu navegador de eleição
+
+ Política de privacidade do Firefox
+
Adoramos mantê-lo(a) seguro(a)
-
- O Firefox coloca as pessoas acima dos lucros e defende a sua privacidade bloqueando rastreadores entre sites.\n\nSaiba mais na nossa informação de privacidade.
- O nosso navegador, apoiado por uma organização sem fins lucrativos, ajuda a impedir que as empresas o sigam secretamente pela web.\n\n Saiba mais nas nossas informações de privacidade.
+ O nosso navegador, apoiado por uma organização sem fins lucrativos, ajuda a impedir que as empresas o sigam secretamente pela Internet.
+
+ O nosso navegador, apoiado por uma organização sem fins lucrativos, ajuda a impedir que as empresas o sigam secretamente pela web.\n\n Saiba mais nas nossas informações de privacidade.
- informação de privacidade
+ informação de privacidade
Definir como navegador predefinido
Agora não
-
- Passe do telemóvel para o portátil e vice-versa
Mantenha-se encriptado quando troca de dispositivos
-
- Consiga ter acesso aos separadores e palavras-passe dos seus outros dispositivos para continuar de onde parou.
Quando está ligado e sincronizado, está mais seguro. O Firefox encripta as suas palavras-passe, marcadores e muito mais.
@@ -363,15 +357,9 @@
Iniciar sessão
Agora não
-
- As notificações permitem-lhe fazer mais com o Firefox
As notificações ajudam-no(a) a manter-se mais seguro(a) com o Firefox
-
- Partilhe separadores entre dispositivos, faça a gestão das transferências e receba dicas sobre como aproveitar o Firefox ao máximo.
Envie separadores de forma segura entre os seus dispositivos e descubra outras funcionalidades de privacidade no Firefox.
@@ -413,8 +401,6 @@
Selecionar um
- Gerir atalhos de pesquisa
-
Gerir motores de pesquisa alternativos
Editar motores visíveis no menu de pesquisa
@@ -428,8 +414,6 @@
Motores de pesquisa
Sugestões dos motores de pesquisa
-
- Barra de endereço
Preferências da barra de endereços
@@ -462,21 +446,11 @@
Modo apenas HTTPS
-
- Redução de Faixas de Cookies
Bloqueador de faixas de cookies
Bloqueador de faixas de cookies na navegação privada
-
- Reduzir faixas de cookies
-
- Desligado
-
- Ligado
-
-
- O %1$s tenta rejeitar automaticamente pedidos de cookies em faixas de cookies.
+
Desativado para este site
@@ -494,35 +468,16 @@
Site atualmente não suportado
- Ativar Redução de Faixa de Cookie para %1$s?
-
Ativar o bloqueador de faixa de cookies para %1$s?
- Desativar Redução de Faixa de Cookie para %1$s?
-
Desativar o bloqueador de faixa de cookies para %1$s?
%1$s não pode rejeitar automaticamente pedidos de cookies neste site. Pode enviar um pedido para suportar este site no futuro.
-
- %1$s limpará os cookies deste site e atualizará a página. A limpeza de todos os cookies pode fazer com que se desconecte da sessão ou esvazie os carrinhos de compras.
Desative e o %1$s irá limpar os cookies e recarregar este site. Isto pode terminar a sua sessão ou esvaziar os carrinhos de compras.
- O %1$s tenta rejeitar automaticamente todos os pedidos de cookies em sites suportados.
-
Ative e o %1$s tentará recusar automaticamente todas as faixas de cookies neste site.
-
- Permitir que %1$s rejeite faixas de cookies?
-
- %1$s pode rejeitar automaticamente muitos pedidos de faixas de cookie.
-
- Agora não
-
- Verá menos pedidos de cookies
-
-
- Permitir
%1$s acabou de recusar cookies por si
@@ -551,14 +506,10 @@
Contudo, também é possível que um invasor esteja envolvido. Se continuar e entrar no site, não deverá inserir nenhuma informação sensível. Se continuar, o modo Somente HTTPS será desativado temporariamente para o site.
Acessibilidade
-
- Servidor personalizado de conta Firefox
Servidor de conta Mozilla personalizado
Servidor de sincronização personalizado
-
- Servidor de conta Firefox / Sincronização modificado. A sair da aplicação para aplicar alterações…
Servidor de conta/Sincronização Mozilla modificado. A sair da aplicação para aplicar alterações…
@@ -576,8 +527,6 @@
Inicie sessão para sincronizar os separadores, marcadores, palavras-passe e mais.
- Conta Firefox
-
Conta Mozilla
Restabeleça a ligação para retomar a sincronização
@@ -590,8 +539,6 @@
Depuração remota via USB
-
- Mostrar motores de pesquisa
Mostrar sugestões de pesquisa
@@ -722,12 +669,6 @@
Explore os extras
-
-
- O extra não é suportado
-
- O extra já está instalado
-
As extensões estão temporariamente desativadas
@@ -753,6 +694,8 @@
Marcadores
Credenciais
+
+ Palavras-passe
Separadores abertos
@@ -779,6 +722,8 @@
Cartões de crédito
+
+ Métodos de pagamento
Moradas
@@ -1318,8 +1263,6 @@
Dispensar
- Não é possível imprimir
-
Não é possível imprimir esta página
Imprimir
@@ -1363,6 +1306,12 @@
Fechar separadores privados
+
+
+ Fechar separadores privados?
+
+ Toque ou deslize esta notificação para fechar os separadores privados.
+
Marketing
@@ -1601,6 +1550,8 @@
Todos os cookies (irá causar falhas nos sites)
Isolar cookies inter-sites
+
+ Indique aos sites para não partilhar e vender dados
Conteúdo de monitorização
@@ -1718,9 +1669,13 @@
Credenciais e palavras-passe
+
+ Palavras-passe
Guardar credenciais e palavras-passe
+
+ Guardar palavras-passe
Pedir para guardar
@@ -1737,26 +1692,46 @@
Adicionar credenciais
+
+ Adicionar palavra-passe
+
Sincronização de credenciais
+
+ Sincronizar palavras-passe
Sincronizar credenciais entre dispositivos
+
+ Sincronize palavras-passe entre dispositivos
Credenciais guardadas
+
+ Palavras-passe guardadas
As credenciais que guardar ou sincronizar com o %s serão apresentadas aqui.
+
+ As palavras-passe que guardar ou sincronizar com o %s serão listadas aqui. Todas as palavras-passe que guarda são encriptadas.
+
Saber mais sobre a sincronização.
+
+ Saber mais sobre a sincronização
Exceções
As credenciais e palavras-passe que não estão guardadas serão mostradas aqui.
+
+ O %s não irá guardar palavras-passe para sites listados aqui.
As credenciais e palavras-passe não serão guardadas para estes sites.
+
+ O %s não irá guardar as palavras-passe para estes sites.
Eliminar todas as exceções
Pesquisar credenciais
+
+ Procurar palavras-passe
Site
@@ -1786,10 +1761,16 @@
Ocultar palavra-passe
Desbloqueie para ver as credenciais guardadas
+
+ Desbloqueie para ver as palavras-passe guardadas
Proteja as suas credenciais e palavras-passe
+
+ Proteja as suas palavras-passe guardadas
Configure um padrão, PIN ou palavra-passe de bloqueio do dispositivo para impedir que as suas credenciais e palavras-passe guardadas sejam acedidas por outra pessoa que tenha acesso ao seu dispositivo.
+
+ Configure um padrão, PIN ou palavra-passe de bloqueio do dispositivo para impedir que as suas palavras-passe guardadas sejam acedidas por outra pessoa que tenha acesso ao seu dispositivo.
Mais tarde
@@ -1808,6 +1789,9 @@
Menu de ordenação de credenciais
+
+ Menu de ordenação de palavras-passe
+
Preenchimento automático
@@ -1815,10 +1799,16 @@
Endereços
Cartões de crédito
+
+ Métodos de pagamento
Guardar e preencher automaticamente cartões
+
+ Guardar e preencher métodos de pagamento
Os dados são encriptados
+
+ O %s encripta todos os métodos de pagamento que guarda
Sincronizar cartões entre dispositivos
@@ -1826,8 +1816,12 @@
Adicionar cartão de crédito
+
+ Adicionar cartão
Gerir cartões guardados
+
+ Gerir cartões
Adicionar endereço
@@ -1835,9 +1829,14 @@
Guardar e preencher automaticamente endereços
+
+ Guardar e preencher endereços
Incluir informações como números, e-mail e endereços de entrega
+
+ Inclui números de telefone e endereços de e-mail
+
Adicionar cartão
@@ -1858,6 +1857,8 @@
Eliminar cartão
Tem a certeza de que quer apagar este cartão de crédito?
+
+ Eliminar cartão?
Apagar
@@ -1872,14 +1873,22 @@
Por favor, introduza um número de cartão de crédito válido
+
+ Insira um número de cartão válido
Por favor preencha este campo
+
+ Adicionar um nome
Desbloquear para ver os cartões guardados
Proteja os seus cartões de crédito
+
+ Proteja os seus métodos de pagamento guardados
Configure um padrão, PIN ou palavra-passe de bloqueio do dispositivo para impedir que os seus cartões de crédito guardados sejam acedidos por outra pessoa que tenha acesso ao seu dispositivo.
+
+ Configure um padrão, PIN ou palavra-passe de bloqueio do dispositivo para impedir que os seus métodos de pagamento guardados sejam acedidos por outra pessoa que tenha acesso ao seu dispositivo.
Configurar agora
@@ -1889,6 +1898,8 @@
Desbloquear para utilizar as informações de cartão de crédito armazenadas
+
+ Desbloquear para utilizar métodos de pagamento guardados
Adicionar endereço
@@ -1926,6 +1937,8 @@
Tem a certeza de que quer eliminar este endereço?
+
+ Eliminar este endereço?
Apagar
@@ -1941,27 +1954,17 @@
Adicionar novo motor de pesquisa
Editar motor de pesquisa
-
- Adicionar
-
- Guardar
Editar
Eliminar
-
- Outro
Nome
-
- Nome
Nome do motor de pesquisa
URL da string de pesquisa
-
- Termo de pesquisa a utilizar
URL a utilizar para a pesquisa
@@ -2035,30 +2038,52 @@
Editar
Tem a certeza que deseja eliminar esta credencial?
+
+ Tem a certeza que quer eliminar esta palavra-passe?
Eliminar
Cancelar
Opções de credenciais
+
+ Opções de palavra-passe
O campo de texto editável para o endereço de Internet da credencial.
+
+ O campo de texto editável para o endereço do site.
O campo de texto editável para o nome de utilizador da credencial.
+
+ O campo de texto editável para o nome de utilizador.
O campo de texto editável para a palavra-passe da credencial.
+
+ O campo de texto editável para a palavra-passe.
Guardar alterações na credencial.
+
+ Guardar alterações.
Editar
+
+ Editar palavra-passe
Adicionar nova credencial
+
+ Adicionar palavra-passe
É necessária uma palavra-passe
+
+ Introduza uma palavra-passe
É necessário um nome de utilizador
+
+ Introduza um nome de utilizador
É necessário um nome de servidor
+
+ Introduza um endereço de Internet
Pesquisa por voz
@@ -2155,6 +2180,9 @@
Pesquisa %s
+
+ Alterar o seu navegador predefinido
+
Definir para que as ligações de sites, e-mails e mensagens sejam abertas automaticamente no Firefox.
@@ -2193,8 +2221,6 @@
- Verificador de avaliações
-
Verificador de avaliações
Avaliações confiáveis
@@ -2207,7 +2233,9 @@
Classificação ajustada
- Avaliações não confiáveis removidas
+ Avaliações não confiáveis removidas
+
+ Baseado em avaliações confiáveis
Destaques das avaliações recentes
@@ -2218,22 +2246,16 @@
classificação baseada em letras de A a F.]]>
Avaliações confiáveis. Acreditamos que os comentários provavelmente são de clientes reais que deixaram comentários honestos e imparciais.
-
- Acreditamos que as avaliações são confiáveis.
Acreditamos que há uma mistura de avaliações confiáveis e não confiáveis.
Avaliações não confiáveis. Acreditamos que as avaliações provavelmente são falsas ou de avaliadores tendenciosos.
-
- Acreditamos que as avaliações não são confiáveis.
classificação ajustada é baseada apenas em avaliações que acreditamos serem confiáveis.]]>
Os destaques são avaliações de %s dos últimos 80 dias que acreditamos serem confiáveis.]]>
Saiba mais acerca do %s.
-
- como %s da Mozilla determina a qualidade da revisão
como %s determina a qualidade da avaliação
@@ -2241,8 +2263,6 @@
Mostrar anúncios no verificador de avaliações
- Irá ver anúncios ocasionais de produtos relevantes. Todos os anúncios devem atender aos nossos padrões de revisão da qualidade. %s
-
Irá ver anúncios ocasionais de produtos relevantes. Anunciamos apenas produtos com avaliações confiáveis. %s
Saber mais
@@ -2265,23 +2285,23 @@
Quando este produto tiver mais avaliações, poderemos verificar a sua qualidade.
- O produto não está disponível
+ O produto não está disponível
- Se perceber que este produto está novamente em stock, reporte e iremos verificar as avaliações.
+ Se perceber que este produto está novamente em stock, reporte e iremos verificar as avaliações.
- Informar que este produto está novamente em stock
-
- Informar que o produto está em stock
+ Informar que o produto está em stock
- A verificar a qualidade da avaliação
+ A verificar a qualidade da avaliação
- A verificar a qualidade da avaliação
+ A verificar a qualidade da avaliação
+
+ A verificar a qualidade da avaliação (%s)
Isto pode demorar cerca de 60 segundos.
- Obrigado por reportar!
+ Obrigado por reportar!
- Devemos receber informações sobre as avaliações deste produto dentro de 24 horas. Volte mais tarde.
+ Devemos receber informações sobre as avaliações deste produto dentro de 24 horas. Volte mais tarde.
Não podemos verificar estas avaliações
@@ -2319,17 +2339,17 @@
Saber mais
- Ao selecionar “Sim, experimentar”, concorda com a %2$s e %3$s de %1$s da Mozilla.
+ Ao selecionar “Sim, experimentar”, concorda com a %2$s e %3$s de %1$s da Mozilla.
- Ao selecionar “Sim, experimentar”, concorda com o seguinte de %1$s:
+ Ao selecionar “Sim, experimentar”, concorda com o seguinte de %1$s:
- política de privacidade
+ política de privacidade
- Política de privacidade
+ Política de privacidade
- termos de utilização
+ termos de utilização
- Termos de utilização
+ Termos de utilização
Sim, experimentar
@@ -2365,6 +2385,9 @@
Competitividade
+
+ “%s”
+
colapsar
@@ -2382,4 +2405,208 @@
abrir ligação para saber mais
%s, Título
+
+
+ Ligações
+
+ Ligações disponíveis
+
+
+
+
+
+ Traduzir esta página?
+
+ Experimente as traduções privadas no %1$s
+
+ Pela sua privacidade, as traduções nunca deixam o seu dispositivo. Novos idiomas e melhorias para breve! %1$s
+
+ Saber mais
+
+ Traduzir de
+
+ Traduzir para
+
+ Agora não
+
+ Feito
+
+ Traduzir
+
+ Tentar novamente
+
+ Tradução
+
+ Tradução em curso
+
+ Escolha um idioma
+
+ Ocorreu um problema com a tradução. Por favor, tente novamente.
+
+ Não foi possível carregar os idiomas. Verifique a sua ligação à Internet e tente novamente.
+
+ Desculpe, nós ainda não suportamos o %1$s.
+
+ Saber mais
+
+
+
+ Opções de tradução
+
+ Oferecer sempre a opção de tradução
+
+ Traduzir sempre de %1$s
+
+ Nunca traduzir de %1$s
+
+ Nunca traduzir este site
+
+ Sobrepõe todas as outras definições
+
+ Sobrepõe pedidos de tradução
+
+ Definições de tradução
+
+ Sobre as traduções no %1$s
+
+
+
+ Traduções
+
+ Sugerir a tradução, quando possível
+
+ Transferir sempre idiomas no modo de poupança de dados
+
+ Preferências de tradução
+
+ Tradução automática
+
+ Nunca traduzir estes sites
+
+ Transferir idiomas
+
+
+
+ Tradução automática
+
+ Selecione um idioma para gerir as preferências “traduzir sempre” e “nunca traduzir”.
+
+
+
+ Oferecer para traduzir (predefinição)
+
+ %1$s irá sugerir a tradução de sites neste idioma.
+
+ Traduzir sempre
+
+ O %1$s irá traduzir este idioma automaticamente quando a página for carregada.
+
+ Nunca traduzir
+
+ O %1$s nunca irá sugerir para traduzir sites neste idioma.
+
+
+
+ Nunca traduzir estes sites
+
+ Para adicionar um novo site: Visite o mesmo e selecione “Nunca traduzir este site” no menu de tradução.
+
+ Remover %1$s
+
+ Eliminar %1$s?
+
+ Eliminar
+
+ Cancelar
+
+
+
+ Transferência de idiomas
+
+ Transfira idiomas completos para traduções mais rápidas e para traduzir offline. %1$s
+
+ Saber mais
+
+ Idiomas disponíveis
+
+ necessário
+
+ %1$s (%2$s)
+
+ Transferir idiomas
+
+ Todos os idiomas
+
+ Eliminar
+
+ Em curso
+
+ Transferir
+
+ Selecionado
+
+
+ Eliminar %1$s (%2$s)?
+
+ Se eliminar este idioma, o %1$s irá transferir idiomas parciais para a sua cache à medida que você traduz.
+
+ Eliminar todos os idiomas (%1$s)?
+
+ Se eliminar todos os idiomas, o %1$s irá transferir idiomas parciais para a sua cache à medida que você traduz.
+
+ Eliminar
+
+ Cancelar
+
+
+ Transferir (%1$s) no modo de poupança de dados?
+
+ Transferimos idiomas parciais para a sua cache para manter as traduções privadas.
+
+ Transferir sempre no modo de poupança de dados
+
+ Transferir
+
+ Transferir e traduzir
+
+ Cancelar
+
+
+
+ Ferramentas de depuração
+
+ Navegar de volta
+
+ Ferramentas de separadores
+
+ Contagem de separadores
+
+ Ativo
+
+ Inativo
+
+ Privado
+
+ Total
+
+ Ferramenta de criação de separadores
+
+ Quantidade de separadores a criar
+
+ Adicionar aos separadores ativos
+
+ Adicionar aos separadores inativos
+
+ Adicionar aos separadores privados
diff --git a/app/src/main/res/values-rm/strings.xml b/app/src/main/res/values-rm/strings.xml
index 9d9fbb672..c5c40892d 100644
--- a/app/src/main/res/values-rm/strings.xml
+++ b/app/src/main/res/values-rm/strings.xml
@@ -239,6 +239,7 @@
Persunalisar la pagina da partenza
+
Visur da partenza
@@ -246,6 +247,9 @@
Stizzar la cronologia
+
+ Translatar la pagina
+
Lingua tschernida
@@ -257,8 +261,6 @@
Scannar
-
- Maschina da tschertgar
Parameters da la maschina da tschertgar
@@ -312,24 +314,29 @@
- Communicaziuns ta gidan da far dapli cun %s
+ Communicaziuns ta gidan da far dapli cun %s
- Sincronisescha tes tabs tranter apparats, administrescha las telechargiadas, retschaiva tips per profitar il meglier da la protecziun da datas da %s ed auter pli.
+ Sincronisescha tes tabs tranter apparats, administrescha las telechargiadas, retschaiva tips per profitar il meglier da la protecziun da datas da %s ed auter pli.
- Cuntinuar
+ Cuntinuar
- Betg ussa
+ Betg ussa
+
+ Las directivas da Firefox per la protecziun da datas
+
Nus ta protegin cun plaschair
- Noss navigatur dad in\'organisaziun senza finamira da profit, gida ad evitar che interpresas ta persequiteschian a la zuppada en il web.\n
+ Noss navigatur dad in’organisaziun senza finamira da profit, gida ad evitar che interpresas ta persequiteschian a la zuppada en il web.
+
+ Noss navigatur dad in\'organisaziun senza finamira da profit, gida ad evitar che interpresas ta persequiteschian a la zuppada en il web.\n
\nLegia dapli dal tema en nossas infurmaziuns davart la protecziun da datas.
- infurmaziuns davart la protecziun da datas
+ infurmaziuns davart la protecziun da datas
Definir sco navigatur da standard
@@ -432,21 +439,11 @@
Modus mo HTTPS
-
- Reducziun da bandieras da cookies
Bloccada da bandieras da cookies
Bloccada da bandieras da cookies en il modus privat
-
- Reducir las bandieras da cookies
-
- Deactivà
-
- Activà
-
-
- %1$s emprova da refusar automaticamain dumondas da deponer cookies cura ch\'ina bandiera da cookies sa mussa.
+
Deactivà per questa website
@@ -464,34 +461,16 @@
Questa website na vegn actualmain betg sustegnida
-
- Activar la reducziun da bandieras da cookies per %1$s?
Activar la bloccada da bandieras da cookies per %1$s?
- Deactivar la reducziun da bandieras da cookies per %1$s?
-
Deactivar la bloccada da bandieras da cookies per %1$s?
%1$s na po betg refusar automaticamain dumondas da deponer cookies da questa website. Ti pos trametter ina dumonda da sustegnair questa website en avegnir.
- %1$s vegn a stizzar ils cookies da questa website ed actualisar la pagina. Cun stizzar tut ils cookies vegns ti eventualmain deconnectà da websites ed i po dar che chanasters da cumpras vegnan svidads.
-
Suenter la deactivaziun vegn %1$s ad allontanar ils cookies e rechargiar questa website. Quai po ta deconnectar da la website e svidar eventuals chanasters da cumpras.
- %1$s emprova da refusar automaticamain tut las dumondas da deponer cookies da paginas sustegnidas.
-
Activescha la bloccada e %1$s vegn ad empruvar da refusar automaticamain tut las bandieras da cookies sin questa website.
-
- Permetter a %1$s da refusar bandieras da cookies?
-
- %1$s po refusar automaticamain bleras dumondas da bandieras da cookies.
-
- Betg ussa
-
- Ti vegns a vesair damain dumondas da cookies
-
- Permetter
%1$s ha refusà cookies per tai
@@ -707,6 +686,8 @@
Segnapaginas
Infurmaziuns d\'annunzia
+
+ Pleds-clav
Tabs averts
@@ -733,6 +714,8 @@
Cartas da credit
+
+ Metodas da pajament
Adressas
@@ -1266,8 +1249,6 @@
Serrar
- Impussibel da stampar
-
Impussibel da stampar questa pagina
Stampar
@@ -1680,8 +1661,12 @@
Infurmaziuns d\'annunzia e pleds-clav
+
+ Pleds-clav
Memorisar las infurmaziuns d\'annunzia ed ils pleds-clav
+
+ Memorisar ils pleds-clav
Dumandar per memorisar
@@ -1699,27 +1684,46 @@
Agiuntar infurmaziuns d\'annunzia
+
+ Agiuntar in pled-clav
+
Sincronisar las infurmaziuns d\'annunzia
+
+ Sincronisar ils pleds-clav
Sincronisar las datas d\'annunzia tranter tes apparats
+
+ Sincronisar ils pleds-clav sin tut ils apparats
Infurmaziuns d\'annunzia memorisadas
+
+ Pleds-clav memorisads
Las infurmaziuns d\'annunzia che ti memoriseschas u sincroniseschas cun %s vegnan mussadas qua.
+
+ Ils pleds-clav che ti memoriseschas en u sincroniseschas cun %s vegnan mussads qua. Tut ils pleds-clav che ti memoriseschas èn criptads.
Vegnir a savair dapli davart Sync.
+
+ Vegnir a savair dapli davart la sincronisaziun
Excepziuns
Las infurmaziuns d\'annunzia ed ils pleds-clav betg memorisads vegnan mussadas qua.
+
+ %s na vegn betg a memorisar pleds-clav per websites inditgadas qua.
Las infurmaziuns d\'annunzia ed ils pleds-clav na vegnan betg memorisads per questas paginas.
+
+ %s na vegn betg a memorisar pleds-clav per questas websites.
Stizzar tut las excepziuns
Tschertgar datas d\'annunzia
+
+ Tschertgar en ils pleds-clav
Website
@@ -1749,11 +1753,17 @@
Zuppentar il pled-clav
Debloccar per vesair las infurmaziuns d\'annunzia memorisadas
+
+ Debloccar per vesair tes pleds-clav memorisads
Protegia las infurmaziuns d\'annunzia ed ils pleds-clav
+
+ Protegia tes pleds-clav memorisads
Definescha in muster per debloccar l\'apparat, in PIN u in pled-clav per proteger tias infurmaziuns d\'annunzia e tes pleds-clav da persunas che han access a tes apparat.
+
+ Endrizza in muster per bloccar l’apparat, in PIN u pled-clav per evitar ch’ina autra persuna possia acceder a tes pleds-clav memorisads sch’ella ha tes apparat.
Pli tard
@@ -1772,6 +1782,9 @@
Zavrar il menu da las datas d\'annunzia
+
+ Menu per zavrar ils pleds-clav
+
Endataziun automatica
@@ -1779,10 +1792,16 @@
Adressas
Cartas da credit
+
+ Metodas da pajament
Emplenir automaticamain las datas da la carta da credit
+
+ Memorisar ed endatar automaticamain las metodas da pajament
Las datas èn criptadas
+
+ %s criptescha tut las metodas da pajament che ti memoriseschas
Sincronisar las cartas tranter ils apparats
@@ -1790,17 +1809,26 @@
Agiuntar ina carta da credit
+
+ Agiuntar ina carta
Administrar las cartas memorisadas
+
+ Administrar las cartas
Agiuntar ina adressa
Administrar las adressas
Memorisar ed emplenir automaticamain las adressas
+
+ Memorisar ed endatar automaticamain las adressas
Includer infurmaziuns sco numers, adressas dad e-mail ed adressas postalas
+
+ Cuntegna numers da telefon ed adressas dad e-mail
+
Agiuntar ina carta
@@ -1821,6 +1849,8 @@
Stizzar la carta
Vuls ti propi stizzar questa carta da credit?
+
+ Stizzar la carta?
Stizzar
@@ -1835,14 +1865,22 @@
Endatescha per plaschair in numer da carta da credit valid
+
+ Endatescha in numer da carta valid
Emplenescha per plaschair quest champ
+
+ Agiuntescha in num
Debloccar per vesair tias cartas memorisadas
Protegia tias cartas da credit
+
+ Protegia tias metodas da pajament memorisadas
Endrizza in muster per bloccar l\'apparat, in PIN u pled-clav per evitar ch\'ina autra persuna possia acceder a tias cartas da credit memorisadas sch\'ella ha tes apparat.
+
+ Endrizza in muster per bloccar l\'apparat, in PIN u pled-clav per evitar ch’ina autra persuna possia acceder a tias metodas da pajament memorisadas sch’ella ha tes apparat.
Ussa endrizzar
@@ -1853,6 +1891,8 @@
Debloccar per utilisar las datas da cartas da credit memorisadas
+
+ Debloccar per utilisar las metodas da pajament memorisadas
Agiuntar ina adressa
@@ -1890,6 +1930,8 @@
Vuls ti propi stizzar questa adressa?
+
+ Stizzar questa adressa?
Stizzar
@@ -1988,6 +2030,8 @@
Modifitgar
Vuls ti propi stizzar questa infurmaziun d\'annunzia?
+
+ Vuls ti propi stizzar quest pled-clav?
Stizzar
@@ -1995,24 +2039,44 @@
Interrumper
Opziuns per datas d\'annunzia
+
+ Opziuns da pleds-clav
Il champ modifitgabel per l\'adressa web da las datas d\'annunzia.
+
+ Il champ da text modifitgabel per l’adressa da la website.
Il champ modifitgabel per il num d\'utilisader da las datas d\'annunzia.
+
+ Il champ da text modifitgabel per il num d’utilisader.
Il champ modifitgabel per il pled-clav da las datas d\'annunzia.
+
+ Il champ da text modifitgabel per il pled-clav.
Memorisar las midadas da las datas d\'annunzia.
+
+ Memorisar las midadas.
Modifitgar
+
+ Modifitgar il pled-clav
Agiuntar novas datas d\'annunzia
+
+ Agiuntar in pled-clav
Pled-clav obligatoric
+
+ Endatar in pled-clav
Num d\'utilisader obligatoric
+
+ Endatar in num d’utilisader
Num dal server obligatoric
+
+ Endatar ina adressa web
Tschertga vocala
@@ -2108,6 +2172,9 @@
Tschertga %s
+
+ Mida tes navigatur standard
+
Definescha che colliaziuns da websites, e-mails e messadis vegnan averts automaticamain en Firefox.
@@ -2181,8 +2248,6 @@
accentuads derivan da las recensiun sin %s dals ultims 80 dis che nus tegnain per fidablas.]]>
Ulteriuras infurmaziuns davart %s.
-
- co %s da Mozilla determinescha la qualitad da las recensiuns
co %s determinescha la qualitad da las recensiuns
@@ -2364,6 +2429,8 @@
Translatar
Translaziun en elavuraziun
+
+ Tscherner ina lingua
Igl ha dà in problem cun translatar. Emprova per plaschair anc ina giada.
@@ -2384,6 +2451,10 @@
Mai translatar %1$s
Mai translatar questa website
+
+ Remplazza tut ils auters parameters
+
+ Remplazza las offertas da translaziun
Parameters da translaziun
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 0c577c121..b6efef041 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -44,14 +44,39 @@
%1$s îți șterge istoricul de căutare și navigare din filele private când le închizi sau când ieși din aplicație. Deși nu te anonimizează pe site-urile web sau pentru furnizorul de servicii de internet, ușurează păstrarea confidențialității asupra a ce faci online față de oricine altcineva folosește acest dispozitiv.
Mituri comune despre navigarea privată
+
+
+ Nu lăsa urme pe acest dispozitiv
+
+
+ %1$s îți șterge cookie-urile, istoricul și datele site-urilor când închizi toate ferestrele private. %2$s
+
+ Cine ar putea să-mi vadă activitatea?
+
+
+ Adaugă în ecranul de start
Nu, mulțumesc
+
+
+ Poți seta %1$s să deschidă automat linkuri în aplicații.
Mergi la setări
Înlătură
+
+
+
+ Atinge aici pentru a începe o nouă sesiune privată. Șterge-ți istoricul, cookie-urile — totul.
+
+
Înlătură
@@ -70,12 +95,23 @@
Filă privată nouă
+
+ Comandă rapidă pentru parole
+
Revino la această filă
Afișează toate
+
+ Elimină
+
+
+
+ Vizitate recent
+
Înapoi
@@ -99,12 +135,16 @@
Bibliotecă
Versiune site de desktop
+
+ Deschide într-o filă nouă
Adaugă în ecranul de start
Instalează
Caută în pagină
+
+ Tradu pagina
Salvează în colecție
@@ -131,6 +171,10 @@
Editează
+
+ Șterge istoricul de navigare
+
Limbă selectată
@@ -142,8 +186,6 @@
Scanează
-
- Motor de căutare
Setări pentru motorul de căutare
@@ -158,13 +200,36 @@
%s va partaja tot ce tastezi în bara de adrese cu motorul de căutare implicit.
-
-
- Desemnează %s drept browserul implicit
-
+ Motor de căutare %s
+
+
+
+ Ne place să te protejăm
+
+ Browserul nostru, susținut de o organizație non-profit, ajută la oprirea companiilor să te urmărească în secret pe web.\n\nAflă mai multe în notificarea noastră privind confidențialitatea.
+
+ Păstrează-ți datele criptate când treci de pe un dispozitiv pe altul
+
+ Când ești autentificat și sincronizat, ești mai în siguranță. Firefox criptează parolele, marcajele și multe altele.
+
+ Notificările te ajută să fii mai în siguranță cu Firefox
+
+ Trimite-ți securizat file între dispozitive și descoperă alte funcții de confidențialitate în Firefox.
+
+ Încearcă widgetul de căutare Firefox
+
- Desemnează Firefox drept browserul implicit
+ Cu Firefox pe ecranul de start vei avea acces facil la primul browser orientat pe confidențailitate care blochează elementele de urmărire inter-site-uri.
+
+ Adaugă widgetul Firefox
+
+ Nu acum
Căutare
@@ -181,12 +246,22 @@
Generalități
Despre
+
+ Selectează una dintre opțiuni
+
+ Gestionează motoarele de căutare alternative
+
+ Editează motoarele vizibile în meniul de căutare
+
+ Motoare vizibile în meniul de căutare
Motor de căutare implicit
Căutare
-
- Bară de adrese
+
+ Motoare de căutare
+
+ Sugestii de la motoarele de căutare
Evaluează pe Google Play
Accesibilitate
-
- Server personalizat pentru contul Firefox
Server personalizat de sincronizare
-
- Server de cont Firefox/sincronizare modificat. Se închide aplicația pentru implementarea modificărilor…
Cont
Bară de unelte
Temă
+
+ Pagină de start
Personalizare
-
- Cont Firefox
Reconectează-te pentru a continua sincronizarea
@@ -237,8 +308,6 @@
Colectare de date
Depanare de la distanță prin USB
-
- Afișează motoare de căutare
Afișează sugestii de căutare
@@ -257,6 +326,7 @@
Deschide linkuri în aplicații
Manager extern pentru descărcări
+
Suplimente
@@ -268,7 +338,16 @@
Numele colecției
-
+
+ Marcaje recente
+
+ Vizitate recent
+
+ Povești sponsorizate
+
+ Comenzi rapide sponsorizate
+
Sincronizează acum
@@ -403,6 +482,10 @@
După o lună
+
+ Pagină de start
+
+ Pagina de start după patru ore de inactivitate
Închide manual
@@ -412,6 +495,11 @@
Închide după o lună
+
+ Deschide pe pagina de start
+
+ Deschide ultima filă
+
OK
@@ -453,7 +541,7 @@
Deschide filele
- Șterge
+ Șterge
Șterge din istoric
@@ -752,13 +840,9 @@
%d (de) file
-
- Istoric de navigare și date site-uri
%d (de) adrese
-
- Cookie-uri
Vei fi deconectat(ă) de pe majoritatea site-urilor
@@ -787,31 +871,11 @@
Se șterg datele de navigare…
+
Sync este activat
-
- Standard (implicit)
-
- Strictă
-
-
- Citește notificarea noastră privind confidențialitatea
-
-
- Începe navigarea
-
- Alege o temă
-
- Automat
-
- Se adaptează la setările dispozitivului
-
- Temă întunecată
-
- Temă deschisă
-
File trimise!
@@ -844,11 +908,7 @@
Setări de protecție
Protecție îmbunătățită împotriva urmăririi
-
- Navighează fără să fii urmărit(ă)
-
- Păstrează-ți datele pentru tine. %s te protejează de multe dintre cele mai frecvente elemente de urmărire care monitorizează ce faci online.
Află mai multe
@@ -969,6 +1029,9 @@
Denumire comandă rapidă
+
+ Poți adăuga cu ușurință acest site web în ecranul de start al dispozitivului pentru acces instant și o navigare mai rapidă, ca și cum ai fi într-o aplicație.
+
Date de autentificare și parole
@@ -1047,21 +1110,11 @@
Adaugă un motor de căutare
Editează motorul de căutare
-
- Adaugă
-
- Salvează
Editează
Șterge
-
- Altele
-
- Denumire
-
- Șir de căutare de utilizat
Înlocuiește interogarea cu „%s”. Exemplu: \nhttps://www.google.com/search?q=%s
@@ -1157,11 +1210,11 @@
Comenzi rapide
-
- Nume
+
+ Nume
- OK
+ OK
@@ -1170,4 +1223,6 @@
Elimină
+
+
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index c68613610..749de3588 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -251,6 +251,7 @@
Изменить вид
+
Домашний экран
@@ -258,6 +259,9 @@
Удалить историю веб-сёрфинга
+
+ Перевести страницу
+
Текущий язык
@@ -269,8 +273,6 @@
Считать
-
- Поисковая система
Настройки поисковых систем
@@ -326,23 +328,28 @@
- Уведомления помогают вам делать больше с %s
+ Уведомления помогают вам делать больше с %s
- Синхронизируйте вкладки между устройствами, управляйте загрузками, получайте советы о том, как максимально эффективно использовать защиту конфиденциальности %s, и многое другое.
+ Синхронизируйте вкладки между устройствами, управляйте загрузками, получайте советы о том, как максимально эффективно использовать защиту конфиденциальности %s, и многое другое.
- Продолжить
+ Продолжить
- Не сейчас
+ Не сейчас
+
+ Уведомление о конфиденциальности Firefox
+
Нам нравится обеспечивать вашу безопасность
- Наш браузер, поддерживаемый некоммерческой организацией, помогает ограничивать компании от слежки за вами в Интернете.\n\nПодробнее читайте в нашем уведомлении о конфиденциальности.
+ Наш браузер, поддерживаемый некоммерческой организацией, помогает не давать компаниям следить за вами в Интернете.
+
+ Наш браузер, поддерживаемый некоммерческой организацией, помогает ограничивать компании от слежки за вами в Интернете.\n\nПодробнее читайте в нашем уведомлении о конфиденциальности.
- уведомлении о конфиденциальности
+ уведомлении о конфиденциальности
Установить браузером по умолчанию
@@ -446,22 +453,11 @@
Режим «Только HTTPS»
-
- Снижение числа уведомлений о куках
-
Блокировщик уведомления о куки
Блокировщик уведомления о куки в приватном просмотре
-
- Снижать число уведомлений о куках
-
- Отключено
-
- Включено
-
-
- %1$s автоматически пытается отклонить запросы кук в уведомлениях о куках.
+
Отключено для этого сайта
@@ -479,35 +475,16 @@
В настоящее время сайт не поддерживается
- Включить Снижение количества уведомлений о куках для %1$s?
-
Включить блокировщик уведомления о куки для %1$s?
- Отключить Снижение количества уведомлений о куках для %1$s?
-
Выключить блокировщик уведомления о куки для %1$s?
%1$s не может автоматически отклонять запросы на использование кук на этом сайте. Вы можете отправить запрос на поддержку этого сайта в будущем.
-
- %1$s удалит куки этого сайта и обновит страницу. Удаление всех кук может привести к выходу из системы или к пропаже покупок из корзины.
Выключите, и %1$s удалит куки и перезагрузит этот сайт. Это может привести к выходу из системы или опустошению корзины покупок.
- %1$s пытается автоматически отклонить все запросы кук на поддерживаемых сайтах.
-
Включите, и %1$s попытается автоматически отклонить все уведомления о куки на этом сайте.
-
- Разрешить %1$s отклонять уведомления о куках?
-
- %1$s может автоматически отклонять многие запросы уведомлений о куках.
-
- Не сейчас
-
- Вы увидите меньше запросов на принятие кук
-
-
- Разрешить
%1$s только что отказался от куки для вас
@@ -725,6 +702,8 @@
Закладки
Пароли
+
+ Пароли
Открытые вкладки
@@ -751,6 +730,8 @@
Банковские карты
+
+ Способы оплаты
Адреса
@@ -1304,8 +1285,6 @@
Убрать
- Невозможно распечатать
-
Не удалось распечатать эту страницу
Печать
@@ -1715,8 +1694,12 @@
Пароли
+
+ Пароли
Сохранение паролей
+
+ Сохранять пароли
Предлагать сохранить
@@ -1733,26 +1716,46 @@
Добавить логин
+
+ Добавить пароль
+
Синхронизация логинов
+
+ Синхронизировать пароли
Синхронизировать логины между устройствами
+
+ Синхронизировать пароли между устройствами
Сохранённые пароли
+
+ Сохранённые пароли
Пароли, которые вы сохраняете или синхронизируете в %s, появятся тут.
+
+ Пароли, которые вы сохраните или синхронизируете в %s, будут показаны здесь. Все сохраняемые вами пароли зашифрованы.
+
Узнайте больше о синхронизации.
+
+ Узнайте больше о синхронизации
Исключения
Здесь будут показаны не сохраняемые логины и пароли.
+
+ %s не будет сохранять пароли для перечисленных здесь сайтов.
Логины и пароли для этих сайтов сохраняться не будут.
+
+ %s не будет сохранять пароли для этих сайтов.
Удалить все исключения
Поиск логинов
+
+ Поиск паролей
Сайт
@@ -1781,10 +1784,16 @@
Скрыть пароль
Разблокируйте, чтобы просмотреть сохранённые пароли
+
+ Разблокируйте, чтобы просмотреть сохранённые пароли
Защитите свои логины и пароли
+
+ Защитите сохранённые пароли
Настройте графический ключ, Пин-код или пароль для блокировки устройства, чтобы защитить сохранённые пароли, если кто-либо ещё получит доступ к вашему устройству.
+
+ Настройте графический ключ, пин-код или пароль для разблокировки устройства, чтобы защитить сохранённые пароли на случай, если кто-либо ещё получит доступ к вашему устройству.
Позже
@@ -1803,6 +1812,9 @@
Меню сортировки логинов
+
+ Меню сортировки паролей
+
Автозаполнение
@@ -1810,10 +1822,16 @@
Адреса
Банковские карты
+
+ Способы оплаты
Сохранять и автоматически заполнять данные карт
+
+ Сохранить и заполнять способы оплаты
Данные зашифрованы
+
+ %s шифрует все сохраняемые вами способы оплаты
Синхронизировать карты между различными устройствами
@@ -1821,17 +1839,26 @@
Добавить банковскую карту
+
+ Добавить карту
Управление сохранёнными картами
+
+ Управление картами
Добавить адрес
Управление адресами
Сохранять и автоматически заполнять адреса
+
+ Сохранять и заполнять адреса
Включая такие сведения, как номера, адреса эл. почты и доставок
+
+ Включает номера телефонов и адреса электронной почты
+
Добавить карту
@@ -1852,6 +1879,8 @@
Удалить карту
Вы уверены, что хотите удалить эту банковскую карту?
+
+ Удалить карту?
Удалить
@@ -1866,14 +1895,22 @@
Пожалуйста, введите правильный номер карты
+
+ Введите корректный номер карты
Пожалуйста, заполните это поле
+
+ Добавьте имя
Разблокируйте, чтобы просмотреть сохранённые карты
Защитите свои банковские карты
+
+ Защитите сохранённые способы оплаты
Настройте графический ключ, Пин-код или пароль для блокировки устройства, чтобы защитить сохранённые банковские карты, если кто-либо ещё получит доступ к вашему устройству.
+
+ Настройте графический ключ, Пин-код или пароль для разблокировки устройства, чтобы защитить сохранённые способы оплаты, на случай, если кто-либо ещё получит доступ к вашему устройству.
Настроить сейчас
@@ -1883,6 +1920,8 @@
Разблокируйте, чтобы использовать сохранённые данные банковской карты
+
+ Разблокируйте, чтобы использовать сохранённые способы оплаты
Добавить адрес
@@ -1919,6 +1958,8 @@
Удалить адрес
Вы уверены, что хотите удалить этот адрес?
+
+ Удалить этот адрес?
Удалить
@@ -2017,30 +2058,52 @@
Править
Вы уверены, что хотите удалить этот пароль?
+
+ Вы уверены, что хотите удалить этот пароль?
Удалить
Отмена
Настройки логина
+
+ Настройки пароля
Редактируемое текстовое поле для веб-адреса логина.
+
+ Редактируемое текстовое поле для адреса веб-сайта.
Редактируемое текстовое поле для имени пользователя логина.
+
+ Редактируемое текстовое поле для имени пользователя.
Редактируемое текстовое поле для пароля логина.
+
+ Редактируемое текстовое поле для пароля.
Сохранить изменения в логине.
+
+ Сохранить изменения.
Правка
+
+ Изменить пароль
Добавить новый логин
+
+ Добавить пароль
Требуется пароль
+
+ Введите пароль
Требуется имя пользователя
+
+ Введите имя пользователя
Введите имя сервера
+
+ Введите веб-адрес
Голосовой поиск
@@ -2137,6 +2200,9 @@
Поиск в %s
+
+ Смените браузер по умолчанию
+
Настройте автоматическое открытие ссылок с сайтов, из электронных писем и сообщений в Firefox.
@@ -2210,8 +2276,6 @@
Основные сведения взяты из отзывов на %s за последние 80 дней, которые мы считаем надежными.]]>
Узнайте больше о %s.
-
- как %s от Mozilla определяет качество отзывов
как %s определяет качество обзора
@@ -2429,6 +2493,8 @@
Идёт перевод
+
+ Выберите язык
При переводе возникла проблема. Пожалуйста, попробуйте ещё раз.
@@ -2449,6 +2515,10 @@
Никогда не переводить %1$s
Никогда не переводить этот сайт
+
+ Переопределяет все другие настройки
+
+ Переопределяет предложения на перевод
Настройки перевода
diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml
index 989794579..8b93e08ae 100644
--- a/app/src/main/res/values-sc/strings.xml
+++ b/app/src/main/res/values-sc/strings.xml
@@ -61,6 +61,19 @@
Mitos fitianos subra de sa navigatzione privada
+
+
+ Non lasses rastros in custu dispositivu
+
+ %1$s cantzellat testimòngios, cronologia e datos de is sitos cando serras totu is ventanas privadas. %2$s
+
+ Chie diat pòdere bìdere s’atividade mia?
+
Aberi s’ischeda privada imbeniente cun unu tocu ebbia.
@@ -80,6 +93,7 @@
Leghe àteru subra de s’amparu totale contra is testimòngios
+
Atzessu rechestu a sa fotocàmera. Bae a sa cunfiguratzione de Android, toca is permissos e sèbera permite.
@@ -169,6 +183,8 @@
Biblioteca
Situ de iscrivania
+
+ Aberi in un’ischeda normale
Agiunghe a s’ischermu printzipale
@@ -177,6 +193,8 @@
Torra a sincronizare
Chirca in sa pàgina
+
+ Tradue sa pàgina
Sarva in una colletzione
@@ -210,6 +228,12 @@
Ischermu printzipale
+
+ Cantzella sa cronologia de navigatzione
+
+ Tradue sa pàgina
+
Lìngua seletzionada
@@ -221,8 +245,6 @@
Iscansiona
-
- Motore de chirca
Cunfiguratzione de su motore de chirca
@@ -254,6 +276,8 @@
Ti donamus su benebènnidu a un’internet mègius
Prus colores. Una mègius riservadesa. Su matessi impinnu de pònnere is persones prima de is profitos.
+
+ Passare de un’ischermu a s’àteru est fàtzile comente mai
Cumintza
@@ -266,23 +290,47 @@
Serra
- Sighi
+ Sighi
- Immoe nono
+ Immoe nono
+
+
+ Avisu de riservadesa de Firefox
+
+
+ Nos praghet a t’amparare
+
+ Su navigadore nostru isvilupadu chena iscopu de lucru agiudat a blocare is aziendas chi iscrocant is fainas tuas in su web.
+
+ Su navigadore nostru isvilupadu chena iscopu de lucru agiudat a blocare is aziendas chi iscrocant is fainas tuas in su web.\n\nÀteras informatziones in s’avisu de riservadesa nostru.
+
+ avisu de riservadesa
Cunfigura comente navigadore predefinidu
Immoe nono
+
+ Abarra amparadu cun su tzifradu cando passas dae unu dispositivu a s’àteru
Identìfica·ti
Immoe nono
+
+ Is notìficas t’agiudant a èssere prus amparadu cun Firefox
+
+ Imbia in manera segura ischedas intre is dispositivos tuos e iscoberi àteras optziones de riservadesa in Firefox.
Ativa is notìficas
Immoe nono
+
+ Immoe nono
+
Aberi in un’ischeda de %1$s noa
@@ -303,7 +351,7 @@
Seletziona·nde unu
- Gesti is curtzadòrgios de chirca
+ Gesti motores de chirca alternativos
Modìfica is motores visìbiles in su menù de chirca
@@ -312,8 +360,16 @@
Motore de chirca predefinidu
Chirca
-
- Barra de indiritzos
+
+ Motores de chirca
+
+ Cussìgios dae àteros motores de chirca
+
+ Preferèntzias de sa barra de indiritzos
+
+ Barra de indiritzos - Cussìgios de Firefox
+
+ Àteras informatziones in pitzus de is cussìgios de Firefox
Avalora in Google Play
Modalidade «isceti HTTPS»
-
- Ismenguada de is avisos de testimòngios
-
- Ismèngua is avisos de testimòngios
-
- Disativadu
-
- Ativu
+
+ Blocu de is avisos de testimòngios
+
+ Blocu de is avisos de testimòngios in sa navigatzione privada
Disativadu pro custu situ
Annulla
+
+ Imbia una rechesta
+
+ Boles preguntare agiudu pro custu situ?
+
+ Rechesta imbiada
Ativu pro custu situ
+
+ Rechesta de agiudu imbiada
Situ non cumpatìbile
+
- Boles ativare s’ismèngua de is avisos de testimòngios pro %1$s?
+ Boles ativare su blocu de is avisos de testimòngios pro %1$s?
- Boles disativare s’ismèngua de is avisos de testimòngios pro %1$s?
-
- %1$s at a limpiare is testimòngios de custu situ e at a atualizare sa pàgina. Sa limpiesa de totu is testimòngios ti diat pòdere serrare sa sessione o isboidare is carrellos de s’ispesa.
-
- Immoe nono
+ Boles disativare su blocu de is avisos de testimòngios pro %1$s?
+
+ %1$s at refudadu testimòngios
+
+ Prus pagas distratziones, prus pagos testimòngios sighende·ti in custu situ.
Disativadu
@@ -382,8 +443,8 @@
Est probàbile chi su situ web non siat cumpatìbile cun HTTPS.
Atzessibilidade
-
- Serbidore de contos de Firefox personalizadu
+
+ Serbidore de contos de Mozilla personalizadu
Serbidore de Sync personalizadu
@@ -401,7 +462,7 @@
Intra pro sincronizare ischedas, sinnalibros, craes e àteru.
- Contu de Firefox
+ Contu de Mozilla
Torra a connètere pro sighire cun sa sincronizatzione
@@ -412,8 +473,6 @@
Còllida de datos
Curretzione de faddinas pro mèdiu de USB
-
- Ammustra is motores de chirca
Ammustra cussìgios de chirca
@@ -432,13 +491,33 @@
Cunfiguratzione de su contu
Cumpletamentu de URL in automàticu
+
+ Cussìgios dae is ispònsors
+
+ Cussìgios dae %1$s
+
+ Otene cussìgios de sa rete acapiados a sa chirca tua
Aberi is ligòngios in is aplicatziones
+
+ Semper
+
+ Pregunta prima de abèrrere
+
+ Mai
Gestore de iscarrigamentos esternu
+
+ Ativa is registros de Gecko
+
+ Serrende s’aplicatzione pro aplicare is modìficas…
+
Cumplementos
+
+ Installa unu cumplementu dae un’archìviu
Notìficas
@@ -492,12 +571,10 @@
Àteras informatziones
%s clàssicu
-
- Editzione limitada
-
- Sa colletzione noa de boghes indipendentes. %s
-
- Sa colletzione noa de boghes indipendentes.
+
+ Sa colletzione Boghes indipendentes. %s
+
+ Sa colletzione Boghes indipendentes.
Proa un’istrichiddu de colore
@@ -507,12 +584,27 @@
Iscoberi àteros isfundos de ischermu
-
-
- Cumplementu non cumpatìbile
-
- Su cumplementu est giai installadu
-
+
+
+ Cumplementos noos a disponimentu
+
+ Controlla is prus de chentu estensiones noas chi ti permitint de personalizare Firefox.
+
+ Esplora cumplementos
+
+
+
+ Is cumplementos sunt istados disativados in manera temporànea
+
+ Proa torrende a aviare is cumplementos
+
+ Sighi cun is cumplementos disativados
+
+
+
+ Gesti su contu
+
+ Modìfica sa crae tua, gesti sa colletzione de datos o cantzella su contu
Sincroniza immoe
@@ -523,6 +615,8 @@
Sinnalibros
Credentziales
+
+ Craes
Ischedas abertas
@@ -549,6 +643,8 @@
%1$s in %2$s %3$s
Cartas de crèditu
+
+ Mètodos de pagamentu
Indiritzos
@@ -786,10 +882,10 @@
Aberi is ischedas
Nòmine de sa colletzione
-
- Torra a nominare
-
- Boga
+
+ Torra a nominare
+
+ Boga
Cantzella dae sa cronologia
@@ -1032,6 +1128,12 @@
Sarva comente PDF
Impossìbile generare su PDF
+
+ Iscarta
+
+ Impossìbile imprentare custa pàgina
+
+ Imprenta
Imbia a su dispositivu
@@ -1054,8 +1156,12 @@
In foras de lìnia
Connete un’àteru dispositivu
+
+ Pro imbiare un’ischeda, identìfica·ti in Firefox in un’àteru dispositivu, a su mancu.
Apo cumprèndidu
+
+ Impossìbile cumpartzire in custa aplicatzione
Imbia a su dispositivu
@@ -1068,12 +1174,28 @@
Serra is ischedas privadas
+
+
+ Boles serrare is ischedas privadas?
+ Toca o iscurre in custa notìfica pro serrare is ischedas privadas.
+
+
+ Firefox est lestru e privadu
+
+ Imprea Firefox comente navigadore predefinidu
Prova sa navigatzione privada
+
+ Nàviga chene sighiduras
Faghe sa prima chirca
+
+ No, gràtzias
+
Colletzione cantzellada
@@ -1091,6 +1213,8 @@
Ischeda privada serrada
Ischedas privadas serradas
+
+ Datos de sa navigatzione privada cantzellados
ISCONTZA
@@ -1112,6 +1236,8 @@
Boles cantzellare %1$s?
Cantzella
+
+ Intrende a sa modalidade de ischermu cumpletu
URL copiadu
@@ -1127,12 +1253,15 @@
%d ischedas
- Cronologia de navigatzione e datos de is sitos
+
+ Cronologia de navigatzione
%d indiritzos
-
- Testimòngios
+
+ Testimòngios e datos de is sitos
+
+ Immàgines e archìvios in sa memòria temporànea
Permissos de is sitos
@@ -1145,6 +1274,8 @@
Essi
+
+ Perìodu de tempus pro cantzellare
Ùrtima ora
@@ -1173,35 +1304,10 @@
Grupu cantzelladu
-
- Ti donamus su benebènnidu a un’internet mègius
-
- Identìfica·ti
Sincronizatzione ativa
-
- Amparu de riservadesa predefinidu
-
- Istàndard (predefinidu)
-
- Echilìbriu intre amparu e rendimentu. Is pàginas s’ant a carrigare cun normalidade.
-
- Restrinta
-
- Controllas is datos tuos
-
- Cumintza a navigare
-
- Sèbera unu tema
-
- Automàticu
-
- Tema iscuru
-
- Tema craru
-
Ischedas imbiadas.
@@ -1334,10 +1440,17 @@
Sighi a su situ
+
+ Nòmine de su curtzadòrgiu
+
Credentziales e craes
+
+ Craes
Sarva credentziales e craes
+
+ Sarva is craes
Pregunta·mi·ddu
@@ -1353,16 +1466,27 @@
Agiunghe credentziale
+
+ Agiunghe crae
+
Sincronizatzione de credentziales
+
+ Sincroniza is craes
Sincronizatzione de credentziales intre dispositivos
+
+ Sincroniza is craes intre dispositivos
Credentziales sarvadas
+
+ Craes sarvadas
Is credentziales chi as a sarvare o sincronizare cun %s ant a èssere ammustradas inoghe.
Leghe àteru subra de Sync.
+
+ Àteras informatziones in pitzus de sa sincronizatzione
Etzetziones
@@ -1373,6 +1497,8 @@
Cantzella totu is etzetziones
Chirca credentziales
+
+ Chirca craes
Situ
@@ -1421,18 +1547,28 @@
Indiritzos
Cartas de crèditu
+
+ Mètodos de pagamentu
Sarva e cumpleta in automàticu is cartas
+
+ Sarva e cumpleta cun is mètodos de pagamentu
Is datos sunt tzifrados
+
+ %s tzifrat totu is mètodos de pagamentu chi sarves
Sincronizatzione de cartas intre dispositivos
Sincronizatzione de cartas
Agiunghe una carta de crèditu
+
+ Agiunghe una carta
Gesti is cartas
+
+ Gesti is cartas
Agiunghe un’indiritzu
@@ -1440,9 +1576,14 @@
Sarva e cumpleta in automàticu is indiritzos
+
+ Sarva e cumpleta cun is indiritzos
Include datos comente nùmeros, indiritzos eletrònicos e indiritzos de ispeditzione
+
+ Includet nùmeros de telèfonu e indiritzos eletrònicos
+
Agiunghe una carta
@@ -1463,6 +1604,8 @@
Cantzella sa carta
Seguru chi boles cantzellare custa carta de crèditu?
+
+ Boles cantzellare sa carta?
Cantzella
@@ -1475,16 +1618,32 @@
Cartas sarvadas
Inserta unu nùmeru de carta vàlidu
+
+ Inserta unu nùmeru de carta vàlidu
Cumpila custu campu
+
+ Agiunghe unu nòmine
Isbloca pro bìdere is cartas sarvadas tuas
+
+ Ampara is cartas de crèditu tuas
+
+ Ampara is mètodos de pagamentu sarvados
+
+ Cunfigura una secuèntzia de blocu, PIN o crae pro amparare is cartas de crèditu sarvadas tuas de s’atzessu de àtera gente chi tèngiat su dispositivu tuo.
+
+ Cunfigura una secuèntzia de blocu, PIN o crae pro amparare is mètodos de pagamentu sarvados de s’atzessu de àtera gente chi tèngiat su dispositivu tuo.
Cunfigura immoe
A pustis
Isbloca su disposivitu tuo
+
+ Isbloca pro impreare informatzione sarvada de una carta de crèditu
+
+ Isbloca pro impreare is mètodos de pagamentu sarvados
Agiunghe un’indiritzu
@@ -1521,6 +1680,8 @@
Cantzella s’indiritzu
Seguru chi boles cantzellare custu indiritzu?
+
+ Boles cantzellare custu indiritzu?
Cantzella
@@ -1536,26 +1697,16 @@
Agiunghe unu motore de chirca nou
Modìfica motore de chirca
-
- Agiunghe
-
- Sarva
Modìfica
Cantzella
-
- Àteru
Nòmine
-
- Nòmine
Nòmine de su motore de chirca
- Cadena de chirca
-
URL de impreare in sa chirca
Sostitui sa chirca cun «%s». Esempru: \nhttps://www.google.com/search?q=%s
@@ -1567,8 +1718,7 @@
URL de s’API pro is cussìgios de chirca
- Sostitui sa chirca cun “%s”.
-Esempru: \nhttp://suggestqueries.google.com/complete/search?client=firefox&q=%s
+ Sostitui sa chirca cun “%s”. Pro esempru:\nhttps://suggestqueries.google.com/complete/search?client=firefox&q=%s
Sarva
@@ -1628,22 +1778,38 @@ Esempru: \nhttp://suggestqueries.google.com/complete/search?client=firefox&q
Modìfica
Seguru chi boles cantzellare custa credentziale?
+
+ Seguru chi boles cantzellare custa crae?
Cantzella
Annulla
Optziones de credentziales
+
+ Optziones de is craes
Sarva is modìficas a sa credentziale.
+
+ Sarva is modìficas.
Modìfica
+
+ Modìfica sa crae
Agiunghe una credentziale noa
+
+ Agiunghe una crae
Crae rechesta
+
+ Inserta una crae
Nòmine de utente rechestu
+
+ Inserta unu nòmine de utente
+
+ Inserta un’indiritzu web
Chirca cun sa boghe
@@ -1658,23 +1824,36 @@ Esempru: \nhttp://suggestqueries.google.com/complete/search?client=firefox&q
Connete un’àteru dispositivu.
+
+ Autèntica·ti torra.
+
+ Ativa sa sincronizatzione de ischedas.
+
+ Nissuna ischeda aberta in su Firefox de is àteros dispositivos.
+
+ Ammustra una lista de ischedas abertas in àteros dispositivos tuos.
Identìfica·ti a sync
Nissuna ischeda aberta
+
+
+ Lìmite de curtzadòrgios barigadu
+
+ Pro agiùnghere unu curtzadòrgiu nou, boga·nde unu. Toca e mantene su situ, pustis seletziona boga.
AB, apo cumprèndidu
Curtzadòrgios
-
- Nòmine
+
+ Nòmine
Nòmine de su curtzadòrgiu
-
- AB
-
- Annulla
+
+ AB
+
+ Annulla
Cunfiguratzione
@@ -1725,6 +1904,8 @@ Esempru: \nhttp://suggestqueries.google.com/complete/search?client=firefox&q
Artìculos pro tema
Iscoberi·nde àteros
+
+ Funtzionat gràtzias a %s.
Parte de sa famìlia de Firefox. %s
@@ -1735,11 +1916,268 @@ Esempru: \nhttp://suggestqueries.google.com/complete/search?client=firefox&q
Bae a sa cunfiguratzione
+
+
+ Verificadore de retzensiones
+
+ Retzensiones fidadas
+
+ Misturu de retzensiones fidadas e non fidadas
+
+ Retzensiones non fidadas
+
+ Canto sunt fidadas custas retzensiones?
+
+ Valutatzione assentada
+
+ Retzensiones non fidadas bogadas
+
+ In evidèntzia dae retzensiones reghentes
+
+ Comente istabilimus sa calidade de is retzensiones
+
+ Impreamus tecnologias de inteligèntzia artifitziale (IA) dae %s in Mozilla pro controllare sa calidade de is retzensiones de produtos. Custu t’at a agiudare a verificare sa calidade sa retzensione, non de su produtu.
+
+ votu alfabèticu dae A a F.]]>
+
+ Retzensiones fidadas. Pensamus chi is retzensiones est probàbile chi bèngiant dae clientes reales chi ant lassadu retzensiones sintzeras e ogetivas.
+
+ Pensamus chi ddoe at unu misturu de retzensiones fidadas e non fidadas.
+
+ Retzensiones non fidadas. Pensamus chi is retzensiones est probàbile chi siant farsas o bèngiant dae utentes no ogetivos.
+
+ valutatzione assentada si basat isceti subra de retzensiones chi cunsideramus fidadas.]]>
+
+
+ in evidèntzia benent dae is retzensiones in %s de is ùrtimas 80 dies chi cunsideramus fidadas.]]>
+
+ Àteras informatziones in pitzus de %s.
+
+ comente %s istabilit sa calidade de is retzensiones
+
+ Cunfiguratzione
+
+ Ammustra publitzidade in su verificadore de retzensiones
+
+ Àteras informatziones
+
+ Disativa su verificadore de retzensiones
+
+ Àteru de cunsiderare
+
+ %s dae Mozilla
+
+ Informatziones noas de verificare
+
+ Controlla immoe
+
+ Ancora no ddoe at bastantes retzensiones
+
+ Su produtu no est a disponimentu
+
+ Su produtu sinnaladu est a disponimentu
+
+ Controllende sa calidade de sa retzensione
+
+ Controllende sa calidade de sa retzensione
+
+ Controllende sa calidade de sa retzensione (%s)
+
+ Custu podet trigare finas a 60 segundos.
+
+ Gràtzias de sa sinnalatzione.
+
+ Non podimus verificare custas retzensiones
+
+ Àteras informatziones luego
+
+ S’anàlisi est atualizada
+
+ Apo cumprèndidu
+
+ Nissuna informatzione a disponimentu immoe
+
+ Semus traballende pro risòlvere su problema. Torra luego.
+
+ Nissuna connessione de rete
+
+ Àteras informatziones
+
+ polìtica de riservadesa
+
+ Polìtica de riservadesa
+
+ cunditziones de su servìtziu
+
+ Cunditziones de su servìtziu
+
+ Eja, dd’apo a proare
+
+ Immoe nono
+
+ Proa su verificadore de retzensiones
+
+ Aberi su verificadore de retzensiones
+
+ Beta
+
+ Aberi su verificadore de retzensiones
+
+ Serra su verificadore de retzensiones
+
+ %1$s de 5 isteddos
+
+ Ammustra·nde prus pagu
+
+ Ammustra àteru
+
+ Calidade
+
+ Prètziu
+
+ Imbiu
+
+ Cumpetitividade
+
+ “%s”
+
mìnima
+
+ minimadu
ismànnia
+
+ ismanniadu
+
+ aberi su ligòngiu pro àteras informatziones in pitzus de custa colletzione
leghe s’artìculu
+
+
+ aberi su ligòngiu pro nde lèghere àteras informatziones
+
+ Ligòngios
+
+ Ligòngios a disponimentu
+
+
+
+
+
+ Boles tradùere custa pàgina?
+
+ Proa is tradutziones privadas in %1$s
+
+ Àteras informatziones
+
+ Tradue dae
+
+ Tradue in
+
+ Immoe nono
+
+ Fatu
+
+ Tradue
+
+ Torra a nce proare
+
+ Traduende
+
+ Tradutzione in cursu
+
+ Sèbera una lìngua
+
+ Custa lìngua no est ancora atzetada: %1$s.
+
+ Àteras informatziones
+
+
+
+ Optziones de tradutzione
+
+ Cunfiguratzione de sa tradutzione
+
+
+ In pitzus de is tradutziones de %1$s
+
+
+
+ Tradutziones
+
+ Preferèntzias de sa tradutzione
+
+ Tradutzione automàtica
+
+ Non traduas mai custos sitos
+
+ Iscàrriga lìnguas
+
+
+
+ Tradutzione automàtica
+
+
+ Tradue semper
+
+ Non traduas mai
+
+
+
+ Non traduas mai custos sitos
+
+ Boga %1$s
+
+ Boles cantzellare %1$s?
+
+ Cantzella
+
+ Annulla
+
+
+
+ Iscàrriga lìnguas
+
+ Àteras informatziones
+
+ Lìnguas a disponimentu
+
+ rechestu
+
+ %1$s (%2$s)
+
+ Iscàrriga lìnguas
+
+ Totu is lìnguas
+
+ Cantzella
+
+ In cursu
+
+ Iscàrriga
+
+ Seletzionada
+
+
+ Boles cantzellare %1$s (%2$s)?
+
+ Cantzella
+
+ Annulla
+
+
+ Iscàrriga
+
+ Iscàrriga e tradue
+
+ Annulla
+
diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml
index a79b99221..b986ea293 100644
--- a/app/src/main/res/values-si/strings.xml
+++ b/app/src/main/res/values-si/strings.xml
@@ -236,6 +236,7 @@
සංස්කරණය
මුල්පිටුව අභිරුචිකරණය
+
මුල් තිරය
@@ -243,6 +244,10 @@
පිරික්සුම් ඉතිහාසය මකන්න
+
+
+ පිටුව පරිවර්තනය
+
තෝරාගත් භාෂාව
@@ -255,8 +260,6 @@
පරිලෝකනය
-
- සෙවුම් යන්ත්රය
සෙවුම් යන්ත්රයේ සැකසුම්
@@ -311,23 +314,28 @@
- %s සමඟ බොහෝ දෑ කිරීමට දැනුම්දීම් උපකාරී වේ
+ %s සමඟ බොහෝ දෑ කිරීමට දැනුම්දීම් උපකාරී වේ
- උපාංග අතර පටිති සමමුහූර්තය, බාගැනීම් කළමනාකරණය, %s පෞද්ගලිකත්ව රැකවරණයෙන් උපරිම ප්රයෝජන ගැනීමට ඉඟි, සහ තවත් බොහෝ දෑ.
+ උපාංග අතර පටිති සමමුහූර්තය, බාගැනීම් කළමනාකරණය, %s පෞද්ගලිකත්ව රැකවරණයෙන් උපරිම ප්රයෝජන ගැනීමට ඉඟි, සහ තවත් බොහෝ දෑ.
- ඉදිරියට
+ ඉදිරියට
- දැන් නොවේ
+ දැන් නොවේ
+
+ ෆයර්ෆොක්ස් රහස්යතා දැන්වීම
+
ඔබට ආරක්ෂාව සලසන්නෙමු
- සමාගම් රහසින් අන්තර්ජාලය පුරා ඔබව ලුහුබැඳීම නැවැත්වීමට අපගේ ලාභ නොලබන පිටුබලයක් සහිත අතිරික්සුව සැමවිට උදව් කරයි.\n\nඅපගේ රහස්යතා දැන්වීමෙන් තව දැන ගන්න.
+ අපගේ ලාභ නොලබන පිටුබලයක් සහිත අතිරික්සුව අන්තර්ජාලය පුරා ඔබව රහසින් ලුහුබඳින සමාගම් ස්වයංක්රීයව නවත්වයි.
+
+ සමාගම් රහසින් අන්තර්ජාලය පුරා ඔබව ලුහුබැඳීම නැවැත්වීමට අපගේ ලාභ නොලබන පිටුබලයක් සහිත අතිරික්සුව සැමවිට උදව් කරයි.\n\nඅපගේ රහස්යතා දැන්වීමෙන් තව දැන ගන්න.
- පෞද්ගලිකත්ව දැන්වීම
+ පෞද්ගලිකත්ව දැන්වීම
පෙරනිමි අතිරික්සුව කරන්න
@@ -425,18 +433,10 @@
HTTPS-පමණි ප්රකාරය
-
- දත්තකඩ පතාක අවකරණය
දත්තකඩ පතාක අවහිරය
-
- දත්තකඩ පතාක අවම කරන්න
-
- අක්රිය
-
- සක්රිය
-
- %1$s ස්වයංක්රීයව දත්තකඩ පතාකවල දත්තකඩ ඉල්ලීම් ප්රතික්ෂේප කිරීමට උත්සාහ කරයි.
+
+ පෞද්. පිරික්සීමෙහි දත්තකඩ පතාක අවහිරය
මෙම අඩවියට අක්රියයි
@@ -454,27 +454,21 @@
අඩවියට සහාය නොදක්වයි
- %1$s සඳහා දත්තකඩ පතාක අවකරණය සක්රිය කරන්නද?
+ %1$s සඳහා දත්තකඩ පතාක අවහිරය සක්රිය කරන්නද?
- %1$s සඳහා දත්තකඩ පතාක අවකරණය අක්රිය කරන්නද?
+ %1$s සඳහා දත්තකඩ පතාක අවහිරය අක්රිය කරන්නද?
%1$s මඟින් මෙම අඩවියේ දත්තකඩ ඉල්ලීම් ස්වයංක්රීයව ඉවතලීමට නොහැක. ඉදිරියේ දී මෙම අඩවිය සඳහා සහාය දැක්වීමට ඉල්ලීමක් යැවීමට හැකිය.
-
- %1$s මෙම අඩවියේ දත්තකඩ ඉවත් කර පිටුව නැවුම් කරයි. සියළුම දත්තකඩ මැකීමෙන් බඩු කරත්ත හිස් වීමට හෝ ඔබව නික්මවීමට ඉඩ ඇත.
+
+ අක්රිය කරන්න සහ %1$s දත්තකඩ මකා මෙම අඩවිය නැවත පූරණය කරනු ඇත. මෙය ඔබව නික්මවීමට හෝ බඩු කරත්ත හිස් කිරීමට ඉඩ ඇත.
- %1$s සහාය දක්වන අඩවිවල තිබෙන සියළුම දත්තකඩ ඉල්ලීම් ස්වයංක්රීයව ප්රතික්ෂේප කිරීමට උත්සාහ කරයි.
-
- දත්තකඩ පතාක ප්රතික්ෂේපයට %1$s වෙත ඉඩ දෙන්නද?
-
- %1$s මඟින් බොහෝ දත්තකඩ පතාක ඉල්ලීම් ස්වයංක්රීයව ඉවතලිය හැකිය.
-
- දැන් නොවේ
-
- ඔබ දත්තකඩ ඉල්ලීම් අඩුවෙන් දකිනු ඇත
-
-
- ඉඩ දෙන්න
+ සක්රිය කළහොත් %1$s මෙම අඩවියේ දත්තකඩ පතාක ස්වයංක්රීයව ඉවතලීමට උත්සාහ කරයි.
+
+ %1$s ඔබ වෙනුවෙන් දත්තකඩ ඉවතලිණි
+
+
+ බාධා අවමයි, මෙම අඩවියේ ඔබව ලුහුබඳින දත්තකඩ අවමයි.
ඉහළ ආරක්ෂාවක් සඳහා HTTPS සංකේතන කෙටුම්පත භාවිතයෙන් අඩවි වෙත ස්වයංක්රීයව සම්බන්ධ වීමට තැත් කරයි.
@@ -686,6 +680,8 @@
පොත්යොමු
පිවිසුම්
+
+ මුරපද
පටිති අරින්න
@@ -710,6 +706,8 @@
%2$s %3$s හි %1$s
ණය පත්
+
+ ගෙවීමේ ක්රම
ලිපින
@@ -1244,8 +1242,6 @@
ඉවතලන්න
- මුද්රණයට නොහැකිය
-
මෙම පිටුව මුද්රණයට නොහැකිය
මුද්රණය
@@ -1290,6 +1286,11 @@
පෞද්. පටිති වසන්න
+
+ පෞද්. පටිති වසන්නද?
+
+ පෞද්. පටිති වැසීමට දැනුම්දීම මත තට්ටු හෝ තල්ලු කරන්න.
+
අළෙවිකරණය
@@ -1531,6 +1532,8 @@
සමස්ත දත්තකඩ (අඩවි කැඩීමට හේතු වේ)
හරස්-අඩවි දත්තකඩ හුදකලාව
+
+ දත්ත බෙදා විකිණීමෙන් වළකින ලෙස අඩවි වලට දන්වන්න
ලුහුබැඳීමේ අන්තර්ගතය
@@ -1641,8 +1644,12 @@
පිවිසුම් සහ මුරපද
+
+ මුරපද
පිවිසුම් සහ මුරපද සුරකින්න
+
+ මුරපද සුරකින්න
සුරැකීමට අසන්න
@@ -1658,12 +1665,21 @@
පිවිසුම යොදන්න
+
+ මුරපදය එක් කරන්න
+
පිවිසුම් සමමුහූර්තය
+
+ මුරපද සමමුහූර්තය
උපාංගවල පිවිසුම් සමමුහූර්තය
+
+ උපාංග අතර මුරපද සමමුහූර්තය
සුරැකි පිවිසුම්
+
+ සුරැකි මුරපද
ඔබ සුරකින හෝ %s වෙත සමමුහූර්ත කරන පිවිසුම් මෙහි පෙන්වයි.
@@ -1678,6 +1694,8 @@
සියළු හැරදැමීම් මකන්න
පිවිසුම් සොයන්න
+
+ මුරපද සොයන්න
අඩවිය
@@ -1735,6 +1753,8 @@
ලිපින
ණය පත්
+
+ ගෙවීමේ ක්රම
පත් සුරැකීම හා ස්වයං පිරවීම
@@ -1754,9 +1774,14 @@
ලිපින කළමනාකරණය
ලිපින සුරැකීම හා ස්වයං පිරවීම
+
+ ලිපින සුරැකීම හා පිරවීම
අංක, වි-තැපැල් සහ බාර දීමේ ලිපින වැනි තොරතුරු ඇතුළත් කරන්න
+
+ දුරකථන අංක සහ වි-තැපැල් ලිපින ඇතුළත් වේ
+
පත එක් කරන්න
@@ -1953,16 +1978,28 @@
පිවිසීමේ මුරපදය සඳහා සංස්කරණය කළ හැකි පෙළ ක්ෂේත්රය.
පිවිසීමට වෙනස්කම් සුරකින්න.
+
+ වෙනස්කම් සුරකින්න
සංස්කරණය
+
+ මුරපදය සංස්කරණය
නව පිවිසුමක් යොදන්න
+
+ මුරපදය එක් කරන්න
මුරපදයක් අවශ්යයි
+
+ මුරපදයක් යොදන්න
පරිශීලක නාමය අවශ්යයි
+
+ පරිශ්රීලක නාමයක් යොදන්න
සත්කාරක නාමය අවශ්යයි
+
+ වියමන ලිපිනයක් යොදන්න
හඬ සෙවුම
@@ -2205,6 +2242,9 @@
තව දැන ගැනීමට සබැඳිය අරින්න
+
+ සබැඳි
+
@@ -2275,6 +2315,10 @@
තිබෙන භාෂා
වුවමනාය
+
+ %1$s (%2$s)
භාෂා බාගන්න
@@ -2286,16 +2330,44 @@
තෝරාගත්
+
+ %1$s (%2$s) මකන්නද?
+
+ සියලුම භාෂා (%1$s) මකන්නද?
මකන්න
අවලංගු
+
+ දත්ත ඉතිරි කරන ප්රකාරයේ දී බාගන්න ද (%1$s)?
+
+ පරිවර්තන පෞද්ගලිකව රැඳවීමට ඔබගේ නිහිතයට අර්ධව භාෂා බාගැනෙයි.
+
+ සෑමවිට දත්ත ඉතිරි කරන ප්රකාරයේ දී බාගන්න
බාගන්න
+
+ බාගෙන පරිවර්තනය කරන්න
අවලංගු
+
+
+ නිදොස්කරණ මෙවලම්
+
+ ආපසු යාත්රණය
+
+ පටිති මෙවලම්
+
+ පටිති ගණන
සක්රිය
diff --git a/app/src/main/res/values-sk/strings.xml b/app/src/main/res/values-sk/strings.xml
index aa1020304..93499e7c6 100644
--- a/app/src/main/res/values-sk/strings.xml
+++ b/app/src/main/res/values-sk/strings.xml
@@ -254,6 +254,10 @@
Vymazať históriu prehliadania
+
+
+ Preložiť stránku
+
Vybraný jazyk
@@ -265,8 +269,6 @@
Skenovať
-
- Vyhľadávač
Nastavenia vyhľadávania
@@ -323,23 +325,28 @@
- Upozornenia vám pomôžu vyťažiť z prehliadača %s ešte viac
+ Upozornenia vám pomôžu vyťažiť z prehliadača %s ešte viac
- Synchronizujte svoje karty medzi zariadeniami, spravujte sťahovanie, získajte tipy, ako čo najlepšie využiť ochranu súkromia prehliadača %s a ďalšie.
+ Synchronizujte svoje karty medzi zariadeniami, spravujte sťahovanie, získajte tipy, ako čo najlepšie využiť ochranu súkromia prehliadača %s a ďalšie.
- Pokračovať
+ Pokračovať
- Teraz nie
+ Teraz nie
+
+ Vyhlásenie o ochrane osobných údajov Firefoxu
+
Radi vás držíme v bezpečí
- Náš neziskový prehliadač pomáha zabrániť spoločnostiam, aby vás tajne sledovali na webe.\n\nĎalšie informácie nájdete v našom Vyhlásení o ochrane osobných údajov.
+ Náš neziskový prehliadač pomáha zabrániť spoločnostiam, aby vás tajne sledovali na webe.
+
+ Náš neziskový prehliadač pomáha zabrániť spoločnostiam, aby vás tajne sledovali na webe.\n\nĎalšie informácie nájdete v našom Vyhlásení o ochrane osobných údajov.
- Vyhlásení o ochrane osobných údajov
+ Vyhlásení o ochrane osobných údajov
Nastaviť ako predvolený prehliadač
@@ -444,21 +451,11 @@
Režim "Len HTTPS"
-
- Zníženie počtu bannerov k súborom cookie
Blokovanie bannerov k súborom cookie
Blokovať bannery k súborom cookie v súkromnom prehliadaní
-
- Znižovať počet bannerov k súborom cookie
-
- Vypnuté
-
- Zapnuté
-
-
- %1$s sa automaticky pokúša odmietnuť žiadosti o súbory cookie na banneroch k súborom cookie.
+
Vypnuté pre túto stránku
@@ -476,36 +473,17 @@
Stránka momentálne nie je podporovaná
- Zapnúť znižovanie počtu bannerov k súborom cookie pre %1$s?
-
Zapnúť blokovanie bannerov k súborom cookie pre %1$s?
- Vypnúť znižovanie počtu bannerov k súborom cookie pre %1$s?
-
Vypnúť blokovanie bannerov k súborom cookie pre %1$s?
%1$s nemôže automaticky odmietnuť žiadosti o súbory cookie na tejto stránke. Môžete však poslať žiadosť o podporu tejto stránky v budúcnosti.
-
- %1$s vymaže súbory cookie tohto webu a obnoví stránku. Vymazanie všetkých súborov cookie vás môže odhlásiť zo stránky alebo vyprázdniť nákupné košíky.
Po vypnutí %1$s vymaže súbory cookie a znova načíta túto lokalitu. Môže vás to odhlásiť alebo vyprázdniť nákupné košíky.
-
- %1$s sa pokúša automaticky odmietnuť všetky žiadosti o súbory cookie na podporovaných stránkach.
Po zapnutí sa %1$s pokúsi automaticky odmietnuť všetky bannery k súborom cookie na tejto stránke.
-
- Povoliť prehliadaču %1$s odmietnuť bannery k súborom cookie?
-
- %1$s môže automaticky odmietnuť mnoho žiadostí o povolenie súborov cookie.
-
- Teraz nie
-
- Uvidíte menej žiadostí o súbory cookie
-
-
- Povoliť
%1$s pre vás práve odmietol súbory cookie
@@ -724,6 +702,8 @@
Záložky
Prihlasovacie údaje
+
+ Heslá
Otvorené karty
@@ -750,6 +730,8 @@
Platobné karty
+
+ Spôsoby platby
Adresy
@@ -1290,8 +1272,6 @@
Zavrieť
- Chyba tlače
-
Túto stránku nie je možné vytlačiť
Tlačiť
@@ -1696,8 +1676,12 @@
Prihlasovacie údaje
+
+ Heslá
Ukladanie prihlasovacích údajov
+
+ Ukladanie hesiel
Pred uložením sa opýtať
@@ -1714,26 +1698,45 @@
Pridať prihlasovacie údaje
+
+ Pridať heslo
+
Synchronizácia prihlasovacích údajov
+
+ Synchronizácia hesiel
Synchronizovať prihlasovacie údaje medzi zariadeniami
+
+ Synchronizovať heslá naprieč zariadeniami
Uložené prihlasovacie údaje
+
+ Uložené heslá
Uložené alebo synchronizované údaje v aplikácii %s sa zobrazia tu.
+
+ Heslá, ktoré uložíte alebo synchronizujete do %su budú zobrazené tu. Všetky heslá sú šifrované.
Ďalšie informácie o službe Sync.
+
+ Ďalšie informácie o synchronizácii
Výnimky
Tu sa zobrazia prihlasovacie údaje, ktoré sa nebudú ukladať.
+
+ %s nebude ukladať heslá pre tu uvedené stránky.
Pre nasledujúce stránky sa nebudú ukladať prihlasovacie údaje.
+
+ %s nebude ukladať heslá pre tieto stránky.
Odstrániť všetky výnimky
Hľadať
+
+ Hľadať v heslách
Stránka
@@ -1762,10 +1765,16 @@
Skryť heslo
Pre zobrazenie prihlasovacích údajov odomknite zariadenie
+
+ Ak chcete zobraziť uložené heslá, odomknite zariadenie
Zabezpečte svoje prihlasovacie údaje
+
+ Zabezpečte svoje heslá
Nastavte si vzor, kód alebo heslo, ktorým ochránite svoje uložené prihlasovacie údaje v prípade, že vaše zariadenie bude používať niekto iný.
+
+ Nastavte si vzor, kód alebo heslo, ktorým ochránite svoje uložené heslá v prípade, že vaše zariadenie bude používať niekto iný.
Neskôr
@@ -1784,6 +1793,9 @@
Zoradiť ponuku prihlasovacích údajov
+
+ Ponuka pre zoradenie hesiel
+
Automatické dopĺňanie
@@ -1791,10 +1803,16 @@
Adresy
Platobné karty
+
+ Spôsoby platby
Ukladať a automaticky dopĺňať údaje o platobných kartách
+
+ Ukladať a dopĺňať spôsoby platby
Údaje sú šifrované
+
+ %s zašifruje všetky spôsoby platby, ktoré uložíte
Synchronizovať platobné karty naprieč zariadeniami
@@ -1802,17 +1820,26 @@
Pridať platobnú kartu
+
+ Pridať kartu
Spravovať uložené karty
+
+ Spravovať karty
Pridať adresu
Spravovať adresy
Ukladať a automaticky dopĺňať adresy
+
+ Ukladať a dopĺňať adresy
Zahŕňa informácie ako sú čísla, e‑mailové adresy a dodacie adresy
+
+ Zahŕňa telefónne čísla a e‑mailové adresy
+
Pridať kartu
@@ -1833,6 +1860,8 @@
Odstrániť kartu
Naozaj chcete odstrániť túto kreditnú kartu?
+
+ Odstrániť kartu?
Odstrániť
@@ -1847,14 +1876,22 @@
Prosím, zadajte platné číslo platobnej karty
+
+ Zadajte platné číslo karty
Vyplňte toto pole
+
+ Zadajte meno
Odomknutím zobrazíte svoje uložené kreditné karty
Zabezpečte svoje kreditné karty
+
+ Zabezpečte svoje uložené spôsoby platby
Nastavte si vzor, kód alebo heslo, ktorým ochránite svoje uložené kreditné karty v prípade, že vaše zariadenie bude používať niekto iný.
+
+ Nastavte si vzor, kód alebo heslo, ktorým ochránite svoje uložené spôsoby platby v prípade, že vaše zariadenie bude používať niekto iný.
Nastaviť teraz
@@ -1864,6 +1901,8 @@
Odomknutím použijete uložené informácie o kreditnej karte
+
+ Ak chcete použiť uložené spôsoby platby, odomknite zariadenie
Pridať adresu
@@ -1901,6 +1940,8 @@
Naozaj chcete odstrániť túto adresu?
+
+ Chcete odstrániť túto adresu?
Odstrániť
@@ -1999,30 +2040,52 @@
Upraviť
Naozaj chcete odstrániť tieto prihlasovacie údaje?
+
+ Naozaj chcete odstrániť toto heslo?
Odstrániť
Zrušiť
Možnosti prihlásenia
+
+ Možnosti hesiel
Upraviteľné textové pole pre webovú adresu.
+
+ Upraviteľné textové pole pre webovú adresu.
Upraviteľné textové pole pre používateľské meno.
+
+ Upraviteľné textové pole pre používateľské meno.
Upraviteľné textové pole pre heslo.
+
+ Upraviteľné textové pole pre heslo.
Uložiť zmeny prihlasovacích údajov.
+
+ Uložiť zmeny
Upraviť
+
+ Upraviť heslo
Pridať nové prihlasovacie údaje
+
+ Pridať heslo
Vyžaduje sa heslo
+
+ Zadajte heslo
Vyžaduje sa používateľské meno
+
+ Zadajte používateľské meno
Vyžaduje sa názov hostiteľa
+
+ Zadajte webovú stránku
Hlasové vyhľadávanie
@@ -2119,6 +2182,9 @@
Vyhľadávanie %s
+
+ Zmeňte svoj predvolený prehliadač
+
Nastavte si automatické otváranie webových stránok, e‑mailov a správ vo Firefoxe.
@@ -2192,8 +2258,6 @@
Najdôležitejšie informácie pochádzajú z recenzií v obchode %s uverejnených za posledných 80 dní, ktoré považujeme za spoľahlivé.]]>
Ďalšie informácie o tom, %s.
-
- ako %s od Mozilly určuje kvalitu recenzie
ako %s určuje kvalitu recenzie
@@ -2378,6 +2442,8 @@
Práve prebieha preklad
+
+ Zvoľte jazyk
Pri preklade sa vyskytol problém. Prosím skúste to znova.
@@ -2391,15 +2457,19 @@
Nastavenia prekladov
- Vždy ponúkať preklad
+ Vždy ponúknuť preklad
- Vždy prekladať jazyk %1$s
+ Vždy prekladať z jazyka %1$s
Nikdy neprekladať z jazyka %1$s
Nikdy neprekladať túto stránku
+
+ Má prednosť pred ostatnými nastaveniami
+
+ Nebude ponúkať preklad
- Nastavenia prekladu
+ Nastavenia prekladov
Informácie o prekladoch v aplikácii %1$s
@@ -2409,13 +2479,13 @@
Ak je to možné, ponúknuť preklad
- Vždy sťahovať jazyky v režime šetrenia dát
+ Sťahovať jazyky aj v režime šetrenia dát
Nastavenia prekladania obsahu
Automatický preklad
- Nikdy neprekladať tieto stránky
+ Neprekladať tieto stránky
Stiahnuť jazyky
@@ -2424,7 +2494,7 @@
Automatický preklad
- Vyberte jazyk, pre ktorý chcete spravovať predvoľby „vždy prekladať“ a „nikdy neprekladať“.
+ Vyberte jazyk, pre ktorý chcete spravovať predvoľby „Vždy prekladať“ a „Nikdy neprekladať“.
@@ -2461,7 +2531,7 @@
Stiahnite si jazyky
- Stiahnite si kompletné jazyky pre rýchlejšie preklady a preklady offline. %1$s
+ Ak chcete rýchlejšie preklady alebo preklady offline, musíte si stiahnuť kompletné jazykové balíky. %1$s
Ďalšie informácie
diff --git a/app/src/main/res/values-skr/strings.xml b/app/src/main/res/values-skr/strings.xml
index 82eaa7485..cea286416 100644
--- a/app/src/main/res/values-skr/strings.xml
+++ b/app/src/main/res/values-skr/strings.xml
@@ -192,6 +192,8 @@
ولدا ہم وقت کرو
ورقے وچ لبھو
+
+ ورقے دا ترجمہ کرو
مجموعے وچ محفوظ کرو
@@ -1215,6 +1217,9 @@
نجی ٹیباں بند کرو
+
+ نجی ٹیباں بند کروں؟
+
مارکیٹنگ
diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml
index 950cde5c8..91d638d45 100644
--- a/app/src/main/res/values-sl/strings.xml
+++ b/app/src/main/res/values-sl/strings.xml
@@ -244,6 +244,7 @@
Prilagodi domačo stran
+
Domači zaslon
@@ -251,6 +252,9 @@
Počisti zgodovino brskanja
+
+ Prevedi stran
+
Izbrani jezik
@@ -262,8 +266,6 @@
Skeniraj
-
- Iskalnik
Nastavitve iskalnika
@@ -318,23 +320,28 @@
- Obvestila vam pomagajo pri delu s programom %s
+ Obvestila vam pomagajo pri delu s programom %s
- Sinhronizirajte zavihke med napravami, upravljajte prenose, pridobite nasvete za kar najboljši izkoristek %sovih zmožnosti in še več.
+ Sinhronizirajte zavihke med napravami, upravljajte prenose, pridobite nasvete za kar najboljši izkoristek %sovih zmožnosti in še več.
- Nadaljuj
+ Nadaljuj
- Ne zdaj
+ Ne zdaj
+
+ Obvestilo o zasebnosti za Firefox
+
Z veseljem skrbimo za vašo varnost
- Naš neprofitni brskalnik pomaga podjetjem preprečiti, da bi vam na skrivaj sledila po spletu.\n\nVeč o tem v našem pravilniku o zasebnosti.
+ Naš neprofitni brskalnik preprečuje podjetjem, da bi vas skrivaj spremljala po spletu.
+
+ Naš neprofitni brskalnik pomaga podjetjem preprečiti, da bi vam na skrivaj sledila po spletu.\n\nVeč o tem v našem pravilniku o zasebnosti.
- obvestilu o zasebnosti
+ obvestilu o zasebnosti
Nastavi kot privzeti brskalnik
@@ -438,20 +445,10 @@
Način "samo HTTPS"
-
- Zmanjšanje števila pasic s piškotki
Zavračanje pasic s piškotki
Zavračanje pasic s piškotki v zasebnem brskanju
-
- Zmanjšaj število pasic s piškotki
-
- Izključeno
-
- Vključeno
-
- %1$s poskuša samodejno zavrniti zahteve pasic po shranjevanju piškotkov.
Izključeno na tem spletnem mestu
@@ -469,35 +466,16 @@
Spletno mesto trenutno ni podprto
- Vključim zmanjšanje števila pasic s piškotki za %1$s?
-
Vključim zavračanje pasic s piškotki za %1$s?
- Izključim zmanjšanje števila pasic s piškotki za %1$s?
-
Izključim zavračanje pasic s piškotki za %1$s?
%1$s na tem spletnem mestu ni mogel samodejno zavrniti zahtev za shranjevanje piškotkov. Pošljete lahko zahtevek, naj se v prihodnosti uvede podpora za to spletno mesto.
-
- %1$s bo počistil piškotke tega spletnega mesta in osvežil stran. Če počistite vse piškotke, boste morda odjavljeni ali se bo izpraznila vaša nakupovalna košarica.
Izklopite in %1$s bo izbrisal piškotke ter znova naložil stran, kar vas lahko odjavi in izprazni vaš nakupovalni voziček.
- %1$s poskuša samodejno zavrniti vse zahteve za shranjevanje piškotkov na spletnih mestih, ki so podprta.
-
Vklopite to možnost in %1$s bo skušal na tem spletnem mestu samodejno zavrniti pasice s piškotki.
-
- Dovolite %1$su, da zavrača pasice s piškotki?
-
- %1$s lahko samodejno zavrne številne zahteve za shranjevanje piškotkov.
-
- Ne zdaj
-
- Prikazovalo se vam bo manj zahtev za shranjevanje piškotkov
-
-
- Dovoli
%1$s je pravkar zavrnil piškotke v vašem imenu
@@ -716,6 +694,8 @@
Zaznamki
Prijave
+
+ Gesla
Odprti zavihki
@@ -743,6 +723,8 @@
Kreditne kartice
+
+ Načini plačila
Naslove
@@ -1288,8 +1270,6 @@
Zapri
- Tiskanje ni mogoče
-
Te strani ni mogoče natisniti
Natisni
@@ -1334,6 +1314,8 @@
Zapri zasebne zavihke
+ Tapnite to obvestilo ali ga povlecite vstran, da zaprete zasebne zavihke.
+
Trženje
@@ -1693,8 +1675,12 @@
Prijave in gesla
+
+ Gesla
Shranjevanje prijav in gesel
+
+ Shranjuj gesla
Vprašaj pred shranjevanjem
@@ -1713,22 +1699,37 @@
Dodaj prijavo
+
+ Dodaj geslo
+
Sinhronizacija prijav
+
+ Sinhroniziraj gesla
Sinhroniziraj prijave med napravami
+
+ Sinhroniziraj gesla med napravami
Shranjene prijave
+
+ Shranjena gesla
Tu se prikažejo prijave, ki jih shranite ali sinhronizirate v %s.
Več o Sync.
+
+ Več o sinhronizaciji
Izjeme
Tu bodo prikazane prijave in gesla, ki niso shranjena.
+
+ Za tukaj navedena mesta %s ne bo shranjeval gesel.
Prijave in gesla za te strani ne bodo shranjene.
+
+ Za ta spletna mesta %s ne bo shranjeval gesel.
Izbriši vse izjeme
@@ -1763,8 +1764,12 @@
Odklenite za ogled shranjenih prijav
Zavarujte svoje prijave in gesla
+
+ Zavarujte shranjena gesla
Nastavite vzorec za zaklepanje naprave, PIN ali geslo za zaščito pred dostopom do shranjenih prijav in gesel, če vašo napravo uporablja še kdo.
+
+ Nastavite vzorec za zaklepanje naprave, PIN ali geslo za zaščito pred dostopom do shranjenih gesel, če vašo napravo uporablja še kdo.
Pozneje
@@ -1795,8 +1800,12 @@
Kreditne kartice
Shrani in samodejno izpolni kartice
+
+ Shranjuj in izpolnjuj načine plačila
Podatki so šifrirani
+
+ %s šifrira vse načine plačila, ki jih shranite
Sinhroniziraj kartice med napravami
@@ -1804,17 +1813,26 @@
Dodaj kreditno kartico
+
+ Dodaj kartico
Upravljanje shranjenih kartic
+
+ Upravljanje kartic
Dodaj naslov
Upravljanje naslovov
Shranjuj in samodejno izpolnjuj naslove
+
+ Shranjuj in izpolnjuj naslove
Vključi podatke, kot so številke, e-poštni naslovi in naslovi za dostavo
+
+ Vključuje telefonske številke in e-poštne naslove
+
Dodaj kartico
@@ -1850,8 +1868,12 @@
Vnesite veljavno številko kreditne kartice
+
+ Vnesite veljavno številko kartice
Izpolnite to polje
+
+ Dodajte ime
Odklenite za ogled shranjenih kartic
@@ -2005,30 +2027,52 @@
Uredi
Ali ste prepričani, da želite izbrisati to prijavo?
+
+ Ali ste prepričani, da želite izbrisati to geslo?
Izbriši
Prekliči
Možnosti prijave
+
+ Možnosti gesel
Besedilno polje za urejanje spletnega naslova prijave.
+
+ Besedilno polje za urejanje spletnega naslova.
Besedilno polje za urejanje uporabniškega imena prijave.
+
+ Besedilno polje za urejanje uporabniškega imena.
Besedilno polje za urejanje gesla prijave.
+
+ Besedilno polje za urejanje gesla.
Shrani spremembe v prijavo.
+
+ Shrani spremembe.
Urejanje
+
+ Uredi geslo
Dodaj novo prijavo
+
+ Dodaj geslo
Zahtevano je geslo
+
+ Vnesite geslo
Zahtevano je uporabniško ime
+
+ Vnesite uporabniško ime
Zahtevano je ime domene
+
+ Vnesite spletni naslov
Glasovno iskanje
@@ -2126,7 +2170,7 @@
Iskalnik %s
-
+
Nastavite, naj se povezave s spletnih strani, e-pošte in sporočil samodejno odpirajo v Firefoxu.
@@ -2198,8 +2242,6 @@
Poudarki so vzeti iz mnenj v trgovini %s v zadnjih 80 dneh, za katera menimo, da so zanesljiva.]]>
Več o %s.
-
- kako Mozilla %s določa kakovost mnenj
kako %s določa kakovost mnenj
@@ -2383,6 +2425,8 @@
Prevajanje poteka
+
+ Izberite jezik
Pri prevajanju je prišlo do težave. Poskusite znova.
@@ -2404,6 +2448,8 @@
Nikoli ne prevajaj jezika %1$s
Nikoli ne prevajaj tega spletnega mesta
+
+ Preglasi vse druge nastavitve
Nastavitve prevajanja
@@ -2430,6 +2476,11 @@
Samodejno prevajanje
+
+
+ Ponudi prevajanje (privzeto)
+
+ %1$s naj ponuja prevod strani v tem jeziku.
Vedno prevedi
@@ -2448,6 +2499,9 @@
Prekliči
+
+
+ Prenesi jezike
Več o tem
@@ -2469,12 +2523,47 @@
Izbrano
+
+ Če izbrišete vse jezike, bo %1$s pri prevajanju v predpomnilnik naložil delne jezike.
Izbriši
Prekliči
+
+ Vedno prenesi tudi ob varčevanju s podatki
+
+ Prenesi
+
+ Prenesi in prevedi
Prekliči
-
+
+
+ Orodja za razhroščevanje
+
+ Pojdi nazaj
+
+ Orodja za zavihke
+
+ Št. zavihkov
+
+ Dejavni
+
+ Nedejavni
+
+ Zasebni
+
+ Skupaj
+
+ Orodje za ustvarjanje zavihkov
+
+ Količina zavihkov, ki jih želite ustvariti
+
+ Dodaj med dejavne zavihke
+
+ Dodaj med nedejavne zavihke
+
+ Dodaj med zasebne zavihke
+
diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml
index bef8a1c2b..ea099419b 100644
--- a/app/src/main/res/values-sq/strings.xml
+++ b/app/src/main/res/values-sq/strings.xml
@@ -260,8 +260,6 @@
Skanoje
-
- Motor kërkimesh
Rregullime motorësh kërkimesh
@@ -314,23 +312,28 @@
- Njoftimet ju ndihmojnë të arrini më tepër gjëra me %s
+ Njoftimet ju ndihmojnë të arrini më tepër gjëra me %s
- Njëkohësoni skedat tuaja nëpër pajisje, administroni shkarkime, merrni ndihmëza mbi shfrytëzimin në maksimum të mbrojtjes së privatësisë në %s, etj.
+ Njëkohësoni skedat tuaja nëpër pajisje, administroni shkarkime, merrni ndihmëza mbi shfrytëzimin në maksimum të mbrojtjes së privatësisë në %s, etj.
- Vazhdo
+ Vazhdo
- Jo tani
+ Jo tani
+
+ Shënim mbi privatësinë në Firefox
+
Duam fort t’ju mbajmë të parrezik
- Shfletuesi ynë, me entin jofitimprurës nga pas, ndihmon të ndalen shoqëri t’ju ndjekin fshehtazi nëpër internet.\n\nMësoni më tepër te shënimi ynë mbi privatësinë.
+ Shfletuesi ynë, me entin jofitimprurës nga pas, ndihmon të ndalen shoqëri t’ju ndjekin fshehtazi nëpër internet.
+
+ Shfletuesi ynë, me entin jofitimprurës nga pas, ndihmon të ndalen shoqëri t’ju ndjekin fshehtazi nëpër internet.\n\nMësoni më tepër te shënimi ynë mbi privatësinë.
- shënim privatësie
+ shënim privatësie
Vëre si shfletuesin parazgjedhje
@@ -435,21 +438,11 @@
Mënyra Vetëm-HTTPS
-
- Reduktim Banderolash Për Cookie-t
Bllokues Banderolash Cookie-sh
Bllokues Banderolash Cooki-esh në shfletim privat
-
- Redukto banderola për cookie-t
-
- Off
-
- On
-
-
- %1$s provon vetvetiu të hedhë poshtë kërkesa depozitimi cookie -sh nga banderola cookie-sh.
+
Çaktivizuar për këtë sajt
@@ -468,35 +461,16 @@
Sajt aktualisht i pambuluar
- Të aktivizohet Reduktim Banderolash Cookie-sh për %1$s?
-
Të aktivizohet Bllokim Banderolash Cookie-sh për %1$s?
- Të çaktivizohet Reduktim Banderolash Cookie-sh për %1$s?
-
Të çaktivizohet Bllokim Banderolash Cookie-sh për %1$s?
%1$s s’mund të hedhë poshtë automatikisht kërkesa për “cookie” në këtë sajt. Mund të dërgoni një kërkesë për mbulimin e këtij sajti në të ardhmen.
-
- %1$s do të spastrojë cookie-t për këtë sajt dhe do të rifreskojë faqen. Spastrimi i krejt cookie-ve mund të sjellë nxjerrjen tuaj nga llogaria, ose zbrazje shportash blerjesh.
Çaktivizojeni dhe %1$s do të spastrojë cookie-t dhe do të ringarkojë këtë sajt. Kjo mund sjellë nxjerrjen tuaj nga llogaria, ose zbrazjen e shportave tuaja të blerjes.
- %1$s provon të hedhë poshtë automatikisht krejt kërkesat për cookies, në sajtet që e mbulojnë.
-
Aktivizojeni dhe %1$s do të provojë të hedhë poshtë automatikisht banderola cookie-sh në këtë sajt.
-
- Të lejohet %1$s të hedhë poshtë banderola cookie-sh?
-
- %1$s mund të hedhë vetvetiu poshtë mjaft kërkesa banderolash cookie-sh.
-
- Jo Tani
-
- Do të shihni më pak kërkesa depozitimi cookie-sh
-
-
- Lejoje
%1$s sapo hodhi poshtë “cookies” për ju
@@ -713,6 +687,8 @@
Faqerojtës
Kredenciale Hyrjesh
+
+ Fjalëkalime
Skeda të hapura
@@ -740,6 +716,8 @@
Karta krediti
+
+ Metoda pagesash
Adresa
@@ -1275,8 +1253,6 @@
Hidhe tej
- S’arrihet të shtypet
-
S’arrihet të shtypet kjo faqe
Shtypni
@@ -1321,6 +1297,10 @@
Mbyllni skeda private
+
+ Të mbyllen skeda private?
+ Prekeni, ose fërkoni mbi këtë njoftim, që të mbyllen skeda private.
+
Marketing
@@ -1678,8 +1658,12 @@
Kredenciale hyrjesh dhe fjalëkalime
+
+ Fjalëkalime
Ruaj kredenciale hyrjesh dhe fjalëkalime
+
+ Ruani fjalëkalime
Pyet të ruhet a jo
@@ -1697,26 +1681,45 @@
Shtoni kredenciale hyrjeje
+
+ Shtoni fjalëkalim
+
Njëkohëso kredenciale hyrjeje
+
+ Njëkohësoni fjalëkalime
Njëkohëso kredenciale hyrjesh nëpër pajisje
+
+ Njëkohësoni fjalëkalime mes pajisjesh
Kredenciale hyrjesh të ruajtur
+
+ Fjalëkalime të ruajtur
Këtu do të shfaqen kredencialet e hyrjeve që ruani ose njëkohësoni në %s.
+
+ Këtu do të shfaqen fjalëkalimet që ruani, ose njëkohësoni në %s. Krejt fjalëkalimet që ruani, fshehtëzohen.
Mësoni më tepër mbi Sync-un.
+
+ Mësoni më tepër mbi njëkohësimin
Përjashtime
Këtu do të shfaqen kredenciale hyrjesh dhe fjalëkalime që nuk janë ruajtur.
+
+ %s s’do të ruajë fjalëkalime për sajte të radhitur këtu.
Për këto sajte s’do të ruhen kredenciale hyrjesh dhe fjalëkalime.
+
+ %s s’do të ruajë fjalëkalime për këta sajte.
Fshi krejt përjashtimet
Kërkoni te kredenciale hyrjesh
+
+ Kërko te fjalëkalimet
Sajt
@@ -1745,10 +1748,16 @@
Fshihe fjalëkalimin
Që të shihni kredenciale tuajt hyrjesh të ruajtur, shkyçeni
+
+ Që të shihni fjalëkalimet tuaj të ruajtura, shkyçeni
Siguroni kredenciale hyrjesh dhe fjalëkalime tuajt
+
+ Siguroni fjalëkalimet tuaj të ruajtur
Ujdisni një rregullsi, PIN, ose fjalëkalim kyçjeje pajisjeje për të mbrojtur nga hyrja në to kredencialet e hyrjes dhe fjalëkalimet tuaj të ruajtur, nëse pajisjen tuaj e ka dikush tjetër.
+
+ Ujdisni një rregullsi, PIN, ose fjalëkalim kyçjeje pajisjeje për të mbrojtur prej hyrjes në to fjalëkalimet tuaj të ruajtur, nëse pajisjen tuaj e ka dikush tjetër.
Më vonë
@@ -1768,6 +1777,9 @@
Renditni menu kredencialesh
+
+ Menu renditjeje fjalëkalimesh
+
Vetëplotësime
@@ -1775,18 +1787,28 @@
Adresa
Karta krediti
+
+ Metoda pagesash
Ruaj dhe plotëso vetvetiu të dhëna kartash
+
+ Ruaj dhe plotëso metoda pagesash
Të dhënat janë të fshehtëzuara
+
+ %s fshehtëzon krejt metodat e pagesave që ruani
Njëkohëso të dhëna kartash mes pajisjesh
Njëkohëso karta
Shtoni kartë krediti
+
+ Shtoni kartë
Administroni karta të ruajtura
+
+ Administroni karta
Shtoni adresë
@@ -1794,9 +1816,14 @@
Ruaj dhe vetëplotëso adresa
+
+ Ruaj dhe vetëplotëso adresa
Përfshini hollësi të tilla si numra, email dhe adresa dërgimi
+
+ Përfshin numra telefonash dhe adresa email
+
Shtoni kartë
@@ -1817,6 +1844,8 @@
Fshije kartën
Jeni i sigurt se doni të fshihet kjo kartë krediti?
+
+ Të fshihet karta?
Fshije
@@ -1831,14 +1860,22 @@
Ju lutemi, jepni një numër të vlefshëm karte krediti
+
+ Jepni një numër karte të vlefshme
Ju lutemi, plotësojeni këtë fushë
+
+ Shtoni emër
Që të shihni kartat tuaja të ruajtura, shkyçeni
Siguroni kartat tuaja të kreditit
+
+ Siguroni metodat tuaja të ruajtura të pagesave
Ujdisni një rregullsi, PIN, ose fjalëkalim kyçjeje pajisjeje për të mbrojtur nga hyrja në to kartat tuaja kreditit të ruajturar, nëse pajisjen tuaj e ka dikush tjetër.
+
+ Ujdisni një rregullsi, PIN, ose fjalëkalim kyçjeje pajisjeje për të mbrojtur prej hyrjes në to hollësitë e ruajtura për kartat tuaja, nëse pajisjen tuaj e ka dikush tjetër.
Ujdiseni tani
@@ -1848,6 +1885,8 @@
Që të përdorni të dhëna karte krediti të depozituara, shkyçeni
+
+ Që të përdorni metoda të ruajtura pagesash, shkyçeni
Shtoni adresë
@@ -1884,6 +1923,8 @@
Përzgjidhni adresë
Jeni i sigurt se doni të fshihet kjo adresë?
+
+ Të fshihet kjo adresë?
Fshije
@@ -1982,31 +2023,53 @@
Përpunoni
Jeni i sigurt se doni të fshihen këto kredenciale hyrjeje?
+
+ Jeni i sigurt se doni të fshihet ky fjalëkalim?
Fshije
Anuloje
Mundësi hyrjesh
+
+ Mundësi fjalëkalimesh
Fusha e përpunueshme e teksteve për adresën web të kredencialeve të hyrjes.
+
+ Fusha e përpunueshme e teksteve për adresën web të fjalëkalimit.
Fusha e përpunueshme e teksteve për emrin e përdoruesit të kredencialeve të hyrjes.
+
+ Fusha e përpunueshme e teksteve për emrin e përdoruesit të fjalëkalimit.
Fusha e përpunueshme e teksteve për fjalëkalimin e kredencialeve të hyrjes.
+
+ Fusha e përpunueshme e teksteve për fjalëkalimin.
Ruani ndryshimet te kredenciale hyrjesh.
+
+ Ruaji ndryshimet.
Përpunoni
+
+ Përpunoni fjalëkalimin
Shtoni kredenciale hyrjeje të re
+
+ Shtoni fjalëkalim
Lypset fjalëkalim
+
+ Jepni një fjalëkalim
Emri i përdoruesit është i domosdoshëm
+
+ Jepni emër përdoruesi
Lypset strehëemër
+
+ Jepni një adresë web
Kërkim zanor
@@ -2176,8 +2239,6 @@
Gjërat në pah janë nga shqyrtime %s brenda 80 ditëve të fundit, të cilave besojmë se mund t’u zihet besë.]]>
Mësoni më tepër mbi %s.
-
- si e përcakton cilësinë e shqyrtimeve %s nga Mozilla
si e përcakton %s cilësinë e shqyrtimeve
@@ -2382,6 +2443,10 @@
Mos përkthe kurrë në %1$s
Mos e përkthe kurrë këtë sajt
+
+ Anashkalo krejt rregullimet e tjera
+
+ Anashkalo ofertë për përkthim
Rregullime përkthimi
@@ -2506,6 +2571,8 @@
Mjete Diagnostikim
+
+ Shko mbrapsht
Mjete Skedash
diff --git a/app/src/main/res/values-sv-rSE/strings.xml b/app/src/main/res/values-sv-rSE/strings.xml
index ffb8bc0e6..74ab848e4 100644
--- a/app/src/main/res/values-sv-rSE/strings.xml
+++ b/app/src/main/res/values-sv-rSE/strings.xml
@@ -248,6 +248,7 @@
Anpassa startsidan
+
Startsidan
@@ -255,6 +256,9 @@
Radera webbhistorik
+
+ Översätt sida
+
Valt språk
@@ -266,8 +270,6 @@
Skanna
-
- Sökmotor
Inställningar för sökmotor
@@ -323,23 +325,28 @@
- Aviseringar hjälper dig att göra mer med %s
+ Aviseringar hjälper dig att göra mer med %s
- Synkronisera dina flikar mellan enheter, hantera nedladdningar, få tips om hur du får ut det mesta av %s:s integritetsskydd och mer.
+ Synkronisera dina flikar mellan enheter, hantera nedladdningar, få tips om hur du får ut det mesta av %s:s integritetsskydd och mer.
- Fortsätt
+ Fortsätt
- Inte nu
+ Inte nu
+
+ Firefox sekretessmeddelande
+
Vi älskar att hålla dig säker
- Vår icke-vinstdrivande webbläsare hjälper till att hindra företag från att följa dig i hemlighet på webben.\n\nLäs mer i vårt sekretessmeddelande.
+ Vår icke-vinstdrivande webbläsare hjälper till att hindra företag från att i hemlighet följa dig på webben.
+
+ Vår icke-vinstdrivande webbläsare hjälper till att hindra företag från att följa dig i hemlighet på webben.\n\nLäs mer i vårt sekretessmeddelande.
- sekretessmeddelande
+ sekretessmeddelande
Ange som standardwebbläsare
@@ -443,21 +450,11 @@
Endast HTTPS-läge
-
- Reducering av kakbanner
Blockering av kakbanners
Blockering av kakbanner vid privat surfning
-
- Minska kakbanners
-
- Av
-
- På
-
-
- %1$s försöker automatiskt avvisa kak-förfrågningar på kakbanners.
+
Av för denna webbplats
@@ -475,35 +472,16 @@
Webbplatsen stöds inte för närvarande
- Vill du aktivera reducering av kakbanners för %1$s?
-
Vill du aktivera blockering av kakbanner för %1$s?
- Vill du stänga av reducering av kakbanners för %1$s?
-
Vill du stänga av blockering av kakbanner för %1$s?
%1$s kan inte automatiskt avvisa kakförfrågningar på den här webbplatsen. Du kan skicka en begäran om att stödja den här webbplatsen i framtiden.
-
- %1$s rensar webbplatsens kakor och uppdaterar sidan. Rensa alla kakor kan logga ut dig eller tömma kundvagnar.
Stäng av och %1$s rensar kakor och laddar om den här webbplatsen. Detta kan logga ut dig eller tömma kundvagnar.
- %1$s försöker automatiskt avvisa alla kak-förfrågningar på webbplatser som stöds.
-
Slå på och %1$s försöker automatiskt neka alla kakbanners på den här webbplatsen.
-
- Tillåta %1$s att avvisa kakbanners?
-
- %1$s kan automatiskt avvisa flera kakbannerförfrågningar.
-
- Inte nu
-
- Du kommer att se färre kak-förfrågningar
-
-
- Tillåt
%1$s har precis avvisat kakor åt dig
@@ -722,6 +700,8 @@
Bokmärken
Inloggningar
+
+ Lösenord
Öppna flikar
@@ -749,6 +729,8 @@
Kreditkort
+
+ Betalningsmetoder
Adresser
@@ -1289,8 +1271,6 @@
Ignorera
- Det går inte att skriva ut
-
Det gick inte att skriva ut den här sidan
Skriv ut
@@ -1700,8 +1680,12 @@
Inloggningar och lösenord
+
+ Lösenord
Spara inloggningar och lösenord
+
+ Spara lösenord
Fråga för att spara
@@ -1718,26 +1702,46 @@
Lägg till inloggning
+
+ Lägg till lösenord
+
Synkronisera inloggningar
+
+ Synkronisera lösenord
Synkronisera inloggningar mellan enheter
+
+ Synkronisera lösenord mellan enheter
Sparade inloggningar
+
+ Sparade lösenord
De inloggningar som du sparar eller synkroniserar till %s kommer att dyka upp här.
+
+ Lösenorden du sparar eller synkroniserar till %s kommer att listas här. Alla lösenord du sparar är krypterade.
+
Läs mer om Sync.
+
+ Läs mer om synkronisering
Undantag
Inloggningar och lösenord som inte sparas visas här.
+
+ %s kommer inte att spara lösenord för webbplatser som listas här.
Inloggningar och lösenord sparas inte för dessa webbplatser.
+
+ %s kommer inte att spara lösenord för dessa webbplatser.
Ta bort alla undantag
Sök inloggningar
+
+ Sök efter lösenord
Webbplats
@@ -1766,10 +1770,16 @@
Dölj lösenord
Lås upp för att se dina sparade inloggningar
+
+ Lås upp för att se dina sparade lösenord
Säkra dina inloggningar och lösenord
+
+ Säkra dina sparade lösenord
Konfigurera enhetens låsmönster, PIN eller lösenord för att skydda dina sparade inloggningar och lösenord från åtkomst om någon annan har din enhet.
+
+ Konfigurera ett enhetslåsmönster, PIN-kod eller lösenord för att skydda dina sparade lösenord från åtkomst om någon annan använder din enhet.
Senare
@@ -1788,6 +1798,9 @@
Sortera inloggningsmenyn
+
+ Menyn sortera lösenord
+
Autofyll
@@ -1795,10 +1808,16 @@
Adresser
Kreditkort
+
+ Betalningsmetoder
Spara och fyll i kreditkort automatiskt
+
+ Spara och fyll i betalningsmetoder
Data är krypterad
+
+ %s krypterar alla betalningsmetoder som du sparar
Synkronisera kort mellan enheter
@@ -1806,17 +1825,26 @@
Lägg till kreditkort
+
+ Lägg till kort
Hantera sparade kreditkort
+
+ Hantera kort
Lägg till adress
Hantera adresser
Spara och fyll i adresser automatiskt
+
+ Spara och fyll i adresser
Inkludera information som nummer, e-post och leveransadresser
+
+ Inkluderar telefonnummer och e-postadresser
+
Lägg till kreditkort
@@ -1837,6 +1865,8 @@
Ta bort kort
Är du säker på att du vill ta bort det här kreditkortet?
+
+ Ta bort kort?
Ta bort
@@ -1852,14 +1882,22 @@
Ange ett giltigt kreditkortsnummer
+
+ Ange ett giltigt kortnummer
Fyll i det här fältet
+
+ Lägg till ett namn
Lås upp för att se dina sparade kreditkort
Säkra dina kreditkort
+
+ Säkra dina sparade betalningsmetoder
Konfigurera enhetens låsmönster, PIN eller lösenord för att skydda dina sparade kreditkort från åtkomst om någon annan har din enhet.
+
+ Konfigurera ett enhetslåsmönster, PIN-kod eller lösenord för att skydda dina sparade betalningsmetoder från att användas om någon annan har din enhet.
Konfigurera nu
@@ -1870,6 +1908,8 @@
Lås upp för att använda lagrad kreditkortsinformation
+
+ Lås upp för att använda sparade betalningsmetoder
Lägg till adress
@@ -1907,6 +1947,8 @@
Är du säker på att du vill ta bort den här adressen?
+
+ Ta bort den här adressen?
Ta bort
@@ -2006,30 +2048,52 @@
Redigera
Är du säker på att du vill ta bort den här inloggningen?
+
+ Är du säker på att du vill ta bort det här lösenordet?
Ta bort
Avbryt
Inloggningsalternativ
+
+ Lösenordsalternativ
Det redigerbara textfältet för inloggningens webbadress.
+
+ Det redigerbara textfältet för webbplatsadressen.
Det redigerbara textfältet för inloggningens användarnamn.
+
+ Det redigerbara textfältet för användarnamnet.
Det redigerbara textfältet för inloggningens lösenord.
+
+ Det redigerbara textfältet för lösenordet.
Spara ändringar för inloggning.
+
+ Spara ändringar.
Redigera
+
+ Redigera lösenord
Lägg till ny inloggning
+
+ Lägg till lösenord
Lösenord krävs
+
+ Ange ett lösenord
Användarnamn krävs
+
+ Ange ett användarnamn
Värdnamn krävs
+
+ Ange en webbadress
Röstsökning
@@ -2125,6 +2189,9 @@
Sök med %s
+
+ Ändra din standardwebbläsare
+
Ställ in länkar från webbplatser, e-post och meddelanden så att de öppnas automatiskt i Firefox.
@@ -2198,8 +2265,6 @@
Höjdpunkter är från %s recensioner under de senaste 80 dagarna som vi tror är pålitliga.]]>
Läs mer om %s.
-
- hur %s av Mozilla bestämmer recensionens kvalitet
hur %s bestämmer recensionens kvalitet
@@ -2384,6 +2449,8 @@
Översättning pågår
+
+ Välj ett språk
Det uppstod ett problem med översättningen. Försök igen.
@@ -2405,6 +2472,10 @@
Översätt aldrig %1$s
Översätt aldrig denna sida
+
+ Åsidosätter alla andra inställningar
+
+ Åsidosätter erbjudanden om översättning
Översättningsinställningar
diff --git a/app/src/main/res/values-tg/strings.xml b/app/src/main/res/values-tg/strings.xml
index 80da7812d..4ae0da3cf 100644
--- a/app/src/main/res/values-tg/strings.xml
+++ b/app/src/main/res/values-tg/strings.xml
@@ -246,6 +246,7 @@
Танзимоти саҳифаи асосӣ
+
Экрани асосӣ
@@ -253,6 +254,9 @@
Пок кардани таърихи тамошо
+
+ Тарҷума кардани саҳифа
+
Забони интихобшуда
@@ -264,8 +268,6 @@
Ҷустуҷӯ
-
- Низоми ҷустуҷӯӣ
Танзимоти низоми ҷустуҷӯӣ
@@ -320,23 +322,28 @@
- Огоҳиҳо барои кори бештар бо «%s» ба шумо кумак мекунанд
+ Огоҳиҳо барои кори бештар бо «%s» ба шумо кумак мекунанд
- Варақаҳои худро байни дастгоҳҳо ҳамоҳанг созед, боргириҳоро идора кунед, барои беҳтар танзим кардани муҳофизати махфияти «%s» маслиҳатҳо гиред ва аз чизҳои бештар истифода баред.
+ Варақаҳои худро байни дастгоҳҳо ҳамоҳанг созед, боргириҳоро идора кунед, барои беҳтар танзим кардани муҳофизати махфияти «%s» маслиҳатҳо гиред ва аз чизҳои бештар истифода баред.
- Идома додан
+ Идома додан
- Ҳоло не
+ Ҳоло не
+
+ Огоҳномаи махфияти «Firefox»
+
Мо нигоҳдории бехатарии шуморо дӯст медорем
- Браузери мо, ки аз ҷониби ташкилоти ғайритиҷоратӣ дастгирӣ мешавад, маъракаҳоеро манъ мекунад, ки шуморо ба таври пинҳонӣ дар ҳудуди Интернет пайгирӣ мекунанд.\n\nМаълумоти бештар дар Огоҳномаи махфияти мо.
+ Браузери мо, ки аз ҷониби ташкилоти ғайритиҷоратӣ дастгирӣ мешавад, маъракаҳоеро, ки шуморо дар атрофи Интернет пинҳонӣ пайгирӣ мекунанд, қатъ мекунад.
+
+ Браузери мо, ки аз ҷониби ташкилоти ғайритиҷоратӣ дастгирӣ мешавад, маъракаҳоеро манъ мекунад, ки шуморо ба таври пинҳонӣ дар ҳудуди Интернет пайгирӣ мекунанд.\n\nМаълумоти бештар дар Огоҳномаи махфияти мо.
- огоҳномаи махфият
+ огоҳномаи махфият
Гузоштан ҳамчун браузери пешфарз
@@ -439,21 +446,11 @@
Реҷаи «Танҳо HTTPS»
-
- Маҳдудкунии баннери куки
Манъкунандаи баннери куки
Манъкунандаи баннери куки дар тамошокунии хусусӣ
-
- Маҳдуд кардани баннерҳои куки
-
- Ғайрифаъол
-
- Фаъол
-
-
- «%1$s» ба таври худкор кушиш мекунад, ки дархостҳои кукиҳоро дар баннерҳои кукиҳо рад кунад.
+
Барои ин сомона хомӯш аст
@@ -471,36 +468,17 @@
Ин сомона дар айни замон дастгирӣ намешавад
- «Маҳдудкунии баннери куки»-ро барои %1$s фаъол месозед?
-
Манъкунандаи баннери кукиро барои %1$s фаъол мекунед?
-
- «Маҳдудкунии баннери куки»-ро барои %1$s хомӯш месозед?
Манъкунандаи баннери кукиро барои %1$s хомӯш мекунед?
«%1$s» наметавонад, ки дархостҳои кукиро барои ин сомона ба таври худкор рад кунад. Шумо метавонед барои дастгирӣ кардани ин сомона дар оянда дархостеро фиристонед.
-
- %1$s кукиҳои ин сомонаро тоза мекунад ва саҳифаро аз нав бор мекунад. Амали тозакунии ҳамаи кукиҳо метавонад шуморо аз сомона хориҷ кунад ва сабадҳои харидории шуморо холӣ намояд.
Хомӯш кунед ва «%1$s» кукиҳоро тоза намуда, ин сомонаро аз нав бор мекунад. Ин амал метавонад шуморо аз сомона хориҷ кунад ва сабадҳои харидории шуморо холӣ намояд.
- «%1$s» кӯшиш мекунад, ки ҳамаи дархостҳои кукиҳоро дар сомонаҳои дастгиришаванда ба таври худкор рад кунад.
-
Фаъол созед, ва «%1$s» кӯшиш мекунад, ки ҳамаи баннерҳои кукиро дар ин сомона ба таври худкор рад кунад.
-
- Ба «%1$s» иҷозат медиҳед, ки баннерҳои кукиро рад кунад?
-
- «%1$s» метавонад бисёр дархостҳои баннерҳои кукиро ба таври худкор рад кунад.
-
- Ҳоло не
-
- Шумо бояд камтар дархостҳои кукиҳоро бинед
-
-
- Иҷозат додан
«%1$s» дар ҳоли ҳозир барои шумо кукиҳоро рад кард
@@ -717,6 +695,8 @@
Хатбаракҳо
Воридшавиҳо
+
+ Ниҳонвожаҳо
Варақаҳои кушодашуда
@@ -744,6 +724,8 @@
Кортҳои кредитӣ
+
+ Тарзҳои пардохт
Нишониҳо
@@ -1285,8 +1267,6 @@
Нодида гузарондан
- Чоп ғайриимкон аст
-
Ин саҳифа чоп карда намешавад
Чоп кардан
@@ -1696,8 +1676,12 @@
Воридшавиҳо ва ниҳонвожаҳо
+
+ Ниҳонвожаҳо
Нигоҳ доштани воридшавиҳо ва ниҳонвожаҳо
+
+ Нигоҳ доштани ниҳонвожаҳо
Бо пешниҳоди нигоҳдорӣ
@@ -1714,26 +1698,45 @@
Илова кардани воридшавӣ
+
+ Илова кардани ниҳонвожа
+
Воридшавиҳои ҳамоҳангшуда
+
+ Ҳамоҳанг кардани ниҳонвожаҳо
Ҳамоҳанг кардани воридшавиҳо байни дастгоҳҳо
+
+ Ҳамоҳанг кардани ниҳонвожаҳо байни дастгоҳҳо
Воридшавиҳои нигоҳдошташуда
+
+ Ниҳонвожаҳои нигоҳдошташуда
Воридшавиҳое, ки шумо дар %s нигоҳ медоред ё ҳамоҳанг мекунед, дар ин ҷо нишон дода мешаванд.
+
+ Ниҳонвожаҳоеро, ки шумо нигоҳ медоред ё бо «%s» ҳамоҳанг месозед, дар ин рӯйхат нишон дода мешаванд. Ҳамаи ниҳонвожаҳое, ки шумо нигоҳ медоред, рамзгузорӣ карда мешаванд.
Маълумоти бештар дар бораи ҳамоҳангсозӣ
+
+ Маълумоти бештар дар бораи ҳамоҳангсозӣ
Истисноҳо
Воридшавиҳо ва ниҳонвожаҳое, ки нигоҳ дошта нашудаанд, дар ин ҷо нишон дошта мешаванд.
+
+ «%s» барои сомонаҳое, ки дар ин рӯйхат нишон дода шудаанд, ниҳонвожаҳоро нигоҳ намедорад.
Воридшавиҳо ва ниҳонвожаҳо барои сомонаҳои зерин нигоҳ дошта намешаванд.
+
+ «%s» барои сомонаҳои зерин ниҳонвожаҳоро нигоҳ намедорад.
Нест кардани ҳамаи истисноҳо
Ҷустуҷӯи воридшавиҳо
+
+ Ҷустуҷӯи ниҳонвожаҳо
Сомона
@@ -1762,8 +1765,12 @@
Пинҳон кардани ниҳонвожа
Барои дидани воридшавиҳои нигоҳдошташуда, қулфро кушоед
+
+ Барои дидани ниҳонвожаҳои нигоҳдошташуда, қулфро кушоед
Воридшавиҳо ва ниҳонвожаҳои худро муҳофизат намоед
+
+ Ниҳонвожаҳои нигоҳдоштаро муҳофизат намоед
Барои муҳофизат кардани воридшавиҳо ва ниҳонвожаҳои худ аз дастрасии озод, агар касе дигар аз дастгоҳи шумо истифода барад, шаклвораи қулфи экран, рамзи PIN ё ниҳонвожаеро барои дастгоҳи худ танзим намоед.
@@ -1792,8 +1799,12 @@
Нишониҳо
Кортҳои кредитӣ
+
+ Тарзҳои пардохт
Нигоҳ доштан ва ба таври худкор пур кардани кортҳо
+
+ Нигоҳ доштан ва пур кардани тарзҳои пардохт
Маълумот рамзгузорӣ карда шуд
@@ -1803,14 +1814,20 @@
Илова кардани корти кредитӣ
+
+ Илова кардани корт
Идора кардани кортҳои нигоҳдошташуда
+
+ Идоракунии кортҳо
Илова кардани нишонӣ
Идоракунии нишониҳо
Нигоҳ доштан ва ба таври худкор пур кардани нишониҳо
+
+ Нигоҳ доштан ва пур кардани нишониҳо
Илова кардани маълумот монанди рақамҳо, нишониҳои почтаи электронӣ ва бурдарасонӣ
@@ -1835,6 +1852,8 @@
Нест кардани корт
Шумо мутмаин ҳастед, ки мехоҳед ин корти кредитиро нест намоед?
+
+ Кортро нест мекунед?
Нест кардан
@@ -1850,8 +1869,12 @@
Лутфан, рақами корти кредитии дурустро ворид намоед
+
+ Рақами корти дурустро ворид намоед
Лутфан, ин майдонро пур кунед
+
+ Номеро ворид намоед
Барои дидани кортҳои нигоҳдошташуда, қулфро кушоед
@@ -1904,6 +1927,8 @@
Шумо мутмаин ҳастед, ки мехоҳед ин нишониро нест намоед?
+
+ Ин нишониро нест мекунед?
Нест кардан
@@ -2001,12 +2026,16 @@
Таҳрир кардан
Шумо мутмаин ҳастед, ки мехоҳед ин воридшавиро нест намоед?
+
+ Шумо мутмаин ҳастед, ки мехоҳед ин ниҳонвожаро нест намоед?
Нест кардан
Бекор кардан
Имконоти воридшавӣ
+
+ Инконоти ниҳонвожа
Майдони матни таҳриршаванда барои нишонии сомонаи воридшавӣ.
@@ -2015,17 +2044,29 @@
Майдони матни таҳриршаванда барои ниҳонвожаи воридшавӣ.
Нигоҳ доштани тағйирот барои воридшавӣ
+
+ Тағийротро нигоҳ медорад.
Таҳрир кардан
+
+ Таҳрир кардани ниҳонвожа
Илова кардани воридшавии нав
+
+ Илова кардани ниҳонвожа
Ниҳонвожа лозим аст
+
+ Ниҳонвожаеро ворид намоед
Номи корбар лозим аст
+
+ Номи корбареро ворид намоед
Номи сервер лозим аст
+
+ Нишонии сомонаеро ворид намоед
Ҷустуҷӯи овозӣ
@@ -2122,6 +2163,9 @@
Ҷустуҷӯ дар «%s»
+
+ Гузоштан ба браузери пешфарзи худ
+
Пайвандҳоеро, танзим кунед, то ки онҳо аз сомонаҳо, почтаи электронӣ ва паёмҳо дар браузери «Firefox» ба таври худкор кушода шаванд.
@@ -2195,8 +2239,6 @@
Нуқтаҳои асосӣ аз тақризҳои «%s» ба хулоса омаданд, ки дар давоми 80 рӯзи охир ҷамъ карда шудаанд ва онҳо ба умеди мо боэътимод мебошанд.]]>
Маълумоти бештар дар бораи «%s».
-
- чӣ тавр «%s» аз ҷониби «Mozilla» сифати тақризҳоро муайян мекунад
чӣ тавр «%s» сифати тақризҳоро муайян мекунад
@@ -2381,6 +2423,8 @@
Дар ҳоли тарҷума қарор дорад
+
+ Забонеро интихоб кунед
Ҳангоми тарҷума мушкилие ба миён омад. Лутфан, аз нав кӯшиш кунед.
@@ -2402,6 +2446,10 @@
%1$s ҳеҷ вақт тарҷума карда нашавад
Ин сомона ҳеҷ гоҳ тарҷума карда нашавад
+
+ Ҳамаи танзимоти дигарро иваз мекунад
+
+ Пешниҳодҳоро барои тарҷума иваз мекунад
Танзимоти сомона
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index f9a9ad5c7..152ab7fc3 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -210,6 +210,8 @@
ซิงค์ใหม่
ค้นหาในหน้า
+
+ แปลหน้า
บันทึกไปยังชุดสะสม
@@ -239,6 +241,7 @@
ปรับแต่งหน้าแรก
+
หน้าแรก
@@ -246,6 +249,7 @@
ล้างประวัติการเรียกดู
+
ภาษาที่เลือก
@@ -257,8 +261,6 @@
สแกน
-
- เครื่องมือค้นหา
การตั้งค่าเครื่องมือค้นหา
@@ -314,23 +316,28 @@
- การแจ้งเตือนช่วยให้คุณทำสิ่งต่างๆ ได้มากขึ้นด้วย %s
+ การแจ้งเตือนช่วยให้คุณทำสิ่งต่างๆ ได้มากขึ้นด้วย %s
- ซิงค์แท็บของคุณระหว่างอุปกรณ์ต่างๆ จัดการการดาวน์โหลด รับคำแนะนำเกี่ยวกับการใช้ประโยชน์สูงสุดจากการปกป้องความเป็นส่วนตัวของ %s และอื่นๆ
+ ซิงค์แท็บของคุณระหว่างอุปกรณ์ต่างๆ จัดการการดาวน์โหลด รับคำแนะนำเกี่ยวกับการใช้ประโยชน์สูงสุดจากการปกป้องความเป็นส่วนตัวของ %s และอื่นๆ
- ดำเนินการต่อ
+ ดำเนินการต่อ
- ไม่ใช่ตอนนี้
+ ไม่ใช่ตอนนี้
+
+ ประกาศความเป็นส่วนตัวของ Firefox
+
เรารักที่จะดูแลคุณให้ปลอดภัย
- เบราว์เซอร์ที่ได้รับการสนับสนุนจากองค์กรไม่แสวงหาผลกำไรของเราช่วยหยุดบริษัทต่าง ๆ ไม่ให้แอบติดตามคุณทางเว็บได้\n\nเรียนรู้เพิ่มเติมในประกาศความเป็นส่วนตัวของเรา
+ เบราว์เซอร์ที่สนับสนุนโดยองค์กรไม่แสวงหาผลกำไรของเราจะช่วยหยุดบริษัทต่างๆ ไม่ให้แอบติดตามคุณทางเว็บได้
+
+ เบราว์เซอร์ที่ได้รับการสนับสนุนจากองค์กรไม่แสวงหาผลกำไรของเราช่วยหยุดบริษัทต่าง ๆ ไม่ให้แอบติดตามคุณทางเว็บได้\n\nเรียนรู้เพิ่มเติมในประกาศความเป็นส่วนตัวของเรา
- ประกาศความเป็นส่วนตัว
+ ประกาศความเป็นส่วนตัว
ตั้งเป็นเบราว์เซอร์เริ่มต้น
@@ -434,21 +441,11 @@
โหมด HTTPS-Only
-
- การลดคุกกี้แบนเนอร์
ตัวปิดกั้นแบนเนอร์คุกกี้
ตัวปิดกั้นแบนเนอร์คุกกี้ในการเรียกดูแบบส่วนตัว
-
- ลดคุกกี้แบนเนอร์
-
- ปิด
-
- เปิด
-
-
- %1$s จะพยายามปฏิเสธคำขอคุกกี้บนแบนเนอร์คุกกี้โดยอัตโนมัติ
+
ปิดสำหรับไซต์นี้
@@ -467,36 +464,16 @@
ไม่รองรับไซต์ในขณะนี้
- ต้องการเปิดการลดแบนเนอร์คุกกี้สำหรับ %1$s หรือไม่?
-
ต้องการเปิดตัวปิดกั้นแบนเนอร์คุกกี้สำหรับ %1$s หรือไม่?
- ต้องการปิดการลดแบนเนอร์คุกกี้สำหรับ %1$s หรือไม่?
-
ต้องการปิดตัวปิดกั้นแบนเนอร์คุกกี้สำหรับ %1$s หรือไม่?
%1$s ไม่สามารถปฏิเสธคำขอคุกกี้โดยอัตโนมัติบนไซต์นี้ คุณสามารถส่งคำขอให้รองรับไซต์นี้ในอนาคตได้
-
- %1$s จะล้างคุกกี้ของไซต์นี้และรีเฟรชหน้า การล้างคุกกี้ทั้งหมดอาจนำคุณออกจากระบบหรือล้างรถเข็นช็อปปิ้ง
หลังจากปิดแล้ว %1$s จะล้างคุกกี้และโหลดไซต์นี้ใหม่ การกระทำนี้อาจนำคุณลงชื่อออกหรือล้างรถเข็นช็อปปิ้ง
- %1$s จะพยายามปฏิเสธคำขอคุกกี้ทั้งหมดบนไซต์ที่รองรับโดยอัตโนมัติ
-
หลังจากเปิดแล้ว %1$s จะพยายามปฏิเสธแบนเนอร์คุกกี้ทั้งหมดบนไซต์นี้โดยอัตโนมัติ
-
- อนุญาตให้ %1$s ปฏิเสธแบนเนอร์คุกกี้หรือไม่?
-
- %1$s สามารถปฏิเสธคำขอคุกกี้จำนวนมากได้โดยอัตโนมัติ
-
- ไม่ใช่ตอนนี้
-
-
- คุณจะเห็นคำขอคุกกี้น้อยลง
-
-
- อนุญาต
%1$s เพิ่งปฏิเสธคุกกี้สำหรับคุณ
@@ -716,6 +693,8 @@
ที่คั่นหน้า
การเข้าสู่ระบบ
+
+ รหัสผ่าน
แท็บที่เปิดอยู่
@@ -742,6 +721,8 @@
บัตรเครดิต
+
+ วิธีการชำระเงิน
ที่อยู่
@@ -1278,8 +1259,6 @@
ปิด
- ไม่สามารถพิมพ์
-
ไม่สามารถพิมพ์หน้านี้
พิมพ์
@@ -1323,6 +1302,12 @@
ปิดแท็บส่วนตัว
+
+
+ ปิดแท็บส่วนตัว?
+
+ แตะหรือปัดการแจ้งเตือนนี้เพื่อปิดแท็บส่วนตัว
+
การตลาด
@@ -1678,9 +1663,13 @@
การเข้าสู่ระบบและรหัสผ่าน
+
+ รหัสผ่าน
บันทึกการเข้าสู่ระบบและรหัสผ่าน
+
+ บันทึกรหัสผ่าน
ถามเพื่อบันทึก
@@ -1698,16 +1687,29 @@
เพิ่มการเข้าสู่ระบบ
+
+ เพิ่มรหัสผ่าน
+
ซิงค์การเข้าสู่ระบบ
+
+ ซิงค์รหัสผ่าน
ซิงค์การเข้าสู่ระบบระหว่างอุปกรณ์
+
+ ซิงค์รหัสผ่านระหว่างอุปกรณ์
การเข้าสู่ระบบที่บันทึกไว้
+
+ รหัสผ่านที่บันทึกไว้
การเข้าสู่ระบบที่คุณบันทึกหรือซิงค์กับ %s จะปรากฏที่นี่
+
+ รหัสผ่านที่คุณบันทึกหรือซิงค์กับ %s จะแสดงอยู่ที่นี่ รหัสผ่านทั้งหมดที่คุณบันทึกจะถูกเข้ารหัสไว้
เรียนรู้เพิ่มเติมเกี่ยวกับ Sync
+
+ เรียนรู้เพิ่มเติมเกี่ยวกับซิงค์
ข้อยกเว้น
@@ -1718,6 +1720,8 @@
ลบข้อยกเว้นทั้งหมด
ค้นหาการเข้าสู่ระบบ
+
+ ค้นหารหัสผ่าน
ไซต์
@@ -1746,6 +1750,8 @@
ซ่อนรหัสผ่าน
ปลดล็อกเพื่อดูการเข้าสู่ระบบที่บันทึกไว้ของคุณ
+
+ ปลดล็อกเพื่อดูรหัสผ่านที่บันทึกไว้ของคุณ
รักษาความปลอดภัยการเข้าสู่ระบบและรหัสผ่านของคุณ
@@ -1776,8 +1782,12 @@
ที่อยู่
บัตรเครดิต
+
+ วิธีการชำระเงิน
บันทึกและเติมข้อมูลบัตรอัตโนมัติ
+
+ บันทึกและเติมวิธีการชำระเงิน
ข้อมูลถูกเข้ารหัส
@@ -1787,8 +1797,12 @@
เพิ่มบัตรเครดิต
+
+ เพิ่มบัตร
จัดการบัตรที่บันทึกไว้
+
+ จัดการบัตร
เพิ่มที่อยู่
@@ -1796,9 +1810,14 @@
บันทึกและป้อนที่อยู่อัตโนมัติ
+
+ บันทึกและเติมที่อยู่อัตโนมัติ
รวมข้อมูลเช่นหมายเลข อีเมล และที่อยู่ในการจัดส่ง
+
+ รวมหมายเลขโทรศัพท์และที่อยู่อีเมล
+
เพิ่มบัตร
@@ -1819,6 +1838,8 @@
ลบบัตร
คุณแน่ใจหรือไม่ว่าต้องการลบบัตรเครดิตนี้?
+
+ ลบบัตร?
ลบ
@@ -1833,8 +1854,12 @@
โปรดป้อนหมายเลขบัตรเครดิตที่ถูกต้อง
+
+ ใส่หมายเลขบัตรที่ถูกต้อง
โปรดกรอกช่องนี้
+
+ เพิ่มชื่อ
ปลดล็อกเพื่อดูบัตรเครดิตที่บันทึกไว้ของคุณ
@@ -1999,16 +2024,26 @@
ช่องข้อความที่แก้ไขได้สำหรับรหัสผ่านของการเข้าสู่ระบบ
บันทึกการเปลี่ยนแปลงเพื่อเข้าสู่ระบบ
+
+ บันทึกการเปลี่ยนแปลง
แก้ไข
+
+ แก้ไขรหัสผ่าน
เพิ่มการเข้าสู่ระบบใหม่
+
+ เพิ่มรหัสผ่าน
ต้องการรหัสผ่าน
+
+ ใส่รหัสผ่าน
ต้องการชื่อผู้ใช้
ต้องการชื่อโฮสต์
+
+ ป้อนที่อยู่เว็บ
ค้นหาด้วยเสียง
@@ -2178,8 +2213,6 @@
ไฮไลต์มาจาก %s บทวิจารณ์ภายใน 80 วันที่ผ่านมา ซึ่งเราเชื่อว่าน่าเชื่อถือ]]>
เรียนรู้เพิ่มเติมเกี่ยวกับ %s
-
- วิธีที่ %s โดย Mozilla พิจารณาคุณภาพบทวิจารณ์
วิธีที่ %s พิจารณาคุณภาพบทวิจารณ์
@@ -2252,20 +2285,34 @@
หากต้องการทราบว่าบทวิจารณ์ของผลิตภัณฑ์นี้เชื่อถือได้หรือไม่ ให้ตรวจสอบคุณภาพบทวิจารณ์ โดยจะใช้เวลาเพียงประมาณ 60 วินาที
ตรวจสอบคุณภาพบทวิจารณ์
+
+ ลองใช้คำแนะนำที่เชื่อถือได้ของเราเกี่ยวกับบทวิจารณ์ผลิตภัณฑ์
+
+ ดูว่าบทวิจารณ์ผลิตภัณฑ์น่าเชื่อถือแค่ไหนใน %1$s ก่อนตัดสินใจซื้อ ตัวตรวจสอบบทวิจารณ์ ซึ่งเป็นคุณลักษณะทดลองจาก %2$s ถูกบรรจุไว้ภายในตัวเบราว์เซอร์โดยตรง ซึ่งสามารถใช้ใน %3$s และ %4$s ได้ด้วย
+
+ ดูว่าบทวิจารณ์ผลิตภัณฑ์น่าเชื่อถือแค่ไหนใน %1$s ก่อนตัดสินใจซื้อ ตัวตรวจสอบบทวิจารณ์ ซึ่งเป็นคุณลักษณะทดลองจาก %2$s ถูกบรรจุไว้ภายในตัวเบราว์เซอร์โดยตรง
+
+ ด้วยการใช้พลังของ %1$s โดย Mozilla เราช่วยให้คุณหลีกเลี่ยงบทวิจารณ์ที่มีอคติและไม่น่าไว้วางใจได้ โมเดล AI ของเราจะปรับปรุงอยู่เสมอเพื่อปกป้องคุณในขณะที่คุณซื้อของ %2$s
เรียนรู้เพิ่มเติม
+
+ การเลือก “ใช่ ลองใช้เลย” ถือว่าคุณยอมรับ%2$sและ%3$sของ %1$s โดย Mozilla
+
+ การเลือก “ใช่ ลองใช้เลย” ถือว่าคุณยอมรับข้อตกลงต่อไปนี้จาก %1$s:
- นโยบายความเป็นส่วนตัว
+ นโยบายความเป็นส่วนตัว
- นโยบายความเป็นส่วนตัว
+ นโยบายความเป็นส่วนตัว
- เงื่อนไขการใช้งาน
+ เงื่อนไขการใช้งาน
- เงื่อนไขการใช้งาน
+ เงื่อนไขการใช้งาน
ใช่ลองดู
ไม่ใช่ตอนนี้
+
+ ค้นพบว่าคุณสามารถเชื่อถือบทวิจารณ์ของผลิตภัณฑ์นี้ได้หรือไม่ ก่อนที่คุณจะตัดสินใจซื้อ
ลองตัวตรวจสอบบทวิจารณ์
@@ -2314,23 +2361,109 @@
เปิดลิงก์เพื่อเรียนรู้เพิ่มเติม
+
+ %s หัวเรื่อง
+
+ ลิงก์
+
+ ลิงค์ที่มีอยู่
+
+
+
+ แปลหน้านี้?
+
+ ลองใช้การแปลแบบส่วนตัวใน %1$s
+
+ เพื่อความเป็นส่วนตัวของคุณ ข้อมูลการแปลจะไม่ออกไปนอกอุปกรณ์ของคุณ ภาษาและการปรับปรุงใหม่ๆ จะมาในเร็วๆ นี้! %1$s
+
+ เรียนรู้เพิ่มเติม
+
+ แปลจาก
+
+ แปลเป็น
+
+ ไม่ใช่ตอนนี้
+
+ เสร็จสิ้น
+
+ แปล
+
+ ลองอีกครั้ง
+
+ กำลังแปล
+
+ อยู่ระหว่างการแปล
+
+ เกิดปัญหาในการแปล โปรดลองอีกครั้ง
+
+
+ ไม่สามารถโหลดภาษาได้ โปรดตรวจสอบการเชื่อมต่ออินเทอร์เน็ตของคุณแล้วลองอีกครั้ง
+
+ ขออภัย เรายังไม่รองรับภาษา%1$s
+
+ เรียนรู้เพิ่มเติม
+
+
+
+ ตัวเลือกการแปล
+
+ เสนอให้แปลอยู่เสมอ
+
+ แปล %1$s เสมอ
+
+ ไม่ต้องแปล %1$s เลย
+
+ ไม่ต้องแปลไซต์นี้เลย
+
+ การตั้งค่าการแปล
+
+ เกี่ยวกับการแปลใน %1$s
+
+
+
+ การแปล
+
+ เสนอให้แปลเมื่อเป็นไปได้
+
+ ดาวน์โหลดภาษาในโหมดประหยัดข้อมูลเสมอ
+
+ ค่ากำหนดการแปล
+
+ การแปลอัตโนมัติ
+
+ ไม่ต้องแปลไซต์เหล่านี้
+
+ ดาวน์โหลดภาษา
+
การแปลอัตโนมัติ
+
+ เลือกภาษาที่จะจัดการการกำหนดลักษณะ ”แปลเสมอ“ และ ”ไม่แปลเสมอ“
+
เสนอให้แปล (ค่าเริ่มต้น)
+
+ %1$s จะเสนอให้แปลไซต์เป็นภาษานี้
แปลเสมอ
+
+ %1$s จะแปลภาษานี้โดยอัตโนมัติเมื่อโหลดหน้าเว็บ
ไม่ต้องแปล
+
+ %1$s จะไม่เสนอให้แปลไซต์เป็นภาษานี้เลย
+
ไม่ต้องแปลไซต์เหล่านี้
+
+ หากต้องการเพิ่มไซต์ใหม่: ให้ไปที่ไซต์นั้นแล้วเลือก “ไม่ต้องแปลไซต์นี้เลย” จากเมนูการแปล
เอา %1$s ออก
@@ -2345,12 +2478,18 @@
ดาวน์โหลดภาษา
+
+ ดาวน์โหลดภาษาแบบสมบูรณ์เพื่อให้แปลได้เร็วขึ้นและแปลแบบออฟไลน์ได้ %1$s
เรียนรู้เพิ่ม
ภาษาที่มี
จำเป็น
+
+ %1$s (%2$s)
ดาวน์โหลดภาษา
@@ -2364,4 +2503,64 @@
เลือกแล้ว
-
+
+ ลบ %1$s (%2$s) หรือไม่?
+
+ หากคุณลบภาษานี้ %1$s จะดาวน์โหลดภาษาบางส่วนลงในแคชของคุณในขณะที่คุณแปล
+
+ ลบทุกภาษา (%1$s) หรือไม่?
+
+ หากคุณลบทุกภาษา %1$s จะดาวน์โหลดภาษาบางส่วนลงในแคชของคุณในขณะที่คุณแปล
+
+ ลบ
+
+ ยกเลิก
+
+
+ ดาวน์โหลดขณะอยู่ในโหมดประหยัดข้อมูล (%1$s) หรือไม่?
+
+ เราดาวน์โหลดภาษาบางส่วนลงในแคชของคุณเพื่อให้การแปลเป็นส่วนตัว
+
+ ดาวน์โหลดในโหมดประหยัดข้อมูลเสมอ
+
+ ดาวน์โหลด
+
+ ดาวน์โหลดและแปล
+
+ ยกเลิก
+
+
+
+ เครื่องมือดีบัก
+
+ นำทางย้อนกลับ
+
+ เครื่องมือแท็บ
+
+ จำนวนแท็บ
+
+ ใช้งานอยู่
+
+ ไม่มีการใช้งานอยู่
+
+ ส่วนตัว
+
+ รวมทั้งหมด
+
+ เครื่องมือสร้างแท็บ
+
+ จำนวนแท็บที่จะสร้าง
+
+ เพิ่มไปยังแท็บที่ใช้งานอยู่
+
+ เพิ่มไปยังแท็บที่ไม่ได้ใช้งาน
+
+ เพิ่มไปยังแท็บส่วนตัว
+
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 17d9a6662..1784c728d 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -244,6 +244,7 @@
Giriş sayfasını özelleştir
+
Ana ekran
@@ -251,6 +252,9 @@
Gezinti geçmişini temizle
+
+ Sayfayı çevir
+
Seçili dil
@@ -262,8 +266,6 @@
Tara
-
- Arama motoru
Arama motoru ayarları
@@ -319,23 +321,28 @@
- Bildirimler sayesinde %s ile daha fazlasını yapın
+ Bildirimler sayesinde %s ile daha fazlasını yapın
- Sekmelerinizi cihazlar arasında senkronize edin, indirmeleri yönetin, %s tarayıcınızın gizlilik korumasına dair ipuçları alın ve daha fazlasını yapın.
+ Sekmelerinizi cihazlar arasında senkronize edin, indirmeleri yönetin, %s tarayıcınızın gizlilik korumasına dair ipuçları alın ve daha fazlasını yapın.
- Devam et
+ Devam et
- Şimdi değil
+ Şimdi değil
+
+ Firefox gizlilik bildirimi
+
Sizi güvende tutmayı seviyoruz
- Kâr amacı gütmeyen tarayıcımız, şirketlerin sizi web’de gizlice takip etmesini engelliyor.\n\nAyrıntıları gizlilik bildirimimizde bulabilirsiniz.
+ Kâr amacı gütmeyen tarayıcımız, şirketlerin sizi web’de gizlice takip etmesini engelliyor.
+
+ Kâr amacı gütmeyen tarayıcımız, şirketlerin sizi web’de gizlice takip etmesini engelliyor.\n\nAyrıntıları gizlilik bildirimimizde bulabilirsiniz.
- gizlilik bildirimimizde
+ gizlilik bildirimimizde
Varsayılan tarayıcı yap
@@ -439,21 +446,11 @@
Yalnızca HTTPS modu
-
- Çerez bildirimlerini azalt
Çerez bildirimi engelleyici
Gizli gezintide çerez bildirimi engelleyici
-
- Çerez bildirimlerini azalt
-
- Kapalı
-
- Açık
-
-
- %1$s, çerez bildirimlerindeki çerez isteklerini otomatik olarak reddetmeye çalışır.
+
Bu sitede kapalı
@@ -471,35 +468,16 @@
Bu site şu anda desteklenmiyor
- %1$s için çerez bildirimlerini azaltma açılsın mı?
-
%1$s için çerez bildirimlerini engelleme açılsın mı?
- %1$s için çerez bildirimlerini azaltma kapatılsın mı?
-
%1$s için çerez bildirimlerini engelleme kapatılsın mı?
%1$s bu sitedeki çerez isteklerini otomatik olarak reddedemiyor. İleride bu siteyi desteklememiz için istekte bulunabilirsiniz.
-
- %1$s bu sitenin çerezlerini temizleyip sayfayı tazeleyecek. Tüm çerezlerin temizlenmesi oturumunuzu kapatabilir veya alışveriş sepetlerinizi boşaltabilir.
Bunu kapatırsanız %1$s çerezleri temizleyip bu siteyi yeniden yükleyecektir. Bu durumda oturumunuz kapanabilir veya alışveriş sepetleriniz boşalabilir.
- %1$s, desteklenen sitelerdeki tüm çerez isteklerini otomatik olarak reddetmeye çalışır.
-
Açtığınızda %1$s bu sitedeki tüm çerez bildirimlerini otomatik olarak reddetmeye çalışacaktır.
-
- %1$s çerez bildirimlerini reddedebilsin mi?
-
- %1$s birçok çerez bildirimini otomatik olarak reddedebilir.
-
- Şimdi değil
-
- Daha az çerez isteği göreceksiniz
-
-
- İzin ver
%1$s sizin için çerezleri reddetti
@@ -717,6 +695,8 @@
Yer imleri
Hesaplar
+
+ Parolalar
Açık sekmeler
@@ -743,6 +723,8 @@
Kredi kartları
+
+ Ödeme yöntemleri
Adresler
@@ -1283,8 +1265,6 @@
Kapat
- Yazdırılamadı
-
Bu sayfa yazdırılamadı
Yazdır
@@ -1330,6 +1310,10 @@
Gizli sekmeleri kapat
+
+ Gizli sekmeler kapatılsın mı?
+ Gizli sekmeleri kapatmak için bu bildirime dokunun veya bildirimi kaydırın.
+
Pazarlama
@@ -1685,8 +1669,12 @@
Hesaplar ve parolalar
+
+ Parolalar
Kullanıcı adı ve parolaları kaydet
+
+ Parolaları kaydet
Kaydetmeyi sor
@@ -1703,26 +1691,45 @@
Hesap ekle
+
+ Parola ekle
+
Hesapları eşitle
+
+ Parolaları eşitle
Hesapları cihazlar arasında eşitle
+
+ Parolaları cihazlar arasında eşitle
Kayıtlı hesaplar
+
+ Kayıtlı parolalar
Kaydettiğiniz veya %s ile eşitlediğiniz hesaplar burada görünecektir.
+
+ %s tarayıcısına kaydettiğiniz veya eşitlediğiniz parolalar burada listelenecektir. Kaydettiğiniz tüm parolalar şifrelenir.
Sync hakkında bilgi alın.
+
+ Eşitlemeyle ilgili bilgi al
İstisnalar
Kaydedilmeyen hesaplar ve parolalar burada görünecektir.
+
+ %s, burada listelenen sitelerin parolalarını kaydetmeyecektir.
Bu sitelere ait hesaplar ve parolalar kaydedilmeyecektir.
+
+ %s bu sitelerin parolalarını kaydetmeyecektir.
Tüm istisnaları sil
Hesaplarda ara
+
+ Parolalarda ara
Site
@@ -1751,10 +1758,16 @@
Parolayı gizle
Kayıtlı hesaplarınızı görmek için kilidi açın
+
+ Kayıtlı parolalarınızı görmek için kilidi açın
Hesaplarınızı güvence altına alın
+
+ Kayıtlı parolalarınızı güvence altına alın
Cihazınız başka birinin eline geçerse kayıtlı hesaplarına erişilmesini önlemek için cihaz kilidi deseni, PIN veya parola ayarlayın.
+
+ Cihazınız başka birinin eline geçerse kayıtlı parolalarınıza erişilmesini önlemek için cihaz kilidi deseni, PIN veya parola ayarlayın.
Daha sonra
@@ -1774,6 +1787,9 @@
Hesapları sırala menüsü
+
+ Parolaları sırala menüsü
+
Otomatik doldurma
@@ -1781,10 +1797,16 @@
Adresler
Kredi kartları
+
+ Ödeme yöntemleri
Kartları kaydedip otomatik doldur
+
+ Ödeme yöntemlerini kaydet ve doldur
Veriler şifrelenir
+
+ %s kaydettiğiniz tüm ödeme yöntemlerini şifreler
Kartları cihazlar arasında eşitle
@@ -1792,17 +1814,26 @@
Kredi kartı ekle
+
+ Kart ekle
Kayıtlı kartları yönet
+
+ Kartları yönet
Adres ekle
Adresleri yönet
Adresleri kaydedip otomatik doldur
+
+ Adresleri kaydet ve doldur
Numaralar, e-posta ve gönderim adresleri gibi bilgileri dahil et
+
+ Telefon numaraları ve e-posta adresleri de dahildir
+
Kart ekle
@@ -1823,6 +1854,8 @@
Kartı sil
Bu kredi kartını silmek istediğinizden emin misiniz?
+
+ Kart silinsin mi?
Sil
@@ -1838,14 +1871,22 @@
Lütfen geçerli bir kredi kartı numarası girin
+
+ Geçerli bir kart numarası girin
Lütfen bu alanı doldurun
+
+ Adınızı yazın
Kayıtlı kartlarınızı görmek için kilidi açın
Kredi kartlarını güvence altına al
+
+ Kayıtlı ödeme yöntemlerinizi güvence altına alın
Cihazınız başka birinin eline geçerse kayıtlı kartlarınıza erişilmesini önlemek için cihaz kilidi deseni, PIN veya parola ayarlayın.
+
+ Cihazınız başka birinin eline geçerse kayıtlı ödeme yöntemlerinize erişilmesini önlemek için cihaz kilidi deseni, PIN veya parola ayarlayın.
Hemen ayarla
@@ -1856,6 +1897,8 @@
Depolanan kredi kartı bilgilerini kullanmak için kilidi açın
+
+ Kayıtlı ödeme yöntemlerinizi kullanmak için kilidi açın
Adres ekle
@@ -1893,6 +1936,8 @@
Bu adresi silmek istediğinizden emin misiniz?
+
+ Bu adres silinsin mi?
Sil
@@ -1991,30 +2036,52 @@
Düzenle
Bu hesabı silmek istediğinizden emin misiniz?
+
+ Bu parolayı silmek istediğinizden emin misiniz?
Sil
Vazgeç
Hesap seçenekleri
+
+ Parola seçenekleri
Hesabın web adresi için düzenlenebilir metin alanı.
+
+ Web sitesi adresi için düzenlenebilir metin alanı.
Hesabın kullanıcı adı için düzenlenebilir metin alanı.
+
+ Kullanıcı adı için düzenlenebilir metin alanı.
Hesabın parolası için düzenlenebilir metin alanı.
+
+ Parola için düzenlenebilir metin alanı.
Değişiklikleri hesaba kaydet.
+
+ Değişiklikleri kaydet.
Düzenle
+
+ Parola düzenle
Yeni hesap ekle
+
+ Parola ekle
Parola gerekli
+
+ Parolayı girin
Kullanıcı adı gereklidir
+
+ Kullanıcı adını girin
Sunucu gereklidir
+
+ Web adresini girin
Sesle arama
@@ -2110,6 +2177,9 @@
%s araması
+
+ Varsayılan tarayıcınızı değiştirin
+
Web siteleri, e-postalar ve mesajlardaki bağlantılar otomatik olarak Firefox’ta açılsın.
@@ -2183,8 +2253,6 @@
Öne çıkanlar son 80 gün içindeki güvenilir olduğunu düşündüğümüz %s değerlendirmelerinden alınmıştır.]]>
%s hakkında daha fazla bilgi alın.
-
- Mozilla %s değerlendirme kalitesini nasıl belirliyor?
%s değerlendirme kalitesini nasıl belirliyor?
@@ -2371,6 +2439,8 @@
Çeviri devam ediyor
+
+ Dil seçin
Çeviri sırasında bir sorun oluştu. Lütfen yeniden deneyin.
@@ -2391,6 +2461,10 @@
%1$s dilini asla çevirme
Bu siteyi asla çevirme
+
+ Diğer tüm ayarları geçersiz kılar
+
+ Çeviri tekliflerini geçersiz kılar
Çeviri ayarları
@@ -2516,6 +2590,8 @@
Hata ayıklama araçları
+
+ Geri git
Sekme araçları
diff --git a/app/src/main/res/values-ug/strings.xml b/app/src/main/res/values-ug/strings.xml
index 0e1180dc9..d0b0e1fdf 100644
--- a/app/src/main/res/values-ug/strings.xml
+++ b/app/src/main/res/values-ug/strings.xml
@@ -240,6 +240,7 @@
تەھرىرلەش
باش بەتنى خاسلاشتۇر
+
باش ئېكران
@@ -247,6 +248,9 @@
توركۆرگۈ تارىخىنى ئۆچۈر
+
+ بەت تەرجىمىسى
+
تاللانغان تىل
@@ -259,8 +263,6 @@
سايىلەش
-
- ئىزدەش ماتورى
ئىزدەش ماتورى تەڭشىكى
@@ -311,23 +313,28 @@
- ئۇقتۇرۇشلار %s بىلەن تېخىمۇ كۆپ ئىشلارنى قىلىشىڭىزغا ياردەم بېرىدۇ
+ ئۇقتۇرۇشلار %s بىلەن تېخىمۇ كۆپ ئىشلارنى قىلىشىڭىزغا ياردەم بېرىدۇ
- بەتكۈچلىرىڭىزنى ئۈسكۈنىلەر ئارا قەدەمداشلايدۇ، چۈشۈرۈشنى باشقۇرىدۇ، %s نىڭ شەخسىيەت قوغدىشى ۋە باشقا تېخىمۇ كۆپ ئىشلىتىش ھەققىدىكى تەكلىپلەرگە ئېرىشتۈرىدۇ.
+ بەتكۈچلىرىڭىزنى ئۈسكۈنىلەر ئارا قەدەمداشلايدۇ، چۈشۈرۈشنى باشقۇرىدۇ، %s نىڭ شەخسىيەت قوغدىشى ۋە باشقا تېخىمۇ كۆپ ئىشلىتىش ھەققىدىكى تەكلىپلەرگە ئېرىشتۈرىدۇ.
- داۋاملاشتۇر
+ داۋاملاشتۇر
- ھازىر ئەمەس
+ ھازىر ئەمەس
+
+ Firefox شەخسىيەت ئۇقتۇرۇشى
+
بىخەتەرلىكىڭىزنى ساقلاشنى ياخشى كۆرىمىز
- پايدا تاپمايدىغان ئورگان قوللايدىغان توركۆرگۈمىز شىركەتلەرنىڭ سىزنى مەخپىي ھالدا توردىن ئىزلىشىنى توختىتىشىغا ياردەم بېرىدۇ.\n\nشەخسىيەت ئۇقتۇرۇشى ھەققىدىكى تەپسىلات بىلدۈرگۈسى.
+ پايدا تاپمايدىغان توركۆرگۈمىز شىركەتلەرنىڭ سىزگە تور بېكەتلەردە مەخپىي ھالدا ئەگىشىشىنى توسىدۇ.
+
+ پايدا تاپمايدىغان ئورگان قوللايدىغان توركۆرگۈمىز شىركەتلەرنىڭ سىزنى مەخپىي ھالدا توردىن ئىزلىشىنى توختىتىشىغا ياردەم بېرىدۇ.\n\nشەخسىيەت ئۇقتۇرۇشى ھەققىدىكى تەپسىلات بىلدۈرگۈسى.
- شەخسىيەت ئۇقتۇرۇشى
+ شەخسىيەت ئۇقتۇرۇشى
كۆڭۈلدىكى توركۆرگۈ قىلىپ تەڭشە
@@ -430,20 +437,10 @@
ساپ HTTPS ھالىتى
-
- cookie لوزۇنكىسىنى ئازايتىش
cookie لوزۇنكىسى توسقۇچ
شەخسىي تور زىيارەتتىكى cookie لوزۇنكىسىنى توسقۇچ
-
- cookie لوزۇنكىسىدىن ساقلان
-
- تاقاق
-
- ئوچۇق
-
- %1$s ئۆزلۈكىدىن cookie لوزۇنكىسىنىڭ cookie ئىلتىماسىنى رەت قىلىشنى سىنايدۇ.
بۇ تور بېكەتكە تاقاق
@@ -462,33 +459,15 @@
بېكەت ھازىر قوللىمايدۇ
- %1$s غا cookie لوزۇنكىسى ئازايتىشنى ئاچامدۇ؟
-
%1$s غا cookie لوزۇنكىسى توسقۇچنى ئاچامدۇ؟
- %1$s غا cookie لوزۇنكىسى ئازايتىشنى تاقامدۇ؟
-
%1$s غا cookie لوزۇنكىسى توسقۇچنى تاقامدۇ؟
%1$s بۇ تور بېكەتنىڭ ساقلانما ئىلتىماسىنى ئۆزلۈكىدىن رەت قىلالمايدۇ. كەلگۈسىدە بۇ تور بېكەتنى قوللاش ئىلتىماسىنى ئەۋەتسىڭىز بولىدۇ.
- %1$s بۇ تور بېكەتنىڭ ساقلانمىسىنى تازىلاپ بەتنى يېڭىلايدۇ. بارلىق ساقلانمىلار تازىلانسا سىز تىزىمدىن چىقىپ كېتىشىڭىز ياكى مال ھارۋىسى بوشىتىلىشى مۇمكىن.
-
تاقالسا ۋە %1$s ساقلانمىنى تازىلاپ بۇ تور بېكەتنى قايتا يۈكلەيدۇ. سىز تىزىمدىن چىقىپ كېتىشىڭىز ياكى مال ھارۋىسى بوشىتىلىشى مۇمكىن.
- %1$s قوللايدىغان تور بېكەتلەرنىڭ بارلىق ساقلانما تەلەپلىرىنى ئاپتوماتىك رەت قىلىشنى سىنايدۇ.
-
ئېچىلسا، %1$s بۇ تور بېكەتتىكى بارلىق ساقلانما لوزۇنكىسىنى ئۆزلۈكىدىن رەت قىلىشنى سىنايدۇ.
-
- %1$s نىڭ cookie لوزۇنكىسىنى رەت قىلىشىغا يول قويامدۇ؟
-
- %1$s نۇرغۇن cookie لوزۇنكا تەلىپىنى ئاپتوماتىك رەت قىلالايدۇ.
-
- ھازىر ئەمەس
-
- سىز كۆرىدىغان cookie ئىلتىماسلىرى ئازىيىدۇ
-
- يول قوي
%1$s سىز ئۈچۈن ساقلانمىنى رەت قىلدى
@@ -707,6 +686,8 @@
خەتكۈچ
كىرىش
+
+ ئىم
بەتكۈچ ئاچ
@@ -731,6 +712,8 @@
%2$s %3$s دىكى %1$s
ئىناۋەتلىك كارتا
+
+ چىقىم قىلىش ئۇسۇلى
ئادرېس
@@ -1271,8 +1254,6 @@
بولدىلا
- باسالمىدى
-
بۇ بەتنى باسالمايدۇ
باس
@@ -1673,8 +1654,12 @@
كىرىش ۋە ئىم
+
+ ئىم
كىرىش ۋە ئىم ساقلا
+
+ ئىم ساقلا
ساقلاشنى سورا
@@ -1690,26 +1675,45 @@
كىرىشنى قوش
+
+ ئىم قوش
+
كىرىشنى قەدەمداشلا
+
+ ئىم قەدەمداشلا
ئۈسكۈنىلەر ئارا قەدەمداشلا
+
+ ئىمنى ئۈسكۈنىلەر ئارا قەدەمداشلايدۇ
ساقلانغان كىرىش
+
+ ساقلانغان ئىم
سىز ساقلىغان كىرىش ياكى %s بىلەن بولغان قەدەمداش بۇ جايدا كۆرۈنىدۇ.
+
+ سىز ساقلىغان ياكى %s غا قەدەمداشلىغان ئىم بۇ يەردە كۆرسىتىلىدۇ. سىز ساقلىغان بارلىق ئىم مەخپىيلەشتۈرۈلگەن.
قەدەمداش ھەققىدىكى تەپسىلاتلار.
+
+ قەدەمداش ھەققىدىكى تەپسىلاتلار
مۇستەسنا
ساقلانمىغان كىرىش ۋە ئىم بۇ يەردە كۆرسىتىلىدۇ.
+
+ بۇ جايدا كۆرسىتىلگەن تور بېكەتلەر ئۈچۈن %s ئىم ساقلىمايدۇ.
بۇ تور بېكەتلەرنىڭ كىرىش ۋە ئىم ئۇچۇرلىرى ساقلانمايدۇ.
+
+ بۇ تور بېكەتلەر ئۈچۈن %s ئىم ساقلىمايدۇ.
ھەممە مۇستەسنالارنى ئۆچۈرىدۇ
كىرىش خاتىرىسىنى ئىزدە
+
+ پارول ئىزدەش
بېكەت
@@ -1739,10 +1743,16 @@
ساقلانغان كىرىشلىرىڭىزنى كۆرۈش ئۈچۈن قۇلۇپ ئېچىڭ
+
+ ساقلانغان پارولىڭىزنى كۆرۈش ئۈچۈن قۇلۇپ ئېچىڭ
كىرىش ۋە ئىمنى قوغدايدۇ
+
+ ساقلانغان ئىملىرىڭىز شىفىرلىنىدۇ
ئۈسكۈنە قۇلۇپلاش ئەندىزىسى، PIN ياكى ئىم ئورنىتىشنى تەڭشىسىڭىز، ئۈسكۈنىڭىز باشقىلارنىڭ قولىدا بولسىمۇ ساقلانغان تىزىمغا كىرىش ئۇچۇرى ۋە ئىمنى زىيارەت قىلالمايدۇ.
+
+ ئۈسكۈنە قۇلۇپلاش ئەندىزىسى، PIN ياكى ئىم ئورنىتىشنى تەڭشىسىڭىز، ئۈسكۈنىڭىز باشقىلارنىڭ قولىدا بولسىمۇ ساقلانغان ئىملىرىڭىزنى زىيارەت قىلالمايدۇ.
كېيىنچە
@@ -1762,6 +1772,9 @@
كىرىش تىزىملىكىنى تەرتىپلەيدۇ
+
+ ئىم تىزىملىكىنى تەرتىپلە
+
ئاپتوماتىك تولدۇر
@@ -1769,27 +1782,42 @@
ئادرېس
ئىناۋەتلىك كارتا
+
+ چىقىم قىلىش ئۇسۇلى
كارتا ساقلاش ۋە ئاپتوماتىك تولدۇرۇش
+
+ چىقىم قىلىش ئۇسۇلىنى ساقلاپ ۋە تولدۇرىدۇ
سانلىق مەلۇمات شىفىرلانغان
+
+ سىز ساقلىغان بارلىق چىقىم قىلىش ئۇسۇللىرىنى %s شىفىرلايدۇ
كارتىنى ئۈسكۈنىلەر ئارا قەدەمداشلايدۇ
كارتا قەدەمداشلا
ئىناۋەتلىك كارتا قوش
+
+ كارتا قوش
ساقلانغان كارتا باشقۇرۇش
+
+ كارتا باشقۇرۇش
ئادرېس قوش
ئادرېس باشقۇرۇش
ئادرېسلارنى ساقلاش ۋە ئاپتوماتىك تولدۇرۇش
+
+ ئادرېس ساقلاپ تولدۇرىدۇ
سان، ئېلخەت ۋە توشۇش ئادرېسى قاتارلىق ئۇچۇرلارنى ئۆز ئىچىگە ئالىدۇ
+
+ تېلېفون نومۇرى ۋە ئېلخەت ئادرېسىنى ئۆز ئىچىگە ئالىدۇ
+
كارتا قوش
@@ -1810,6 +1838,8 @@
كارتىنى ئۆچۈر
بۇ ئىناۋەتلىك كارتىنى راستىنلا ئۆچۈرەمسىز؟
+
+ كارتىنى ئۆچۈرەمدۇ؟
ئۆچۈر
@@ -1822,15 +1852,23 @@
ساقلانغان كارتا
ئىناۋەتلىك كارتا نومۇرىنى كىرگۈزۈڭ
+
+ ئىناۋەتلىك كارتا نومۇرى كىرگۈزۈلىدۇ
بۇ بۆلەكنى تولدۇرۇڭ
+
+ ئات قوش
ساقلانغان كارتىلىرىڭىزنى كۆرۈش ئۈچۈن قۇلۇپ ئېچىڭ
ئىناۋەتلىك كارتىڭىزنى شىفىرلايدۇ
+
+ ساقلانغان چىقىم قىلىش ئۇسۇللىرىڭىز شىفىرلىنىدۇ
ئۈسكۈنە قۇلۇپلاش ئەندىزىسى، PIN ياكى ئىم ئورنىتىشنى تەڭشىسىڭىز، ئۈسكۈنىڭىز باشقىلارنىڭ قولىدا بولسىمۇ ساقلانغان ئىناۋەتلىك كارتىڭىزنى زىيارەت قىلالمايدۇ.
+
+ ئۈسكۈنە قۇلۇپلاش ئەندىزىسى، PIN ياكى ئىم ئورنىتىشنى تەڭشىسىڭىز، ئۈسكۈنىڭىز باشقىلارنىڭ قولىدا بولسىمۇ ساقلانغان چىقىم قىلىش ئۇسۇلىڭىزنى زىيارەت قىلالمايدۇ.
ھازىر تەڭشە
@@ -1839,6 +1877,8 @@
ئۈسكۈنىڭىزنىڭ قۇلۇپىنى ئېچىڭ
ساقلانغان ئىناۋەتلىك كارتا ئۇچۇرلىرىنى ئىشلىتىش ئۈچۈن قۇلۇپ ئېچىڭ
+
+ ساقلانغان چىقىم قىلىش ئۇسۇلىنى ئىشلىتىش ئۈچۈن قۇلۇپ ئېچىڭ
ئادرېس قوش
@@ -1875,6 +1915,8 @@
ئادرېس ئۆچۈر
بۇ ئادرېسنى راستىنلا ئۆچۈرەمسىز؟
+
+ بۇ ئادرېسنى ئۆچۈرەمدۇ؟
ئۆچۈر
@@ -1973,31 +2015,53 @@
تەھرىر
بۇ كىرىشنى راستىنلا ئۆچۈرەمسىز؟
+
+ بۇ ئىمنى راستىنلا ئۆچۈرەمسىز؟
ئۆچۈر
ۋاز كەچ
كىرىش تاللانمىلىرى
+
+ ئىم تاللانمىسى
كىرىشنىڭ تور ئادرېسىنى تەھرىرلىگىلى بولىدىغان تېكىست بۆلىكى.
+
+ تور بېكەت ئادرېسىنىڭ تەھرىرلىگىلى بولىدىغان تېكىست بۆلىكى.
كىرىشنىڭ ئىشلەتكۈچى ئىسمىنى تەھرىرلىگىلى بولىدىغان تېكىست بۆلىكى.
+
+ ئىشلەتكۈچى ئاتىنىڭ تەھرىرلىگىلى بولىدىغان تېكىست بۆلىكى.
كىرىشنىڭ ئىمىنى تەھرىرلىگىلى بولىدىغان تېكىست بۆلىكى.
+
+ ئىمنىڭ تەھرىرلىگىلى بولىدىغان تېكىست بۆلىكى.
كىرىش ئۆزگەرتىشلىرىنى ساقلايدۇ.
+
+ ئۆزگەرتىشلەرنى ساقلايدۇ.
تەھرىر
+
+ ئىم تەھرىر
يېڭى كىرىش قوش
+
+ ئىم قوش
ئىم زۆرۈر
+
+ ئىم كىرگۈزۈلىدۇ
ئىشلەتكۈچى ئىسمى زۆرۈر
+
+ ئىشلەتكۈچى ئاتى كىرگۈزۈلىدۇ
مۇلازىم ئىسمى زۆرۈر
+
+ تور ئادرېسى كىرگۈزۈلىدۇ
ئاۋازلىق ئىزدەش
@@ -2086,6 +2150,9 @@
%s ئىزدەش
+
+ كۆڭۈلدىكى توركۆرگۈڭىزنى ئالماشتۇرۇڭ
+
تور بېكەت، ئېلخەت ۋە ئۇچۇر ئۇلانمىلىرىنى Firefox تا ئاپتوماتىك ئېچىشقا تەڭشەيدۇ.
@@ -2161,8 +2228,6 @@
يارقىن نۇقتىلار بىز ئىشەنچلىك دەپ قارىغان يېقىنقى 80 كۈن ئىچىدىكى %s باھادىن كەلگەن.]]>
%s ھەققىدىكى تەپسىلاتلار.
-
- Mozilla قانداق قىلىپ %s نىڭ تەكشۈرۈش سۈپىتىنى بەلگىلەيدۇ
%s تەكشۈرۈش سۈپىتىنى قانداق بەلگىلەيدۇ
@@ -2355,6 +2420,8 @@
تەرجىمە قىلىنىۋاتىدۇ
+
+ تىل تاللىنىدۇ
تەرجىمە قىلىشتا مەسىلە كۆرۈلدى. قايتا سىناڭ.
@@ -2375,6 +2442,10 @@
%1$s نى ھەرگىز تەرجىمە قىلمىسۇن
بۇ تور بەتنى تەرجىمە قىلمىسۇن
+
+ باشقا بارلىق تەڭشەكلەرنى قاپلايدۇ
+
+ تەرجىمە تەكلىپىنى قاپلايدۇ
تەرجىمە تەڭشەكلىرى
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 5fdf81adc..b9f1506f0 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -72,7 +72,7 @@
private mode in our new Total Private Browsing mode.
The first parameter is the name of the app defined in app_name (for example: Firefox Nightly)
The second parameter is the clickable link text in felt_privacy_info_card_subtitle_link_text -->
- %1$s видаляє ваші куки, історію та дані сайтів, коли ви закриваєте всі приватні вкладки. %2$s
+ %1$s видаляє ваші файли cookie, історію і дані сайтів, коли ви закриваєте всі приватні вкладки. %2$s
@@ -98,11 +98,11 @@
Наша найпотужніша функція приватності ізолює елементи стеження між сайтами.
- Докладніше про повний захист кук
+ Докладніше про функцію Total Cookie Protection
- Торкніться тут, щоб розпочати новий приватний сеанс. Видалить історію, куки — усе.
+ Торкніться тут, щоб розпочати новий приватний сеанс. Видаліть історію, файли cookie – усе.
@@ -244,6 +244,7 @@
Налаштувати домівку
+
Домашній екран
@@ -251,6 +252,9 @@
Стерти історію перегляду
+
+ Перекласти сторінку
+
Обрана мова
@@ -262,8 +266,6 @@
Сканувати
-
- Засіб пошуку
Налаштування пошукових засобів
@@ -319,23 +321,28 @@
- Сповіщення допомагають вам ефективніше взаємодіяти з %s
+ Сповіщення допомагають вам ефективніше взаємодіяти з %s
- Синхронізуйте свої вкладки між пристроями, керуйте завантаженнями, отримуйте поради про захист приватності в %s, а також інші можливості.
+ Синхронізуйте свої вкладки між пристроями, керуйте завантаженнями, отримуйте поради про захист приватності в %s, а також інші можливості.
- Продовжити
+ Продовжити
- Не зараз
+ Не зараз
+
+ Положення про приватність Firefox
+
Ми дбаємо про вашу безпеку
- Наш некомерційний браузер не дозволяє компаніям таємно стежити за вами в інтернеті.\n\nДокладніше в нашому Положенні про приватність.
+ Наш некомерційний браузер допомагає блокувати таємне стеження компаній за вами в інтернеті.
+
+ Наш некомерційний браузер не дозволяє компаніям таємно стежити за вами в інтернеті.\n\nДокладніше в нашому Положенні про приватність.
- політиці приватності
+ політиці приватності
Встановити типовим браузером
@@ -440,21 +447,11 @@
HTTPS-режим
-
- Зменшення кількості банерів кук
- Блокувальник банерів кук
+ Блокувальник банерів файлів cookie
- Блокувальник банерів кук у приватному перегляді
-
- Зменшити кількість банерів кук
-
- Вимкнено
-
- Увімкнено
-
-
- %1$s намагається автоматично відхиляти запити банерів кук.
+ Блокувальник банерів файлів cookie у приватному перегляді
+
Вимкнено для цього сайту
@@ -472,40 +469,21 @@
Сайт наразі не підтримується
- Увімкнути зменшення кількості банерів кук для %1$s?
-
- Увімкнути блокувальник банерів кук для %1$s?
-
- Вимкнути зменшення кількості банерів кук для %1$s?
+ Увімкнути блокувальник банерів про файли cookie для %1$s?
- Вимкнути блокувальник банерів кук для %1$s?
+ Вимкнути блокувальник банерів про файли cookie для %1$s?
- %1$s не може автоматично відхиляти запити на розміщення кук на цьому сайті. Ви можете надіслати запит для підтримки цього сайту в майбутньому.
-
- %1$s очистить куки цього сайту та оновить сторінку. Очищення всіх кук може призвести до виходу з облікових записів або спорожнення кошика для покупок.
+ На цьому сайті %1$s не може автоматично відхиляти запити на збереження файлів cookie. Ви можете надіслати запит для підтримки цього сайту в майбутньому.
- Вимкніть %1$s, щоб очистити куки і перезавантажити цей сайт. Це може призвести до виходу з вебсайту та очищення збережених покупок у кошику.
-
- %1$s намагається автоматично відхиляти всі запити кук на підтримуваних сайтах.
+ Вимкніть %1$s, щоб очистити файли cookie та перезавантажити цей сайт. Це може призвести до виходу з вебсайту та очищення збережених покупок у кошику.
- Увімкніть, і %1$s спробує намагатиметься автоматично відхиляти всі банери кук на цьому сайті.
-
- Дозволити %1$s відхиляти банери кук?
-
- %1$s може автоматично відхиляти багато запитів банерів кук.
-
- Не зараз
-
- Ви бачитимете менше запитів на збереження кук
-
-
- Дозволити
+ Увімкніть, і %1$s намагатиметься автоматично відхиляти всі банери про файли cookie на цьому сайті.
- %1$s щойно відхилив куки для вас
+ %1$s щойно відхилив файли cookie
- Менше відволікань і менше кук, які відстежують вас на цьому сайті.
+ Менше відволікань і менше файлів cookie, які відстежують вас на цьому сайті.
Намагатися автоматично доступатися до сайтів за допомогою протоколу шифрування HTTPS для поліпшення безпеки.
@@ -720,6 +698,8 @@
Закладки
Паролі
+
+ Паролі
Вкладки
@@ -746,6 +726,8 @@
Кредитні картки
+
+ Способи оплати
Адреси
@@ -1177,7 +1159,7 @@
Постійне сховище
- Куки сторонніх сайтів
+ Міжсайтові файли cookie
Вміст, контрольований DRM
@@ -1287,8 +1269,6 @@
Відхилити
- Не вдалося надрукувати
-
Неможливо надрукувати цю сторінку
Друк
@@ -1351,7 +1331,7 @@
Спробуйте приватний перегляд
- Переглядайте без збереження кук чи історії у %1$s
+ Переглядайте без збереження файлів cookie чи історії у %1$s
Користуйтеся інтернетом, не залишаючи слідів
@@ -1444,7 +1424,7 @@
number of history items the user has -->
Адрес: %d
- Куки і дані сайтів
+ Файли cookie та дані сайтів
Ви вийдете з більшості сайтів
@@ -1467,7 +1447,7 @@
Проміжок часу для видалення
- Вилучає історію (включно з історією, синхронізованою з інших пристроїв), куки та інші дані вебперегляду.
+ Вилучає історію (включно з історією, синхронізованою з інших пристроїв), файли cookie та інші дані вебперегляду.
Вилучає історію (зокрема синхронізовану з інших пристроїв)
@@ -1563,17 +1543,17 @@
Що блокується власними налаштуваннями захисту від стеження
- Куки
+ Файли cookie
- Стеження сторонніх сайтів та соціальних мереж
+ Елементи стеження між сайтами та соціальні мережі
- Куки з невідвіданих сайтів
+ Файли cookie з невідвіданих сайтів
- Усі сторонні куки (може пошкодити роботу вебсайтів)
+ Усі сторонні файли cookie (може порушити роботу вебсайтів)
- Усі куки (буде пошкоджувати роботу вебсайтів)
+ Усі файли cookie (буде порушувати роботу вебсайтів)
- Ізолювати куки сторонніх сайтів
+ Ізолювати міжсайтові файли cookie
Вказувати вебсайтам не ділитися й не продавати мої дані
@@ -1597,13 +1577,13 @@
Обмежує можливість соціальних мереж стежити за вашою діяльністю в Інтернеті.
- Куки стеження між сайтами
+ Файли cookie для стеження між сайтами
- Куки сторонніх сайтів
+ Міжсайтові файли cookie
- Блокує куки, які рекламні мережі та аналітичні компанії використовують для збору ваших даних перегляду на багатьох сайтах.
+ Блокує файли cookie, які рекламні мережі та аналітичні компанії використовують для збору ваших даних перегляду на багатьох сайтах.
- Повний захист кук ізолює куки для відвідуваного сайту, тому елементи стеження, такі як рекламні мережі, не можуть використовувати їх для переслідування вас на різних сайтах.
+ Функція Total Cookie Protection ізолює файли cookie для відвідуваного сайту, тому елементи стеження, як-от рекламні мережі, не можуть використовувати їх для переслідування вас на різних сайтах.
Криптомайнери
@@ -1635,7 +1615,7 @@
Елементи стеження переспрямуванням
- Очищує куки, встановлені переспрямовувачами на відомі вебсайти для стеження.
+ Очищує файли cookie, встановлені засобами переспрямування на відомі вебсайти стеження.
@@ -1691,8 +1671,12 @@
Паролі
+
+ Паролі
Зберігати паролі
+
+ Зберігати паролі
Питати про збереження
@@ -1709,27 +1693,47 @@
Додати пароль
+
+ Додати пароль
+
Синхронізація паролів
+
+ Синхронізувати паролі
Синхронізувати паролі між пристроями
+
+ Синхронізація паролів між пристроями
Збережені паролі
+
+ Збережені паролі
Тут з’являтимуться ваші збережені та синхронізовані з %s паролі.
+
+ Тут з\'являтимуться паролі, які ви зберігаєте чи синхронізуєте в %s. Усі паролі зашифровано.
+
Докладніше про синхронізацію.
+
+ Докладніше про синхронізацію
Винятки
Не збережені паролі з’являтимуться тут.
+
+ %s не зберігатиме паролі для вказаних тут сайтів.
Паролі для цих сайтів не зберігатимуться.
+
+ %s не зберігатиме паролі для цих сайтів.
Видалити всі винятки
Шукати паролі
+
+ Пошук паролів
Сайт
@@ -1759,10 +1763,16 @@
Приховати пароль
Розблокуйте для перегляду збережених паролів
+
+ Розблокуйте, щоб переглянути збережені паролі
Захистіть свої паролі
+
+ Захистіть збережені паролі
- Встановіть графічний ключ, ПІН, чи пароль блокування пристрою, щоб захистити збережені паролі від інших, хто може отримати доступ до вашого пристрою.
+ Встановіть графічний ключ, PIN-код чи пароль для захисту збережених паролів від інших, хто може отримати доступ до вашого пристрою.
+
+ Встановіть графічний ключ, PIN-код чи пароль для захисту збережених паролів від інших, хто може отримати доступ до вашого пристрою.
Пізніше
@@ -1782,6 +1792,9 @@
Меню впорядкування паролів
+
+ Меню сортування паролів
+
Автозаповнення
@@ -1789,10 +1802,16 @@
Адреси
Кредитні картки
+
+ Способи оплати
Зберігати та автоматично заповнювати дані карток
+
+ Зберігати й заповнювати способи оплати
Дані зашифровано
+
+ %s шифрує всі збережені способи оплати
Синхронізувати картки між пристроями
@@ -1800,17 +1819,26 @@
Додати кредитну картку
+
+ Додати картку
Керувати збереженими картками
+
+ Керувати картками
Додати адресу
Керувати адресами
Зберігати та автоматично заповнювати адреси
+
+ Зберігати й заповнювати адреси
Включити дані, як-от номери, електронні адреси та адреси доставлення
+
+ Містить номери телефонів і адреси електронної пошти
+
Додати картку
@@ -1831,6 +1859,8 @@
Видалити картку
Ви впевнені, що хочете видалити цю кредитну картку?
+
+ Видалити картку?
Видалити
@@ -1846,14 +1876,22 @@
Введіть дійсний номер кредитної картки
+
+ Введіть дійсний номер картки
Будь ласка, заповніть це поле
+
+ Додайте назву
Розблокуйте для перегляду збережених карток
Захистіть свої банківські картки
+
+ Захистіть свої збережені способи оплати
+
+ Встановіть графічний ключ, PIN-код чи пароль для захисту збережених банківських карток від інших, хто може отримати доступ до вашого пристрою.
- Встановіть графічний ключ, ПІН, чи пароль, щоб захистити збережені банківські картки від інших, хто може отримати доступ до вашого пристрою.
+ Встановіть графічний ключ, PIN-код чи пароль для захисту збережених способів оплати від інших, хто може отримати доступ до вашого пристрою.
Встановити
@@ -1864,6 +1902,8 @@
Розблокуйте, щоб використовувати збережену інформацію про кредитну картку
+
+ Розблокуйте, щоб використати збережені способи оплати
Додати адресу
@@ -1901,6 +1941,8 @@
Ви дійсно хочете видалити цю адресу?
+
+ Видалити цю адресу?
Видалити
@@ -1974,9 +2016,9 @@
З’єднання не захищене
- Стерти куки та дані сайтів
+ Стерти файли cookie та дані сайтів
- %s?]]>
+ %s?]]>
Ви впевнені, що хочете очистити всі дозволи на всіх сайтах?
@@ -2000,30 +2042,52 @@
Змінити
Ви дійсно хочете видалити цей запис?
+
+ Ви дійсно хочете видалити цей пароль?
Видалити
Скасувати
Опції запису
+
+ Параметри пароля
Текстове поле для редагування вебадреси запису.
+
+ Текстове поле для редагування адреси вебсайту.
Текстове поле для редагування імені користувача запису.
+
+ Текстове поле для редагування імені користувача.
Текстове поле для редагування пароля запису.
+
+ Текстове поле для редагування пароля.
Зберегти зміни.
+
+ Зберегти зміни.
Змінити
+
+ Редагувати пароль
Додати новий пароль
+
+ Додати пароль
Потрібен пароль
+
+ Введіть пароль
Необхідно вказати ім’я користувача
+
+ Введіть ім’я користувача
Необхідно вказати назву вузла
+
+ Введіть адресу вебсайту
Голосовий пошук
@@ -2119,6 +2183,9 @@
%s пошук
+
+ Змініть типовий браузер
+
Автоматично відкривати посилання з вебсайтів, електронних листів та повідомлень у Firefox.
@@ -2192,8 +2259,6 @@
Обрані беруться з відгуків %s за останні 80 днів, які ми вважаємо надійними.]]>
Дізнатися більше про %s.
-
- як %s від Mozilla визначає якість відгуку
як %s визначає якість відгуку
@@ -2378,6 +2443,8 @@
Виконується переклад
+
+ Вибрати мову
Виникла проблема з перекладом. Повторіть спробу.
@@ -2398,6 +2465,10 @@
Ніколи не перекладати %1$s
Ніколи не перекладати цей сайт
+
+ Перевизначає усі інші налаштування
+
+ Перевизначає пропозиції перекладу
Налаштування перекладу
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index 1724ee763..3dc25d14d 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -249,6 +249,9 @@
Xóa lịch sử duyệt web
+
+ Dịch trang
+
Ngôn ngữ được chọn
@@ -260,8 +263,6 @@
Quét
-
- Công cụ tìm kiếm
Cài đặt công cụ tìm kiếm
@@ -316,24 +317,29 @@
- Thông báo giúp bạn làm được nhiều việc hơn với %s
+ Thông báo giúp bạn làm được nhiều việc hơn với %s
- Đồng bộ hóa các thẻ của bạn giữa các thiết bị, quản lý tải xuống, nhận các mẹo về cách tận dụng tối đa khả năng bảo vệ quyền riêng tư của %s và nhiều hơn nữa.
+ Đồng bộ hóa các thẻ của bạn giữa các thiết bị, quản lý tải xuống, nhận các mẹo về cách tận dụng tối đa khả năng bảo vệ quyền riêng tư của %s và nhiều hơn nữa.
- Tiếp tục
+ Tiếp tục
- Không phải bây giờ
+ Không phải bây giờ
+
+ Thông báo về quyền riêng tư Firefox
+
Chúng tôi thích giữ an toàn cho bạn
- Trình duyệt được tài trợ bởi tổ chức phi lợi nhuận của chúng tôi giúp ngăn các công ty bí mật theo dõi bạn trên web.\n\nTìm hiểu thêm về thông báo quyền riêng tư của chúng tôi.
+ Trình duyệt được hỗ trợ phi lợi nhuận của chúng tôi giúp ngăn các công ty bí mật theo dõi bạn trên web.
+
+ Trình duyệt được tài trợ bởi tổ chức phi lợi nhuận của chúng tôi giúp ngăn các công ty bí mật theo dõi bạn trên web.\n\nTìm hiểu thêm về thông báo quyền riêng tư của chúng tôi.
- thông báo bảo mật
+ thông báo bảo mật
Đặt làm trình duyệt mặc định
@@ -436,21 +442,11 @@
Chế độ chỉ HTTPS
-
- Giảm biểu ngữ cookie
Trình chặn biểu ngữ cookie
Trình chặn biểu ngữ cookie trong trình duyệt riêng tư
-
- Giảm biểu ngữ cookie
-
- Tắt
-
- Bật
-
-
- %1$s tự động cố gắng từ chối yêu cầu cookie trên biểu ngữ cookie.
+
Tắt cho trang web này
@@ -468,35 +464,16 @@
Trang web hiện tại không được hỗ trợ
- Bật giảm biểu ngữ cookie cho %1$s?
-
Bật trình chặn biểu ngữ cookie cho %1$s?
- Tắt giảm biểu ngữ cookie cho %1$s?
-
Tắt trình chặn biểu ngữ cookie cho %1$s?
%1$s không thể tự động từ chối yêu cầu cookie trên trang web này. Bạn có thể gửi yêu cầu hỗ trợ trang web này trong tương lai.
-
- %1$s sẽ xóa cookie của trang web này và làm mới trang. Xóa tất cả cookie có thể khiến bạn đăng xuất hoặc làm trống giỏ hàng.
Tắt và %1$s sẽ xóa cookie và tải lại trang web này. Điều này có thể khiến bạn bị đăng xuất hoặc bị xóa sạch giỏ hàng.
- %1$s thử tự động từ chối tất cả các yêu cầu cookie trên các trang web được hỗ trợ.
-
Bật và %1$s sẽ thử tự động từ chối tất cả các biểu ngữ cookie trên trang web này.
-
- Cho phép %1$s từ chối biểu ngữ cookie?
-
- %1$s có thể tự động từ chối nhiều yêu cầu biểu ngữ cookie.
-
- Không phải bây giờ
-
- Bạn sẽ thấy ít yêu cầu cookie hơn
-
-
- Cho phép
%1$s vừa từ chối cookie cho bạn
@@ -712,6 +689,8 @@
Dấu trang
Đăng nhập
+
+ Mật khẩu
Các thẻ đang mở
@@ -738,6 +717,8 @@
Thẻ tín dụng
+
+ Phương thức thanh toán
Địa chỉ
@@ -1274,8 +1255,6 @@
Bỏ qua
- Không thể in
-
Không thể in trang này
In
@@ -1674,8 +1653,12 @@
Thông tin đăng nhập và mật khẩu
+
+ Mật khẩu
Lưu thông tin đăng nhập và mật khẩu
+
+ Lưu mật khẩu
Yêu cầu để lưu
@@ -1692,26 +1675,46 @@
Thêm thông tin đăng nhập
+
+ Thêm mật khẩu
+
Đồng bộ hóa thông tin đăng nhập
+
+ Đồng bộ mật khẩu
Đồng bộ hóa thông tin đăng nhập trên các thiết bị
+
+ Đồng bộ hóa mật khẩu giữa các thiết bị
Thông tin đăng nhập đã lưu
+
+ Mật khẩu đã lưu
Thông tin đăng nhập bạn lưu hoặc đồng bộ hóa với %s sẽ hiển thị tại đây.
+
+ Mật khẩu bạn lưu hoặc đồng bộ hóa với %s sẽ được liệt kê ở đây. Tất cả mật khẩu bạn lưu đều được mã hóa.
+
Tìm hiểu thêm về đồng bộ hóa.
+
+ Tìm hiểu thêm về đồng bộ hoá
Ngoại lệ
Thông tin đăng nhập và mật khẩu không được lưu sẽ được hiển thị ở đây.
+
+ %s sẽ không lưu mật khẩu cho các trang được liệt kê ở đây.
Thông tin đăng nhập và mật khẩu sẽ không được lưu cho các trang web này.
+
+ %s sẽ không lưu mật khẩu cho các trang web này.
Xóa tất cả ngoại lệ
Tìm thông tin đăng nhập
+
+ Tìm kiếm mật khẩu
Trang
@@ -1740,10 +1743,16 @@
Ẩn mật khẩu
Mở khóa để xem thông tin đăng nhập đã lưu của bạn
+
+ Mở khóa để xem mật khẩu đã lưu của bạn
Bảo mật thông tin đăng nhập và mật khẩu của bạn
+
+ Giữ mật khẩu đã lưu của bạn một cách an toàn
Thiết lập mẫu khóa thiết bị, mã PIN hoặc mật khẩu để bảo vệ thông tin đăng nhập và mật khẩu đã lưu của bạn khỏi bị truy cập nếu người khác lấy được thiết bị của bạn.
+
+ Đặt mật khẩu thiết bị dạng mẫu hình, mã PIN hoặc mật khẩu để bảo vệ mật khẩu đã lưu của bạn không bị truy cập nếu người khác lấy được thiết bị của bạn.
Để sau
@@ -1762,6 +1771,9 @@
Sắp xếp menu đăng nhập
+
+ Menu sắp xếp mật khẩu
+
Tự động điền
@@ -1769,10 +1781,16 @@
Địa chỉ
Thẻ tín dụng
+
+ Phương thức thanh toán
Lưu và tự động điền thẻ tín dụng
+
+ Lưu và điền phương thức thanh toán
Dữ liệu được mã hóa
+
+ %s mã hóa tất cả các phương thức thanh toán bạn lưu
Đồng bộ thông tin thẻ tín dụng trên các thiết bị
@@ -1780,17 +1798,26 @@
Thêm thẻ tín dụng
+
+ Thêm thẻ
Quản lý thẻ tín dụng đã lưu
+
+ Quản lý thẻ tín dụng
Thêm địa chỉ
Quản lý địa chỉ
Lưu và tự động điền địa chỉ
+
+ Lưu và điền địa chỉ
Bao gồm thông tin như số, email và địa chỉ giao hàng
+
+ Bao gồm số điện thoại và địa chỉ email
+
Thêm thẻ
@@ -1811,6 +1838,8 @@
Xóa thẻ
Bạn có chắc chắn muốn xóa thẻ tín dụng này không?
+
+ Xoá thẻ?
Xóa
@@ -1826,14 +1855,22 @@
Vui lòng nhập số thẻ tín dụng hợp lệ
+
+ Nhập số thẻ hợp lệ
Vui lòng điền vào trường này
+
+ Thêm tên
Mở khóa để xem các thẻ tín dụng đã lưu của bạn
Bảo mật thẻ tín dụng của bạn
+
+ Giữ các phương thức thanh toán đã lưu của bạn một cách an toàn
Thiết lập màn hình khóa thiết bị với mẫu hình, mã PIN hoặc mật khẩu để bảo vệ thẻ tín dụng đã lưu của bạn không bị truy cập nếu người khác có thiết bị của bạn.
+
+ Đặt mật khẩu thiết bị dạng mẫu hình, mã PIN hoặc mật khẩu để bảo vệ phương thức thanh toán đã lưu của bạn không bị truy cập nếu người khác lấy đuọc thiết bị của bạn.
Thiết lập ngay
@@ -1843,6 +1880,8 @@
Mở khóa để sử dụng thông tin thẻ tín dụng được lưu trữ
+
+ Mở khóa để sử dụng các phương thức thanh toán đã lưu
Thêm địa chỉ
@@ -1880,6 +1919,8 @@
Bạn có chắc chắn muốn xóa địa chỉ này không?
+
+ Xoá địa chỉ này?
Xóa
@@ -1978,30 +2019,52 @@
Chỉnh sửa
Bạn có chắc chắn muốn xóa thông tin đăng nhập này không?
+
+ Bạn có chắc chắn muốn xóa mật khẩu này?
Xóa
Hủy bỏ
Tùy chọn thông tin đăng nhập
+
+ Cài đặt mật khẩu
Trường văn bản có thể chỉnh sửa cho địa chỉ web của thông tin đăng nhập.
+
+ Trường văn bản có thể chỉnh sửa cho địa chỉ trang web.
Trường văn bản có thể chỉnh sửa cho tên người dùng của thông tin đăng nhập.
+
+ Trường văn bản có thể chỉnh sửa cho tên người dùng.
Trường văn bản có thể chỉnh sửa cho mật khẩu của thông tin đăng nhập.
+
+ Trường văn bản có thể chỉnh sửa cho mật khẩu.
Lưu các thay đổi vào thông tin đăng nhập.
+
+ Lưu thay đổi.
Chỉnh sửa
+
+ Chỉnh sửa mật khẩu
Thêm thông tin đăng nhập mới
+
+ Thêm mật khẩu
Yêu cầu mật khẩu
+
+ Nhập mật khẩu
Yêu cầu tên đăng nhập
+
+ Nhập tên người dùng
Yêu cầu tên máy chủ
+
+ Nhập địa chỉ trang web
Tìm kiếm bằng giọng nói
@@ -2097,6 +2160,9 @@
Tìm kiếm trên %s
+
+ Đặt làm trình duyệt mặc định của bạn
+
Đặt các liên kết từ trang web, email và tin nhắn để tự động mở trong Firefox.
@@ -2170,8 +2236,6 @@
Điểm nổi bật từ %s đánh giá trong vòng 80 ngày qua mà chúng tôi tin là đáng tin cậy.]]>
Tìm hiểu thêm về %s.
-
- cách %s bởi Mozilla xác định chất lượng đánh giá
cách %s xác định chất lượng đánh giá
@@ -2356,6 +2420,8 @@
Đang dịch trang
+
+ Chọn ngôn ngữ
Đã xảy ra sự cố khi dịch. Hãy thử lại.
@@ -2376,6 +2442,10 @@
Không bao giờ dịch %1$s
Không bao giờ dịch trang này
+
+ Ghi đè tất cả các cài đặt khác
+
+ Ghi đè đề xuất dịch
Cài đặt dịch
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 766b74d1c..e8d1625a3 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -95,7 +95,7 @@
您可以将 %1$s 设为链接的打开方式。
- 转至设置
+ 前往设置
知道了
@@ -112,9 +112,9 @@
- 需要访问相机。转到 Android 设置,点按权限,然后点按允许。
+ 需要访问相机。请前往 Android 设置,点按“权限”,然后点按“允许”。
- 转至设置
+ 前往设置
知道了
@@ -250,6 +250,7 @@
定制主页
+
主屏幕
@@ -257,6 +258,9 @@
清除浏览历史
+
+ 翻译页面
+
选择的语言
@@ -268,8 +272,6 @@
扫码
-
- 搜索引擎
搜索引擎设置
@@ -327,23 +329,28 @@
- 允许通知可以让 %s 更贴心好用
+ 允许通知可以让 %s 更贴心好用
- 在设备间同步标签页、管理下载、了解充分利用 %s 来保护隐私的窍门,还有更多实用功能。
+ 在设备间同步标签页、管理下载、了解充分利用 %s 来保护隐私的窍门,还有更多实用功能。
- 继续
+ 继续
- 暂时不要
+ 暂时不要
+
+ Firefox 隐私声明
+
我们乐于为您护航
- 这款由非营利组织支持的浏览器会自动阻止大公司在网上偷偷跟踪您。\n\n请阅读我们的隐私声明详细了解。
+ 这款由非营利组织支持的浏览器会自动阻止大公司在网上偷偷跟踪您。
+
+ 这款由非营利组织支持的浏览器会自动阻止大公司在网上偷偷跟踪您。\n\n请阅读我们的隐私声明详细了解。
- 隐私声明
+ 隐私声明
设为默认浏览器
@@ -449,21 +456,11 @@
HTTPS-Only 模式
-
- 减少 Cookie 横幅
Cookie 横幅拦截器
隐私浏览中的 Cookie 横幅拦截器
-
- 减少 Cookie 横幅
-
- 关闭
-
- 开启
-
-
- %1$s 会尝试自动拒绝 Cookie 横幅的 Cookie 请求。
+
在该网站关闭
@@ -481,36 +478,17 @@
目前不支持该网站
- 要为 %1$s 开启“减少 Cookie 横幅”功能吗?
-
要为 %1$s 开启 Cookie 横幅拦截器吗?
-
- 要为 %1$s 关闭“减少 Cookie 横幅”功能吗?
要为 %1$s 关闭 Cookie 横幅拦截器吗?
%1$s 无法自动拒绝此站点上的 Cookie 请求。您可以请求将来对此站点的支持。
-
- %1$s 将清除此网站的 Cookie 并刷新页面。清除 Cookie 可能会导致您退出登录,或清空购物车。
关闭后,%1$s 将清除 Cookie 并重新加载此网站。这可能导致退出登录或清空购物车。
- %1$s 会尝试在支持的网站上尽可能拒绝所有 Cookie 请求。
-
开启后,%1$s 将尝试自动拒绝此网站上的 Cookie 横幅。
-
- 要允许 %1$s 拒绝 Cookie 横幅吗?
-
- %1$s 可自动拒绝许多 Cookie 横幅的请求。
-
- 暂时不要
-
- 您看到的 Cookie 请求会减少
-
-
- 允许
%1$s 刚刚为您拒绝了 Cookie 请求
@@ -730,6 +708,8 @@
书签
登录信息
+
+ 密码
打开的标签页
@@ -757,6 +737,8 @@
信用卡
+
+ 付款方式
邮政地址
@@ -1162,7 +1144,7 @@
- 转至设置
+ 前往设置
知道了
- 无法打印
-
无法打印此页面
打印
@@ -1732,8 +1712,12 @@
密码
+
+ 密码
保存登录名和密码
+
+ 保存密码
询问是否保存
@@ -1752,26 +1736,46 @@
添加登录信息
+
+ 添加密码
+
同步登录信息
+
+ 同步密码
跨设备同步登录信息
+
+ 跨设备同步密码
保存的登录信息
+
+ 保存的密码
您保存或同步到 %s 的登录信息将显示于此处。
+
+ 保存和同步到 %s 的密码会显示在这里,所有密码均已加密保存。
+
详细了解“同步”。
+
+ 详细了解同步功能
例外
不保存登录名和密码的网站将显示于此处。
+
+ %s 将不会保存此处所列网站的密码。
将不保存这些网站的登录名和密码。
+
+ %s 将不会保存这些网站的密码。
删除所有例外
搜索登录信息
+
+ 搜索密码
网站
@@ -1800,10 +1804,16 @@
隐藏密码
解锁以查看您保存的登录信息
+
+ 解锁以查看保存的密码
保护您的登录名和密码
+
+ 保护您保存的密码
- 设置锁定方式、PIN 码或密码以保护您保存的登录名与密码,避免他人盗用。
+ 设置设备锁定图案、PIN 或密码以保护您保存的登录名与密码,避免他人盗用。
+
+ 设置设备锁定图案、PIN 或密码以保护您保存的密码,避免他人盗用。
稍后
@@ -1822,6 +1832,9 @@
排序登录信息菜单
+
+ 密码排序菜单
+
自动填充
@@ -1829,10 +1842,16 @@
地址
信用卡
+
+ 付款方式
保存并自动填充信用卡信息
+
+ 保存和填写付款方式
数据已加密
+
+ %s 会加密您保存的所有付款方式
跨设备同步信用卡信息
@@ -1840,17 +1859,26 @@
添加信用卡
+
+ 添加信用卡
管理保存的卡片
+
+ 管理信用卡
添加地址
管理地址
保存并自动填充地址
+
+ 保存和填充地址
包含号码、邮箱和收货地址等信息
+
+ 包括电话号码和邮箱地址
+
添加信用卡
@@ -1871,6 +1899,8 @@
删除卡片
您确定要删除此信用卡吗?
+
+ 确定删除信用卡吗?
删除
@@ -1886,15 +1916,23 @@
请输入有效的信用卡卡号
+
+ 请输入有效卡号
请填写此栏
+
+ 请输入持卡人姓名
解锁后即可查看保存的卡片信息
保护您的卡片信息
+
+ 保护您保存的付款方式
+
+ 设置设备锁定图案、PIN 或密码以保护您保存的卡片信息,避免他人盗用。
- 设置锁定方式、PIN 码或密码以保护您保存的卡片信息,避免他人盗用。
+ 设置设备锁定图案、PIN 或密码以保护您保存的付款方式,避免他人盗用。
立即设置
@@ -1905,6 +1943,8 @@
解锁以使用存储的卡片信息
+
+ 解锁以使用保存的付款方式
添加地址
@@ -1942,6 +1982,8 @@
您确定要删除此地址吗?
+
+ 确定删除此地址吗?
删除
@@ -2040,30 +2082,52 @@
编辑
您确定要删除此登录信息吗?
+
+ 您确定要删除此密码吗?
删除
取消
登录选项
+
+ 密码选项
登录信息中的网址输入框。
+
+ 网址输入框。
登录信息中的用户名输入框。
+
+ 用户名输入框。
登录信息中的密码输入框。
+
+ 密码输入框。
保存编辑过的登录信息。
+
+ 保存更改。
编辑
+
+ 编辑密码
新建登录信息
+
+ 添加密码
需要密码
+
+ 请输入密码
用户名不能为空
+
+ 请输入用户名
主机名不能为空
+
+ 请输入网址
语音搜索
@@ -2233,8 +2297,6 @@
最有帮助的评价选自我们认为可信的最近 80 天内的 %s 评价。]]>
详细了解%s
-
- 由 Mozilla 支持的 %s 判断评价质量的方式
%s 判断评价质量的方式
@@ -2351,7 +2413,7 @@
打开核查评价
- 测试中
+ 测试版
打开核查评价
@@ -2440,7 +2502,7 @@
要翻译此页面吗?
- 试用 %1$s 注重隐私的翻译功能
+ 试试 %1$s 注重隐私的翻译功能
为保护隐私,翻译过程只会在本地进行。我们很快会支持更多语言并带来改进!%1$s
@@ -2463,6 +2525,8 @@
正在翻译
+
+ 选择语言
翻译时遇到问题,请重试。
@@ -2483,6 +2547,10 @@
永不翻译%1$s
永不翻译此网站
+
+ 将覆盖其他所有设置
+
+ 将覆盖“询问是否翻译”
翻译设置
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 888590588..05ac104d5 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -248,6 +248,7 @@
自訂首頁
+
主畫面
@@ -255,6 +256,9 @@
清除瀏覽紀錄
+
+ 翻譯頁面
+
選擇的語言
@@ -266,8 +270,6 @@
掃描
-
- 搜尋引擎
搜尋引擎設定
@@ -323,23 +325,28 @@
- 透過通知,可幫助您使用 %s 做到更多事
+ 透過通知,可幫助您使用 %s 做到更多事
- 在不同裝置間同步分頁、管理下載資料、獲得能讓 %s 的隱私權保護功能發揮到極致的使用秘訣,與更多資訊。
+ 在不同裝置間同步分頁、管理下載資料、獲得能讓 %s 的隱私權保護功能發揮到極致的使用秘訣,與更多資訊。
- 繼續
+ 繼續
- 現在不要
+ 現在不要
+
+ Firefox 隱私權公告
+
我們希望確保您上網安全
- 這套由非營利組織打造的瀏覽器,可幫助防止企業在網路上偷偷追蹤您。\n\n到我們的隱私權公告了解更多資訊。
+ 我們這套由非營利組織所開發的瀏覽器,會自動封鎖讓大企業在網路上偷偷跟蹤您的程式。
+
+ 這套由非營利組織打造的瀏覽器,可幫助防止企業在網路上偷偷追蹤您。\n\n到我們的隱私權公告了解更多資訊。
- 隱私權公告
+ 隱私權公告
設為預設瀏覽器
@@ -443,21 +450,11 @@
純 HTTPS 模式
-
- 減少 Cookie 橫幅
Cookie 橫幅封鎖器
隱私瀏覽模式中的 Cookie 橫幅封鎖器
-
- 減少 Cookie 橫幅
-
- 關閉
-
- 開啟
-
-
- %1$s 會自動嘗試拒絕網站 Cookie 橫幅上的設定請求。
+
對此網站關閉
@@ -475,36 +472,16 @@
目前不支援的網站
- 要為 %1$s 開啟減少 Cookie 橫幅功能嗎?
-
要為 %1$s 開啟 Cookie 橫幅封鎖器嗎?
- 要為 %1$s 關閉減少 Cookie 橫幅功能嗎?
-
要為 %1$s 關閉 Cookie 橫幅封鎖器嗎?
%1$s 無法自動拒絕此網站上的 Cookie 請求。您可以請求我們未來支援此網站。
-
- %1$s 將清除此網站的 Cookie 並重新載入頁面。清除 Cookie 可能會將您從網站登出,或清空購物車。
關閉封鎖器後,%1$s 將會清除此網站的 Cookie 並重新載入頁面。可能會導致您被登出或清空購物車。
- %1$s 可自動在支援的網站,為您拒絕網站設定 Cookie 的請求。
-
開啟封鎖器後,%1$s 就會對此網站自動嘗試拒絕所有 Cookie 橫幅。
-
- 要讓 %1$s 為您拒絕 cookie 橫幅嗎?
-
- %1$s 可自動為您拒絕許多網站設定 Cookie 的請求。
-
- 現在不要
-
-
- 您看到的 Cookie 請求會變少
-
-
- 允許
%1$s 剛為您拒絕了 Cookie
@@ -723,6 +700,8 @@
書籤
登入資訊
+
+ 密碼
開啟分頁
@@ -749,6 +728,8 @@
信用卡
+
+ 付款方式
地址
@@ -1305,8 +1286,6 @@
知道了!
- 無法列印
-
無法列印此頁面
列印
@@ -1355,7 +1334,7 @@
要關閉隱私分頁嗎?
- 點擊或滑掉此分頁,即可關閉隱私分頁。
+ 點擊或滑掉此通知,即可關閉隱私分頁。
行銷活動
@@ -1718,8 +1697,12 @@
登入資訊與密碼
+
+ 密碼
儲存登入資訊與密碼
+
+ 已存密碼
詢問我是否儲存
@@ -1736,26 +1719,45 @@
新增登入資訊
+
+ 新增密碼
+
同步登入資訊
+
+ 同步密碼
在不同裝置間同步登入資訊
+
+ 在不同裝置間同步密碼
儲存的登入資訊
+
+ 已存密碼
您儲存或同步到 %s 的登入資訊將顯示於此處。
+
+ 您儲存或同步到 %s 的密碼將顯示於此處,所有儲存的密碼資訊都會被加密。
了解 Sync 的更多資訊。
+
+ 瞭解同步功能的更多資訊
例外網站
不儲存登入資訊與密碼的網站將顯示於此處。
+
+ %s 不會儲存下列網站的密碼。
將不儲存這些網站的登入資訊與密碼。
+
+ %s 不會儲存下列網站的密碼。
刪除所有例外
搜尋登入資訊
+
+ 搜尋密碼
網站
@@ -1784,10 +1786,16 @@
隱藏密碼
解鎖後即可檢視儲存的登入資訊
+
+ 解鎖後即可檢視儲存的密碼
保護您的登入資訊與密碼
+
+ 保護您儲存的密碼
設定裝置解鎖圖形、PIN 碼或密碼來保護您儲存下來的登入資訊與密碼,避免別人盜用。
+
+ 設定裝置解鎖圖形、PIN 碼或密碼來保護您儲存的密碼,避免別人盜用。
稍後處理
@@ -1806,6 +1814,9 @@
排序登入資訊選單
+
+ 排序密碼選單
+
自動填寫
@@ -1814,10 +1825,16 @@
信用卡
+
+ 付款方式
儲存並自動填寫卡片
+
+ 儲存並自動填寫付款方式
資料有加密
+
+ %s 會加密您儲存的所有付款方式資料
在不同裝置間同步卡片資料
@@ -1825,17 +1842,26 @@
新增信用卡
+
+ 新增付款卡片
管理已儲存的卡片
+
+ 管理卡片
新增地址
管理已存地址
儲存並自動填寫地址
+
+ 儲存並自動填寫地址
包含電話號碼、E-Mail、收件地址等資訊
+
+ 包含電話號碼與電子郵件地址
+
新增付款卡片
@@ -1856,6 +1882,8 @@
刪除卡片
你確定要刪除這張信用卡嗎?
+
+ 要刪除卡片嗎?
刪除
@@ -1871,14 +1899,22 @@
請輸入有效的信用卡號
+
+ 請輸入有效卡號
請填寫此欄位
+
+ 請輸入持卡人姓名
解鎖後即可檢視儲存的卡片資訊
保護您的信用卡資訊
+
+ 保護您儲存的付款方式
設定裝置解鎖圖形、PIN 碼或密碼來保護您儲存的信用卡資訊,避免別人盜用。
+
+ 設定裝置解鎖圖形、PIN 碼或密碼來保護您儲存的付款方式資訊,避免別人盜用。
立即設定
@@ -1889,6 +1925,8 @@
解鎖後,即可使用儲存的信用卡資訊
+
+ 解鎖後即可使用儲存的付款方式
新增地址
@@ -1926,6 +1964,8 @@
您確定要刪除這筆地址嗎?
+
+ 要刪除這個地址嗎?
刪除
@@ -2024,30 +2064,52 @@
編輯
您確定要刪除這筆登入資訊嗎?
+
+ 你確定要刪除這筆密碼嗎?
刪除
取消
登入選項
+
+ 密碼選項
登入資訊當中,網址的輸入欄位。
+
+ 網址的輸入欄位。
登入資訊當中,使用者名稱的輸入欄位。
+
+ 使用者名稱的輸入欄位。
登入資訊當中,密碼的輸入欄位。
+
+ 密碼的輸入欄位。
儲存編輯過的登入資訊。
+
+ 儲存變更。
編輯
+
+ 編輯密碼
新增登入資訊
+
+ 新增密碼
需要密碼
+
+ 輸入密碼
必須輸入使用者名稱
+
+ 輸入使用者名稱
必須輸入主機名稱
+
+ 輸入網址
語音搜尋
@@ -2143,6 +2205,9 @@
%s 搜尋
+
+ 切換您的預設瀏覽器
+
設定使用 Firefox 自動開啟網站、郵件、簡訊當中的鏈結。
@@ -2216,8 +2281,6 @@
重點資訊是根據過去 80 天中,我們相信是可靠的 %s 評論所整理出的資訊。]]>
了解 %s 的更多資訊。
-
- %s 如何判斷評論品質
%s 如何判斷評論品質
@@ -2414,9 +2477,9 @@
要翻譯此頁面嗎?
- 在 %1$s 試用有隱私的翻譯功能
+ 在 %1$s 試用保護隱私的翻譯功能
- 為了保護您的隱私,要翻譯的內容不會離開您的裝置。即將支援更多新語言並改善功能!%1$s
+ 為了保護您的隱私,要翻譯的內容不會離開您的裝置。未來將持續支援更多語言並改善功能!%1$s
更多資訊
@@ -2436,6 +2499,8 @@
翻譯中
+
+ 選擇一種語言
翻譯時發生問題,請再試一次。
@@ -2451,11 +2516,15 @@
總是提供翻譯
- 總是翻譯 %1$s
+ 總是翻譯%1$s
- 永不翻譯 %1$s
+ 永不翻譯%1$s
永不翻譯此網站
+
+ 蓋過其他所有設定
+
+ 蓋過翻譯功能提示
翻譯設定
@@ -2487,7 +2556,7 @@
提供翻譯(預設)
- %1$s 將提供此語言的網站翻譯內容
+ %1$s 將提示是否要翻譯此語言的網站內容
總是翻譯
@@ -2496,7 +2565,7 @@
永不翻譯
- %1$s 不會提供此語言的翻譯功能
+ %1$s 不會提示此語言的網站翻譯功能
@@ -2545,7 +2614,7 @@
- 要刪除 %1$s(%2$s)嗎?
+ 要刪除%1$s(%2$s)嗎?
若您刪除此語言,%1$s 將在翻譯時下載部分語言檔到您的快取空間。
pref_key_telemetry
@@ -119,7 +121,7 @@
pref_key_show_sponsored_suggestions
pref_key_show_nonsponsored_suggestions
pref_key_learn_about_fx_suggest
-
+
pref_key_site_permissions_description
pref_key_show_site_exceptions
@@ -401,4 +403,7 @@
pref_key_should_show_review_quality_opt_in_time
pref_key_should_show_review_quality_cfr_displayed_time
pref_key_review_quality_cfr_shown_counter
+
+
+ pref_key_ignore_translations_data_saver_warning
diff --git a/app/src/main/res/values/static_strings.xml b/app/src/main/res/values/static_strings.xml
index 5ea6dd9ba..1dfb15c33 100644
--- a/app/src/main/res/values/static_strings.xml
+++ b/app/src/main/res/values/static_strings.xml
@@ -122,29 +122,4 @@
Amazon
Best Buy
Walmart
-
- Translate this page?
- Translate from
- Translate to
- Not now
- Translate
-
- Translation Options
- Always offer to translate
- Always translate %1$s
- Never translate %1$s
- Never translate this site
- Translation settings
- About translations in %1$s
-
- Translations
- Translation preferences
- Offer to translate when possible
- Always download languages in data saving mode
- Automatic translation
- Never translate these sites
- Download languages
-
- In progress
- Translating in Progress
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2586adba1..c7fc9088d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -68,11 +68,6 @@
Leave no traces on this device
-
- %1$s deletes your cookies, history, and site data when you close all your private windows. %2$s
Find in page
+
+ Translate page
Save to collection
@@ -313,29 +310,24 @@
Not now
-
- Make Firefox your go-to browser
+
+ Firefox privacy notice
+
We love keeping you safe
-
- Firefox puts people over profits and defends your privacy by blocking cross-site trackers.\n\nLearn more in our privacy notice.
- Our non-profit backed browser helps stop companies from secretly following you around the web.\n\nLearn more in our privacy notice.
+ Our non-profit backed browser helps stop companies from secretly following you around the web.
+
+ Our non-profit backed browser helps stop companies from secretly following you around the web.\n\nLearn more in our privacy notice.
- privacy notice
+ privacy notice
Set as default browser
Not now
- Hop from phone to laptop and back
-
Stay encrypted when you hop between devices
-
- Grab tabs and passwords from your other devices to pick up where you left off.
When you’re signed in and synced, you’re safer. Firefox encrypts your passwords, bookmarks, and more.
@@ -343,15 +335,9 @@
Sign in
Not now
-
- Notifications help you do more with Firefox
Notifications help you stay safer with Firefox
-
- Send tabs between devices, manage downloads, and get tips on getting the most out of Firefox.
Securely send tabs between your devices and discover other privacy features in Firefox.
@@ -391,8 +377,6 @@
Select one
- Manage search shortcuts
-
Manage alternative search engines
Edit engines visible in the search menu
@@ -406,8 +390,6 @@
Search engines
Suggestions from search engines
-
- Address bar
Address bar preferences
@@ -525,14 +507,10 @@
However, it’s also possible that an attacker is involved. If you continue to the website, you should not enter any sensitive info. If you continue, HTTPS-Only mode will be turned off temporarily for the site.
Accessibility
-
- Custom Firefox Account server
Custom Mozilla account server
Custom Sync server
-
- Firefox Account/Sync server modified. Quitting the application to apply changes…
Mozilla account/Sync server modified. Quitting the application to apply changes…
@@ -550,8 +528,6 @@
Sign in to sync tabs, bookmarks, passwords, and more.
- Firefox Account
-
Mozilla account
Reconnect to resume syncing
@@ -563,8 +539,6 @@
Data collection
Remote debugging via USB
-
- Show search engines
Show search suggestions
@@ -690,12 +664,6 @@
Explore add-ons
-
-
- Add-on is not supported
-
- Add-on is already installed
-
Add-ons are temporarily disabled
@@ -721,6 +689,8 @@
Bookmarks
Logins
+
+ Passwords
Open tabs
@@ -745,6 +715,8 @@
%1$s on %2$s %3$s
Credit cards
+
+ Payment methods
Addresses
@@ -1312,6 +1284,11 @@
Close private tabs
+
+
+ Close private tabs?
+ Tap or swipe this notification to close private tabs.
+
Marketing
Logins and passwords
+
+ Passwords
Save logins and passwords
+
+ Save passwords
Ask to save
@@ -1671,27 +1652,46 @@
Fill usernames and passwords in other apps on your device.
Add login
+
+ Add password
Sync logins
+
+ Sync passwords
Sync logins across devices
+
+ Sync passwords across devices
Saved logins
+
+ Saved passwords
The logins you save or sync to %s will show up here.
+
+ The passwords you save or sync to %s will be listed here. All passwords you save are encrypted.
+
Learn more about Sync.
+
+ Learn more about sync
Exceptions
Logins and passwords that are not saved will be shown here.
+
+ %s won’t save passwords for sites listed here.
Logins and passwords will not be saved for these sites.
+
+ %s won’t save passwords for these sites.
Delete all exceptions
Search logins
+
+ Search passwords
Site
@@ -1720,10 +1720,16 @@
Hide password
Unlock to view your saved logins
+
+ Unlock to view your saved passwords
Secure your logins and passwords
+
+ Secure your saved passwords
Set up a device lock pattern, PIN, or password to protect your saved logins and passwords from being accessed if someone else has your device.
+
+ Set up a device lock pattern, PIN, or password to protect your saved passwords from being accessed if someone else has your device.
Later
@@ -1740,6 +1746,8 @@
Last used
Sort logins menu
+
+ Sort passwords menu
@@ -1748,26 +1756,40 @@
Addresses
Credit cards
+
+ Payment methods
Save and autofill cards
+
+ Save and fill payment methods
Data is encrypted
+
+ %s encrypts all payment methods you save
Sync cards across devices
Sync cards
Add credit card
+
+ Add card
Manage saved cards
+
+ Manage cards
Add address
Manage addresses
Save and autofill addresses
+
+ Save and fill addresses
Include information like numbers, email and shipping addresses
+
+ Includes phone numbers and email addresses
Add card
@@ -1789,6 +1811,8 @@
Delete card
Are you sure you want to delete this credit card?
+
+ Delete card?
Delete
@@ -1801,14 +1825,22 @@
Saved cards
Please enter a valid credit card number
+
+ Enter a valid card number
Please fill out this field
+
+ Add a name
Unlock to view your saved cards
Secure your credit cards
+
+ Secure your saved payment methods
Set up a device lock pattern, PIN, or password to protect your saved credit cards from being accessed if someone else has your device.
+
+ Set up a device lock pattern, PIN, or password to protect your saved cards from being accessed if someone else has your device.
Set up now
@@ -1817,6 +1849,8 @@
Unlock your device
Unlock to use stored credit card information
+
+ Unlock to use saved payment methods
Add address
@@ -1853,6 +1887,8 @@
Delete address
Are you sure you want to delete this address?
+
+ Delete this address?
Delete
@@ -1868,28 +1904,18 @@
Add new search engine
Edit search engine
-
- Add
-
- Save
Edit
Delete
-
- Other
Name
-
- Name
Search engine name
Search string URL
- Search string to use
-
URL to use for search
Replace query with “%s”. Example:\nhttps://www.google.com/search?q=%s
@@ -1959,30 +1985,52 @@
Edit
Are you sure you want to delete this login?
+
+ Are you sure you want to delete this password?
Delete
Cancel
Login options
+
+ Password options
The editable text field for the web address of the login.
+
+ The editable text field for the website address of the password.
The editable text field for the username of the login.
+
+ The editable text field for the username of the password.
The editable text field for the password of the login.
+
+ The editable text field for the password.
Save changes to login.
+
+ Save changes.
Edit
+
+ Edit password
Add new login
+
+ Add password
Password required
+
+ Enter a password
Username required
+
+ Enter a username
Hostname required
+
+ Enter a web address
Voice search
@@ -2106,8 +2154,6 @@
- Review checker
-
Review Checker
Reliable reviews
@@ -2133,14 +2179,10 @@
letter grade from A to F.]]>
Reliable reviews. We believe the reviews are likely from real customers who left honest, unbiased reviews.
-
- We believe the reviews to be reliable.
We believe there’s a mix of reliable and unreliable reviews.
Unreliable reviews. We believe the reviews are likely fake or from biased reviewers.
-
- We believe the reviews are unreliable.
adjusted rating is based only on reviews we believe to be reliable.]]>
@@ -2156,8 +2198,6 @@
Show ads in review checker
- You’ll see occasional ads for relevant products. All ads must meet our review quality standards. %s
-
You’ll see occasional ads for relevant products. We only advertise products with reliable reviews. %s
Learn more
@@ -2184,8 +2224,6 @@
If you see this product is back in stock, report it and we’ll work on checking the reviews.
- Report this product is back in stock
-
Report product is in stock
Checking review quality
@@ -2236,17 +2274,17 @@
Learn more
- By selecting “Yes, try it” you agree to %1$s by Mozilla’s %2$s and %3$s.
+ By selecting “Yes, try it” you agree to %1$s by Mozilla’s %2$s and %3$s.
- By selecting “Yes, try it” you agree to the following from %1$s:
+ By selecting “Yes, try it” you agree to the following from %1$s:
- privacy policy
+ privacy policy
- Privacy policy
+ Privacy policy
- terms of use
+ terms of use
- Terms of use
+ Terms of use
Yes, try it
@@ -2337,9 +2375,83 @@
Completion dialog box
%s, Heading
+
+ Links
+
+ Links available
+
+
+ Translate this page?
+
+ Try private translations in %1$s
+
+ For your privacy, translations never leave your device. New languages and improvements coming soon! %1$s
+
+ Learn more
+
+ Translate from
+
+ Translate to
+
+ Not now
+
+ Done
+
+ Translate
+
+ Try again
+
+ Translating
+
+ Translating in Progress
+
+ There was a problem translating. Please try again.
+
+ Couldn’t load languages. Check your internet connection and try again.
+
+ Sorry, we don’t support %1$s yet.
+
+ Learn more
+
+
+
+ Translation Options
+
+ Always offer to translate
+
+ Always translate %1$s
+
+ Never translate %1$s
+
+ Never translate this site
+
+ Overrides all other settings
+
+ Overrides offers to translate
+
+ Translation settings
+
+ About translations in %1$s
+
+
+
+ Translations
+
+ Offer to translate when possible
+
+ Always download languages in data saving mode
+
+ Translation preferences
+
+ Automatic translation
+
+ Never translate these sites
+
+ Download languages
+
Automatic translation
@@ -2385,11 +2497,15 @@
Learn more
Available languages
-
+
required
+
+ %1$s (%2$s)
Download Languages
-
+
All languages
Delete
@@ -2399,4 +2515,65 @@
Download
Selected
+
+
+ Delete %1$s (%2$s)?
+
+ If you delete this language, %1$s will download partial languages to your cache as you translate.
+
+ Delete all languages (%1$s)?
+
+ If you delete all languages, %1$s will download partial languages to your cache as you translate.
+
+ Delete
+
+ Cancel
+
+
+ Download while in data saving mode (%1$s)?
+
+ We download partial languages to your cache to keep translations private.
+
+ Always download in data saving mode
+
+ Download
+
+ Download and translate
+
+ Cancel
+
+
+
+ Debug Tools
+
+ Navigate back
+
+ Tab Tools
+
+ Tab count
+
+ Active
+
+ Inactive
+
+ Private
+
+ Total
+
+ Tab creation tool
+
+ Tab quantity to create
+
+ Add to active tabs
+
+ Add to inactive tabs
+
+ Add to private tabs
diff --git a/app/src/nightly/baselineProfiles/baseline-prof.txt b/app/src/nightly/baselineProfiles/baseline-prof.txt
new file mode 100644
index 000000000..b6f12a83b
--- /dev/null
+++ b/app/src/nightly/baselineProfiles/baseline-prof.txt
@@ -0,0 +1,48599 @@
+Landroidx/activity/Cancellable;
+Landroidx/activity/ComponentActivity;
+HSPLandroidx/activity/ComponentActivity;->()V
+PLandroidx/activity/ComponentActivity;->()V
+HSPLandroidx/activity/ComponentActivity;->addMenuProvider(Landroidx/core/view/MenuProvider;)V
+PLandroidx/activity/ComponentActivity;->addMenuProvider(Landroidx/core/view/MenuProvider;)V
+HSPLandroidx/activity/ComponentActivity;->addOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->addOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
+PLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
+HSPLandroidx/activity/ComponentActivity;->addOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->addOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/ComponentActivity;->addOnNewIntentListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->addOnNewIntentListener(Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/ComponentActivity;->addOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->addOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/ComponentActivity;->addOnTrimMemoryListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->addOnTrimMemoryListener(Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/ComponentActivity;->createFullyDrawnExecutor()Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
+PLandroidx/activity/ComponentActivity;->createFullyDrawnExecutor()Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
+HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
+PLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
+HSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;
+PLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;
+HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;
+PLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;
+HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle;
+PLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle;
+HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;
+PLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;
+HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
+PLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
+HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
+PLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
+HSPLandroidx/activity/ComponentActivity;->invalidateMenu()V
+PLandroidx/activity/ComponentActivity;->invalidateMenu()V
+HSPLandroidx/activity/ComponentActivity;->lambda$new$2$androidx-activity-ComponentActivity(Landroid/content/Context;)V
+PLandroidx/activity/ComponentActivity;->lambda$new$2$androidx-activity-ComponentActivity(Landroid/content/Context;)V
+HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+PLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/activity/ComponentActivity;->registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
+PLandroidx/activity/ComponentActivity;->registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
+HSPLandroidx/activity/ComponentActivity;->registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultRegistry;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
+PLandroidx/activity/ComponentActivity;->registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultRegistry;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
+PLandroidx/activity/ComponentActivity;->removeMenuProvider(Landroidx/core/view/MenuProvider;)V
+HSPLandroidx/activity/ComponentActivity;->removeOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->removeOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/ComponentActivity;->removeOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->removeOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/ComponentActivity;->removeOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->removeOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V
+HSPLandroidx/activity/ComponentActivity;->removeOnTrimMemoryListener(Landroidx/core/util/Consumer;)V
+PLandroidx/activity/ComponentActivity;->removeOnTrimMemoryListener(Landroidx/core/util/Consumer;)V
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->run()V
+PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->run()V
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V
+Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable(Landroid/content/Context;)V
+PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable(Landroid/content/Context;)V
+Landroidx/activity/ComponentActivity$1;
+HSPLandroidx/activity/ComponentActivity$1;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$1;->(Landroidx/activity/ComponentActivity;)V
+Landroidx/activity/ComponentActivity$2;
+HSPLandroidx/activity/ComponentActivity$2;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$2;->(Landroidx/activity/ComponentActivity;)V
+Landroidx/activity/ComponentActivity$3;
+HSPLandroidx/activity/ComponentActivity$3;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$3;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+PLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+Landroidx/activity/ComponentActivity$4;
+HSPLandroidx/activity/ComponentActivity$4;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$4;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+PLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+Landroidx/activity/ComponentActivity$5;
+HSPLandroidx/activity/ComponentActivity$5;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$5;->(Landroidx/activity/ComponentActivity;)V
+HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+PLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+PLandroidx/activity/ComponentActivity$Api19Impl;->cancelPendingInputEvents(Landroid/view/View;)V
+Landroidx/activity/ComponentActivity$Api33Impl;
+HSPLandroidx/activity/ComponentActivity$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher;
+PLandroidx/activity/ComponentActivity$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher;
+Landroidx/activity/ComponentActivity$NonConfigurationInstances;
+Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
+Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;
+HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->(Landroidx/activity/ComponentActivity;)V
+PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->activityDestroyed()V
+Landroidx/activity/ComponentDialog;
+Landroidx/activity/FullyDrawnReporter;
+HSPLandroidx/activity/FullyDrawnReporter;->(Ljava/util/concurrent/Executor;Lkotlin/jvm/functions/Function0;)V
+PLandroidx/activity/FullyDrawnReporter;->(Ljava/util/concurrent/Executor;Lkotlin/jvm/functions/Function0;)V
+Landroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;
+HSPLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;->(Landroidx/activity/FullyDrawnReporter;)V
+PLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;->(Landroidx/activity/FullyDrawnReporter;)V
+Landroidx/activity/FullyDrawnReporterOwner;
+Landroidx/activity/OnBackPressedCallback;
+HSPLandroidx/activity/OnBackPressedCallback;->(Z)V
+PLandroidx/activity/OnBackPressedCallback;->(Z)V
+HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V
+PLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V
+HSPLandroidx/activity/OnBackPressedCallback;->isEnabled()Z
+PLandroidx/activity/OnBackPressedCallback;->isEnabled()Z
+HSPLandroidx/activity/OnBackPressedCallback;->remove()V
+PLandroidx/activity/OnBackPressedCallback;->remove()V
+HSPLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V
+PLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V
+HSPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V
+PLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V
+HSPLandroidx/activity/OnBackPressedCallback;->setEnabledChangedCallback$activity_release(Lkotlin/jvm/functions/Function0;)V
+PLandroidx/activity/OnBackPressedCallback;->setEnabledChangedCallback$activity_release(Lkotlin/jvm/functions/Function0;)V
+Landroidx/activity/OnBackPressedDispatcher;
+HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V
+PLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V
+PLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque;
+HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V
+PLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;
+PLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;
+HSPLandroidx/activity/OnBackPressedDispatcher;->hasEnabledCallbacks()Z
+PLandroidx/activity/OnBackPressedDispatcher;->hasEnabledCallbacks()Z
+HSPLandroidx/activity/OnBackPressedDispatcher;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
+PLandroidx/activity/OnBackPressedDispatcher;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
+HSPLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState$activity_release()V
+PLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState$activity_release()V
+Landroidx/activity/OnBackPressedDispatcher$1;
+HSPLandroidx/activity/OnBackPressedDispatcher$1;->(Landroidx/activity/OnBackPressedDispatcher;)V
+PLandroidx/activity/OnBackPressedDispatcher$1;->(Landroidx/activity/OnBackPressedDispatcher;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$1;->invoke()Ljava/lang/Object;
+PLandroidx/activity/OnBackPressedDispatcher$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/activity/OnBackPressedDispatcher$1;->invoke()V
+PLandroidx/activity/OnBackPressedDispatcher$1;->invoke()V
+Landroidx/activity/OnBackPressedDispatcher$2;
+HSPLandroidx/activity/OnBackPressedDispatcher$2;->(Landroidx/activity/OnBackPressedDispatcher;)V
+PLandroidx/activity/OnBackPressedDispatcher$2;->(Landroidx/activity/OnBackPressedDispatcher;)V
+Landroidx/activity/OnBackPressedDispatcher$Api33Impl;
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->()V
+PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->()V
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->()V
+PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->()V
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->createOnBackInvokedCallback(Lkotlin/jvm/functions/Function0;)Landroid/window/OnBackInvokedCallback;
+PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->createOnBackInvokedCallback(Lkotlin/jvm/functions/Function0;)Landroid/window/OnBackInvokedCallback;
+Landroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;
+HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function0;)V
+PLandroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;->(Lkotlin/jvm/functions/Function0;)V
+Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;
+HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V
+PLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V
+HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V
+PLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V
+HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+PLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;
+HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V
+PLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V
+PLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V
+Landroidx/activity/OnBackPressedDispatcherOwner;
+Landroidx/activity/R$id;
+Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner;
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->get(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner;
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->get(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner;
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->set(Landroid/view/View;Landroidx/activity/OnBackPressedDispatcherOwner;)V
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->set(Landroid/view/View;Landroidx/activity/OnBackPressedDispatcherOwner;)V
+Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Landroid/view/View;)Landroid/view/View;
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Landroid/view/View;)Landroid/view/View;
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->()V
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->()V
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->()V
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->()V
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->invoke(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner;
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->invoke(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner;
+HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+Landroidx/activity/compose/BackHandlerKt;
+HSPLandroidx/activity/compose/BackHandlerKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
+PLandroidx/activity/compose/BackHandlerKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
+Landroidx/activity/compose/BackHandlerKt$BackHandler$1$1;
+HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;Z)V
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;Z)V
+HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()Ljava/lang/Object;
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()Ljava/lang/Object;
+HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()V
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()V
+Landroidx/activity/compose/BackHandlerKt$BackHandler$2;
+HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V
+HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
+HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
+Landroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;
+HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$2$invoke$$inlined$onDispose$1;->dispose()V
+Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;
+HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;->(ZLandroidx/compose/runtime/State;)V
+PLandroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;->(ZLandroidx/compose/runtime/State;)V
+Landroidx/activity/compose/LocalOnBackPressedDispatcherOwner;
+HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V
+PLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V
+HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V
+PLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V
+HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->getCurrent(Landroidx/compose/runtime/Composer;I)Landroidx/activity/OnBackPressedDispatcherOwner;
+PLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->getCurrent(Landroidx/compose/runtime/Composer;I)Landroidx/activity/OnBackPressedDispatcherOwner;
+Landroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;
+HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->()V
+PLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->()V
+HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->()V
+PLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->()V
+HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->invoke()Landroidx/activity/OnBackPressedDispatcherOwner;
+PLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->invoke()Landroidx/activity/OnBackPressedDispatcherOwner;
+HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->invoke()Ljava/lang/Object;
+PLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->invoke()Ljava/lang/Object;
+Landroidx/activity/contextaware/ContextAware;
+Landroidx/activity/contextaware/ContextAwareHelper;
+HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V
+PLandroidx/activity/contextaware/ContextAwareHelper;->()V
+HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
+PLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
+PLandroidx/activity/contextaware/ContextAwareHelper;->clearAvailableContext()V
+HSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V
+PLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V
+Landroidx/activity/contextaware/OnContextAvailableListener;
+Landroidx/activity/result/ActivityResult;
+Landroidx/activity/result/ActivityResultCallback;
+Landroidx/activity/result/ActivityResultCaller;
+Landroidx/activity/result/ActivityResultLauncher;
+HSPLandroidx/activity/result/ActivityResultLauncher;->()V
+PLandroidx/activity/result/ActivityResultLauncher;->()V
+Landroidx/activity/result/ActivityResultRegistry;
+HSPLandroidx/activity/result/ActivityResultRegistry;->()V
+PLandroidx/activity/result/ActivityResultRegistry;->()V
+HSPLandroidx/activity/result/ActivityResultRegistry;->bindRcKey(ILjava/lang/String;)V
+PLandroidx/activity/result/ActivityResultRegistry;->bindRcKey(ILjava/lang/String;)V
+HSPLandroidx/activity/result/ActivityResultRegistry;->generateRandomNumber()I
+PLandroidx/activity/result/ActivityResultRegistry;->generateRandomNumber()I
+HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
+PLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
+HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
+PLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
+HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V
+PLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V
+HSPLandroidx/activity/result/ActivityResultRegistry;->unregister(Ljava/lang/String;)V
+PLandroidx/activity/result/ActivityResultRegistry;->unregister(Ljava/lang/String;)V
+Landroidx/activity/result/ActivityResultRegistry$1;
+HSPLandroidx/activity/result/ActivityResultRegistry$1;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
+PLandroidx/activity/result/ActivityResultRegistry$1;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
+HSPLandroidx/activity/result/ActivityResultRegistry$1;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+PLandroidx/activity/result/ActivityResultRegistry$1;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
+Landroidx/activity/result/ActivityResultRegistry$2;
+HSPLandroidx/activity/result/ActivityResultRegistry$2;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V
+PLandroidx/activity/result/ActivityResultRegistry$2;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V
+Landroidx/activity/result/ActivityResultRegistry$3;
+HSPLandroidx/activity/result/ActivityResultRegistry$3;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V
+PLandroidx/activity/result/ActivityResultRegistry$3;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V
+HSPLandroidx/activity/result/ActivityResultRegistry$3;->unregister()V
+PLandroidx/activity/result/ActivityResultRegistry$3;->unregister()V
+Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract;
+HSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;->(Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
+PLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;->(Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
+Landroidx/activity/result/ActivityResultRegistry$LifecycleContainer;
+HSPLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->(Landroidx/lifecycle/Lifecycle;)V
+PLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->(Landroidx/lifecycle/Lifecycle;)V
+HSPLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->addObserver(Landroidx/lifecycle/LifecycleEventObserver;)V
+PLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->addObserver(Landroidx/lifecycle/LifecycleEventObserver;)V
+PLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->clearObservers()V
+Landroidx/activity/result/ActivityResultRegistryOwner;
+Landroidx/activity/result/contract/ActivityResultContract;
+HSPLandroidx/activity/result/contract/ActivityResultContract;->()V
+PLandroidx/activity/result/contract/ActivityResultContract;->()V
+Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;
+HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V
+PLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V
+HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V
+PLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V
+Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;
+HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->()V
+PLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->()V
+HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+PLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+Landroidx/activity/result/contract/ActivityResultContracts$RequestPermission;
+HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestPermission;->()V
+PLandroidx/activity/result/contract/ActivityResultContracts$RequestPermission;->()V
+Landroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;
+HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V
+PLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V
+HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V
+PLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V
+Landroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;
+HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;->()V
+PLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;->()V
+HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+PLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
+Landroidx/appcompat/R$attr;
+Landroidx/appcompat/R$drawable;
+Landroidx/appcompat/R$id;
+Landroidx/appcompat/R$layout;
+Landroidx/appcompat/R$style;
+Landroidx/appcompat/R$styleable;
+HSPLandroidx/appcompat/R$styleable;->()V
+PLandroidx/appcompat/R$styleable;->()V
+Landroidx/appcompat/app/ActionBarDrawerToggle$DelegateProvider;
+Landroidx/appcompat/app/AlertController$AlertParams;
+HSPLandroidx/appcompat/app/AlertController$AlertParams;->(Landroid/content/Context;)V
+PLandroidx/appcompat/app/AlertController$AlertParams;->(Landroid/content/Context;)V
+Landroidx/appcompat/app/AlertDialog;
+HSPLandroidx/appcompat/app/AlertDialog;->resolveDialogTheme(Landroid/content/Context;I)I
+PLandroidx/appcompat/app/AlertDialog;->resolveDialogTheme(Landroid/content/Context;I)I
+Landroidx/appcompat/app/AlertDialog$Builder;
+HSPLandroidx/appcompat/app/AlertDialog$Builder;->(Landroid/content/Context;)V
+PLandroidx/appcompat/app/AlertDialog$Builder;->(Landroid/content/Context;)V
+HSPLandroidx/appcompat/app/AlertDialog$Builder;->(Landroid/content/Context;I)V
+PLandroidx/appcompat/app/AlertDialog$Builder;->(Landroid/content/Context;I)V
+Landroidx/appcompat/app/AppCompatActivity;
+HSPLandroidx/appcompat/app/AppCompatActivity;->()V
+PLandroidx/appcompat/app/AppCompatActivity;->()V
+HSPLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V
+PLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V
+HSPLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate;
+PLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate;
+HPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources;
+HSPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources;
+HSPLandroidx/appcompat/app/AppCompatActivity;->getSupportActionBar()Landroidx/appcompat/app/ActionBar;
+PLandroidx/appcompat/app/AppCompatActivity;->getSupportActionBar()Landroidx/appcompat/app/ActionBar;
+HSPLandroidx/appcompat/app/AppCompatActivity;->initDelegate()V
+PLandroidx/appcompat/app/AppCompatActivity;->initDelegate()V
+HSPLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V
+PLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V
+HSPLandroidx/appcompat/app/AppCompatActivity;->invalidateOptionsMenu()V
+PLandroidx/appcompat/app/AppCompatActivity;->invalidateOptionsMenu()V
+HSPLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V
+PLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V
+PLandroidx/appcompat/app/AppCompatActivity;->onDestroy()V
+HSPLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V
+PLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V
+HSPLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V
+PLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V
+HSPLandroidx/appcompat/app/AppCompatActivity;->onStart()V
+PLandroidx/appcompat/app/AppCompatActivity;->onStart()V
+PLandroidx/appcompat/app/AppCompatActivity;->onStop()V
+HSPLandroidx/appcompat/app/AppCompatActivity;->onSupportContentChanged()V
+PLandroidx/appcompat/app/AppCompatActivity;->onSupportContentChanged()V
+HSPLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V
+PLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V
+HSPLandroidx/appcompat/app/AppCompatActivity;->setContentView(Landroid/view/View;)V
+PLandroidx/appcompat/app/AppCompatActivity;->setContentView(Landroid/view/View;)V
+HSPLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V
+PLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V
+Landroidx/appcompat/app/AppCompatActivity$1;
+HSPLandroidx/appcompat/app/AppCompatActivity$1;->(Landroidx/appcompat/app/AppCompatActivity;)V
+PLandroidx/appcompat/app/AppCompatActivity$1;->(Landroidx/appcompat/app/AppCompatActivity;)V
+Landroidx/appcompat/app/AppCompatActivity$2;
+HSPLandroidx/appcompat/app/AppCompatActivity$2;->(Landroidx/appcompat/app/AppCompatActivity;)V
+PLandroidx/appcompat/app/AppCompatActivity$2;->(Landroidx/appcompat/app/AppCompatActivity;)V
+HSPLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V
+PLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V
+Landroidx/appcompat/app/AppCompatCallback;
+Landroidx/appcompat/app/AppCompatDelegate;
+HSPLandroidx/appcompat/app/AppCompatDelegate;->()V
+PLandroidx/appcompat/app/AppCompatDelegate;->()V
+HSPLandroidx/appcompat/app/AppCompatDelegate;->()V
+PLandroidx/appcompat/app/AppCompatDelegate;->()V
+HSPLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V
+PLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V
+HSPLandroidx/appcompat/app/AppCompatDelegate;->applyDayNightToActiveDelegates()V
+PLandroidx/appcompat/app/AppCompatDelegate;->applyDayNightToActiveDelegates()V
+HSPLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext(Landroid/content/Context;)V
+PLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext(Landroid/content/Context;)V
+HSPLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context;
+PLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context;
+HSPLandroidx/appcompat/app/AppCompatDelegate;->create(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)Landroidx/appcompat/app/AppCompatDelegate;
+PLandroidx/appcompat/app/AppCompatDelegate;->create(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)Landroidx/appcompat/app/AppCompatDelegate;
+HSPLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I
+PLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I
+HSPLandroidx/appcompat/app/AppCompatDelegate;->isAutoStorageOptedIn(Landroid/content/Context;)Z
+PLandroidx/appcompat/app/AppCompatDelegate;->isAutoStorageOptedIn(Landroid/content/Context;)Z
+PLandroidx/appcompat/app/AppCompatDelegate;->removeActivityDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V
+HSPLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V
+PLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V
+HSPLandroidx/appcompat/app/AppCompatDelegate;->setDefaultNightMode(I)V
+PLandroidx/appcompat/app/AppCompatDelegate;->setDefaultNightMode(I)V
+HSPLandroidx/appcompat/app/AppCompatDelegate;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
+PLandroidx/appcompat/app/AppCompatDelegate;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
+Landroidx/appcompat/app/AppCompatDelegateImpl;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(Z)Z
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(Z)Z
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(ZZ)Z
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(ZZ)Z
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyFixedSizeWindow()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->applyFixedSizeWindow()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateNightMode()I
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateNightMode()I
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->cleanupAutoManagers()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideAppConfiguration(Landroid/content/Context;ILandroidx/core/os/LocaleListCompat;Landroid/content/res/Configuration;Z)Landroid/content/res/Configuration;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideAppConfiguration(Landroid/content/Context;ILandroidx/core/os/LocaleListCompat;Landroid/content/res/Configuration;Z)Landroid/content/res/Configuration;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createSubDecor()Landroid/view/ViewGroup;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->createSubDecor()Landroid/view/ViewGroup;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->dismissPopups()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->endOnGoingFadeAnimation()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getActivityHandlesConfigChangesFlags(Landroid/content/Context;)I
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->getActivityHandlesConfigChangesFlags(Landroid/content/Context;)I
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getConfigurationLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->getConfigurationLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(IZ)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(IZ)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getSupportActionBar()Landroidx/appcompat/app/ActionBar;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->getSupportActionBar()Landroidx/appcompat/app/ActionBar;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getTitle()Ljava/lang/CharSequence;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->getTitle()Ljava/lang/CharSequence;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidateOptionsMenu()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidateOptionsMenu()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidatePanelMenu(I)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidatePanelMenu(I)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate(Landroid/os/Bundle;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate(Landroid/os/Bundle;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->onDestroy()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate(Landroid/os/Bundle;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate(Landroid/os/Bundle;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->onStop()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onSubDecorInstalled(Landroid/view/ViewGroup;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->onSubDecorInstalled(Landroid/view/ViewGroup;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->peekSupportActionBar()Landroidx/appcompat/app/ActionBar;
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->peekSupportActionBar()Landroidx/appcompat/app/ActionBar;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->sanitizeWindowFeatureId(I)I
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->sanitizeWindowFeatureId(I)I
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(Landroid/view/View;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(Landroid/view/View;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->shouldRegisterBackInvokedCallback()Z
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->shouldRegisterBackInvokedCallback()Z
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateAppConfiguration(ILandroidx/core/os/LocaleListCompat;Z)Z
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->updateAppConfiguration(ILandroidx/core/os/LocaleListCompat;Z)Z
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateBackInvokedCallbackState()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl;->updateBackInvokedCallbackState()V
+Landroidx/appcompat/app/AppCompatDelegateImpl$2;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$2;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->run()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$2;->run()V
+Landroidx/appcompat/app/AppCompatDelegateImpl$3;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$3;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
+Landroidx/appcompat/app/AppCompatDelegateImpl$5;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$5;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onAttachedFromWindow()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onAttachedFromWindow()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onDetachedFromWindow()V
+Landroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl;->createConfigurationContext(Landroid/content/Context;Landroid/content/res/Configuration;)Landroid/content/Context;
+PLandroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl;->createConfigurationContext(Landroid/content/Context;Landroid/content/res/Configuration;)Landroid/content/Context;
+Landroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;->getLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat;
+PLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;->getLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat;
+Landroidx/appcompat/app/AppCompatDelegateImpl$Api33Impl;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher;
+PLandroidx/appcompat/app/AppCompatDelegateImpl$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher;
+Landroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->bypassOnContentChanged(Landroid/view/Window$Callback;)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->bypassOnContentChanged(Landroid/view/Window$Callback;)V
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V
+Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;
+HSPLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;->(I)V
+PLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;->(I)V
+Landroidx/appcompat/app/AppCompatDialog;
+Landroidx/appcompat/app/AppCompatDialogFragment;
+Landroidx/appcompat/app/AppCompatViewInflater;
+HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V
+PLandroidx/appcompat/app/AppCompatViewInflater;->()V
+HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V
+PLandroidx/appcompat/app/AppCompatViewInflater;->()V
+HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/content/Context;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
+PLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/content/Context;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View;
+HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;ZZZZ)Landroid/view/View;
+PLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;ZZZZ)Landroid/view/View;
+HSPLandroidx/appcompat/app/AppCompatViewInflater;->themifyContext(Landroid/content/Context;Landroid/util/AttributeSet;ZZ)Landroid/content/Context;
+PLandroidx/appcompat/app/AppCompatViewInflater;->themifyContext(Landroid/content/Context;Landroid/util/AttributeSet;ZZ)Landroid/content/Context;
+Landroidx/appcompat/app/AppLocalesMetadataHolderService;
+HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService;->getServiceInfo(Landroid/content/Context;)Landroid/content/pm/ServiceInfo;
+PLandroidx/appcompat/app/AppLocalesMetadataHolderService;->getServiceInfo(Landroid/content/Context;)Landroid/content/pm/ServiceInfo;
+Landroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;
+HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I
+PLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I
+Landroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor;
+HSPLandroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor;->(Ljava/util/concurrent/Executor;)V
+PLandroidx/appcompat/app/AppLocalesStorageHelper$SerialExecutor;->(Ljava/util/concurrent/Executor;)V
+Landroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor;
+HSPLandroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor;->()V
+PLandroidx/appcompat/app/AppLocalesStorageHelper$ThreadPerTaskExecutor;->()V
+Landroidx/appcompat/content/res/AppCompatResources;
+HSPLandroidx/appcompat/content/res/AppCompatResources;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/content/res/AppCompatResources;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+Landroidx/appcompat/resources/R$drawable;
+Landroidx/appcompat/view/ContextThemeWrapper;
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->(Landroid/content/Context;I)V
+PLandroidx/appcompat/view/ContextThemeWrapper;->(Landroid/content/Context;I)V
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V
+PLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;
+PLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources;
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources;
+PLandroidx/appcompat/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources;
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
+PLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
+PLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme;
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V
+PLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->isEmptyConfiguration(Landroid/content/res/Configuration;)Z
+PLandroidx/appcompat/view/ContextThemeWrapper;->isEmptyConfiguration(Landroid/content/res/Configuration;)Z
+HSPLandroidx/appcompat/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
+PLandroidx/appcompat/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V
+Landroidx/appcompat/view/WindowCallbackWrapper;
+HSPLandroidx/appcompat/view/WindowCallbackWrapper;->(Landroid/view/Window$Callback;)V
+PLandroidx/appcompat/view/WindowCallbackWrapper;->(Landroid/view/Window$Callback;)V
+HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z
+PLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z
+HSPLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback;
+PLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback;
+HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V
+PLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V
+PLandroidx/appcompat/view/WindowCallbackWrapper;->onDetachedFromWindow()V
+HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
+PLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V
+HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V
+PLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V
+Landroidx/appcompat/view/menu/MenuBuilder$Callback;
+Landroidx/appcompat/widget/AppCompatDrawableManager;
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V
+PLandroidx/appcompat/widget/AppCompatDrawableManager;->()V
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V
+PLandroidx/appcompat/widget/AppCompatDrawableManager;->()V
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode;
+PLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode;
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager;
+PLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager;
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V
+PLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V
+Landroidx/appcompat/widget/AppCompatDrawableManager$1;
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->()V
+PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->()V
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains([II)Z
+PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains([II)Z
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
+PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
+PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
+HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
+PLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
+Landroidx/appcompat/widget/ContentFrameLayout;
+HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
+PLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+PLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue;
+PLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue;
+HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue;
+PLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue;
+HSPLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V
+PLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V
+PLandroidx/appcompat/widget/ContentFrameLayout;->onDetachedFromWindow()V
+HSPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V
+PLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V
+HSPLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V
+PLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V
+HSPLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V
+PLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V
+Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;
+Landroidx/appcompat/widget/DrawableUtils;
+HSPLandroidx/appcompat/widget/DrawableUtils;->()V
+PLandroidx/appcompat/widget/DrawableUtils;->()V
+HSPLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V
+PLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V
+Landroidx/appcompat/widget/FitWindowsLinearLayout;
+HSPLandroidx/appcompat/widget/FitWindowsLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
+PLandroidx/appcompat/widget/FitWindowsLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
+Landroidx/appcompat/widget/FitWindowsViewGroup;
+Landroidx/appcompat/widget/ResourceManagerInternal;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V
+PLandroidx/appcompat/widget/ResourceManagerInternal;->()V
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V
+PLandroidx/appcompat/widget/ResourceManagerInternal;->()V
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->checkVectorDrawableSetup(Landroid/content/Context;)V
+PLandroidx/appcompat/widget/ResourceManagerInternal;->checkVectorDrawableSetup(Landroid/content/Context;)V
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createCacheKey(Landroid/util/TypedValue;)J
+PLandroidx/appcompat/widget/ResourceManagerInternal;->createCacheKey(Landroid/util/TypedValue;)J
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->get()Landroidx/appcompat/widget/ResourceManagerInternal;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->get()Landroidx/appcompat/widget/ResourceManagerInternal;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getCachedDrawable(Landroid/content/Context;J)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->getCachedDrawable(Landroid/content/Context;J)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintListFromCache(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->getTintListFromCache(Landroid/content/Context;I)Landroid/content/res/ColorStateList;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->installDefaultInflateDelegates(Landroidx/appcompat/widget/ResourceManagerInternal;)V
+PLandroidx/appcompat/widget/ResourceManagerInternal;->installDefaultInflateDelegates(Landroidx/appcompat/widget/ResourceManagerInternal;)V
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->isVectorDrawable(Landroid/graphics/drawable/Drawable;)Z
+PLandroidx/appcompat/widget/ResourceManagerInternal;->isVectorDrawable(Landroid/graphics/drawable/Drawable;)Z
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->setHooks(Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;)V
+PLandroidx/appcompat/widget/ResourceManagerInternal;->setHooks(Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;)V
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawable(Landroid/content/Context;IZLandroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawable(Landroid/content/Context;IZLandroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
+PLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z
+Landroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;
+HSPLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;->(I)V
+PLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;->(I)V
+Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;
+Landroidx/appcompat/widget/ResourcesWrapper;
+Landroidx/appcompat/widget/TintTypedArray;
+HSPLandroidx/appcompat/widget/TintTypedArray;->(Landroid/content/Context;Landroid/content/res/TypedArray;)V
+PLandroidx/appcompat/widget/TintTypedArray;->(Landroid/content/Context;Landroid/content/res/TypedArray;)V
+HSPLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable;
+PLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable;
+HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[I)Landroidx/appcompat/widget/TintTypedArray;
+PLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[I)Landroidx/appcompat/widget/TintTypedArray;
+HSPLandroidx/appcompat/widget/TintTypedArray;->recycle()V
+PLandroidx/appcompat/widget/TintTypedArray;->recycle()V
+Landroidx/appcompat/widget/VectorEnabledTintResources;
+HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->()V
+PLandroidx/appcompat/widget/VectorEnabledTintResources;->()V
+HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->isCompatVectorFromResourcesEnabled()Z
+PLandroidx/appcompat/widget/VectorEnabledTintResources;->isCompatVectorFromResourcesEnabled()Z
+HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->shouldBeUsed()Z
+PLandroidx/appcompat/widget/VectorEnabledTintResources;->shouldBeUsed()Z
+Landroidx/appcompat/widget/ViewStubCompat;
+HSPLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
+PLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;)V
+HSPLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+PLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V
+HSPLandroidx/appcompat/widget/ViewStubCompat;->setVisibility(I)V
+PLandroidx/appcompat/widget/ViewStubCompat;->setVisibility(I)V
+Landroidx/appcompat/widget/ViewUtils;
+HSPLandroidx/appcompat/widget/ViewUtils;->()V
+PLandroidx/appcompat/widget/ViewUtils;->()V
+HSPLandroidx/appcompat/widget/ViewUtils;->makeOptionalFitsSystemWindows(Landroid/view/View;)V
+PLandroidx/appcompat/widget/ViewUtils;->makeOptionalFitsSystemWindows(Landroid/view/View;)V
+Landroidx/arch/core/executor/ArchTaskExecutor;
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V
+PLandroidx/arch/core/executor/ArchTaskExecutor;->()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V
+PLandroidx/arch/core/executor/ArchTaskExecutor;->()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V
+PLandroidx/arch/core/executor/ArchTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getIOThreadExecutor()Ljava/util/concurrent/Executor;
+PLandroidx/arch/core/executor/ArchTaskExecutor;->getIOThreadExecutor()Ljava/util/concurrent/Executor;
+HPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z
+PLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->lambda$static$1(Ljava/lang/Runnable;)V
+PLandroidx/arch/core/executor/ArchTaskExecutor;->lambda$static$1(Ljava/lang/Runnable;)V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V
+PLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V
+Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;
+HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;->()V
+PLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;->()V
+Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;
+HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->()V
+PLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->()V
+HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V
+PLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V
+Landroidx/arch/core/executor/DefaultTaskExecutor;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->()V
+PLandroidx/arch/core/executor/DefaultTaskExecutor;->()V
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+PLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V
+PLandroidx/arch/core/executor/DefaultTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V
+HPLandroidx/arch/core/executor/DefaultTaskExecutor;->isMainThread()Z
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->isMainThread()Z
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V
+PLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V
+Landroidx/arch/core/executor/DefaultTaskExecutor$1;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->(Landroidx/arch/core/executor/DefaultTaskExecutor;)V
+PLandroidx/arch/core/executor/DefaultTaskExecutor$1;->(Landroidx/arch/core/executor/DefaultTaskExecutor;)V
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+PLandroidx/arch/core/executor/DefaultTaskExecutor$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
+Landroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl;
+HSPLandroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+PLandroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
+Landroidx/arch/core/executor/TaskExecutor;
+HSPLandroidx/arch/core/executor/TaskExecutor;->()V
+PLandroidx/arch/core/executor/TaskExecutor;->()V
+PLandroidx/arch/core/executor/TaskExecutor;->executeOnMainThread(Ljava/lang/Runnable;)V
+Landroidx/arch/core/internal/FastSafeIterableMap;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->()V
+PLandroidx/arch/core/internal/FastSafeIterableMap;->()V
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry;
+PLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z
+PLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+Landroidx/arch/core/internal/SafeIterableMap;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->()V
+PLandroidx/arch/core/internal/SafeIterableMap;->()V
+HSPLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator;
+PLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
+PLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
+PLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry;
+HPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap;->size()I
+PLandroidx/arch/core/internal/SafeIterableMap;->size()I
+Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator;
+HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+Landroidx/arch/core/internal/SafeIterableMap$DescendingIterator;
+HSPLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->backward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
+Landroidx/arch/core/internal/SafeIterableMap$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V
+PLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
+Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V
+PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z
+PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/util/Map$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/util/Map$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+Landroidx/arch/core/internal/SafeIterableMap$ListIterator;
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/util/Map$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/util/Map$Entry;
+HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
+PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
+Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
+HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;->()V
+PLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;->()V
+Landroidx/arch/core/util/Function;
+Landroidx/collection/ArrayMap;
+HSPLandroidx/collection/ArrayMap;->()V
+PLandroidx/collection/ArrayMap;->()V
+HSPLandroidx/collection/ArrayMap;->keySet()Ljava/util/Set;
+PLandroidx/collection/ArrayMap;->keySet()Ljava/util/Set;
+Landroidx/collection/ArrayMap$KeyIterator;
+HSPLandroidx/collection/ArrayMap$KeyIterator;->(Landroidx/collection/ArrayMap;)V
+PLandroidx/collection/ArrayMap$KeyIterator;->(Landroidx/collection/ArrayMap;)V
+HSPLandroidx/collection/ArrayMap$KeyIterator;->elementAt(I)Ljava/lang/Object;
+PLandroidx/collection/ArrayMap$KeyIterator;->elementAt(I)Ljava/lang/Object;
+Landroidx/collection/ArrayMap$KeySet;
+HSPLandroidx/collection/ArrayMap$KeySet;->(Landroidx/collection/ArrayMap;)V
+PLandroidx/collection/ArrayMap$KeySet;->(Landroidx/collection/ArrayMap;)V
+PLandroidx/collection/ArrayMap$KeySet;->isEmpty()Z
+HSPLandroidx/collection/ArrayMap$KeySet;->iterator()Ljava/util/Iterator;
+PLandroidx/collection/ArrayMap$KeySet;->iterator()Ljava/util/Iterator;
+Landroidx/collection/ArraySet;
+HSPLandroidx/collection/ArraySet;->()V
+PLandroidx/collection/ArraySet;->()V
+HSPLandroidx/collection/ArraySet;->()V
+PLandroidx/collection/ArraySet;->()V
+HSPLandroidx/collection/ArraySet;->(I)V
+PLandroidx/collection/ArraySet;->(I)V
+HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z
+PLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z
+HSPLandroidx/collection/ArraySet;->allocArrays(I)V
+PLandroidx/collection/ArraySet;->allocArrays(I)V
+PLandroidx/collection/ArraySet;->binarySearch(I)I
+HSPLandroidx/collection/ArraySet;->clear()V
+PLandroidx/collection/ArraySet;->clear()V
+HSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
+PLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V
+HSPLandroidx/collection/ArraySet;->indexOf(Ljava/lang/Object;I)I
+PLandroidx/collection/ArraySet;->indexOf(Ljava/lang/Object;I)I
+HSPLandroidx/collection/ArraySet;->isEmpty()Z
+PLandroidx/collection/ArraySet;->isEmpty()Z
+HSPLandroidx/collection/ArraySet;->iterator()Ljava/util/Iterator;
+PLandroidx/collection/ArraySet;->iterator()Ljava/util/Iterator;
+HSPLandroidx/collection/ArraySet;->removeAt(I)Ljava/lang/Object;
+PLandroidx/collection/ArraySet;->removeAt(I)Ljava/lang/Object;
+HSPLandroidx/collection/ArraySet;->size()I
+PLandroidx/collection/ArraySet;->size()I
+HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
+PLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
+PLandroidx/collection/ArraySet;->valueAt(I)Ljava/lang/Object;
+Landroidx/collection/ArraySet$ElementIterator;
+HSPLandroidx/collection/ArraySet$ElementIterator;->(Landroidx/collection/ArraySet;)V
+PLandroidx/collection/ArraySet$ElementIterator;->(Landroidx/collection/ArraySet;)V
+PLandroidx/collection/ArraySet$ElementIterator;->elementAt(I)Ljava/lang/Object;
+PLandroidx/collection/ArraySet$ElementIterator;->removeAt(I)V
+Landroidx/collection/ContainerHelpers;
+HSPLandroidx/collection/ContainerHelpers;->()V
+PLandroidx/collection/ContainerHelpers;->()V
+HSPLandroidx/collection/ContainerHelpers;->binarySearch([III)I
+PLandroidx/collection/ContainerHelpers;->binarySearch([III)I
+HSPLandroidx/collection/ContainerHelpers;->idealByteArraySize(I)I
+PLandroidx/collection/ContainerHelpers;->idealByteArraySize(I)I
+HSPLandroidx/collection/ContainerHelpers;->idealIntArraySize(I)I
+PLandroidx/collection/ContainerHelpers;->idealIntArraySize(I)I
+Landroidx/collection/IndexBasedArrayIterator;
+HSPLandroidx/collection/IndexBasedArrayIterator;->(I)V
+PLandroidx/collection/IndexBasedArrayIterator;->(I)V
+HSPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z
+PLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z
+HSPLandroidx/collection/IndexBasedArrayIterator;->next()Ljava/lang/Object;
+PLandroidx/collection/IndexBasedArrayIterator;->next()Ljava/lang/Object;
+PLandroidx/collection/IndexBasedArrayIterator;->remove()V
+Landroidx/collection/LongSparseArray;
+Landroidx/collection/LruCache;
+HSPLandroidx/collection/LruCache;->(I)V
+PLandroidx/collection/LruCache;->(I)V
+Landroidx/collection/SimpleArrayMap;
+HSPLandroidx/collection/SimpleArrayMap;->()V
+PLandroidx/collection/SimpleArrayMap;->()V
+HSPLandroidx/collection/SimpleArrayMap;->(I)V
+PLandroidx/collection/SimpleArrayMap;->(I)V
+HSPLandroidx/collection/SimpleArrayMap;->allocArrays(I)V
+PLandroidx/collection/SimpleArrayMap;->allocArrays(I)V
+HSPLandroidx/collection/SimpleArrayMap;->binarySearchHashes([III)I
+PLandroidx/collection/SimpleArrayMap;->binarySearchHashes([III)I
+HSPLandroidx/collection/SimpleArrayMap;->clear()V
+PLandroidx/collection/SimpleArrayMap;->clear()V
+HSPLandroidx/collection/SimpleArrayMap;->containsKey(Ljava/lang/Object;)Z
+PLandroidx/collection/SimpleArrayMap;->containsKey(Ljava/lang/Object;)Z
+HSPLandroidx/collection/SimpleArrayMap;->freeArrays([I[Ljava/lang/Object;I)V
+PLandroidx/collection/SimpleArrayMap;->freeArrays([I[Ljava/lang/Object;I)V
+HSPLandroidx/collection/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/collection/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/collection/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I
+PLandroidx/collection/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I
+HSPLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I
+PLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I
+HSPLandroidx/collection/SimpleArrayMap;->isEmpty()Z
+PLandroidx/collection/SimpleArrayMap;->isEmpty()Z
+HSPLandroidx/collection/SimpleArrayMap;->keyAt(I)Ljava/lang/Object;
+PLandroidx/collection/SimpleArrayMap;->keyAt(I)Ljava/lang/Object;
+HSPLandroidx/collection/SimpleArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/collection/SimpleArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
+PLandroidx/collection/SimpleArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
+HSPLandroidx/collection/SimpleArrayMap;->size()I
+PLandroidx/collection/SimpleArrayMap;->size()I
+HSPLandroidx/collection/SimpleArrayMap;->valueAt(I)Ljava/lang/Object;
+PLandroidx/collection/SimpleArrayMap;->valueAt(I)Ljava/lang/Object;
+Landroidx/collection/SparseArrayCompat;
+HSPLandroidx/collection/SparseArrayCompat;->()V
+PLandroidx/collection/SparseArrayCompat;->()V
+HSPLandroidx/collection/SparseArrayCompat;->()V
+PLandroidx/collection/SparseArrayCompat;->()V
+HPLandroidx/collection/SparseArrayCompat;->(I)V
+HSPLandroidx/collection/SparseArrayCompat;->(I)V
+HSPLandroidx/collection/SparseArrayCompat;->clear()V
+PLandroidx/collection/SparseArrayCompat;->clear()V
+HPLandroidx/collection/SparseArrayCompat;->containsValue(Ljava/lang/Object;)Z
+HSPLandroidx/collection/SparseArrayCompat;->containsValue(Ljava/lang/Object;)Z
+HSPLandroidx/collection/SparseArrayCompat;->get(I)Ljava/lang/Object;
+PLandroidx/collection/SparseArrayCompat;->get(I)Ljava/lang/Object;
+HSPLandroidx/collection/SparseArrayCompat;->get(ILjava/lang/Object;)Ljava/lang/Object;
+PLandroidx/collection/SparseArrayCompat;->get(ILjava/lang/Object;)Ljava/lang/Object;
+HPLandroidx/collection/SparseArrayCompat;->indexOfValue(Ljava/lang/Object;)I
+HSPLandroidx/collection/SparseArrayCompat;->indexOfValue(Ljava/lang/Object;)I
+HSPLandroidx/collection/SparseArrayCompat;->isEmpty()Z
+PLandroidx/collection/SparseArrayCompat;->isEmpty()Z
+HSPLandroidx/collection/SparseArrayCompat;->keyAt(I)I
+PLandroidx/collection/SparseArrayCompat;->keyAt(I)I
+HPLandroidx/collection/SparseArrayCompat;->put(ILjava/lang/Object;)V
+HSPLandroidx/collection/SparseArrayCompat;->put(ILjava/lang/Object;)V
+HPLandroidx/collection/SparseArrayCompat;->size()I
+HSPLandroidx/collection/SparseArrayCompat;->size()I
+HSPLandroidx/collection/SparseArrayCompat;->valueAt(I)Ljava/lang/Object;
+PLandroidx/collection/SparseArrayCompat;->valueAt(I)Ljava/lang/Object;
+Landroidx/collection/SparseArrayKt;
+HSPLandroidx/collection/SparseArrayKt;->valueIterator(Landroidx/collection/SparseArrayCompat;)Ljava/util/Iterator;
+PLandroidx/collection/SparseArrayKt;->valueIterator(Landroidx/collection/SparseArrayCompat;)Ljava/util/Iterator;
+Landroidx/collection/SparseArrayKt$valueIterator$1;
+HPLandroidx/collection/SparseArrayKt$valueIterator$1;->(Landroidx/collection/SparseArrayCompat;)V
+HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->(Landroidx/collection/SparseArrayCompat;)V
+HPLandroidx/collection/SparseArrayKt$valueIterator$1;->hasNext()Z
+HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->hasNext()Z
+HPLandroidx/collection/SparseArrayKt$valueIterator$1;->next()Ljava/lang/Object;
+HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->next()Ljava/lang/Object;
+Landroidx/compose/animation/FlingCalculator;
+HSPLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V
+PLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V
+HSPLandroidx/compose/animation/FlingCalculator;->computeDeceleration(Landroidx/compose/ui/unit/Density;)F
+PLandroidx/compose/animation/FlingCalculator;->computeDeceleration(Landroidx/compose/ui/unit/Density;)F
+Landroidx/compose/animation/FlingCalculatorKt;
+HSPLandroidx/compose/animation/FlingCalculatorKt;->()V
+PLandroidx/compose/animation/FlingCalculatorKt;->()V
+HSPLandroidx/compose/animation/FlingCalculatorKt;->access$computeDeceleration(FF)F
+PLandroidx/compose/animation/FlingCalculatorKt;->access$computeDeceleration(FF)F
+HSPLandroidx/compose/animation/FlingCalculatorKt;->computeDeceleration(FF)F
+PLandroidx/compose/animation/FlingCalculatorKt;->computeDeceleration(FF)F
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->()V
+PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->()V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->(Landroidx/compose/ui/unit/Density;)V
+PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->(Landroidx/compose/ui/unit/Density;)V
+Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->()V
+PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->()V
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F
+PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F
+HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/DecayAnimationSpec;
+PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/DecayAnimationSpec;
+Landroidx/compose/animation/core/Animatable;
+HSPLandroidx/compose/animation/core/Animatable;->