Merge remote-tracking branch 'upstream/master' into fork

pull/58/head
Adam Novak 4 years ago
commit e927400939

@ -11,6 +11,7 @@ apply plugin: 'com.google.android.gms.oss-licenses-plugin'
import com.android.build.OutputFile
import groovy.json.JsonOutput
import org.gradle.internal.logging.text.StyledTextOutput.Style
import org.gradle.internal.logging.text.StyledTextOutputFactory
import org.mozilla.fenix.gradle.tasks.LintUnitTestRunner
@ -59,12 +60,14 @@ android {
shrinkResources false
minifyEnabled false
applicationIdSuffix ".fenix.debug"
buildConfigField "String", "AMO_COLLECTION", "\"83a9cccfe6e24a34bd7b155ff9ee32\""
resValue "bool", "IS_DEBUG", "true"
pseudoLocalesEnabled true
}
nightly releaseTemplate >> {
applicationIdSuffix ".fenix"
buildConfigField "boolean", "USE_RELEASE_VERSIONING", "true"
buildConfigField "String", "AMO_COLLECTION", "\"83a9cccfe6e24a34bd7b155ff9ee32\""
def deepLinkSchemeValue = "fenix-nightly"
buildConfigField "String", "DEEP_LINK_SCHEME", "\"$deepLinkSchemeValue\""
manifestPlaceholders = ["deepLinkScheme": deepLinkSchemeValue]
@ -533,7 +536,7 @@ dependencies {
}
if (project.hasProperty("coverage")) {
tasks.withType(Test) {
tasks.withType(Test).configureEach {
jacoco.includeNoLocationClasses = true
}
@ -578,7 +581,7 @@ if (project.hasProperty("coverage")) {
// Task for printing APK information for the requested variant
// Usage: "./gradlew printVariants
// -------------------------------------------------------------------------------------------------
task printVariants {
tasks.register('printVariants') {
doLast {
def variants = android.applicationVariants.collect {[
apks: it.variantData.outputScope.apkDatas.collect {[
@ -597,11 +600,13 @@ task printVariants {
build_type: 'androidTest',
name: 'androidTest',
])
println 'variants: ' + groovy.json.JsonOutput.toJson(variants)
println 'variants: ' + JsonOutput.toJson(variants)
}
}
task 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[]{")
@ -618,12 +623,12 @@ task buildTranslationArray {
android.defaultConfig.buildConfigField "String[]", "SUPPORTED_LOCALE_ARRAY", foundLocalesString
}
task lintUnitTestRunner(type: LintUnitTestRunner)
tasks.register('lintUnitTestRunner', LintUnitTestRunner)
afterEvaluate {
// Format test output. Ported from AC #2401
tasks.matching {it instanceof Test}.all {
tasks.withType(Test).configureEach {
systemProperty "robolectric.logging", "stdout"
systemProperty "logging.test-mode", "true"
@ -711,5 +716,5 @@ tasks.register("updateCookiesExtensionVersion", Copy) { task ->
updateExtensionVersion(task, 'src/main/assets/extensions/cookies')
}
preBuild.dependsOn updateAdsExtensionVersion
preBuild.dependsOn updateCookiesExtensionVersion
preBuild.dependsOn "updateAdsExtensionVersion"
preBuild.dependsOn "updateCookiesExtensionVersion"

@ -3284,7 +3284,7 @@ app_theme:
- interaction
notification_emails:
- fenix-core@mozilla.com
expires: "2020-04-01"
expires: "2021-04-01"
pocket:
pocket_top_site_clicked:
@ -3946,3 +3946,31 @@ progressive_web_app:
- fenix-core@mozilla.com
- erichards@mozilla.com
expires: "2021-03-01"
master_password:
displayed:
type: event
description: |
The master password migration dialog was displayed
bugs:
- https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534
data_sensitivity:
- interaction
notification_emails:
- fenix-core@mozilla.com
expires: "2021-03-01"
migration:
type: event
description: |
Logins were successfully migrated using a master password.
bugs:
- https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534
data_reviews:
- https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534
data_sensitivity:
- interaction
notification_emails:
- fenix-core@mozilla.com
expires: "2021-03-01"

@ -1,5 +1,6 @@
package org.mozilla.fenix.ui
import androidx.test.espresso.IdlingRegistry
import org.mozilla.fenix.helpers.TestAssetHelper
/* This Source Code Form is subject to the terms of the Mozilla Public
@ -11,8 +12,10 @@ import org.junit.Rule
import org.junit.Before
import org.junit.After
import org.junit.Test
import org.mozilla.fenix.R
import org.mozilla.fenix.helpers.AndroidAssetDispatcher
import org.mozilla.fenix.helpers.HomeActivityTestRule
import org.mozilla.fenix.helpers.RecyclerViewIdlingResource
import org.mozilla.fenix.ui.robots.homeScreen
import org.mozilla.fenix.ui.robots.navigationToolbar
@ -25,6 +28,7 @@ class SettingsAddonsTest {
/* ktlint-disable no-blank-line-before-rbrace */ // This imposes unreadable grouping.
private lateinit var mockWebServer: MockWebServer
private var addonsListIdlingResource: RecyclerViewIdlingResource? = null
@get:Rule
val activityTestRule = HomeActivityTestRule()
@ -40,6 +44,10 @@ class SettingsAddonsTest {
@After
fun tearDown() {
mockWebServer.shutdown()
if (addonsListIdlingResource != null) {
IdlingRegistry.getInstance().unregister(addonsListIdlingResource!!)
}
}
// Walks through settings add-ons menu to ensure all items are present
@ -51,6 +59,9 @@ class SettingsAddonsTest {
verifyAdvancedHeading()
verifyAddons()
}.openAddonsManagerMenu {
addonsListIdlingResource =
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.add_ons_list), 1)
IdlingRegistry.getInstance().register(addonsListIdlingResource!!)
verifyAddonsItems()
}
}
@ -65,6 +76,9 @@ class SettingsAddonsTest {
}.openNewTabAndEnterToBrowser(defaultWebPage.url) {
}.openThreeDotMenu {
}.openAddonsManagerMenu {
addonsListIdlingResource =
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.add_ons_list), 1)
IdlingRegistry.getInstance().register(addonsListIdlingResource!!)
clickInstallAddon(addonName)
verifyAddonPrompt(addonName)
cancelInstallAddon()
@ -85,6 +99,9 @@ class SettingsAddonsTest {
verifyAdvancedHeading()
verifyAddons()
}.openAddonsManagerMenu {
addonsListIdlingResource =
RecyclerViewIdlingResource(activityTestRule.activity.findViewById(R.id.add_ons_list), 1)
IdlingRegistry.getInstance().register(addonsListIdlingResource!!)
clickInstallAddon(addonName)
acceptInstallAddon()
verifyDownloadAddonPrompt(addonName, activityTestRule)

@ -52,6 +52,8 @@ class SettingsAdvancedTest {
// ADVANCED
verifyAdvancedHeading()
verifyAddons()
verifyOpenLinksInAppsButton()
verifyOpenLinksInAppsSwitchDefault()
verifyRemoteDebug()
verifyLeakCanaryButton()
}

@ -69,6 +69,7 @@ class SettingsBasicsTest {
verifyBasicsHeading()
verifySearchEngineButton()
verifyDefaultBrowserItem()
verifyCloseTabsItem()
// drill down to submenu
}.openSearchSubMenu {
verifyDefaultSearchEngineHeader()
@ -168,6 +169,17 @@ class SettingsBasicsTest {
}
}
@Test
fun changeCloseTabsSetting() {
// Goes through the settings and verified the close tabs setting options.
homeScreen {
}.openThreeDotMenu {
}.openSettings {
}.openCloseTabsSubMenu {
verifyOptions()
}
}
@Test
fun changeAccessibiltySettings() {
// Goes through the settings and changes the default text on a webpage, then verifies if the text has changed.

@ -147,10 +147,6 @@ class SettingsPrivacyTest {
verifyNavigationToolBarHeader()
verifyDataCollectionSubMenuItems()
}.goBack {
// OPEN LINKS IN APPS
verifyOpenLinksInAppsButton()
verifyOpenLinksInAppsSwitchDefault()
}.goBack {
verifyHomeComponent()
}

@ -285,14 +285,6 @@ class SmokeTest {
}.goToSearchEngine {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
}.openTabDrawer {
}.openNewTab {
clickSearchEngineButton()
mDevice.waitForIdle()
changeDefaultSearchEngine("Twitter")
verifySearchEngineIcon("Twitter")
}.goToSearchEngine {
}.enterURLAndEnterToBrowser(defaultWebPage.url) {
}.openTabDrawer {
}.openNewTab {
clickSearchEngineButton()
changeDefaultSearchEngine("Wikipedia")

@ -248,8 +248,6 @@ private fun assertSearchEngineList() {
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
onView(withText("DuckDuckGo"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
onView(withText("Twitter"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
onView(withText("Wikipedia"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
}

@ -51,6 +51,7 @@ class SettingsRobot {
fun verifyAccessibilityButton() = assertAccessibilityButton()
fun verifySetAsDefaultBrowserButton() = assertSetAsDefaultBrowserButton()
fun verifyDefaultBrowserItem() = assertDefaultBrowserItem()
fun verifyCloseTabsItem() = assertCloseTabsItem()
fun verifyDefaultBrowserIsDisaled() = assertDefaultBrowserIsDisabled()
fun clickDefaultBrowserSwitch() = toggleDefaultBrowserSwitch()
fun verifyAndroidDefaultAppsMenuAppears() = assertAndroidDefaultAppsMenuAppears()
@ -134,6 +135,15 @@ class SettingsRobot {
return SettingsSubMenuThemeRobot.Transition()
}
fun openCloseTabsSubMenu(interact: SettingsSubMenuTabsRobot.() -> Unit): SettingsSubMenuTabsRobot.Transition {
fun closeTabsButton() = onView(withText("Close tabs"))
closeTabsButton().click()
SettingsSubMenuTabsRobot().interact()
return SettingsSubMenuTabsRobot.Transition()
}
fun openAccessibilitySubMenu(interact: SettingsSubMenuAccessibilityRobot.() -> Unit): SettingsSubMenuAccessibilityRobot.Transition {
fun accessibilityButton() = onView(withText("Accessibility"))
@ -237,8 +247,11 @@ private fun assertSettingsView() {
}
// GENERAL SECTION
private fun assertGeneralHeading() = onView(withText("General"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
private fun assertGeneralHeading() {
scrollToElementByText("General")
onView(withText("General"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
}
private fun assertSearchEngineButton() {
mDevice.wait(Until.findObject(By.text("Search")), waitingTime)
@ -284,8 +297,15 @@ private fun assertDefaultBrowserItem() {
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
}
private fun assertCloseTabsItem() {
mDevice.wait(Until.findObject(By.text("Close tabs")), waitingTime)
onView(withText("Close tabs"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
}
// PRIVACY SECTION
private fun assertPrivacyHeading() {
scrollToElementByText("Privacy and security")
onView(withText("Privacy and security"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
}
@ -345,11 +365,16 @@ private fun assertDataCollectionButton() = onView(withText("Data collection"))
private fun openLinksInAppsButton() = onView(withText("Open links in apps"))
private fun assertOpenLinksInAppsButton() = openLinksInAppsButton()
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
private fun assertOpenLinksInAppsButton() {
scrollToElementByText("Open links in apps")
openLinksInAppsButton()
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
}
private fun assertOpenLinksInAppsValue() = openLinksInAppsButton()
.assertIsEnabled(isEnabled = true)
private fun assertOpenLinksInAppsValue() {
scrollToElementByText("Open links in apps")
openLinksInAppsButton().assertIsEnabled(isEnabled = true)
}
// DEVELOPER TOOLS SECTION
private fun assertDeveloperToolsHeading() {

@ -64,8 +64,6 @@ private fun assertSearchEngineList() {
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
onView(withText("DuckDuckGo"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
onView(withText("Twitter"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
onView(withText("Wikipedia"))
.check(matches(withEffectiveVisibility(Visibility.VISIBLE)))
onView(withText("Add search engine"))

@ -0,0 +1,58 @@
/* 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/. */
@file:Suppress("TooManyFunctions")
package org.mozilla.fenix.ui.robots
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.assertion.ViewAssertions
import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import org.hamcrest.CoreMatchers.allOf
/**
* Implementation of Robot Pattern for the settings Tabs sub menu.
*/
class SettingsSubMenuTabsRobot {
fun verifyOptions() = assertOptions()
class Transition {
val mDevice = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
fun goBack(interact: SettingsRobot.() -> Unit): SettingsRobot.Transition {
mDevice.waitForIdle()
goBackButton().perform(ViewActions.click())
SettingsRobot().interact()
return SettingsRobot.Transition()
}
}
}
private fun assertOptions() {
afterOneDayToggle()
.check(ViewAssertions.matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
manualToggle()
.check(ViewAssertions.matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
afterOneWeekToggle()
.check(ViewAssertions.matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
afterOneMonthToggle()
.check(ViewAssertions.matches(ViewMatchers.withEffectiveVisibility(ViewMatchers.Visibility.VISIBLE)))
}
private fun manualToggle() = onView(withText("Manually"))
private fun afterOneDayToggle() = onView(withText("After one day"))
private fun afterOneWeekToggle() = onView(withText("After one week"))
private fun afterOneMonthToggle() = onView(withText("After one month"))
private fun goBackButton() =
onView(allOf(ViewMatchers.withContentDescription("Navigate up")))

@ -21,10 +21,6 @@ object FeatureFlags {
*/
val syncedTabsInTabsTray = Config.channel.isNightlyOrDebug
/**
* Enables viewing tab history
*/
val tabHistory = true
/**
* Enables the new search experience
*/
@ -38,19 +34,11 @@ object FeatureFlags {
/**
* Enables wait til first contentful paint
*/
val waitUntilPaintToDraw = true // Just enables the setting in Secret Settings
val waitUntilPaintToDraw = true
/**
* Enables downloads with external download managers.
*/
val externalDownloadManager = true // Just enables the setting in Secret Settings
val externalDownloadManager = true
/**
* Enables viewing downloads in browser.
*/
val viewDownloads = true
/**
* Enables selecting from multiple logins.
*/
val loginSelect = true
}

@ -164,9 +164,7 @@ open class FenixApplication : LocaleAwareApplication(), Provider {
}
private fun restoreDownloads() {
if (FeatureFlags.viewDownloads) {
components.useCases.downloadUseCases.restoreDownloads()
}
components.useCases.downloadUseCases.restoreDownloads()
}
private fun initVisualCompletenessQueueAndQueueTasks() {

@ -281,6 +281,14 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
}
settings().wasDefaultBrowserOnLastResume = settings().isDefaultBrowser()
if (!settings().manuallyCloseTabs) {
components.core.store.state.tabs.filter {
(System.currentTimeMillis() - it.lastAccess) > settings().getTabTimeout()
}.forEach {
components.useCases.tabsUseCases.removeTab(it.id)
}
}
}
}
@ -462,8 +470,14 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
super.onBackPressed()
}
private fun isAndroidN(): Boolean =
Build.VERSION.SDK_INT == Build.VERSION_CODES.N || Build.VERSION.SDK_INT == Build.VERSION_CODES.N_MR1
private fun shouldUseCustomBackLongPress(): Boolean {
val isAndroidN =
Build.VERSION.SDK_INT == Build.VERSION_CODES.N || Build.VERSION.SDK_INT == Build.VERSION_CODES.N_MR1
// Huawei devices seem to have problems with onKeyLongPress
// See https://github.com/mozilla-mobile/fenix/issues/13498
val isHuawei = Build.MANUFACTURER.equals("huawei", ignoreCase = true)
return isAndroidN || isHuawei
}
private fun handleBackLongPress(): Boolean {
supportFragmentManager.primaryNavigationFragment?.childFragmentManager?.fragments?.forEach {
@ -476,12 +490,12 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
final override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
// Inspired by https://searchfox.org/mozilla-esr68/source/mobile/android/base/java/org/mozilla/gecko/BrowserApp.java#584-613
// Android N has broken passing onKeyLongPress events for the back button, so we
// Android N and Huawei devices have broken onKeyLongPress events for the back button, so we
// instead implement the long press behavior ourselves
// - For short presses, we cancel the callback in onKeyUp
// - For long presses, the normal keypress is marked as cancelled, hence won't be handled elsewhere
// (but Android still provides the haptic feedback), and the long press action is run
if (isAndroidN() && keyCode == KeyEvent.KEYCODE_BACK) {
if (shouldUseCustomBackLongPress() && keyCode == KeyEvent.KEYCODE_BACK) {
backLongPressJob = lifecycleScope.launch {
delay(ViewConfiguration.getLongPressTimeout().toLong())
handleBackLongPress()
@ -491,7 +505,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
}
final override fun onKeyUp(keyCode: Int, event: KeyEvent?): Boolean {
if (isAndroidN() && keyCode == KeyEvent.KEYCODE_BACK) {
if (shouldUseCustomBackLongPress() && keyCode == KeyEvent.KEYCODE_BACK) {
backLongPressJob?.cancel()
}
return super.onKeyUp(keyCode, event)
@ -500,7 +514,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity {
final override fun onKeyLongPress(keyCode: Int, event: KeyEvent?): Boolean {
// onKeyLongPress is broken in Android N so we don't handle back button long presses here
// for N. The version check ensures we don't handle back button long presses twice.
if (!isAndroidN() && keyCode == KeyEvent.KEYCODE_BACK) {
if (!shouldUseCustomBackLongPress() && keyCode == KeyEvent.KEYCODE_BACK) {
return handleBackLongPress()
}
return super.onKeyLongPress(keyCode, event)

@ -508,7 +508,7 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
onNeedToRequestPermissions = { permissions ->
requestPermissions(permissions, REQUEST_CODE_PROMPT_PERMISSIONS)
},
loginPickerView = if (FeatureFlags.loginSelect) loginSelectBar else null,
loginPickerView = loginSelectBar,
onManageLogins = {
browserAnimator.captureEngineViewAndDrawStatically {
val directions =
@ -1163,6 +1163,8 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
}
override fun onAccessibilityStateChanged(enabled: Boolean) {
browserToolbarView.setScrollFlags(enabled)
if (_browserToolbarView != null) {
browserToolbarView.setScrollFlags(enabled)
}
}
}

@ -111,7 +111,7 @@ class Core(private val context: Context, private val crashReporter: CrashReporti
* This is consistent with both Fennec and Firefox Desktop.
*/
if (Config.channel.isNightlyOrDebug || Config.channel.isBeta) {
WebCompatReporterFeature.install(it)
WebCompatReporterFeature.install(it, "fenix")
}
}
}

@ -186,6 +186,9 @@ sealed class Event {
object ProgressiveWebAppOpenFromHomescreenTap : Event()
object ProgressiveWebAppInstallAsShortcut : Event()
object MasterPasswordMigrationSuccess : Event()
object MasterPasswordMigrationDisplayed : Event()
// Interaction events with extras
data class ProgressiveWebAppForeground(val timeForegrounded: Long) : Event() {

@ -27,6 +27,7 @@ import org.mozilla.fenix.GleanMetrics.FindInPage
import org.mozilla.fenix.GleanMetrics.History
import org.mozilla.fenix.GleanMetrics.LoginDialog
import org.mozilla.fenix.GleanMetrics.Logins
import org.mozilla.fenix.GleanMetrics.MasterPassword
import org.mozilla.fenix.GleanMetrics.MediaNotification
import org.mozilla.fenix.GleanMetrics.MediaState
import org.mozilla.fenix.GleanMetrics.Metrics
@ -684,6 +685,13 @@ private val Event.wrapper: EventWrapper<*>?
{ ProgressiveWebApp.backgroundKeys.valueOf(it) }
)
Event.MasterPasswordMigrationDisplayed -> EventWrapper<NoExtraKeys>(
{ MasterPassword.displayed.record(it) }
)
Event.MasterPasswordMigrationSuccess -> EventWrapper<NoExtraKeys>(
{ MasterPassword.migration.record(it) }
)
// Don't record other events in Glean:
is Event.AddBookmark -> null
is Event.OpenedBookmark -> null

@ -4,6 +4,8 @@
package org.mozilla.fenix.components.tips
import android.graphics.drawable.Drawable
sealed class TipType {
data class Button(val text: String, val action: () -> Unit) : TipType()
}
@ -13,7 +15,8 @@ open class Tip(
val identifier: String,
val title: String,
val description: String,
val learnMoreURL: String?
val learnMoreURL: String?,
val titleDrawable: Drawable? = null
)
interface TipProvider {

@ -0,0 +1,265 @@
/* 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.components.tips.providers
import android.content.Context
import android.text.Editable
import android.text.TextWatcher
import android.view.LayoutInflater
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
import com.google.android.material.button.MaterialButton
import com.google.android.material.textfield.TextInputEditText
import com.google.android.material.textfield.TextInputLayout
import io.sentry.Sentry
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import mozilla.appservices.logins.IdCollisionException
import mozilla.appservices.logins.InvalidRecordException
import mozilla.appservices.logins.LoginsStorageException
import mozilla.appservices.logins.ServerPassword
import mozilla.components.concept.storage.Login
import mozilla.components.support.migration.FennecLoginsMPImporter
import mozilla.components.support.migration.FennecProfile
import org.mozilla.fenix.R
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.tips.Tip
import org.mozilla.fenix.components.tips.TipProvider
import org.mozilla.fenix.components.tips.TipType
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.metrics
import org.mozilla.fenix.ext.settings
/**
* Tip explaining to master password users how to migrate their logins.
*/
class MasterPasswordTipProvider(
private val context: Context,
private val navigateToLogins: () -> Unit,
private val dismissTip: (Tip) -> Unit
) : TipProvider {
private val fennecLoginsMPImporter: FennecLoginsMPImporter? by lazy {
FennecProfile.findDefault(
context,
context.components.analytics.crashReporter
)?.let {
FennecLoginsMPImporter(
it
)
}
}
override val tip: Tip? by lazy { masterPasswordMigrationTip() }
override val shouldDisplay: Boolean by lazy {
context.settings().shouldDisplayMasterPasswordMigrationTip &&
fennecLoginsMPImporter?.hasMasterPassword() == true
}
private fun masterPasswordMigrationTip(): Tip =
Tip(
type = TipType.Button(
text = context.getString(R.string.mp_homescreen_button),
action = ::showMasterPasswordMigration
),
identifier = context.getString(R.string.pref_key_master_password_tip),
title = context.getString(R.string.mp_homescreen_tip_title),
description = context.getString(R.string.mp_homescreen_tip_message),
learnMoreURL = null,
titleDrawable = ContextCompat.getDrawable(context, R.drawable.ic_login)
)
private fun showMasterPasswordMigration() {
val dialogView = LayoutInflater.from(context).inflate(R.layout.mp_migration_dialog, null)
val dialogBuilder = AlertDialog.Builder(context).apply {
setTitle(context.getString(R.string.mp_dialog_title_recovery_transfer_saved_logins))
setMessage(context.getString(R.string.mp_dialog_message_recovery_transfer_saved_logins))
setView(dialogView)
create()
}
val dialog = dialogBuilder.show()
context.metrics.track(Event.MasterPasswordMigrationDisplayed)
val passwordErrorText = context.getString(R.string.mp_dialog_error_transfer_saved_logins)
val migrationContinueButton =
dialogView.findViewById<MaterialButton>(R.id.migration_continue)
val passwordView = dialogView.findViewById<TextInputEditText>(R.id.password_field)
val passwordLayout =
dialogView.findViewById<TextInputLayout>(R.id.password_text_input_layout)
passwordView.addTextChangedListener(
object : TextWatcher {
var isValid = false
override fun afterTextChanged(p: Editable?) {
when {
p.toString().isEmpty() -> {
isValid = false
passwordLayout.error = passwordErrorText
}
else -> {
val possiblePassword = passwordView.text.toString()
isValid =
fennecLoginsMPImporter?.checkPassword(possiblePassword) == true
passwordLayout.error = if (isValid) null else passwordErrorText
}
}
migrationContinueButton.alpha = if (isValid) 1F else HALF_OPACITY
migrationContinueButton.isEnabled = isValid
}
override fun beforeTextChanged(
p: CharSequence?,
start: Int,
count: Int,
after: Int
) {
// NOOP
}
override fun onTextChanged(p: CharSequence?, start: Int, before: Int, count: Int) {
// NOOP
}
})
migrationContinueButton.apply {
setOnClickListener {
// Step 1: Verify the password again before trying to use it
val possiblePassword = passwordView.text.toString()
val isValid = fennecLoginsMPImporter?.checkPassword(possiblePassword) == true
// Step 2: With valid MP, get logins and complete the migration
if (isValid) {
val logins = fennecLoginsMPImporter?.getLoginRecords(
possiblePassword,
context.components.analytics.crashReporter
)
if (logins.isNullOrEmpty()) {
showFailureDialog()
dialog.dismiss()
} else {
saveLogins(logins, dialog)
}
} else {
passwordView.error =
context?.getString(R.string.mp_dialog_error_transfer_saved_logins)
}
}
}
dialogView.findViewById<MaterialButton>(R.id.migration_cancel).apply {
setOnClickListener {
dialog.dismiss()
}
}
}
private fun showFailureDialog() {
val dialogView =
LayoutInflater.from(context).inflate(R.layout.mp_migration_done_dialog, null)
val dialogBuilder = AlertDialog.Builder(context).apply {
setTitle(context.getString(R.string.mp_dialog_title_transfer_failure))
setMessage(context.getString(R.string.mp_dialog_message_transfer_failure))
setView(dialogView)
create()
}
val dialog = dialogBuilder.show()
dialogView.findViewById<MaterialButton>(R.id.positive_button).apply {
text = context.getString(R.string.mp_dialog_close_transfer)
setOnClickListener {
tip?.let { dismissTip(it) }
dialog.dismiss()
}
}
dialogView.findViewById<MaterialButton>(R.id.negative_button).apply {
isVisible = false
}
}
private fun saveLogins(logins: List<ServerPassword>, dialog: AlertDialog) {
CoroutineScope(IO).launch {
logins.map { it.toLogin() }.forEach {
try {
context.components.core.passwordsStorage.add(it)
} catch (e: InvalidRecordException) {
// This record was invalid and we couldn't save this login
Sentry.capture("Master Password migration add login error $e for reason ${e.reason}")
} catch (e: IdCollisionException) {
// Nonempty ID was provided
Sentry.capture("Master Password migration add login error $e")
} catch (e: LoginsStorageException) {
// Some other error occurred
Sentry.capture("Master Password migration add login error $e")
}
}
withContext(Dispatchers.Main) {
// Step 3: Dismiss this dialog and show the success dialog
showSuccessDialog()
dialog.dismiss()
}
}
}
private fun showSuccessDialog() {
tip?.let { dismissTip(it) }
context.metrics.track(Event.MasterPasswordMigrationSuccess)
val dialogView =
LayoutInflater.from(context).inflate(R.layout.mp_migration_done_dialog, null)
val dialogBuilder = AlertDialog.Builder(context).apply {
setTitle(context.getString(R.string.mp_dialog_title_transfer_success))
setMessage(context.getString(R.string.mp_dialog_message_transfer_success))
setView(dialogView)
create()
}
val dialog = dialogBuilder.show()
dialogView.findViewById<MaterialButton>(R.id.positive_button).apply {
setOnClickListener {
navigateToLogins()
dialog.dismiss()
}
}
dialogView.findViewById<MaterialButton>(R.id.negative_button).apply {
setOnClickListener {
dialog.dismiss()
}
}
}
/**
* Converts an Application Services [ServerPassword] to an Android Components [Login]
*/
fun ServerPassword.toLogin() = Login(
origin = hostname,
formActionOrigin = formSubmitURL,
httpRealm = httpRealm,
username = username,
password = password,
timesUsed = timesUsed,
timeCreated = timeCreated,
timeLastUsed = timeLastUsed,
timePasswordChanged = timePasswordChanged,
usernameField = usernameField,
passwordField = passwordField
)
companion object {
private const val HALF_OPACITY = .5F
}
}

@ -24,7 +24,6 @@ import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.storage.BookmarksStorage
import mozilla.components.support.ktx.android.content.getColorFromAttr
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
@ -181,7 +180,7 @@ class DefaultToolbarMenu(
.syncedTabsInTabsTray
val menuItems = listOfNotNull(
if (FeatureFlags.viewDownloads) downloadsItem else null,
downloadsItem,
historyItem,
bookmarksItem,
if (syncedTabsInTabsTray) null else syncedTabs,

@ -82,6 +82,8 @@ import org.mozilla.fenix.components.StoreProvider
import org.mozilla.fenix.components.TabCollectionStorage
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.components.tips.FenixTipManager
import org.mozilla.fenix.components.tips.Tip
import org.mozilla.fenix.components.tips.providers.MasterPasswordTipProvider
import org.mozilla.fenix.components.tips.providers.MigrationTipProvider
import org.mozilla.fenix.components.toolbar.TabCounterMenu
import org.mozilla.fenix.components.toolbar.ToolbarPosition
@ -174,6 +176,7 @@ class HomeFragment : Fragment() {
}
}
@Suppress("LongMethod")
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
@ -197,7 +200,18 @@ class HomeFragment : Fragment() {
expandedCollections = emptySet(),
mode = currentMode.getCurrentMode(),
topSites = components.core.topSiteStorage.cachedTopSites,
tip = FenixTipManager(listOf(MigrationTipProvider(requireContext()))).getTip(),
tip = StrictMode.allowThreadDiskReads().resetPoliciesAfter {
FenixTipManager(
listOf(
MasterPasswordTipProvider(
requireContext(),
::navToSavedLogins,
::dismissTip
),
MigrationTipProvider(requireContext())
)
).getTip()
},
showCollectionPlaceholder = components.settings.showCollectionsPlaceholderOnHome
)
)
@ -232,6 +246,7 @@ class HomeFragment : Fragment() {
handleSwipedItemDeletionCancel = ::handleSwipedItemDeletionCancel
)
)
updateLayout(view)
sessionControlView = SessionControlView(
view.sessionControlRecyclerView,
@ -246,6 +261,10 @@ class HomeFragment : Fragment() {
return view
}
private fun dismissTip(tip: Tip) {
sessionControlInteractor.onCloseTip(tip)
}
/**
* Returns a [TopSitesConfig] which specifies how many top sites to display and whether or
* not frequently visited sites should be displayed.
@ -411,7 +430,8 @@ class HomeFragment : Fragment() {
// We call this onLayout so that the bottom bar width is correctly set for us to center
// the CFR in.
view.toolbar_wrapper.doOnLayout {
val willNavigateToSearch = !bundleArgs.getBoolean(FOCUS_ON_ADDRESS_BAR) && FeatureFlags.newSearchExperience
val willNavigateToSearch =
!bundleArgs.getBoolean(FOCUS_ON_ADDRESS_BAR) && FeatureFlags.newSearchExperience
if (!browsingModeManager.mode.isPrivate && !willNavigateToSearch) {
SearchWidgetCFR(
context = view.context,
@ -540,7 +560,18 @@ class HomeFragment : Fragment() {
collections = components.core.tabCollectionStorage.cachedTabCollections,
mode = currentMode.getCurrentMode(),
topSites = components.core.topSiteStorage.cachedTopSites,
tip = FenixTipManager(listOf(MigrationTipProvider(requireContext()))).getTip(),
tip = StrictMode.allowThreadDiskReads().resetPoliciesAfter {
FenixTipManager(
listOf(
MasterPasswordTipProvider(
requireContext(),
::navToSavedLogins,
::dismissTip
),
MigrationTipProvider(requireContext())
)
).getTip()
},
showCollectionPlaceholder = components.settings.showCollectionsPlaceholderOnHome
)
)
@ -587,6 +618,10 @@ class HomeFragment : Fragment() {
}
}
private fun navToSavedLogins() {
findNavController().navigate(HomeFragmentDirections.actionGlobalSavedLoginsAuthFragment())
}
private fun dispatchModeChanges(mode: Mode) {
if (mode != Mode.fromBrowsingMode(browsingModeManager.mode)) {
homeFragmentStore.dispatch(HomeFragmentAction.ModeChange(mode))

@ -21,7 +21,6 @@ import mozilla.components.concept.sync.AccountObserver
import mozilla.components.concept.sync.AuthType
import mozilla.components.concept.sync.OAuthAccount
import mozilla.components.support.ktx.android.content.getColorFromAttr
import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.settings
@ -170,7 +169,7 @@ class HomeMenu(
if (settings.syncedTabsInTabsTray) null else syncedTabsItem,
bookmarksItem,
historyItem,
if (FeatureFlags.viewDownloads) downloadsItem else null,
downloadsItem,
BrowserMenuDivider(),
addons,
BrowserMenuDivider(),

@ -41,7 +41,7 @@ class OnboardingAutomaticSignInViewHolder(
fun bind(account: ShareableAccount) {
shareableAccount = account
headerText.text = itemView.context.getString(
R.string.onboarding_firefox_account_auto_signin_header_2, account.email
R.string.onboarding_firefox_account_auto_signin_header_3, account.email
)
val icon = getDrawable(itemView.context, R.drawable.ic_onboarding_avatar_anonymous)
headerText.putCompoundDrawablesRelativeWithIntrinsicBounds(start = icon)

@ -37,6 +37,9 @@ class ButtonTipViewHolder(
metrics.track(Event.TipDisplayed(tip.identifier))
tip_header_text.text = tip.title
tip.titleDrawable?.let {
tip_header_text.setCompoundDrawablesWithIntrinsicBounds(it, null, null, null)
}
tip_description_text.text = tip.description
tip_button.text = tip.type.text

@ -17,6 +17,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.ViewStub
import android.view.WindowManager
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatDialogFragment
import androidx.constraintlayout.widget.ConstraintProperties.BOTTOM
@ -40,6 +41,7 @@ import mozilla.components.feature.qr.QrFeature
import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.support.base.feature.UserInteractionHandler
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import mozilla.components.support.ktx.android.content.getColorFromAttr
import mozilla.components.support.ktx.android.content.hasCamera
import mozilla.components.support.ktx.android.content.res.getSpanned
import mozilla.components.support.ktx.android.view.hideKeyboard
@ -79,6 +81,21 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
private val qrFeature = ViewBoundFeatureWrapper<QrFeature>()
private val speechIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH)
override fun onStart() {
super.onStart()
// https://github.com/mozilla-mobile/fenix/issues/14279
// To prevent GeckoView from resizing we're going to change the softInputMode to not adjust
// the size of the window.
requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING)
}
override fun onStop() {
super.onStop()
// https://github.com/mozilla-mobile/fenix/issues/14279
// Let's reset back to the default behavior after we're done searching
requireActivity().window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setStyle(STYLE_NO_TITLE, R.style.SearchDialogStyle)
@ -254,6 +271,7 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
updateSearchSuggestionsHintVisibility(it)
updateClipboardSuggestion(it, requireContext().components.clipboardHandler.url)
updateToolbarContentDescription(it)
updateSearchShortcutsIcon(it)
toolbarView.update(it)
awesomeBarView.update(it)
firstUpdate = false
@ -416,6 +434,20 @@ class SearchDialogFragment : AppCompatDialogFragment(), UserInteractionHandler {
urlView?.importantForAccessibility = View.IMPORTANT_FOR_ACCESSIBILITY_NO
}
private fun updateSearchShortcutsIcon(searchState: SearchFragmentState) {
view?.apply {
search_engines_shortcut_button.isVisible = searchState.areShortcutsAvailable
val showShortcuts = searchState.showSearchShortcuts
search_engines_shortcut_button.isChecked = showShortcuts
val color = if (showShortcuts) R.attr.contrastText else R.attr.primaryText
search_engines_shortcut_button.compoundDrawables[0]?.setTint(
requireContext().getColorFromAttr(color)
)
}
}
companion object {
private const val REQUEST_CODE_CAMERA_PERMISSIONS = 1
}

@ -0,0 +1,48 @@
/* 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.settings
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.utils.view.addToRadioGroup
/**
* Lets the user customize auto closing tabs.
*/
class CloseTabsSettingsFragment : PreferenceFragmentCompat() {
private lateinit var radioManual: RadioButtonPreference
private lateinit var radioOneDay: RadioButtonPreference
private lateinit var radioOneWeek: RadioButtonPreference
private lateinit var radioOneMonth: RadioButtonPreference
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.close_tabs_preferences, rootKey)
}
override fun onResume() {
super.onResume()
showToolbar(getString(R.string.preferences_close_tabs))
setupPreferences()
}
private fun setupPreferences() {
radioManual = requirePreference(R.string.pref_key_close_tabs_manually)
radioOneDay = requirePreference(R.string.pref_key_close_tabs_after_one_day)
radioOneWeek = requirePreference(R.string.pref_key_close_tabs_after_one_week)
radioOneMonth = requirePreference(R.string.pref_key_close_tabs_after_one_month)
setupRadioGroups()
}
private fun setupRadioGroups() {
addToRadioGroup(
radioManual,
radioOneDay,
radioOneMonth,
radioOneWeek
)
}
}

@ -170,6 +170,10 @@ class SettingsFragment : PreferenceFragmentCompat() {
}
}
val tabSettingsPreference =
requirePreference<Preference>(R.string.pref_key_close_tabs)
tabSettingsPreference.summary = context?.settings()?.getTabTimeoutString()
setupPreferences()
if (shouldUpdateAccountUIState) {
@ -192,6 +196,9 @@ class SettingsFragment : PreferenceFragmentCompat() {
resources.getString(R.string.pref_key_sign_in) -> {
SettingsFragmentDirections.actionSettingsFragmentToTurnOnSyncFragment()
}
resources.getString(R.string.pref_key_close_tabs) -> {
SettingsFragmentDirections.actionSettingsFragmentToCloseTabsSettingsFragment()
}
resources.getString(R.string.pref_key_search_settings) -> {
SettingsFragmentDirections.actionSettingsFragmentToSearchEngineFragment()
}
@ -301,7 +308,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
requirePreference<Preference>(R.string.pref_key_external_download_manager)
val preferenceLeakCanary = findPreference<Preference>(leakKey)
val preferenceRemoteDebugging = findPreference<Preference>(debuggingKey)
val preferenceMakeDefaultBrowser = requirePreference<Preference>(R.string.pref_key_make_default_browser)
val preferenceMakeDefaultBrowser =
requirePreference<Preference>(R.string.pref_key_make_default_browser)
if (!Config.channel.isReleased) {
preferenceLeakCanary?.setOnPreferenceChangeListener { _, newValue ->

@ -124,7 +124,6 @@ open class SavedLoginsStorageController(
fun findPotentialDuplicates(loginId: String) {
var deferredLogin: Deferred<List<Login>>? = null
// What scope should be used here?
val fetchLoginJob = viewLifecycleScope.launch(ioDispatcher) {
deferredLogin = async {
val login = getLogin(loginId)

@ -76,6 +76,11 @@ abstract class SearchEngineListPreference @JvmOverloads constructor(
it.identifier == defaultEngine
} ?: searchEngineList.list.first()).identifier
context.components.search.searchEngineManager.defaultSearchEngine =
searchEngineList.list.find {
it.identifier == selectedEngine
}
searchEngineGroup!!.removeAllViews()
val layoutInflater = LayoutInflater.from(context)
@ -97,6 +102,10 @@ abstract class SearchEngineListPreference @JvmOverloads constructor(
engineItem.tag = engineId
if (engineId == selectedEngine) {
updateDefaultItem(engineItem.radio_button)
/* #11465 -> radio_button.isChecked = true does not trigger
* onSearchEngineSelected because searchEngineGroup has null views at that point.
* So we trigger it here.*/
onSearchEngineSelected(engine)
}
searchEngineGroup!!.addView(engineItem, layoutParams)
}

@ -31,6 +31,7 @@ import org.mozilla.fenix.home.HomeFragment
interface TabTrayController {
fun onNewTabTapped(private: Boolean)
fun onTabTrayDismissed()
fun handleTabSettingsClicked()
fun onShareTabsClicked(private: Boolean)
fun onSyncedTabClicked(syncTab: SyncTab)
fun onSaveToCollectionClicked(selectedTabs: Set<Tab>)
@ -88,6 +89,10 @@ class DefaultTabTrayController(
)
}
override fun handleTabSettingsClicked() {
navController.navigate(TabTrayDialogFragmentDirections.actionGlobalCloseTabSettingsFragment())
}
override fun onTabTrayDismissed() {
dismissTabTray()
}

@ -24,6 +24,11 @@ interface TabTrayInteractor {
*/
fun onShareTabsClicked(private: Boolean)
/**
* Called when user clicks the tab settings button.
*/
fun onTabSettingsClicked()
/**
* Called when user clicks button to save selected tabs to a collection.
*/
@ -83,6 +88,10 @@ class TabTrayFragmentInteractor(private val controller: TabTrayController) : Tab
controller.onTabTrayDismissed()
}
override fun onTabSettingsClicked() {
controller.handleTabSettingsClicked()
}
override fun onShareTabsClicked(private: Boolean) {
controller.onShareTabsClicked(private)
}

@ -198,6 +198,7 @@ class TabTrayView(
is TabTrayItemMenu.Item.ShareAllTabs -> interactor.onShareTabsClicked(
isPrivateModeSelected
)
is TabTrayItemMenu.Item.OpenTabSettings -> interactor.onTabSettingsClicked()
is TabTrayItemMenu.Item.SaveToCollection -> interactor.onEnterMultiselect()
is TabTrayItemMenu.Item.CloseAllTabs -> interactor.onCloseAllTabsClicked(
isPrivateModeSelected
@ -554,6 +555,7 @@ class TabTrayItemMenu(
sealed class Item {
object ShareAllTabs : Item()
object OpenTabSettings : Item()
object SaveToCollection : Item()
object CloseAllTabs : Item()
}
@ -578,6 +580,13 @@ class TabTrayItemMenu(
onItemTapped.invoke(Item.ShareAllTabs)
},
SimpleBrowserMenuItem(
context.getString(R.string.tab_tray_menu_tab_settings),
textColorResource = R.color.primary_text_normal_theme
) {
onItemTapped.invoke(Item.OpenTabSettings)
},
SimpleBrowserMenuItem(
context.getString(R.string.tab_tray_menu_item_close),
textColorResource = R.color.primary_text_normal_theme

@ -95,10 +95,7 @@ class TabTrayViewHolder(
contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_play)
setImageDrawable(
AppCompatResources.getDrawable(
context,
R.drawable.tab_tray_play_with_background
)
AppCompatResources.getDrawable(context, R.drawable.media_state_play)
)
}
@ -107,10 +104,7 @@ class TabTrayViewHolder(
contentDescription =
context.getString(R.string.mozac_feature_media_notification_action_pause)
setImageDrawable(
AppCompatResources.getDrawable(
context,
R.drawable.tab_tray_pause_with_background
)
AppCompatResources.getDrawable(context, R.drawable.media_state_pause)
)
}

@ -62,6 +62,10 @@ class Settings(private val appContext: Context) : PreferencesHolder {
private const val CFR_COUNT_CONDITION_FOCUS_NOT_INSTALLED = 3
private const val MIN_DAYS_SINCE_FEEDBACK_PROMPT = 120
const val ONE_DAY_MS = 60 * 60 * 24 * 1000L
const val ONE_WEEK_MS = 60 * 60 * 24 * 7 * 1000L
const val ONE_MONTH_MS = (60 * 60 * 24 * 365 * 1000L) / 12
private fun Action.toInt() = when (this) {
Action.BLOCKED -> BLOCKED_INT
Action.ASK_TO_ALLOW -> ASK_TO_ALLOW_INT
@ -159,6 +163,11 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = false
)
var shouldDisplayMasterPasswordMigrationTip by booleanPreference(
appContext.getString(R.string.pref_key_master_password_tip),
true
)
// If any of the prefs have been modified, quit displaying the fenix moved tip
fun shouldDisplayFenixMovingTip(): Boolean =
preferences.getBoolean(
@ -324,6 +333,48 @@ class Settings(private val appContext: Context) : PreferencesHolder {
default = false
)
var manuallyCloseTabs by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_close_tabs_manually),
default = true
)
var closeTabsAfterOneDay by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_close_tabs_after_one_day),
default = false
)
var closeTabsAfterOneWeek by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_close_tabs_after_one_week),
default = false
)
var closeTabsAfterOneMonth by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_close_tabs_after_one_month),
default = false
)
fun getTabTimeout(): Long = when {
closeTabsAfterOneDay -> ONE_DAY_MS
closeTabsAfterOneWeek -> ONE_WEEK_MS
closeTabsAfterOneMonth -> ONE_MONTH_MS
else -> System.currentTimeMillis()
}
fun getTabTimeoutString(): String = when {
closeTabsAfterOneDay -> {
appContext.getString(R.string.close_tabs_after_one_day)
}
closeTabsAfterOneWeek -> {
appContext.getString(R.string.close_tabs_after_one_week)
}
closeTabsAfterOneMonth -> {
appContext.getString(R.string.close_tabs_after_one_month)
}
else -> {
appContext.getString(R.string.close_tabs_manually)
}
}
val shouldUseDarkTheme by booleanPreference(
appContext.getPreferenceKey(R.string.pref_key_dark_theme),
default = false

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M15.22 22H5.78A3.78 3.78 0 0 1 2 18.22V8.78C2 6.69 3.7 5 5.78 5h9.44C17.31 5 19 6.7 19 8.78v9.44c0 2-1.7 3.78-3.78 3.78zM5.86 7C4.83 7 4 7.83 4 8.86v9.28C4 19.17 4.83 20 5.86 20h9.28c1 0 1.86-0.83 1.86-1.86V8.86C17 8 16.17 7 15 7H6zM6 4c0-1.1 1-2 2-2h8a6 6 0 0 1 6 6v0L22 16a2 2 0 0 1-2 2L20 8V8a4 4 0 0 0-4-4H6z"
android:fillColor="?primaryText" />
</vector>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size
android:width="24dp"
android:height="24dp" />
<!-- Background color of the circle -->
<solid android:color="?tabTrayItemMediaBackground" />
<!-- Outer circle border -->
<stroke android:color="@color/tab_tray_item_media_stroke"
android:width="2dp"/>
</shape>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/media_state_background" />
<item>
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<!-- Background color of the circle -->
<path
android:fillColor="@color/tab_tray_item_media_stroke"
android:pathData="M10.5,16.125c0,0.1 0,0.195 -0.1,0.265c-0,0 -0.166,0.1 -0.265,0.1l-2.25,0c-0,0 -0.195,0 -0.265,-0.1c-0,-0 -0.1,-0.166 -0.1,-0.265l0,-8.25c0,-0 0,-0.195 0.1,-0.265c0,0 0.166,-0.1 0.265,-0.1l2.25,0c0,0 0.195,0 0.265,0.11c0,0 0.1,0.166 0.1,0.265l0,8.25Zm6,0c0,0 0,0.195 -0.1,0.265c0,0 -0.166,0.1 -0.265,0.1l-2.25,0c0,0 -0.195,0 -0.265,-0.1c0,0 -0.1,-0.166 -0.1,-0.265l0,-8.25c0,-0.099 0,-0.195 0.1,-0.265c0,0 0.166,-0.1 0.265,-0.1l2.25,0c0,0 0.195,0 0.265,0.11c0,0 0.1,0.166 0.1,0.265l0,8.25Z"/>
</vector>
</item>
</layer-list>

@ -3,16 +3,7 @@
- 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/. -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:width="24dp"
android:height="24dp" />
<solid android:color="?above" />
<stroke android:color="?above"
android:width="2dp"/>
</shape>
</item>
<item android:drawable="@drawable/media_state_background" />
<item>
<vector
android:width="24dp"
@ -20,8 +11,8 @@
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?accent"
android:pathData="M12,22a10,10 0,1 1,10 -10,10 10,0 0,1 -10,10zM10,16.363l6,-3.5a1,1 0,0 0,0 -1.732l-6,-3.5A1,1 0,0 0,8.5 8.5v7a1,1 0,0 0,1.5 0.863z"/>
android:fillColor="@color/tab_tray_item_media_stroke"
android:pathData="M10,16.363l6,-3.5c0.2,-0.12 0.36,-0.3 0.44,-0.524c0.1,-0.2 0.1,-0.46 0,-0.684c-0.1,-0.22 -0.236,-0.4 -0.44,-0.524l-6,-3.5c-0.2,-0.12 -0.44,-0.16 -0.675,-0.12c-0.23,0.04 -0.44,0.163 -0.6,0.344c-0.15,0.2 -0.234,0.4 -0.233,0.644l0,7c0,0.235 0.084,0.46 0.235,0.641c0.15,0.2 0.36,0.3 0.59,0.34c0.23,0.04 0.5,-0 0.673,-0.1Z"/>
</vector>
</item>
</layer-list>

@ -1,27 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:width="24dp"
android:height="24dp" />
<solid android:color="?above" />
<stroke android:color="?above"
android:width="2dp"/>
</shape>
</item>
<item>
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="?accent"
android:pathData="M12,2a10,10 0,1 0,10 10A10,10 0,0 0,12 2zM10.5,16.125a0.375,0.375 0,0 1,-0.375 0.375h-2.25A0.375,0.375 0,0 1,7.5 16.125v-8.25A0.375,0.375 0,0 1,7.875 7.5h2.25A0.375,0.375 0,0 1,10.5 7.875zM16.5,16.125a0.375,0.375 0,0 1,-0.375 0.375h-2.25a0.375,0.375 0,0 1,-0.375 -0.375v-8.25A0.375,0.375 0,0 1,13.875 7.5h2.25A0.375,0.375 0,0 1,16.5 7.875z"/>
</vector>
</item>
</layer-list>

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:width="24dp"
android:height="24dp" />
<!-- Vertical pause lines -->
<solid android:color="@color/tab_tray_item_media_stroke" />
<!-- Outer circle border -->
<stroke android:color="@color/tab_tray_item_media_stroke"
android:width="2dp"/>
</shape>
</item>
<item>
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<!-- Background color of the circle -->
<path
android:fillColor="?tabTrayItemMediaBackground"
android:pathData="M12,2a10,10 0,1 0,10 10A10,10 0,0 0,12 2zM10.5,16.125a0.375,0.375 0,0 1,-0.375 0.375h-2.25A0.375,0.375 0,0 1,7.5 16.125v-8.25A0.375,0.375 0,0 1,7.875 7.5h2.25A0.375,0.375 0,0 1,10.5 7.875zM16.5,16.125a0.375,0.375 0,0 1,-0.375 0.375h-2.25a0.375,0.375 0,0 1,-0.375 -0.375v-8.25A0.375,0.375 0,0 1,13.875 7.5h2.25A0.375,0.375 0,0 1,16.5 7.875z"/>
</vector>
</item>
</layer-list>

@ -1,30 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="oval">
<size
android:width="24dp"
android:height="24dp" />
<!-- Vertical pause lines -->
<solid android:color="@color/tab_tray_item_media_stroke" />
<!-- Outer circle border -->
<stroke android:color="@color/tab_tray_item_media_stroke"
android:width="2dp"/>
</shape>
</item>
<item>
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<!-- Background color of the circle -->
<path
android:fillColor="?tabTrayItemMediaBackground"
android:pathData="M12,22a10,10 0,1 1,10 -10,10 10,0 0,1 -10,10zM10,16.363l6,-3.5a1,1 0,0 0,0 -1.732l-6,-3.5A1,1 0,0 0,8.5 8.5v7a1,1 0,0 0,1.5 0.863z"/>
</vector>
</item>
</layer-list>

@ -2,56 +2,57 @@
<!-- 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/. -->
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tip_card"
android:background="@drawable/cfr_background_gradient"
style="@style/OnboardingCardLight"
android:padding="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:background="@drawable/cfr_background_gradient"
android:padding="0dp">
<TextView
android:id="@+id/tip_header_text"
android:layout_width="0dp"
android:maxLines="2"
android:lineSpacingExtra="2dp"
android:layout_height="wrap_content"
android:textColor="@color/primary_text_dark_theme"
android:textAppearance="@style/HeaderTextStyle"
android:gravity="center_vertical"
tools:text="Header text"
android:layout_margin="16dp"
android:drawablePadding="12dp"
android:gravity="center_vertical"
android:lineSpacingExtra="2dp"
android:maxLines="2"
android:textAppearance="@style/HeaderTextStyle"
android:textColor="@color/primary_text_dark_theme"
app:drawableTint="@color/primary_text_dark_theme"
app:layout_constraintEnd_toStartOf="@id/tip_close"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toStartOf="@id/tip_close" />
tools:text="Header text" />
<ImageButton
android:id="@+id/tip_close"
android:tint="@color/primary_text_dark_theme"
app:srcCompat="@drawable/ic_close"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_width="48dp"
android:layout_height="48dp"
android:background="?selectableItemBackgroundBorderless"
android:contentDescription="@string/create_collection_close"
android:layout_width="48dp"
android:layout_height="48dp" />
android:tint="@color/primary_text_dark_theme"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_close" />
<TextView
android:id="@+id/tip_description_text"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="8dp"
android:lineSpacingExtra="2dp"
android:textAppearance="@style/Body14TextStyle"
android:textColor="@color/primary_text_dark_theme"
tools:text="Tip description"
android:layout_marginTop="8dp"
android:layout_marginHorizontal="16dp"
app:layout_constraintTop_toBottomOf="@id/tip_header_text"
app:layout_constraintEnd_toStartOf="@id/tip_close"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/tip_close"/>
app:layout_constraintTop_toBottomOf="@id/tip_header_text"
tools:text="Tip description" />
<TextView
android:id="@+id/tip_learn_more"
@ -63,19 +64,20 @@
app:layout_constraintEnd_toEndOf="@id/tip_description_text"
app:layout_constraintStart_toStartOf="@id/tip_description_text"
app:layout_constraintTop_toBottomOf="@id/tip_description_text"
tools:textColor="@color/accent_high_contrast_private_theme"/>
tools:textColor="@color/accent_high_contrast_private_theme" />
<Button
style="@style/NeutralButton"
android:id="@+id/tip_button"
android:layout_marginTop="16dp"
tools:text="Call to action"
style="@style/NeutralButton"
android:layout_height="36dp"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="16dp"
android:layout_marginBottom="16dp"
app:layout_constraintTop_toBottomOf="@id/tip_learn_more"
app:layout_constraintStart_toStartOf="parent"
app:backgroundTint="@color/foundation_light_theme"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tip_learn_more"
tools:text="Call to action" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -3,18 +3,28 @@
- 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/. -->
<androidx.recyclerview.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
<!--LinearLayout is used here because we are forced by the view pager
to keep layout_width="match_parent"-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/top_sites_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="8dp"
android:clipChildren="false"
android:clipToPadding="false"
android:overScrollMode="never"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="4"
tools:listitem="@layout/top_site_item" />
android:gravity="center_horizontal">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/top_sites_list"
android:layout_width="wrap_content"
android:minWidth="448dp"
android:layout_height="match_parent"
android:layout_gravity="center_horizontal"
android:layout_marginBottom="8dp"
android:clipChildren="false"
android:clipToPadding="false"
android:overScrollMode="never"
android:nestedScrollingEnabled="false"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:spanCount="4"
tools:listitem="@layout/top_site_item" />
</LinearLayout>

@ -52,7 +52,7 @@
android:layout_height="wrap_content"
android:textColor="?primaryText"
android:textSize="16sp"
android:text="@string/add_to_homescreen_description"
android:text="@string/add_to_homescreen_description_2"
app:layout_constraintStart_toEndOf="@id/home_icon"
app:layout_constraintTop_toTopOf="@id/home_icon"
app:layout_constraintEnd_toEndOf="parent" />

@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<mozilla.components.feature.prompts.widget.LoginPanelTextInputLayout
android:id="@+id/password_text_input_layout"
style="@style/MozTextInputLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingStart="24dp"
android:paddingEnd="24dp"
app:errorEnabled="true"
app:errorIconDrawable="@null"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:passwordToggleDrawable="@drawable/mozac_ic_password_reveal_two_state"
app:passwordToggleEnabled="true"
app:passwordToggleTint="?primaryText">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/password_field"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/mozac_feature_prompt_password_hint"
android:imeOptions="actionDone"
android:inputType="textPassword"
android:singleLine="true"
android:textColor="?primaryText"
android:textSize="16sp" />
</mozilla.components.feature.prompts.widget.LoginPanelTextInputLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/migration_continue"
style="@style/PositiveButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="24dp"
android:text="@string/mp_dialog_positive_transfer_saved_logins"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/password_text_input_layout" />
<com.google.android.material.button.MaterialButton
android:id="@+id/migration_cancel"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:letterSpacing="0"
android:padding="10dp"
android:text="@string/mp_dialog_negative_transfer_saved_logins"
android:textAllCaps="false"
android:textColor="?primaryText"
android:textStyle="bold"
app:fontFamily="@font/metropolis_semibold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/migration_continue" />
<View
android:layout_width="match_parent"
android:layout_height="24dp"
app:layout_constraintTop_toBottomOf="@id/migration_cancel" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.button.MaterialButton
android:id="@+id/positive_button"
style="@style/PositiveButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:layout_marginEnd="24dp"
android:text="@string/mp_dialog_positive_transfer_success"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/negative_button"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:letterSpacing="0"
android:padding="10dp"
android:text="@string/mp_dialog_close_transfer"
android:textAllCaps="false"
android:textColor="?primaryText"
android:textStyle="bold"
app:fontFamily="@font/metropolis_semibold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/positive_button" />
<View
android:layout_width="match_parent"
android:layout_height="24dp"
app:layout_constraintTop_toBottomOf="@id/negative_button" />
</androidx.constraintlayout.widget.ConstraintLayout>

@ -19,7 +19,7 @@
android:drawablePadding="12dp"
android:textAppearance="@style/Header16TextStyle"
android:textColor="@color/onboarding_card_primary_text_dark"
tools:text="@string/onboarding_firefox_account_auto_signin_header_2" />
tools:text="@string/onboarding_firefox_account_auto_signin_header_3" />
<Button
android:id="@+id/fxa_sign_in_button"

@ -6,4 +6,5 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/site_list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android:layout_height="wrap_content"
android:minHeight="@dimen/mozac_widget_site_item_height" />

@ -48,7 +48,7 @@
app:layout_constraintCircleRadius="28dp"
app:layout_constraintEnd_toEndOf="@id/favicon_image"
app:layout_constraintTop_toTopOf="@id/favicon_image"
app:srcCompat="@drawable/pause_with_background" />
app:srcCompat="@drawable/media_state_pause" />
<TextView
android:id="@+id/hostname"

@ -24,7 +24,7 @@
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/play_with_background" />
app:srcCompat="@drawable/media_state_play" />
<androidx.cardview.widget.CardView
android:id="@+id/mozac_browser_tabstray_card"

@ -5,25 +5,27 @@
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/top_site_item"
android:layout_width="64dp"
android:layout_height="wrap_content"
android:padding="8dp"
android:layout_width="match_parent"
android:layout_height="@dimen/top_sites_item_size"
android:layout_marginBottom="@dimen/top_sites_item_margin_top"
android:orientation="vertical">
<ImageView
android:id="@+id/favicon_image"
style="@style/Mozac.Widgets.Favicon"
style="@style/TopSite.Favicon"
android:layout_gravity="center"
android:importantForAccessibility="no" />
<TextView
android:id="@+id/top_site_title"
android:layout_width="match_parent"
android:layout_width="64dp"
android:layout_height="wrap_content"
android:gravity="center"
android:singleLine="true"
android:layout_gravity="center_horizontal"
android:textColor="@color/top_site_title_text"
android:textSize="10sp"
android:layout_marginTop="8dp" />
android:layout_marginTop="@dimen/top_sites_text_margin_top" />
</LinearLayout>

@ -68,7 +68,8 @@
android:id="@+id/action_global_historyFragment"
app:destination="@id/historyFragment" />
<action android:id="@+id/action_global_downloadsFragment"
<action
android:id="@+id/action_global_downloadsFragment"
app:destination="@id/downloadsFragment" />
<action
android:id="@+id/action_global_accountProblemFragment"
@ -109,6 +110,9 @@
<action
android:id="@+id/action_global_tabHistoryDialogFragment"
app:destination="@id/tabHistoryDialogFragment" />
<action
android:id="@+id/action_global_closeTabSettingsFragment"
app:destination="@id/closeTabsSettingsFragment" />
<dialog
android:id="@+id/tabTrayDialogFragment"
@ -526,7 +530,18 @@
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right" />
<action
android:id="@+id/action_settingsFragment_to_closeTabsSettingsFragment"
app:destination="@id/closeTabsSettingsFragment"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right" />
</fragment>
<fragment
android:id="@+id/closeTabsSettingsFragment"
android:name="org.mozilla.fenix.settings.CloseTabsSettingsFragment"
android:label="@string/preferences_close_tabs" />
<fragment
android:id="@+id/dataChoicesFragment"
android:name="org.mozilla.fenix.settings.DataChoicesFragment"
@ -808,7 +823,8 @@
android:name="org.mozilla.fenix.tabhistory.TabHistoryDialogFragment"
tools:layout="@layout/fragment_tab_history_dialog" />
<navigation android:id="@+id/site_permissions_exceptions_graph"
<navigation
android:id="@+id/site_permissions_exceptions_graph"
app:startDestination="@id/sitePermissionsExceptionsFragment">
<fragment
@ -847,7 +863,8 @@
</fragment>
</navigation>
<navigation android:id="@+id/addons_management_graph"
<navigation
android:id="@+id/addons_management_graph"
app:startDestination="@id/addonsManagementFragment">
<fragment
android:id="@+id/addonsManagementFragment"
@ -914,7 +931,8 @@
</fragment>
</navigation>
<navigation android:id="@+id/search_engine_graph"
<navigation
android:id="@+id/search_engine_graph"
app:startDestination="@id/searchEngineFragment">
<fragment
android:id="@+id/searchEngineFragment"

@ -465,6 +465,8 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Zarrar</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Llingüetes zarraes apocayá</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d llingüetes</string>
@ -472,6 +474,12 @@
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d llingüeta</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Equí nun hai llingüetes zarraes apocayá</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Zarru de llingüetes</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">A mano</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->

@ -74,6 +74,28 @@
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Ket bremañ</string>
<!-- Open in App "contextual feature recommendation" (CFR) -->
<!-- Text for the info message. 'Firefox' intentionally hardcoded here.-->
<string name="open_in_app_cfr_info_message">Gallout a rit lakaat Firefox da zigeriñ an ereoù ent emgefreek en arloadoù all.</string>
<!-- Text for the positive action button -->
<string name="open_in_app_cfr_positive_button_text">Mont en arventennoù</string>
<!-- Text for the negative action button -->
<string name="open_in_app_cfr_negative_button_text">Argas</string>
<!-- Text for the info dialog when camera permissions have been denied but user tries to access a camera feature. -->
<string name="camera_permissions_needed_message">Ezhomm a zo haeziñ ar chamera. Kit e Arventennoù Android, stokit war an aotreoù ha stokit war aotren.</string>
<!-- Text for the positive action button to go to Android Settings to grant permissions. -->
<string name="camera_permissions_needed_positive_button_text">Mont en arventennoù</string>
<!-- Text for the negative action button to dismiss the dialog. -->
<string name="camera_permissions_needed_negative_button_text">Argas</string>
<!-- Text for the banner message to tell users about our auto close feature. -->
<string name="tab_tray_close_tabs_banner_message">Lakaat an ivinelloù digor da serriñ ent emgefreek pa neo ket bet sellet outo e-pad un devezh, ur sizhun pe ur miz.</string>
<!-- Text for the positive action button to go to Settings for auto close tabs. -->
<string name="tab_tray_close_tabs_banner_positive_button_text">Dibarzhioù gwel</string>
<!-- Text for the negative action button to dismiss the Close Tabs Banner. -->
<string name="tab_tray_close_tabs_banner_negative_button_text">Argas</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">Ivinell nevez</string>
@ -256,6 +278,8 @@
<string name="preferences_toolbar">Barrenn ostilhoù</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Neuz</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Degemer</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Personelaat</string>
<!-- Preference description for banner about signing in -->
@ -460,6 +484,31 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Serriñ</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Ivinelloù serret nevez zo</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Diskouez ar roll istor a-bezh</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d ivinell</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d ivinell</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Neus ivinell nevez serret ebet amañ</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Serriñ an ivinelloù</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Gant an dorn</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Goude un devezh</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Goude ur sizhunvezh</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Goude ur mizvezh</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Ivinelloù digor</string>
@ -479,6 +528,10 @@
<string name="tab_tray_menu_item_save">Enrollañ en dastumad</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Rannañ an holl ivinelloù</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Ivinelloù serret nevez zo</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Arventennoù an ivinelloù</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Serriñ an holl ivinelloù</string>
<!-- Shortcut action to open new tab -->
@ -524,6 +577,8 @@
<string name="collection_open_tabs">Digeriñ an ivinelloù</string>
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Dilemel</string>
<!-- Text for the menu button to delete a top site from history -->
<string name="delete_from_history">Dilemel eus ar roll istor</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (Mod prevez)</string>
@ -729,10 +784,8 @@
<string name="collections_header">Dastumadoù</string>
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">Lañser an dastumadoù</string>
<!-- No Open Tabs Message Header -->
<string name="no_collections_header1">Dastumit ar pezh a zo pouezus evidoch</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Strollit ar cʼhlaskoù, al lecʼhiennoù hag an ivinelloù heñvel evit mont daveto buanocʼh.</string>
<string name="no_collections_description2">Dastumit an traoù a gont evidoch.\nStrollit ar chlaskoù, al lechiennoù hag an ivinelloù liammet evit mont do sellet diwezhatoch.</string>
<!-- Title for the "select tabs" step of the collection creator -->
<string name="create_collection_select_tabs">Diuzañ ivinelloù</string>
<!-- Title for the "select collection" step of the collection creator -->
@ -979,8 +1032,8 @@
<string name="onboarding_whats_new_description">Goulennoù hoch eus a-zivout ar %s nevez? Fellout a ra deoch gouzout pezh a zo bet cheñchet?</string>
<!-- text for underlined clickable link that is part of "what's new" onboarding card description that links to an FAQ -->
<string name="onboarding_whats_new_description_linktext">Amañ emañ ar respontoù</string>
<!-- text for the firefox account onboarding card header -->
<string name="onboarding_firefox_account_header">Tennit gounid eus %s.</string>
<!-- text for the Firefox account onboarding sign in card header -->
<string name="onboarding_account_sign_in_header">Krogit da choubredañ ho sinedoù, ho kerioù-tremen, ha muioch choazh gant ho kont FIrefox.</string>
<!-- Text for the button to learn more about signing in to your Firefox account -->
<string name="onboarding_manual_sign_in_learn_more">Gouzout hiroch</string>
<!-- text for the firefox account onboarding card header when we detect you're already signed in to
@ -1477,4 +1530,18 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">Mat, komprenet am eus</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Diskouez al lechiennoù gweladennet ar muiañ</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Dilemel</string>
<!-- depcrecated: text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Tennit gounid eus %s.</string>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Dastumit ar pezh a zo pouezus evidoch</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Strollit ar cʼhlaskoù, al lecʼhiennoù hag an ivinelloù heñvel evit mont daveto buanocʼh.</string>
</resources>

@ -75,6 +75,28 @@
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Ne sada</string>
<!-- Open in App "contextual feature recommendation" (CFR) -->
<!-- Text for the info message. 'Firefox' intentionally hardcoded here.-->
<string name="open_in_app_cfr_info_message">Možete podesiti Firefox da automatski otvara linkove u aplikacijama.</string>
<!-- Text for the positive action button -->
<string name="open_in_app_cfr_positive_button_text">Idi na postavke</string>
<!-- Text for the negative action button -->
<string name="open_in_app_cfr_negative_button_text">Odbaci</string>
<!-- Text for the info dialog when camera permissions have been denied but user tries to access a camera feature. -->
<string name="camera_permissions_needed_message">Potreban pristup kameri. Idite na Android postavke, dodirnite dozvole i dodirnite dozvoli.</string>
<!-- Text for the positive action button to go to Android Settings to grant permissions. -->
<string name="camera_permissions_needed_positive_button_text">Idi na postavke</string>
<!-- Text for the negative action button to dismiss the dialog. -->
<string name="camera_permissions_needed_negative_button_text">Odbaci</string>
<!-- Text for the banner message to tell users about our auto close feature. -->
<string name="tab_tray_close_tabs_banner_message">Podesite da se otvoreni tabovi automatski zatvaraju ako nisu posjećeni protekli dan, sedmicu ili mjesec.</string>
<!-- Text for the positive action button to go to Settings for auto close tabs. -->
<string name="tab_tray_close_tabs_banner_positive_button_text">Prikaži opcije</string>
<!-- Text for the negative action button to dismiss the Close Tabs Banner. -->
<string name="tab_tray_close_tabs_banner_negative_button_text">Odbaci</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">Novi tab</string>
@ -258,6 +280,8 @@
<string name="preferences_toolbar">Alatna traka</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Tema</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Početna</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Prilagodi</string>
<!-- Preference description for banner about signing in -->
@ -301,6 +325,9 @@
<!-- Preference for add_ons -->
<string name="preferences_addons">Add-oni</string>
<!-- Preference for notifications -->
<string name="preferences_notifications">Obavijesti</string>
<!-- Account Preferences -->
<!-- Preference for triggering sync -->
<string name="preferences_sync_now">Sinhr. odmah</string>
@ -460,6 +487,31 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Zatvori</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Nedavno zatvoreni tabovi</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Prikaz cijele historije</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d tabova</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d tab</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Nema nedavno zatvorenih tabova</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Zatvori tabove</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Ručno</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Nakon jednog dana</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Nakon jedne sedmice</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Nakon mjesec dana</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Otvoreni tabovi</string>
@ -479,6 +531,10 @@
<string name="tab_tray_menu_item_save">Spasi u kolekciju</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Podijeli sve tabove</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Nedavno zatvoreni tabovi</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Postavke taba</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Zatvori sve tabove</string>
<!-- Shortcut action to open new tab -->
@ -523,6 +579,8 @@
<string name="collection_open_tabs">Otvori tabove</string>
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Ukloni</string>
<!-- Text for the menu button to delete a top site from history -->
<string name="delete_from_history">Izbriši iz historije</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (Privatni režim)</string>
@ -567,6 +625,13 @@
<!-- Text shown when no history exists -->
<string name="history_empty_message">Nema historije</string>
<!-- Downloads -->
<!-- Text shown when no download exists -->
<string name="download_empty_message">Nema preuzimanja</string>
<!-- History multi select title in app bar
The first parameter is the number of downloads selected -->
<string name="download_multi_select_title">%1$d označeno</string>
<!-- Crashes -->
<!-- Title text displayed on the tab crash page. This first parameter is the name of the application (For example: Fenix) -->
<string name="tab_crash_title_2">Oprostite. %1$s ne može učitati stranicu.</string>
@ -721,10 +786,8 @@
<string name="collections_header">Kolekcije</string>
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">Izbornik kolekcija</string>
<!-- No Open Tabs Message Header -->
<string name="no_collections_header1">Sakupite stvari koje su vam važne</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Grupišite slične pretrage, stranice i tabove za brži pristup kasnije.</string>
<string name="no_collections_description2">Prikupite stvari koje su vam važne.\nGrupišite slična pretraživanja, stranice i tabove za brzi pristup kasnije.</string>
<!-- Title for the "select tabs" step of the collection creator -->
<string name="create_collection_select_tabs">Izaberite tabove</string>
<!-- Title for the "select collection" step of the collection creator -->
@ -970,9 +1033,10 @@
<string name="onboarding_whats_new_description">Imate pitanja o redizajniranom %su? Želite znati šta se promijenilo?</string>
<!-- text for underlined clickable link that is part of "what's new" onboarding card description that links to an FAQ -->
<string name="onboarding_whats_new_description_linktext">Dobijte odgovore ovdje</string>
<!-- text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Izvucite maksimum iz %s.</string>
<!-- text for the Firefox account onboarding sign in card header -->
<string name="onboarding_account_sign_in_header">Počnite sinhronizirati zabilješke, lozinke i još mnogo toga sa svojim Firefox računom.</string>
<!-- Text for the button to learn more about signing in to your Firefox account -->
<string name="onboarding_manual_sign_in_learn_more">Saznajte više</string>
<!-- text for the firefox account onboarding card header when we detect you're already signed in to
another Firefox browser. (The word `Firefox` should not be translated)
The first parameter is the email of the detected user's account -->
@ -1459,6 +1523,9 @@
<!-- Text displayed on a button in the synced tabs screen to link users to sign in when a user is not signed in to Firefox Sync -->
<string name="synced_tabs_sign_in_button">Prijavite se za sinhr.</string>
<!-- The text displayed when a synced device has no tabs to show in the list of Synced Tabs. -->
<string name="synced_tabs_no_open_tabs">Nema otvorenih tabova</string>
<!-- Top Sites -->
<!-- Title text displayed in the dialog when top sites limit is reached. -->
<string name="top_sites_max_limit_title">Dosegli ste limit za Top stranice</string>
@ -1467,4 +1534,18 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">OK, razumijem</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Prikaži najposjećenije stranice</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Ukloni</string>
<!-- depcrecated: text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Izvucite maksimum iz %s.</string>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Sakupite stvari koje su vam važne</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Grupišite slične pretrage, stranice i tabove za brži pristup kasnije.</string>
</resources>

@ -289,6 +289,8 @@
<string name="preferences_toolbar">Barra dattrezzi</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Tema</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Accolta</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Persunalizà</string>
<!-- Preference description for banner about signing in -->
@ -496,6 +498,32 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Chjode</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Unghjette chjose pocu fà</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Affissà a crunulogia sana</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d unghjette</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d unghjetta</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Alcuna unghjetta chjosa pocu fà</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Chjode lunghjette</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Manualmente</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Dopu un ghjornu</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Dopu una settimana</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Dopu un mese</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Unghjette aperte</string>
@ -515,6 +543,10 @@
<string name="tab_tray_menu_item_save">Arregistrà in una cullezzione</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Sparte tutte lunghjette</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Unghjette chjose pocu fà</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Preferenze di lunghjette</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Chjode tutte lunghjette</string>
<!-- Shortcut action to open new tab -->
@ -1531,6 +1563,9 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">Iè, aghju capitu</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Affissà i siti visitati aspessu</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Caccià</string>

@ -290,6 +290,9 @@
<!-- Preference for add_ons -->
<string name="preferences_addons">Πρόσθετα</string>
<!-- Preference for notifications -->
<string name="preferences_notifications">Ειδοποιήσεις</string>
<!-- Account Preferences -->
<!-- Preference for triggering sync -->
<string name="preferences_sync_now">Συγχρονισμός τώρα</string>
@ -439,6 +442,26 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Κλείσιμο</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d καρτέλες</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d καρτέλα</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Κλείσιμο καρτελών</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Χειροκίνητα</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Μετά από μια μέρα</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Μετά από μια εβδομάδα</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Μετά από ένα μήνα</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Ανοικτές καρτέλες</string>
@ -458,6 +481,8 @@
<string name="tab_tray_menu_item_save">Αποθήκευση στη συλλογή</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Κοινή χρήση όλων των καρτελών</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Πρόσφατα κλεισμένες καρτέλες</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Κλείσιμο όλων των καρτελών</string>
<!-- Shortcut action to open new tab -->
@ -503,6 +528,8 @@
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Αφαίρεση</string>
<!-- Text for the menu button to delete a top site from history -->
<string name="delete_from_history">Διαγραφή από ιστορικό</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (Ιδιωτική λειτουργία)</string>
@ -548,6 +575,10 @@
<!-- Text shown when no history exists -->
<string name="history_empty_message">Δεν υπάρχει ιστορικό</string>
<!-- Downloads -->
<!-- Text shown when no download exists -->
<string name="download_empty_message">Καμία λήψη</string>
<!-- Crashes -->
<!-- Title text displayed on the tab crash page. This first parameter is the name of the application (For example: Fenix) -->
<string name="tab_crash_title_2">Συγγνώμη. Το %1$s δεν μπορεί να φορτώσει αυτή τη σελίδα.</string>
@ -700,10 +731,6 @@
<string name="collections_header">Συλλογές</string>
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">Μενού συλλογής</string>
<!-- No Open Tabs Message Header -->
<string name="no_collections_header1">Συλλέξτε όλα όσα έχουν σημασία για εσάς</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Ομαδοποιήστε παρόμοιες αναζητήσεις, σελίδες και καρτέλες για γρήγορη πρόσβαση αργότερα.</string>
<!-- Title for the "select tabs" step of the collection creator -->
<string name="create_collection_select_tabs">Επιλέξτε καρτέλες</string>
<!-- Title for the "select collection" step of the collection creator -->
@ -946,9 +973,8 @@
<string name="onboarding_whats_new_description">Έχετε ερωτήσεις σχετικά με το επανασχεδιασμένο %s; Θέλετε να μάθετε τι έχει αλλάξει;</string>
<!-- text for underlined clickable link that is part of "what's new" onboarding card description that links to an FAQ -->
<string name="onboarding_whats_new_description_linktext">Λάβετε απαντήσεις εδώ</string>
<!-- text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Αξιοποιήστε στο έπακρο το %s.</string>
<!-- Text for the button to learn more about signing in to your Firefox account -->
<string name="onboarding_manual_sign_in_learn_more">Μάθετε περισσότερα</string>
<!-- text for the button to confirm automatic sign-in -->
<string name="onboarding_firefox_account_auto_signin_confirm">Ναι, σύνδεση</string>
<!-- text for the automatic sign-in button while signing in is in process -->
@ -1389,10 +1415,24 @@
<!-- Text displayed on a button in the synced tabs screen to link users to sign in when a user is not signed in to Firefox Sync -->
<string name="synced_tabs_sign_in_button">Σύνδεση στο Sync</string>
<!-- The text displayed when a synced device has no tabs to show in the list of Synced Tabs. -->
<string name="synced_tabs_no_open_tabs">Καμία ανοικτή καρτέλα</string>
<!-- Top Sites -->
<!-- Title text displayed in the dialog when top sites limit is reached. -->
<string name="top_sites_max_limit_title">Έχετε φτάσει το ανώτατο όριο κορυφαίων ιστοσελίδων</string>
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">OK, το κατάλαβα</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Αφαίρεση</string>
<!-- depcrecated: text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Αξιοποιήστε στο έπακρο το %s.</string>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Συλλέξτε όλα όσα έχουν σημασία για εσάς</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Ομαδοποιήστε παρόμοιες αναζητήσεις, σελίδες και καρτέλες για γρήγορη πρόσβαση αργότερα.</string>
</resources>

@ -284,6 +284,8 @@
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Tema</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Inicio</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Personalizar</string>
<!-- Preference description for banner about signing in -->
@ -490,6 +492,31 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Cerrar</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Pestañas cerradas recientemente</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Mostrar historial completo</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d pestañas</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d pestaña</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">No hay pestañas cerradas recientemente aquí</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Cerrar pestañas</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Manualmente</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Después de un día</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Después de una semana</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Después de un mes</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Pestañas abiertas</string>
@ -509,6 +536,10 @@
<string name="tab_tray_menu_item_save">Guardar en la colección</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Compartir todas las pestañas</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Pestañas cerradas recientemente</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Ajustes de pestañas</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Cerrar todas las pestañas</string>
<!-- Shortcut action to open new tab -->
@ -1515,6 +1546,9 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">Ok, ¡ya caché!</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Mostrar los sitios más visitados</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Eliminar</string>

@ -289,6 +289,8 @@
<string name="preferences_toolbar">Barre doutils</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Thème</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Accueil</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Personnaliser</string>
<!-- Preference description for banner about signing in -->
@ -500,6 +502,31 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Fermer</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Onglets récemment fermés</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Afficher lhistorique complet</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d onglets</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d onglet</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Aucun onglet récemment fermé ici</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Fermer les onglets</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Manuellement</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Après un jour</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Après une semaine</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Après un mois</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Onglets ouverts</string>
@ -519,6 +546,10 @@
<string name="tab_tray_menu_item_save">Enregistrer dans une collection</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Partager tous les onglets</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Onglets récemment fermés</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Paramètres des onglets</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Fermer tous les onglets</string>
<!-- Shortcut action to open new tab -->
@ -1550,6 +1581,9 @@ Cependant, il peut être moins stable. Téléchargez la version bêta de notre n
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">Jai compris</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Afficher les sites les plus visités</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Supprimer</string>

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- App name for private browsing mode, only the "Private" portion should be localized. -->
<string name="app_name_private_2">Ro-shealladh Firefox prìobhaideach</string>
<!-- App name for private browsing mode, only the "Private" portion should be localized. -->
<string name="app_name_private_3">Ro-shealladh Firefox (Prìobhaideach)</string>
<!-- App name for private browsing mode. The first parameter is the name of the app defined in app_name (for example: Fenix)-->
<string name="app_name_private_5">%s prìobhaideach</string>
<!-- App name for private browsing mode. The first parameter is the name of the app defined in app_name (for example: Fenix)-->
<string name="app_name_private_4">%s (Prìobhaideach)</string>
<!-- Home Fragment -->
<!-- Content description (not visible, for screen readers etc.): "Three dot" menu button. -->
<string name="content_description_menu">Barrachd roghainnean</string>
@ -13,23 +13,53 @@
<string name="content_description_disable_private_browsing_button">Cuir am brabhsadh prìobhaideach à comas</string>
<!-- Placeholder text shown in the search bar before a user enters text -->
<string name="search_hint">Lorg no cuir seòladh ann</string>
<!-- No Open Tabs Message Header -->
<string name="no_open_tabs_header_2">Chan eil taba fosgailte</string>
<!-- No Open Tabs Message Description -->
<string name="no_open_tabs_description">Nochdaidh na tabaichean fosgailte agad an-seo.</string>
<!-- No Private Tabs Message Description -->
<string name="no_private_tabs_description">Nochdaidh na tabaichean prìobhaideach agad an-seo.</string>
<!-- Message announced to the user when tab tray is selected with 1 tab -->
<string name="open_tab_tray_single">Tha taba fosgailte. Thoir gnogag airson leum a ghearradh gu taba eile.</string>
<!-- Message announced to the user when tab tray is selected with 0 or 2+ tabs -->
<string name="open_tab_tray_plural">Tha tabaichean (%1$s) fosgailte. Thoir gnogag airson leum a ghearradh gu taba eile.</string>
<!-- Tab tray multi select title in app bar. The first parameter is the number of tabs selected -->
<string name="tab_tray_multi_select_title">%1$d air an taghadh</string>
<!-- Label of button in create collection dialog for creating a new collection -->
<string name="tab_tray_add_new_collection">Cuir cruinneachadh ùr ris</string>
<!-- Label of editable text in create collection dialog for naming a new collection -->
<string name="tab_tray_add_new_collection_name">Ainm</string>
<!-- Label of button in save to collection dialog for selecting a current collection -->
<string name="tab_tray_select_collection">Tagh cruinneachadh</string>
<!-- Content description for close button while in multiselect mode in tab tray -->
<string name="tab_tray_close_multiselect_content_description">Fàg am modh ioma-thaghaidh</string>
<!-- Content description for save to collection button while in multiselect mode in tab tray -->
<string name="tab_tray_collection_button_multiselect_content_description">Sàbhail na tabaichean a thagh thu sa chruinneachadh</string>
<!-- Content description for checkmark while tab is selected while in multiselect mode in tab tray. The first parameter is the title of the tab selected -->
<string name="tab_tray_item_selected_multiselect_content_description">Chaidh %1$s a thaghadh</string>
<!-- Content description when tab is unselected while in multiselect mode in tab tray. The first parameter is the title of the tab unselected -->
<string name="tab_tray_item_unselected_multiselect_content_description">Chaidh %1$s a dhì-thaghadh</string>
<!-- Content description announcement when exiting multiselect mode in tab tray -->
<string name="tab_tray_exit_multiselect_content_description">Dhfhàg thu am modh ioma-thaghaidh</string>
<!-- Content description announcement when entering multiselect mode in tab tray -->
<string name="tab_tray_enter_multiselect_content_description">Thòisich thu am modh ioma-thaghaidh, tagh tabaichean airson an sàbhaladh ann an cruinneachadh</string>
<!-- Content description on checkmark while tab is selected in multiselect mode in tab tray -->
<string name="tab_tray_multiselect_selected_content_description">Air an taghadh</string>
<!-- About content. The first parameter is the name of the application. (For example: Fenix) -->
<string name="about_content">Chaidh %1$s a dhèanamh le Mozilla.</string>
<!-- Private Browsing -->
<!-- Title for private session option -->
<string name="private_browsing_title">Tha thu ann an seisean prìobhaideach</string>
<!-- Explanation for private browsing displayed to users on home view when they first enable private mode
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="private_browsing_placeholder_description">Falamhaichidh %1$s eachdraidh nan lorg is a bhrabhsaidh agad nuair a dhfhàgas tu an aplacaid no nuair a dhùineas tu gach taba prìobhaideach. Fhad s nach cuir seo am falach cò thusa mu choinneamh làraichean-lìn no solaraiche nan seirbheisean-lìn agad,
cumaidh e na nì thu air loidhne am falach o dhaoine eile a chleachdas an t-uidheam seo.</string>
<string name="private_browsing_placeholder_description_2">
Falamhaichidh %1$s eachdraidh nan lorg is a bhrabhsaidh aig tabaichean prìobhaideachd nuair a dhùineas tu iad no nuair a dhfhàgas tu an aplacaid. Fhad s nach cuir seo am falach cò thusa mu choinneamh làraichean-lìn no solaraiche nan seirbheisean-lìn agad, cumaidh e na nì thu air loidhne am falach o dhaoine eile a chleachdas an t-uidheam seo.</string>
<string name="private_browsing_common_myths">Faoin-sgeulan cumanta mun bhrabhsadh phrìobhaideach</string>
<!-- Delete session button to erase your history in a private session -->
<string name="private_browsing_delete_session">Sguab an seisean às</string>
<!-- Private mode shortcut "contextual feature recommender" (CFR) -->
<!-- Private mode shortcut "contextual feature recommendation" (CFR) -->
<!-- Text for the main message -->
<string name="cfr_message">Cuir ath-ghoirid ris airson tabaichean prìobhaideach fhosgladh on sgrìn mhòr agad.</string>
<!-- Text for the positive button -->
@ -38,12 +68,45 @@
<!-- Text for the negative button -->
<string name="cfr_neg_button_text">Cha chuir, mòran taing</string>
<!-- Search widget "contextual feature recommendation" (CFR) -->
<!-- Text for the main message. 'Firefox' intentionally hardcoded here.-->
<string name="search_widget_cfr_message">Faigh greim air Firefox nas luaithe, cuir widget ris an sgrìn-dhachaigh agad.</string>
<!-- Text for the positive button -->
<string name="search_widget_cfr_pos_button_text">Cuir widget ris</string>
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Chan ann an-dràsta</string>
<!-- Open in App "contextual feature recommendation" (CFR) -->
<!-- Text for the info message. 'Firefox' intentionally hardcoded here.-->
<string name="open_in_app_cfr_info_message">S urrainn dhut iarraidh air Firefox ceanglaichean fhosgladh ann an aplacaidean gu fèin-obrachail.</string>
<!-- Text for the positive action button -->
<string name="open_in_app_cfr_positive_button_text">Tadhail air na roghainnean</string>
<!-- Text for the negative action button -->
<string name="open_in_app_cfr_negative_button_text">Leig seachad</string>
<!-- Text for the info dialog when camera permissions have been denied but user tries to access a camera feature. -->
<string name="camera_permissions_needed_message">Tha feum air inntrigeadh dhan chamara. Tadhail air roghainnean Android, thoir gnogag air na ceadan is an uairsin air “Ceadaich”.</string>
<!-- Text for the positive action button to go to Android Settings to grant permissions. -->
<string name="camera_permissions_needed_positive_button_text">Tadhail air na roghainnean</string>
<!-- Text for the negative action button to dismiss the dialog. -->
<string name="camera_permissions_needed_negative_button_text">Leig seachad</string>
<!-- Text for the banner message to tell users about our auto close feature. -->
<string name="tab_tray_close_tabs_banner_message">S urrainn dhut suidheachadh gun tèid tabaichean a dhùnadh gu fèin-obrachail mur an deach coimhead orra an-dè, an t-seachdain seo chaidh no am mìos seo chaidh.</string>
<!-- Text for the positive action button to go to Settings for auto close tabs. -->
<string name="tab_tray_close_tabs_banner_positive_button_text">Seall na roghainnean</string>
<!-- Text for the negative action button to dismiss the Close Tabs Banner. -->
<string name="tab_tray_close_tabs_banner_negative_button_text">Leig seachad</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">Taba ùr</string>
<!-- Shortcut action to open new private tab -->
<string name="home_screen_shortcut_open_new_private_tab_2">Taba prìobhaideach ùr</string>
<!-- Heading for the Top Sites block -->
<string name="home_screen_top_sites_heading">Brod nan làrach</string>
<!-- Browser Fragment -->
<!-- Content description (not visible, for screen readers etc.): Navigate to open tabs -->
<string name="browser_tabs_button">Tabaichean fosgailte</string>
@ -60,7 +123,7 @@
<!-- Content description (not visible, for screen readers etc.): Un-bookmark the current page -->
<string name="browser_menu_edit_bookmark">Deasaich an comharra-lìn</string>
<!-- Browser menu button that opens the addon manager -->
<string name="browser_menu_addon_manager">Manaidsear nan tuilleadan</string>
<string name="browser_menu_add_ons">Tuilleadain</string>
<!-- Text displayed when there are no add-ons to be shown -->
<string name="no_add_ons">Chan eil tuilleadan sam bith an-seo</string>
<!-- Browser menu button that sends a user to help articles -->
@ -70,13 +133,15 @@
<!-- Browser menu button that opens the settings menu -->
<string name="browser_menu_settings">Roghainnean</string>
<!-- Browser menu button that opens a user's library -->
<string name="browser_menu_your_library">An leabhar-lann agad</string>
<string name="browser_menu_library">An leabhar-lann</string>
<!-- Browser menu toggle that requests a desktop site -->
<string name="browser_menu_desktop_site">An tionndadh desktop</string>
<!-- Browser menu toggle that adds a shortcut to the site on the device home screen. -->
<string name="browser_menu_add_to_homescreen">Cuir ris an sgrìn mhòr</string>
<!-- Browser menu toggle that installs a Progressive Web App shortcut to the site on the device home screen. -->
<string name="browser_menu_install_on_homescreen">Stàlaich</string>
<!-- Menu option on the toolbar that takes you to synced tabs page-->
<string name="synced_tabs">Tabaichean sioncronaichte</string>
<!-- Browser menu button that opens the find in page menu -->
<string name="browser_menu_find_in_page">Lorg air an duilleag</string>
<!-- Browser menu button that creates a private tab -->
@ -84,9 +149,7 @@
<!-- Browser menu button that creates a new tab -->
<string name="browser_menu_new_tab">Taba ùr</string>
<!-- Browser menu button that saves the current tab to a collection -->
<string name="browser_menu_save_to_collection">Sàbhail ann an cruinneachadh</string>
<!-- Browser menu button that opens a dialog to report issues with the current site -->
<string name="browser_menu_report_issue">Dèan aithris air duilgheadas leis an làrach</string>
<string name="browser_menu_save_to_collection_2">Sàbhail ann an cruinneachadh</string>
<!-- Browser menu button that open a share menu to share the current site -->
<string name="browser_menu_share">Co-roinn</string>
<!-- Share menu title, displayed when a user is sharing their current site -->
@ -100,13 +163,19 @@
<!-- Browser menu text shown in custom tabs to indicate this is a Fenix tab
The first parameter is the name of the app defined in app_name (for example: Fenix) -->
<string name="browser_menu_powered_by2">Le cumhachd %1$s</string>
<!-- Browser menu button to put the the current page in reader mode -->
<!-- Browser menu button to put the current page in reader mode -->
<string name="browser_menu_read">An sealladh leughaidh</string>
<!-- Browser menu button content description to close reader mode and return the user to the regular browser -->
<string name="browser_menu_read_close">Dùin sealladh an leughadair</string>
<!-- Browser menu button to open the current page in an external app -->
<string name="browser_menu_open_app_link">Fosgail ann an aplacaid</string>
<!-- Browser menu button to configure reader mode appearance e.g. the used font type and size -->
<string name="browser_menu_read_appearance">Coltas</string>
<!-- Error message to show when the user tries to access a scheme not
handled by the app (Ex: blob, tel etc) -->
<string name="unknown_scheme_error_message">Cha ghabh ceangal a dhèanamh. Chan aithnich sinn sgeama an URL.</string>
<!-- Locale Settings Fragment -->
<!-- Content description for tick mark on selected language -->
<string name="a11y_selected_locale_content_description">An cànan a thagh thu</string>
@ -120,14 +189,12 @@
<!-- Search Fragment -->
<!-- Button in the search view that lets a user search by scanning a QR code -->
<string name="search_scan_button">Sganaich</string>
<!-- Button in the search view that lets a user search by using a shortcut -->
<string name="search_shortcuts_button">Ath-ghoiridean</string>
<!-- Button in the search view that lets a user change their search engine -->
<string name="search_engine_button">Einnseanan-luirg</string>
<!-- Button in the search view when shortcuts are displayed that takes a user to the search engine settings -->
<string name="search_shortcuts_engine_settings">Roghainnean an einnsein-luirg</string>
<!-- DEPRECATED: Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with">Lorg le</string>
<!-- Header displayed when selecting a shortcut search engine -->
<string name="search_shortcuts_search_with_2">Dèan lorg leis na leanas an turas seo:</string>
<string name="search_engines_search_with">Dèan lorg leis na leanas an turas seo:</string>
<!-- Button in the search view that lets a user navigate to the site in their clipboard -->
<string name="awesomebar_clipboard_title">Cuir a-steach an ceangal on stòr-bhòrd</string>
<!-- Button in the search suggestions onboarding that allows search suggestions in private sessions -->
@ -147,6 +214,9 @@
<!-- Text preview for larger sized widgets -->
<string name="search_widget_text_long">Lorg air an lìon</string>
<!-- Content description (not visible, for screen readers etc.): Voice search -->
<string name="search_widget_voice">Lorg-gutha</string>
<!-- Preferences -->
<!-- Title for the settings page-->
<string name="settings">Roghainnean</string>
@ -192,10 +262,18 @@
<!-- Preference for opening links in a private tab-->
<string name="preferences_open_links_in_a_private_tab">Fosgail na ceanglaichean ann an taba prìobhaideach</string>
<!-- Preference for allowing screenshots to be taken while in a private tab-->
<string name="preferences_allow_screenshots_in_private_mode">Ceadaich glacaidhean-sgrìn sa bhrabhsadh phrìobhaideach</string>
<!-- Preference for adding private browsing shortcut -->
<string name="preferences_add_private_browsing_shortcut">Cuir ath-ghoirid brabhsaidh prìobhaideach ris</string>
<!-- Preference for accessibility -->
<string name="preferences_accessibility">So-ruigsinneachd</string>
<!-- Preference to override the Firefox Account server -->
<string name="preferences_override_fxa_server">Frithealaiche chunntasan Firefox gnàthaichte</string>
<!-- Preference to override the Sync token server -->
<string name="preferences_override_sync_tokenserver">Frithealaiche sioncronachaidh gnàthaichte</string>
<!-- Toast shown after updating the FxA/Sync server override preferences -->
<string name="toast_override_fxa_sync_server_done">Chaidh frithealaichte nan cunntasan Firefox no an t-sioncronachaidh atharrachadh. Fàg an aplacaid gus na h-atharraichean a chur an gnìomh…</string>
<!-- Preference category for account information -->
<string name="preferences_category_account">Cunntas</string>
<!-- Preference shown on banner to sign into account -->
@ -204,6 +282,8 @@
<string name="preferences_toolbar">Bàr-inneal</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">An t-ùrlar</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Dhachaigh</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Gnàthaich</string>
<!-- Preference description for banner about signing in -->
@ -224,10 +304,12 @@
<string name="developer_tools_category">Innealan an luchd-leasachaidh</string>
<!-- Preference for developers -->
<string name="preferences_remote_debugging">Dì-bhugachadh cèin slighe USB</string>
<!-- Preference title for switch preference to show search shortcuts -->
<string name="preferences_show_search_shortcuts">Seall na h-ath-ghoiridean luirg</string>
<!-- Preference title for switch preference to show search engines -->
<string name="preferences_show_search_engines">Seall na h-einnseanan-luirg</string>
<!-- Preference title for switch preference to show search suggestions -->
<string name="preferences_show_search_suggestions">Seall molaidhean luirg</string>
<!-- Preference title for switch preference to show voice search button -->
<string name="preferences_show_voice_search">Seall an lorg-gutha</string>
<!-- Preference title for switch preference to show search suggestions also in private mode -->
<string name="preferences_show_search_suggestions_in_private">Seall ann an seiseanan prìobhaideach</string>
<!-- Preference title for switch preference to show a clipboard suggestion when searching -->
@ -240,9 +322,14 @@
<string name="preferences_account_settings">Roghainnean a chunntais</string>
<!-- Preference for open links in third party apps -->
<string name="preferences_open_links_in_apps">Fosgail ceanglaichean ann an aplacaidean</string>
<!-- Preference for open download with an external download manager app -->
<string name="preferences_external_download_manager">Manaidsear nan luchdadh a-nuas on taobh a-muigh</string>
<!-- Preference for add_ons -->
<string name="preferences_addons">Tuilleadain</string>
<!-- Preference for notifications -->
<string name="preferences_notifications">Brathan</string>
<!-- Account Preferences -->
<!-- Preference for triggering sync -->
<string name="preferences_sync_now">Sioncronaich an-dràsta</string>
@ -254,6 +341,8 @@
<string name="preferences_sync_bookmarks">Comharran-lìn</string>
<!-- Preference for syncing logins -->
<string name="preferences_sync_logins">Clàraidhean a-steach</string>
<!-- Preference for syncing tabs -->
<string name="preferences_sync_tabs_2">Tabaichean fosgailte</string>
<!-- Preference for signing out -->
<string name="preferences_sign_out">Clàraich a-mach</string>
<!-- Preference displays and allows changing current FxA device name -->
@ -270,10 +359,11 @@
<string name="sync_last_synced_summary">An sioncronachadh mu dheireadh: %s</string>
<!-- Label summary showing never synced -->
<string name="sync_never_synced_summary">Cha deach a shioncronachadh a-riamh</string>
<!-- Text for displaying the default device name.
The first parameter is the application name, the second is the device manufacturer name
and the third is the device model. -->
<string name="default_device_name">%s %s %s</string>
<string name="default_device_name_2">%1$s air %2$s %3$s</string>
<!-- Send Tab -->
<!-- Name of the "receive tabs" notification channel. Displayed in the "App notifications" system settings for the app -->
@ -343,7 +433,7 @@
<!-- Pairing Feature strings -->
<!-- Instructions on how to access pairing -->
<string name="pair_instructions"><![CDATA[Tadhail air <b>firefox.com/pair</b> ann am Firefox air a choimpiutair agad a dhfhaighinn a chòd QR.]]></string>
<string name="pair_instructions_2"><![CDATA[Sganaich an còd QR a chì thu aig <b>firefox.com/pair</b>]]></string>
<!-- Button to open camera for pairing -->
<string name="pair_open_camera">Fosgail an camara</string>
<!-- Button to cancel pairing -->
@ -384,12 +474,12 @@
<string name="library_desktop_bookmarks_unfiled">Comharran-lìn eile</string>
<!-- Option in Library to open History page -->
<string name="library_history">An eachdraidh</string>
<!-- Option in Library to open Synced Tabs page -->
<string name="library_synced_tabs">Tabaichean sioncronaichte</string>
<!-- Option in Library to open Reading List -->
<string name="library_reading_list">An liosta-leughaidh</string>
<!-- Menu Item Label for Search in Library -->
<string name="library_search">Lorg</string>
<!-- Library Page Title -->
<string name="library_title">Leabhar-lann</string>
<!-- Settings Page Title -->
<string name="settings_title">Roghainnean</string>
<!-- Content description (not visible, for screen readers etc.): "Menu icon for items on a history item" -->
@ -397,6 +487,31 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Dùin</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Tabaichean a dhùin thu o chionn ghoirid</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Seall an eachdraidh gu lèir</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">Tabaichean (%d)</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d taba</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Chan eil taba sam bith an-seo a dhùin thu o chionn goirid</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Dùin na tabaichean</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">De làimh</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">An dèidh latha</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">An dèidh seachdaine</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">An dèidh mìos</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Tabaichean fosgailte</string>
@ -406,6 +521,30 @@
<string name="tabs_header_private_tabs_title">Tabaichean prìobhaideach</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_tab">Cuir taba ris</string>
<!-- Content description (not visible, for screen readers etc.): Add tab button. Adds a news tab when pressed -->
<string name="add_private_tab">Cuir taba prìobhaideach ris</string>
<!-- Text for the new tab button to indicate adding a new private tab in the tab -->
<string name="tab_drawer_fab_content">Prìobhaideach</string>
<!-- Text shown as the title of the open tab tray -->
<string name="tab_tray_title">Tabaichean fosgailte</string>
<!-- Text shown in the menu for saving tabs to a collection -->
<string name="tab_tray_menu_item_save">Sàbhail ann an cruinneachadh</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Co-roinn a h-uile taga</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Tabaichean a dhùin thu o chionn ghoirid</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Roghainnean nan tabaichean</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Dùin a h-uile taba</string>
<!-- Shortcut action to open new tab -->
<string name="tab_tray_menu_open_new_tab">Taba ùr</string>
<!-- Shortcut action to open the home screen -->
<string name="tab_tray_menu_home">Dhachaigh</string>
<!-- Shortcut action to toggle private mode -->
<string name="tab_tray_menu_toggle">Toglaich modh nan taba</string>
<!-- Content description (not visible, for screen readers etc.): Removes tab from collection button. Removes the selected tab from collection when pressed -->
<string name="remove_tab_from_collection">Thoir an taba air falbh on chruinneachadh</string>
<!-- Content description (not visible, for screen readers etc.): Close tab button. Closes the current session when pressed -->
<string name="close_tab">Dùin an taba</string>
<!-- Content description (not visible, for screen readers etc.): Close tab <title> button. First parameter is tab title -->
@ -419,7 +558,7 @@
<string name="tabs_menu_share_tabs">Co-roinn na tabaichean</string>
<!-- Open tabs menu item to save tabs to collection -->
<string name="tabs_menu_save_to_collection">Sàbhail ann an cruinneachadh</string>
<string name="tabs_menu_save_to_collection1">Sàbhail na tabaichean ann an cruinneachadh</string>
<!-- Content description (not visible, for screen readers etc.): Opens the tab menu when pressed -->
<string name="tab_menu">Clàr-taice an taba</string>
<!-- Tab menu item to share the tab -->
@ -443,13 +582,32 @@
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Thoir air falbh</string>
<!-- Text for the menu button to delete a top site from history -->
<string name="delete_from_history">Sguab às an eachdraidh</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (Am modh prìobhaideach)</string>
<!-- Button in the current tab tray header in multiselect mode. Saved the selected tabs to a collection when pressed. -->
<string name="tab_tray_save_to_collection">Sàbhail</string>
<!-- History -->
<!-- Text for the button to clear all history -->
<string name="history_delete_all">Sguab an eachdraidh às</string>
<!-- Text for the dialog to confirm clearing all history -->
<string name="history_delete_all_dialog">A bheil thu cinnteach gu bheil thu airson an eachdraidh agad fhalamhadh?</string>
<!-- Text for the snackbar to confirm that multiple browsing history items has been deleted -->
<string name="history_delete_multiple_items_snackbar">Chaidh an eachdraidh a sguabadh às</string>
<!-- Text for the snackbar to confirm that a single browsing history item has been deleted. The first parameter is the shortened URL of the deleted history item. -->
<string name="history_delete_single_item_snackbar">Chaidh %1$s a sguabadh às</string>
<!-- Text for positive action to delete history in deleting history dialog -->
<string name="history_clear_dialog">Falamhaich</string>
<!-- History overflow menu copy button -->
<string name="history_menu_copy_button">Dèan lethbhreac</string>
<!-- History overflow menu share button -->
<string name="history_menu_share_button">Co-roinn</string>
<!-- History overflow menu open in new tab button -->
<string name="history_menu_open_in_new_tab_button">Fosgail ann an taba ùr</string>
<!-- History overflow menu open in private tab button -->
<string name="history_menu_open_in_private_tab_button">Fosgail ann an taba prìobhaideach</string>
<!-- Text for the button to delete a single history item -->
<string name="history_delete_item">Sguab às</string>
<!-- History multi select title in app bar
@ -469,6 +627,13 @@
<!-- Text shown when no history exists -->
<string name="history_empty_message">Chan eil eachdraidh an-seo</string>
<!-- Downloads -->
<!-- Text shown when no download exists -->
<string name="download_empty_message">Cha deach dad a luchdadh a-nuas an-seo</string>
<!-- History multi select title in app bar
The first parameter is the number of downloads selected -->
<string name="download_multi_select_title">%1$d air an taghadh</string>
<!-- Crashes -->
<!-- Title text displayed on the tab crash page. This first parameter is the name of the application (For example: Fenix) -->
<string name="tab_crash_title_2">Tha sinn duilich ach chan urrainn dha %1$s an duilleag a luchdadh.</string>
@ -494,6 +659,12 @@
<string name="bookmark_edit">Deasaich an comharra-lìn</string>
<!-- Screen title for selecting a bookmarks folder -->
<string name="bookmark_select_folder">Tagh pasgan</string>
<!-- Confirmation message for a dialog confirming if the user wants to delete the selected folder -->
<string name="bookmark_delete_folder_confirmation_dialog">A bheil thu cinnteach gu bheil thu airson am pasgan seo a sguabadh às?</string>
<!-- Confirmation message for a dialog confirming if the user wants to delete multiple items including folders. Parameter will be replaced by app name. -->
<string name="bookmark_delete_multiple_folders_confirmation_dialog">Sguabaidh %s na nithean a thagh thu às.</string>
<!-- Snackbar title shown after a folder has been deleted. This first parameter is the name of the deleted folder -->
<string name="bookmark_delete_folder_snackbar">Chaidh %1$s a sguabadh às</string>
<!-- Screen title for adding a bookmarks folder -->
<string name="bookmark_add_folder">Cuir pasgan ris</string>
<!-- deprecated: Snackbar title shown after a bookmark has been created. -->
@ -546,8 +717,10 @@
<!-- Bookmark snackbar message on deletion
The first parameter is the host part of the URL of the bookmark deleted, if any -->
<string name="bookmark_deletion_snackbar_message">Chaidh %1$s a sguabadh às</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks -->
<string name="bookmark_deletion_multiple_snackbar_message">A sguabadh às nan comharran-lìn a thagh thu</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks not including folders-->
<string name="bookmark_deletion_multiple_snackbar_message_2">Chaidh na comharran-lìn a sguabadh às</string>
<!-- Bookmark snackbar message on deleting multiple bookmarks including folders-->
<string name="bookmark_deletion_multiple_snackbar_message_3">A sguabadh às nam pasganan a thagh thu</string>
<!-- Bookmark undo button for deletion snackbar action -->
<string name="bookmark_undo_deletion">NEO-DHÈAN</string>
@ -594,34 +767,28 @@
<string name="tracking_protection_on">Air</string>
<!-- Summary of tracking protection preference if tracking protection is set to off -->
<string name="tracking_protection_off">Dheth</string>
<!-- DEPRECATED: Label that indicates video and audio autoplay is blocked -->
<string name="preference_option_autoplay_blocked">Tha video is fuaim bacte</string>
<!-- DEPRECATED: Label that indicates video and audio autoplay is allowed -->
<string name="preference_option_autoplay_allowed">Tha video is fuaim ceadaichte</string>
<!-- Label that indicates that all video and audio autoplay is allowed -->
<string name="preference_option_autoplay_allowed2">Ceadaich fuaim is video</string>
<!-- Label that indicates that video and audio autoplay is only allowed over WIFI -->
<string name="preference_option_autoplay_allowed_wifi_only">Ceadaich fuaim is video air WiFi a-mhàin</string>
<!-- Label that indicates that video and audio autoplay is only allowed over Wi-Fi -->
<string name="preference_option_autoplay_allowed_wifi_only2">Bac an fhuaim agus video air ceangal dàta mobile a-mhàin</string>
<!-- Subtext that explains 'autoplay on Wi-Fi only' option -->
<string name="preference_option_autoplay_allowed_wifi_subtext">Gabhaidh fuaim agus video a chluich air WiFi</string>
<!-- Label that indicates that video autoplay is allowed, but audio autoplay is blocked -->
<string name="preference_option_autoplay_block_audio">Bac fuaim</string>
<string name="preference_option_autoplay_block_audio2">Na bac ach an fhuaim</string>
<!-- Label that indicates that all video and audio autoplay is blocked -->
<string name="preference_option_autoplay_blocked2">Bac video s fuaim</string>
<string name="preference_option_autoplay_blocked3">Bach an fhuaim agus a video</string>
<!-- Summary of delete browsing data on quit preference if it is set to on -->
<string name="delete_browsing_data_quit_on">Air</string>
<!-- Summary of delete browsing data on quit preference if it is set to off -->
<string name="delete_browsing_data_quit_off">Dheth</string>
<!-- Collections -->
<!-- Label to describe what collections are to a new user without any collections -->
<string name="collections_description">Cruinnich na rudan a tha cudromach dhut. Sàbhail na tabaichean ann an cruinneachadh ùr airson toiseach-tòiseachaidh.</string>
<!-- Collections header on home fragment -->
<string name="collections_header">Na cruinneachaidhean</string>
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">Clàr-taice nan cruinneachadh</string>
<!-- No Open Tabs Message Header -->
<string name="no_collections_header">Chan eil cruinneachadh ann</string>
<!-- No Open Tabs Message Description -->
<string name="no_collections_description">Nochdaidh na cruinneachaidhean agad an-seo.</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description2">Cruinnich na rudan a tha cudromach dhut.\nBuidhnich luirg, làraichean is tabaichean a tha coltach ri chèile airson greim fhaighinn orra a-rithist gu luath.</string>
<!-- Title for the "select tabs" step of the collection creator -->
<string name="create_collection_select_tabs">Tagh tabaichean</string>
<!-- Title for the "select collection" step of the collection creator -->
@ -644,6 +811,8 @@
<string name="create_collection_save_to_collection_tab_selected">%d taba air a thaghadh</string>
<!-- Text shown in snackbar when multiple tabs have been saved in a collection -->
<string name="create_collection_tabs_saved">Chaidh na tabaichean a shàbhaladh!</string>
<!-- Text shown in snackbar when one or multiple tabs have been saved in a new collection -->
<string name="create_collection_tabs_saved_new_collection">Chaidh an cruinneachadh a shàbhaladh!</string>
<!-- Text shown in snackbar when one tab has been saved in a collection -->
<string name="create_collection_tab_saved">Chaidh an taba a shàbhaladh!</string>
<!-- Content description (not visible, for screen readers etc.): button to close the collection creator -->
@ -651,6 +820,9 @@
<!-- Button to save currently selected tabs in the "select tabs" step of the collection creator-->
<string name="create_collection_save">Sàbhail</string>
<!-- Snackbar action to view the collection the user just created or updated -->
<string name="create_collection_view">Sealladh</string>
<!-- Default name for a new collection in "name new collection" step of the collection creator. %d is a placeholder for the number of collections-->
<string name="create_collection_default_name">Cruinneachadh %d</string>
@ -746,6 +918,10 @@
<string name="qr_scanner_dialog_negative">DIÙLT</string>
<!-- Tab collection deletion prompt dialog message. Placeholder will be replaced with the collection name -->
<string name="tab_collection_dialog_message">A bheil thu cinnteach gu bheil thu airson %1$s a sguabadh às?</string>
<!-- Collection and tab deletion prompt dialog message. This will show when the last tab from a collection is deleted -->
<string name="delete_tab_and_collection_dialog_message">Ma sguabas tu an taba seo às, thèid an cruinneachadh air fad a sguabadh às. S urrainn dhut cruinneachadh ùr a chruthachadh uair sam bith.</string>
<!-- Collection and tab deletion prompt dialog title. Placeholder will be replaced with the collection name. This will show when the last tab from a collection is deleted -->
<string name="delete_tab_and_collection_dialog_title">A bheil thu airson %1$s a sguabadh às?</string>
<!-- Tab collection deletion prompt dialog option to delete the collection -->
<string name="tab_collection_dialog_positive">Sguab às</string>
<!-- Tab collection deletion prompt dialog option to cancel deleting the collection -->
@ -762,14 +938,14 @@
<string name="preference_accessibility_font_size_title">Meud a chrutha-chlò</string>
<!-- Title for Accessibility Text Automatic Size Scaling Preference -->
<string name="preference_accessibility_auto_size">Ath-mheudachadh fèin-obrachail a chrutha-chlò</string>
<string name="preference_accessibility_auto_size_2">Ath-mheudachadh fèin-obrachail a chrutha-chlò</string>
<!-- Summary for Accessibility Text Automatic Size Scaling Preference -->
<string name="preference_accessibility_auto_size_summary">Thèid meud a chrutha-chlò atharrachadh a-rèir nan roghainnean Android agad. Cuir à comas e airson a mheud a shuidheachadh an-seo.</string>
<!-- Title for the Delete browsing data preference -->
<string name="preferences_delete_browsing_data">Sguab an dàta brabhsaidh às</string>
<!-- Title for the tabs item in Delete browsing data -->
<string name="preferences_delete_browsing_data_tabs_title">Tabaichean fosgailte</string>
<string name="preferences_delete_browsing_data_tabs_title_2">Tabaichean fosgailte</string>
<!-- Subtitle for the tabs item in Delete browsing data, parameter will be replaced with the number of open tabs -->
<string name="preferences_delete_browsing_data_tabs_subtitle">Tabaichean (%d)</string>
<!-- Title for the data and history items in Delete browsing data -->
@ -801,8 +977,6 @@
<string name="preference_summary_delete_browsing_data_on_quit">Sguabaidh seo an dàta brabhsaidh às gu fèin-obrachail nuair a thaghas tu “Fàg an-seo” on phrìomh chlàr-taice.</string>
<!-- Summary for the Delete browsing data on quit preference. "Quit" translation should match delete_browsing_data_on_quit_action translation. -->
<string name="preference_summary_delete_browsing_data_on_quit_2">Sguabaidh seo an dàta brabhsaidh às gu fèin-obrachail nuair a thaghas tu “Fàg an-seo” on phrìomh chlàr-taice.</string>
<!-- Category for history items to delete on quit in delete browsing data on quit -->
<string name="preferences_delete_browsing_data_on_quit_browsing_history">An eachdraidh brabhsaidh</string>
<!-- Action item in menu for the Delete browsing data on quit feature -->
<string name="delete_browsing_data_on_quit_action">Fàg an-seo</string>
@ -819,6 +993,34 @@
<!-- Text for the snackbar to show the user that the deletion of browsing data is in progress -->
<string name="deleting_browsing_data_in_progress">A sguabadh an dàta bhrabhsaidh às…</string>
<!-- Tips -->
<!-- text for firefox preview moving tip header "Firefox Preview" and "Firefox Nightly" are intentionally hardcoded -->
<string name="tip_firefox_preview_moved_header">S e Firefox Nightly a tha air Firefox Preview a-nis</string>
<!-- text for firefox preview moving tip description -->
<string name="tip_firefox_preview_moved_description">
Thèid Firefox Nightly ùrachadh gach oidhche agus tha gleusan deuchainneil na bhroinn.
Ge-tà, dhfhaoidte nach bi e buileach cho seasmhach. Luchdaich a-nuas am brabhsair beta againn airson brabhsair nas seasmhaiche.</string>
<!-- text for firefox preview moving tip button. "Firefox for Android Beta" is intentionally hardcoded -->
<string name="tip_firefox_preview_moved_button_2">Faigh Firefox airson Android Beta</string>
<!-- text for firefox preview moving tip header. "Firefox Nightly" is intentionally hardcoded -->
<string name="tip_firefox_preview_moved_header_preview_installed">Rinn Firefox Nightly gluasad</string>
<!-- text for firefox preview moving tip description -->
<string name="tip_firefox_preview_moved_description_preview_installed">
Chan fhaigh an aplacaid seo ùrachaidhean tèarainteachd tuilleadh. Na cleachd an aplacaid seo tuilleadh is faigh greim air an tionndadh ùr Nightly na àite.
\n\nAirson na comharran-lìn, clàraidhean a-steach is an eachdraidh agad a ghluasad gu aplacaid eile, cruthaich cunntas Firefox.</string>
<!-- text for firefox preview moving tip button -->
<string name="tip_firefox_preview_moved_button_preview_installed">Cleachd an tionndadh ùr Nightly na àite</string>
<!-- text for firefox preview moving tip header. "Firefox Nightly" is intentionally hardcoded -->
<string name="tip_firefox_preview_moved_header_preview_not_installed">Rinn Firefox Nightly gluasad</string>
<!-- text for firefox preview moving tip description -->
<string name="tip_firefox_preview_moved_description_preview_not_installed">
Chan fhaigh an aplacaid seo ùrachaidhean tèarainteachd tuilleadh. Na cleachd an aplacaid seo tuilleadh is faigh greim air an tionndadh ùr Nightly na àite.
\n\nAirson na comharran-lìn, clàraidhean a-steach is an eachdraidh agad a ghluasad gu aplacaid eile, cruthaich cunntas Firefox.</string>
<!-- text for firefox preview moving tip button -->
<string name="tip_firefox_preview_moved_button_preview_not_installed">Faigh an tionndadh ùr Nightly</string>
<!-- Onboarding -->
<!-- Text for onboarding welcome message
The first parameter is the name of the app (e.g. Firefox Preview) -->
@ -835,9 +1037,10 @@
<string name="onboarding_whats_new_description">A bheil ceist agad mun dealbhadh ur aig %s? Airson fiosrachadh na tha air atharrachadh?</string>
<!-- text for underlined clickable link that is part of "what's new" onboarding card description that links to an FAQ -->
<string name="onboarding_whats_new_description_linktext">Faigh freagairtean an-seo</string>
<!-- text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Cuir %s gu làn-fheum.</string>
<!-- text for the Firefox account onboarding sign in card header -->
<string name="onboarding_account_sign_in_header">Tòisich air sioncronachadh nan comharran-lìn, faclan-faire is mòran a bharrachd leis a chunntas Firefox agad.</string>
<!-- Text for the button to learn more about signing in to your Firefox account -->
<string name="onboarding_manual_sign_in_learn_more">Barrachd fiosrachaidh</string>
<!-- text for the firefox account onboarding card header when we detect you're already signed in to
another Firefox browser. (The word `Firefox` should not be translated)
The first parameter is the email of the detected user's account -->
@ -855,19 +1058,21 @@
<!-- text to display in the snackbar if automatic sign-in fails. user may try again -->
<string name="onboarding_firefox_account_automatic_signin_failed">Dhfhàillig an logadh a-steach</string>
<!-- text for the tracking protection onboarding card header -->
<string name="onboarding_tracking_protection_header">Dìon thu fhèin</string>
<string name="onboarding_tracking_protection_header_2">Prìobhaideachd fhèin-obrachail</string>
<!-- text for the tracking protection card description
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_tracking_protection_description1">Cuiridh %s bacadh air làraichean-lìn o bhith gad thracadh air loidhne.</string>
<string name="onboarding_tracking_protection_description_2">Bacaidh na roghainnean prìobhaideachd is tèarainteachd tracaichean, bathar-bog droch-rùnach is companaidhean a leanas mun cuairt thu.</string>
<!-- text for tracking protection radio button option for standard level of blocking -->
<string name="onboarding_tracking_protection_standard_button">Stannardach</string>
<string name="onboarding_tracking_protection_standard_button_2">Stannardach (bun-roghainn)</string>
<!-- text for standard blocking option button description -->
<string name="onboarding_tracking_protection_standard_button_description">Bacaidh seo nas lugha de thracaichean ach thèid làraichean a luchdadh mar bu chòir</string>
<string name="onboarding_tracking_protection_standard_button_description_2">Bacaidh seo nas lughe de thracaichean. Thèid duilleagan a luchdadh mar bu chòir.</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_button">Teann (mholamaid seo)</string>
<!-- text for tracking protection radio button option for strict level of blocking -->
<string name="onboarding_tracking_protection_strict_option">Teann</string>
<!-- text for strict blocking option button description -->
<string name="onboarding_tracking_protection_strict_button_description">Bacaidh seo barrachd thracaichean airson dìon agus dèanadas nas fheàrr ach dhfhaoidte gum bi làraichean ann nach obraich mar bu chòir</string>
<string name="onboarding_tracking_protection_strict_button_description_2">Bacaidh seo barrachd thracaichean, sanasachd is priob-uinneagan. Thèid duilleagan a luchdadh nas luaithe ach dhfhaoidte nach obraich gach rud mar bu chòir.</string>
<!-- text for the toolbar position card header
In English this is an idiom for "choose a side as in an argument or fight"
but it is ok to make this more literally about "choosing a position in a physical space -->
@ -892,6 +1097,9 @@
<!-- Text for the button to read the privacy notice -->
<string name="onboarding_privacy_notice_read_button">Leugh sanas na prìobhaideachd againn</string>
<!-- Content description (not visible, for screen readers etc.): Close onboarding screen -->
<string name="onboarding_close">Dùin</string>
<!-- text for the button to finish onboarding -->
<string name="onboarding_finish">Tòisich air brabhsadh</string>
@ -929,6 +1137,8 @@
<string name="sign_in_with_email">Cleachd post-d na àite</string>
<!-- Text shown in confirmation dialog to sign out of account -->
<string name="sign_out_confirmation_message">Sguiridh Firefox de shioncronachadh a chunntais agad ach cha sguab e às gin dhen dàta brabhsaidh agad air an uidheam seo.</string>
<!-- Text shown in confirmation dialog to sign out of account. The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="sign_out_confirmation_message_2">Sguiridh %s de shioncronachadh a chunntais agad ach cha sguab e às gin dhen dàta brabhsaidh agad air an uidheam seo.</string>
<!-- Option to continue signing out of account shown in confirmation dialog to sign out of account -->
<string name="sign_out_disconnect">Dì-cheangail</string>
<!-- Option to cancel signing out shown in confirmation dialog to sign out of account -->
@ -949,31 +1159,21 @@
<!-- Text displayed that links to website about enhanced tracking protection -->
<string name="preference_enhanced_tracking_protection_explanation_learn_more">Barrachd fiosrachaidh</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_option">Stannardach</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard">Stannardach (mholamaid seo)</string>
<string name="preference_enhanced_tracking_protection_standard_default_1">Stannardach (bun-roghainn)</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description">Cothromachadh eadar dìon is dèanadas.</string>
<!-- Preference description for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_standard_description_2">Thèid duilleagan a luchdadh mar bu chòir ach bacaidh e nas lugha de thracaichean.</string>
<string name="preference_enhanced_tracking_protection_standard_description_3">Bacaidh seo nas lughe de thracaichean. Thèid duilleagan a luchdadh mar bu chòir.</string>
<!-- Accessibility text for the Standard protection information icon -->
<string name="preference_enhanced_tracking_protection_standard_info_button">Na thèid a bhacadh leis an dìon stannardach on tracadh</string>
<!-- Preference for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict">Teann</string>
<!-- Preference for enhanced tracking protection for the strict protection settings, default setting -->
<string name="preference_enhanced_tracking_protection_strict_default">Teann (Bun-roghainn)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_default_description">Dìon o thracadh agus dèanadas nas fheàrr ach bidh làraichean ann nach obraich buileach mar bu chòir.</string>
<!-- Preference for enhanced tracking protection for the standard protection settings -->
<string name="preference_enhanced_tracking_protection_strict_recommended">Teann (mholamaid seo)</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_strict_description">Dìon nas làidire ach dhfhaoidte gum bris seo cuid a làraichean no susbaint.</string>
<string name="preference_enhanced_tracking_protection_strict_description_2">Bacaidh seo barrachd thracaichean, sanasachd is priob-uinneagan. Thèid duilleagan a luchdadh nas luaithe ach dhfhaoidte nach obraich gach rud mar bu chòir.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_strict_info_button">Na thèid a bhacadh leis an dìon teann on tracadh</string>
<!-- Preference for enhanced tracking protection for the custom protection settings -->
<string name="preference_enhanced_tracking_protection_custom">Gnàthaichte</string>
<!-- Preference description for enhanced tracking protection for the strict protection settings -->
<string name="preference_enhanced_tracking_protection_custom_description">Tagh na tracaichean is sgriobtaichean a thèid a bhacadh</string>
<string name="preference_enhanced_tracking_protection_custom_description_2">Tagh na tracaichean is sgriobtaichean a thèid a bhacadh.</string>
<!-- Accessibility text for the Strict protection information icon -->
<string name="preference_enhanced_tracking_protection_custom_info_button">Na thèid a bhacadh leis an dìon ghnàthaichte on tracadh</string>
<!-- Header for categories that are being blocked by current Enhanced Tracking Protection settings -->
@ -1023,13 +1223,16 @@
<!-- Description of tracking content that can be blocked by Enhanced Tracking Protection -->
<string name="etp_tracking_content_description">Cuiridh seo stad air luchdadh de shanasachd, videothan is susbaint eile on taobh a-muigh anns a bheil còd tracaidh. Dhfhaoidte gum bi droch-bhuaidh aige seo air obrachadh de chuid a làraichean-lìn.</string>
<!-- Enhanced Tracking Protection Onboarding Message shown in a dialog above the toolbar. The first parameter is the name of the application (For example: Fenix) -->
<string name="etp_onboarding_message_2">Tha %s a bacadh tracaichean air an làrach seo nuair a bhios an sgiath purpaidh. Thoir gnogag air is chì thu na tha ga bhacadh.</string>
<string name="etp_onboarding_cfr_message">Gach turas a bhios an sgiath purpaidh, bhac %s tracaichean air làrach. Thoir gnogag airson barrachd fiosrachaidh.</string>
<!-- Enhanced Tracking Protection message that protection is currently on for this site -->
<string name="etp_panel_on">Tha an dìon AIR air an làrach seo</string>
<!-- Enhanced Tracking Protection message that protection is currently off for this site -->
<string name="etp_panel_off">Tha an dìon DHETH air an làrach seo</string>
<!-- Header for exceptions list for which sites enhanced tracking protection is always off -->
<string name="enhanced_tracking_protection_exceptions">Tha an dìon adhartach o thracadh dheth air na làraichean seo</string>
<!-- Content description (not visible, for screen readers etc.): Navigate
back from ETP details (Ex: Tracking content) -->
<string name="etp_back_button_content_description">Air ais</string>
<!-- About page Your rights link text -->
<string name="about_your_rights">Do chòraichean</string>
@ -1043,6 +1246,8 @@
<!-- About page link text to open support link -->
<string name="about_support">Taic</string>
<!-- About page link text to list of past crashes (like about:crashes on desktop) -->
<string name="about_crashes">Tuislidhean</string>
<!-- About page link text to open privacy notice link -->
<string name="about_privacy_notice">Aithris na prìobhaideachd</string>
<!-- About page link text to open know your rights link -->
@ -1052,6 +1257,11 @@
<!-- About page link text to open a screen with libraries that are used -->
<string name="about_other_open_source_libraries">Leabhar-lannan a chleachdas sinn</string>
<!-- Toast shown to the user when they are activating the secret dev menu
The first parameter is number of long clicks left to enable the menu -->
<string name="about_debug_menu_toast_progress">Clàr-taice dì-bhugachaidh: %1$d briogaidhean air fhàgail gus a chur an comas</string>
<string name="about_debug_menu_toast_done">Tha an clàr-taice dì-bhugachaidh an comas a-nis</string>
<!-- Content description of the tab counter toolbar button when one tab is open -->
<string name="tab_counter_content_description_one_tab">1 taba</string>
<!-- Content description of the tab counter toolbar button when multiple tabs are open. First parameter will be replaced with the number of tabs (always more than one) -->
@ -1073,9 +1283,14 @@
<string name="add_to_homescreen_cancel">Sguir dheth</string>
<!-- Add button text for the Add to Homescreen dialog -->
<string name="add_to_homescreen_add">Cuir ris</string>
<!-- Continue to website button text for the first-time Add to Homescreen dialog -->
<string name="add_to_homescreen_continue">Lean air adhart gun làrach-lìn</string>
<!-- Placeholder text for the TextView in the Add to Homescreen dialog -->
<string name="add_to_homescreen_text_placeholder">Ainm na h-ath-ghoirid</string>
<!-- Describes the add to homescreen functionality -->
<string name="add_to_homescreen_description">Tha e furasta an duilleag seo a chur ri duilleag-dhachaigh an fhòn agad airson greim fhaighinn air gu luath.</string>
<!-- Preference for managing the settings for logins and passwords in Fenix -->
<string name="preferences_passwords_logins_and_passwords">Clàraidhean a-steach is faclan-faire</string>
<!-- Preference for managing the saving of logins and passwords in Fenix -->
@ -1108,6 +1323,8 @@
<string name="preferences_passwords_exceptions_description_empty">Nochdaidh clàraidhean a-steach is faclan-faire nach eil gan sàbhaladh an-seo.</string>
<!-- Description of list of login exceptions that we never save logins for -->
<string name="preferences_passwords_exceptions_description">Cha dèid clàraidhean a-steach agus faclan-faire a shàbhaladh airson nan làraichean seo.</string>
<!-- Text on button to remove all saved login exceptions -->
<string name="preferences_passwords_exceptions_remove_all">Sguab gach eisgeachd às</string>
<!-- Hint for search box in logins list -->
<string name="preferences_passwords_saved_logins_search">Lorg sna clàraidhean a-steach</string>
<!-- Option to sort logins list A-Z, alphabetically -->
@ -1147,6 +1364,8 @@
<string name="saved_login_copy_username">Dèan lethbhreac dhen ainm-chleachdaiche</string>
<!-- Content Description (for screenreaders etc) read for the button to copy a site in logins -->
<string name="saved_login_copy_site">Dèan lethbhreac dhen làrach</string>
<!-- Content Description (for screenreaders etc) read for the button to open a site in logins -->
<string name="saved_login_open_site">Fosgail an làrach sa bhrabhsair</string>
<!-- Content Description (for screenreaders etc) read for the button to reveal a password in logins -->
<string name="saved_login_reveal_password">Seall am facal-faire</string>
<!-- Content Description (for screenreaders etc) read for the button to hide a password in logins -->
@ -1169,6 +1388,13 @@
<!-- Summary for Accessibility Force Enable Zoom Preference -->
<string name="preference_accessibility_force_enable_zoom_summary">Cuir greimeachadh is sùmadh an comas, fiù air làraichean-lìn a bhacas an gluasad seo.</string>
<!-- Saved logins sorting strategy menu item -by name- (if selected, it will sort saved logins alphabetically) -->
<string name="saved_logins_sort_strategy_alphabetically">Ainm (A-Z)</string>
<!-- Saved logins sorting strategy menu item -by last used- (if selected, it will sort saved logins by last used) -->
<string name="saved_logins_sort_strategy_last_used">Cleachdadh mu dheireadh</string>
<!-- Content description (not visible, for screen readers etc.): Sort saved logins dropdown menu chevron icon -->
<string name="saved_logins_menu_dropdown_chevron_icon_content_description">Seòrsaich clàr-taice nan clàradh a-steach</string>
<!-- Title of the Add search engine screen -->
<string name="search_engine_add_custom_search_engine_title">Cuir einnsean-luirg ris</string>
<!-- Title of the Edit search engine screen -->
@ -1260,8 +1486,72 @@
<string name="certificate_info_verified_by">Air a dhearbhadh le: %1$s</string>
<!-- Login overflow menu delete button -->
<string name="login_menu_delete_button">Sguab às</string>
<!-- Login overflow menu edit button -->
<string name="login_menu_edit_button">Deasaich</string>
<!-- Message in delete confirmation dialog for logins -->
<string name="login_deletion_confirmation">A bheil thu cinnteach gu bheil thu airson an clàradh a-steach seo a sguabadh às?</string>
<!-- Positive action of a dialog asking to delete -->
<string name="dialog_delete_positive">Sguab às</string>
<!-- The saved login options menu description. -->
<string name="login_options_menu">Roghainnean clàraidh a-steach</string>
<!-- The editable text field for a login's web address. -->
<string name="saved_login_hostname_description">An raon teacsa so-dheasaichte airson seòladh-lìn a chlàraidh a-steach.</string>
<!-- The editable text field for a login's username. -->
<string name="saved_login_username_description">An raon teacsa so-dheasaichte airson ainm-cleachdaiche a chlàraidh a-steach.</string>
<!-- The editable text field for a login's password. -->
<string name="saved_login_password_description">An raon teacsa so-dheasaichte airson facal-faire a chlàraidh a-steach.</string>
<!-- The button description to save changes to an edited login. -->
<string name="save_changes_to_login">Sàbhail na h-atharraichean a rinneadh air a chlàradh a-steach.</string>
<!-- The button description to discard changes to an edited login. -->
<string name="discard_changes">Tilg air falbh na h-atharraichean</string>
<!-- The page title for editing a saved login. -->
<string name="edit">Deasaich</string>
<!-- The error message in edit login view when password field is blank. -->
<string name="saved_login_password_required">Tha feum air facal-faire</string>
<!-- Voice search button content description -->
<string name="voice_search_content_description">Lorg-gutha</string>
<!-- Voice search prompt description displayed after the user presses the voice search button -->
<string name="voice_search_explainer">Bruidhinn an-dràsta</string>
<!-- The error message in edit login view when a duplicate username exists. -->
<string name="saved_login_duplicate">Tha clàradh a-steach ann mu thràth aig a bheil an t-ainm-cleachdaiche seo</string>
<!-- Synced Tabs -->
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">Ceangail uidheam eile ris.</string>
<!-- Text displayed asking user to re-authenticate -->
<string name="synced_tabs_reauth">Dèan dearbhadh às ùr.</string>
<!-- Text displayed when user has disabled tab syncing in Firefox Sync Account -->
<string name="synced_tabs_enable_tab_syncing">Cuir an comas sioncronachadh nan tabaichean.</string>
<!-- Text displayed when user has no tabs that have been synced -->
<string name="synced_tabs_no_tabs">Chan eil taba sam bith fosgailte agad ann am Firefox air uidheaman eile.</string>
<!-- Text displayed in the synced tabs screen when a user is not signed in to Firefox Sync describing Synced Tabs -->
<string name="synced_tabs_sign_in_message">Seall liosta nan tabaichean a tha agad air uidheaman eile.</string>
<!-- Text displayed on a button in the synced tabs screen to link users to sign in when a user is not signed in to Firefox Sync -->
<string name="synced_tabs_sign_in_button">Clàraich a-steach a shioncronachadh</string>
<!-- The text displayed when a synced device has no tabs to show in the list of Synced Tabs. -->
<string name="synced_tabs_no_open_tabs">Chan eil taba fosgailte</string>
<!-- Top Sites -->
<!-- Title text displayed in the dialog when top sites limit is reached. -->
<string name="top_sites_max_limit_title">Ràinig thu crìoch brod nan làrach</string>
<!-- Content description text displayed in the dialog when top sites limit is reached. -->
<string name="top_sites_max_limit_content">Airson brod làraich ùr a chur ris, thoir fear air falbh an toiseach. Dèan brùthadh fada air an làrach is tagh “Thoir air falbh”.</string>
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">Ceart, tha mi agaibh</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Seall na làraichean air a do thadhail thu as trice</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Thoir air falbh</string>
<!-- depcrecated: text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Cuir %s gu làn-fheum.</string>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Cruinnich na rudan a tha cudromach dhut</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Buidhnich luirg, làraichean is tabaichean a tha coltach ri chèile airson greim fhaighinn orra a-rithist gu luath.</string>
</resources>

@ -90,11 +90,15 @@
<!-- Text for the negative action button -->
<string name="open_in_app_cfr_negative_button_text">Mboyke</string>
<!-- Text for the info dialog when camera permissions have been denied but user tries to access a camera feature. -->
<string name="camera_permissions_needed_message">Eikotevẽ eike taãngamýime. Eho Android ñembohekópe, eukutu ñemoneĩ ha moneĩ.</string>
<!-- Text for the positive action button to go to Android Settings to grant permissions. -->
<string name="camera_permissions_needed_positive_button_text">Eho ñembohekópe</string>
<!-- Text for the negative action button to dismiss the dialog. -->
<string name="camera_permissions_needed_negative_button_text">Mboyke</string>
<!-- Text for the banner message to tell users about our auto close feature. -->
<string name="tab_tray_close_tabs_banner_message">Emboheko tendayke ijurujáva oñemboty hag̃ua ijehegui ojehechaỹva pe ára, arapokõindy térã jasýpe.</string>
<!-- Text for the positive action button to go to Settings for auto close tabs. -->
<string name="tab_tray_close_tabs_banner_positive_button_text">Ehecha jeporavorã</string>
<!-- Text for the negative action button to dismiss the Close Tabs Banner. -->
@ -286,6 +290,8 @@
<string name="preferences_toolbar">Tembiporu renda</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Téma</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Ñepyrũ</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Ñemombaete</string>
<!-- Preference description for banner about signing in -->
@ -493,6 +499,31 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Mboty</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Tendayke oñemboty ramóva</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Tembiasakue jehechaukapa</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d tendaykekuéra</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d tendayke</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Ndaipóri tendayke oñemboty ramóva</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Emboty tendayke</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Popegua</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Peteĩ ára rire</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Peteĩ arapokõindy rire</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Peteĩ jasy rire</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Tendayke ijurujáva</string>
@ -513,6 +544,10 @@
<string name="tab_tray_menu_item_save">Eñongatu atyhápe</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Emoherakuã opaite tendayke</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Tendayke oñemboty ramóva</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Tendayke ñemboheko</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Emboty opaite tendayke</string>
<!-- Shortcut action to open new tab -->
@ -1540,6 +1575,9 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">Oĩma, aikumby</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Ehechauka tenda ojeikeveha</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Mboguete</string>
@ -1547,4 +1585,8 @@
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Eguenohẽ %s-gui eikotevẽva.</string>
</resources>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Embyaty umi mbaekuéra ehayhu añetéva</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Emboaty hekaha, tenda ha tendayke ojueheguáva eike pyaeve hag̃ua ag̃ave.</string>
</resources>

@ -79,6 +79,28 @@
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Non adesso</string>
<!-- Open in App "contextual feature recommendation" (CFR) -->
<!-- Text for the info message. 'Firefox' intentionally hardcoded here.-->
<string name="open_in_app_cfr_info_message">È possibile impostare Firefox come browser predefinito per aprire i link nelle app.</string>
<!-- Text for the positive action button -->
<string name="open_in_app_cfr_positive_button_text">Vai alle impostazioni</string>
<!-- Text for the negative action button -->
<string name="open_in_app_cfr_negative_button_text">Ignora</string>
<!-- Text for the info dialog when camera permissions have been denied but user tries to access a camera feature. -->
<string name="camera_permissions_needed_message">È richiesto laccesso alla fotocamera. Puoi acconsentire allaccesso dalla scheda dei permessi nelle impostazioni di Android.</string>
<!-- Text for the positive action button to go to Android Settings to grant permissions. -->
<string name="camera_permissions_needed_positive_button_text">Vai alle impostazioni</string>
<!-- Text for the negative action button to dismiss the dialog. -->
<string name="camera_permissions_needed_negative_button_text">Chiudi</string>
<!-- Text for the banner message to tell users about our auto close feature. -->
<string name="tab_tray_close_tabs_banner_message">Imposta la chiusura automatica delle schede aperte che non sono state visualizzate nellultimo giorno, settimana o mese.</string>
<!-- Text for the positive action button to go to Settings for auto close tabs. -->
<string name="tab_tray_close_tabs_banner_positive_button_text">Visualizza opzioni</string>
<!-- Text for the negative action button to dismiss the Close Tabs Banner. -->
<string name="tab_tray_close_tabs_banner_negative_button_text">Chiudi</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">Nuova scheda</string>
@ -268,6 +290,8 @@
<string name="preferences_toolbar">Barra degli strumenti</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Tema</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Pagina iniziale</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Personalizza</string>
<!-- Preference description for banner about signing in -->
@ -481,6 +505,32 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Chiudi</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Schede chiuse di recente</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Visualizza cronologia completa</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d schede</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d scheda</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Nessuna scheda chiusa di recente</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Chiudi schede</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Manualmente</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Dopo un giorno</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Dopo una settimana</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Dopo un mese</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Schede aperte</string>
@ -500,6 +550,10 @@
<string name="tab_tray_menu_item_save">Salva in una raccolta</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Condividi tutte le schede</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Schede chiuse di recente</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Impostazioni schede</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Chiudi tutte le schede</string>
<!-- Shortcut action to open new tab -->
@ -547,6 +601,8 @@
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Rimuovi</string>
<!-- Text for the menu button to delete a top site from history -->
<string name="delete_from_history">Elimina dalla cronologia</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (modalità Navigazione anonima)</string>
@ -1528,6 +1584,18 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">OK, tutto chiaro</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Mostra i siti più visitati</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Elimina</string>
<!-- depcrecated: text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Ottieni il massimo da %s.</string>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Raggruppa i tuoi interessi</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Raggruppa ricerche, siti e schede simili tra loro per ritrovarle più rapidamente.</string>
</resources>

@ -284,6 +284,8 @@
<string name="preferences_toolbar">ხელსაწყოთა ზოლი</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">თემა</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">მთავარი</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">მორგება</string>
<!-- Preference description for banner about signing in -->
@ -490,6 +492,32 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">დახურვა</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">ბოლოს დახურული ჩანართები</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">სრული ისტორიის ჩვენება</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d ჩანართი</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d ჩანართი</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">ბოლოს დახურული ჩანართები არაა</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">ჩანართების დახურვა</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">ხელით</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">ერთი დღის შემდეგ</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">ერთი კვირის შემდეგ</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">ერთი თვის შემდეგ</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">გახსნილი ჩანართები</string>
@ -509,6 +537,10 @@
<string name="tab_tray_menu_item_save">კრებულში შენახვა</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">ყველა ჩანართის გაზიარება</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">ბოლოს დახურული ჩანართები</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">ჩანართის პარამეტრები</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">ყველა ჩანართის დახურვა</string>
<!-- Shortcut action to open new tab -->
@ -1519,6 +1551,9 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">კარგი, გასაგებია</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">ხშირად მონახულებულების ჩვენება</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">მოცილება</string>

@ -82,14 +82,23 @@
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Ikkje no</string>
<!-- Open in App "contextual feature recommendation" (CFR) -->
<!-- Text for the info message. 'Firefox' intentionally hardcoded here.-->
<string name="open_in_app_cfr_info_message">Du kan stille inn Firefox til å automatisk opne lenker i appar.</string>
<!-- Text for the positive action button -->
<string name="open_in_app_cfr_positive_button_text">Gå til Innstillingar</string>
<!-- Text for the negative action button -->
<string name="open_in_app_cfr_negative_button_text">Ignorer</string>
<!-- Text for the info dialog when camera permissions have been denied but user tries to access a camera feature. -->
<string name="camera_permissions_needed_message">Kameratilgang er nødvendig. Gå til Android-innstillingar, trykk på løyve, og trykk på tillat.</string>
<!-- Text for the positive action button to go to Android Settings to grant permissions. -->
<string name="camera_permissions_needed_positive_button_text">Gå til Innstillingar</string>
<!-- Text for the negative action button to dismiss the dialog. -->
<string name="camera_permissions_needed_negative_button_text">Ignorer</string>
<!-- Text for the banner message to tell users about our auto close feature. -->
<string name="tab_tray_close_tabs_banner_message">Still inn at opne faner som ikkje har blitt viste den siste dagen, veka eller månaden skal latast att automatisk.</string>
<!-- Text for the positive action button to go to Settings for auto close tabs. -->
<string name="tab_tray_close_tabs_banner_positive_button_text">Vis alternativ</string>
<!-- Text for the negative action button to dismiss the Close Tabs Banner. -->
@ -795,6 +804,8 @@
<string name="collections_header">Samlingar</string>
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">Samlingsmeny</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description2">Samle tinga som betyr noko for deg.\nGrupper liknande søk, nettstadar og faner for rask tilgang seinare.</string>
<!-- Title for the "select tabs" step of the collection creator -->
<string name="create_collection_select_tabs">Vel faner</string>
<!-- Title for the "select collection" step of the collection creator -->
@ -1045,6 +1056,8 @@
<!-- text for underlined clickable link that is part of "what's new" onboarding card description that links to an FAQ -->
<string name="onboarding_whats_new_description_linktext">Få svar her</string>
<!-- text for the Firefox account onboarding sign in card header -->
<string name="onboarding_account_sign_in_header">Begynn å synkronisere bokmerke, passord og meir med Firefox-kontoen din.</string>
<!-- Text for the button to learn more about signing in to your Firefox account -->
<string name="onboarding_manual_sign_in_learn_more">Les meir</string>
<!-- text for the firefox account onboarding card header when we detect you're already signed in to
@ -1551,7 +1564,18 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">OK, eg forstår det</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Vis mest besøkte nettstadar</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Fjern</string>
</resources>
<!-- depcrecated: text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Få mest muleg ut av %s.</string>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Samle dei tinga som betyr noko for deg</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Grupper saman liknande søk, nettstadar og faner for rask tilgang seinare.</string>
</resources>

@ -77,6 +77,23 @@
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Pas ara</string>
<!-- Text for the positive action button -->
<string name="open_in_app_cfr_positive_button_text">Anar als paramètres</string>
<!-- Text for the negative action button -->
<string name="open_in_app_cfr_negative_button_text">Ignorar</string>
<!-- Text for the info dialog when camera permissions have been denied but user tries to access a camera feature. -->
<string name="camera_permissions_needed_message">Accès a la camèra necessari. Anatz als paramètres Android, tocatz Autorizacions puèi Autorizar.</string>
<!-- Text for the positive action button to go to Android Settings to grant permissions. -->
<string name="camera_permissions_needed_positive_button_text">Anar als paramètres</string>
<!-- Text for the negative action button to dismiss the dialog. -->
<string name="camera_permissions_needed_negative_button_text">Ignorar</string>
<!-- Text for the positive action button to go to Settings for auto close tabs. -->
<string name="tab_tray_close_tabs_banner_positive_button_text">Veire las opcions</string>
<!-- Text for the negative action button to dismiss the Close Tabs Banner. -->
<string name="tab_tray_close_tabs_banner_negative_button_text">Ignorar</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">Onglet novèl</string>
@ -263,6 +280,8 @@
<string name="preferences_toolbar">Barra daisinas</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Tèma</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Acuèlh</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Personalizacion</string>
<!-- Preference description for banner about signing in -->
@ -471,6 +490,32 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Tampar</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Onglets tampats recentament</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Afichar listoric complèt</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d onglets</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d onglet</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Cap donglets pas tampats recentament</string>
<!-- Tab Management -->
<!-- Title of preference that allows a user to auto close tabs after a specified amount of time -->
<string name="preferences_close_tabs">Tampar los onglets</string>
<!-- Option for auto closing tabs that will never auto close tabs, always allows user to manually close tabs -->
<string name="close_tabs_manually">Manualament</string>
<!-- Option for auto closing tabs that will auto close tabs after one day -->
<string name="close_tabs_after_one_day">Aprèp un jorn</string>
<!-- Option for auto closing tabs that will auto close tabs after one week -->
<string name="close_tabs_after_one_week">Aprèp una setmana</string>
<!-- Option for auto closing tabs that will auto close tabs after one month -->
<string name="close_tabs_after_one_month">Aprèp un mes</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">Onglets dobèrts</string>
@ -490,6 +535,10 @@
<string name="tab_tray_menu_item_save">Salvar a la colleccion</string>
<!-- Text shown in the menu for sharing all tabs -->
<string name="tab_tray_menu_item_share">Partejar totes los onglets</string>
<!-- Text shown in the menu to view recently closed tabs -->
<string name="tab_tray_menu_recently_closed">Onglets tampats recentament</string>
<!-- Text shown in the menu to view tab settings -->
<string name="tab_tray_menu_tab_settings">Paramètres dels onglets</string>
<!-- Text shown in the menu for closing all tabs -->
<string name="tab_tray_menu_item_close">Tampar totes los onglets</string>
<!-- Shortcut action to open new tab -->
@ -536,6 +585,8 @@
<!-- Text for the menu button to remove a top site -->
<string name="remove_top_site">Suprimir</string>
<!-- Text for the menu button to delete a top site from history -->
<string name="delete_from_history">Suprimir de listoric</string>
<!-- Postfix for private WebApp titles, placeholder is replaced with app name -->
<string name="pwa_site_controls_title_private">%1$s (mòde privat)</string>
@ -748,10 +799,6 @@
<string name="collections_header">Colleccions</string>
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">Menú de colleccion</string>
<!-- No Open Tabs Message Header -->
<string name="no_collections_header1">Amassatz çò que compta per vos</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Agropatz de recèrcas, de sites e donglets similaris per i accedir rapidament mai tard.</string>
<!-- Title for the "select tabs" step of the collection creator -->
<string name="create_collection_select_tabs">Seleccionar donglets</string>
<!-- Title for the "select collection" step of the collection creator -->
@ -982,8 +1029,6 @@
<string name="onboarding_whats_new_header1">Descobrissètz las novetats</string>
<!-- text for underlined clickable link that is part of "what's new" onboarding card description that links to an FAQ -->
<string name="onboarding_whats_new_description_linktext">Trobatz de responsas aquí</string>
<!-- text for the firefox account onboarding card header -->
<string name="onboarding_firefox_account_header">Ne fasètz mai amb %s.</string>
<!-- Text for the button to learn more about signing in to your Firefox account -->
<string name="onboarding_manual_sign_in_learn_more">Ne saber mai</string>
<!-- text for the button to confirm automatic sign-in -->
@ -1438,4 +1483,18 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">Òc, plan comprés</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Mostrar los sites mai visitats</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Suprimir</string>
<!-- depcrecated: text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Ne fasètz mai amb %s.</string>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Amassatz çò que compta per vos</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Agropatz de recèrcas, de sites e donglets similaris per i accedir rapidament mai tard.</string>
</resources>

@ -70,6 +70,28 @@
<!-- Text for the negative button -->
<string name="search_widget_cfr_neg_button_text">Ne zdaj</string>
<!-- Open in App "contextual feature recommendation" (CFR) -->
<!-- Text for the info message. 'Firefox' intentionally hardcoded here.-->
<string name="open_in_app_cfr_info_message">Firefox lahko nastavite tako, da samodejno odpira povezave v aplikacijah.</string>
<!-- Text for the positive action button -->
<string name="open_in_app_cfr_positive_button_text">Pojdi v nastavitve</string>
<!-- Text for the negative action button -->
<string name="open_in_app_cfr_negative_button_text">Zapri</string>
<!-- Text for the info dialog when camera permissions have been denied but user tries to access a camera feature. -->
<string name="camera_permissions_needed_message">Potreben je dostop do kamere. Odprite nastavitve sistema Android in v dovoljenjih tapnite Dovoli.</string>
<!-- Text for the positive action button to go to Android Settings to grant permissions. -->
<string name="camera_permissions_needed_positive_button_text">Pojdi v nastavitve</string>
<!-- Text for the negative action button to dismiss the dialog. -->
<string name="camera_permissions_needed_negative_button_text">Zapri</string>
<!-- Text for the banner message to tell users about our auto close feature. -->
<string name="tab_tray_close_tabs_banner_message">Nastavite, naj se zavihki, ki jih niste odprli v preteklem dnevu, tednu ali mesecu, samodejno zaprejo.</string>
<!-- Text for the positive action button to go to Settings for auto close tabs. -->
<string name="tab_tray_close_tabs_banner_positive_button_text">Prikaži možnosti</string>
<!-- Text for the negative action button to dismiss the Close Tabs Banner. -->
<string name="tab_tray_close_tabs_banner_negative_button_text">Zapri</string>
<!-- Home screen icons - Long press shortcuts -->
<!-- Shortcut action to open new tab -->
<string name="home_screen_shortcut_open_new_tab_2">Nov zavihek</string>
@ -254,6 +276,8 @@
<string name="preferences_toolbar">Orodna vrstica</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">Tema</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">Domača stran</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">Prilagodi</string>
<!-- Preference description for banner about signing in -->
@ -465,6 +489,16 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">Zapri</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">Nedavno zaprti zavihki</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">Prikaži vso zgodovino</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">Zavihkov: %d</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d zavihek</string>
<!-- Recently closed tabs screen message when there are no recently closed tabs -->
<string name="recently_closed_empty_message">Ni nedavno zaprtih zavihkov</string>
@ -597,6 +631,13 @@
<!-- Text shown when no history exists -->
<string name="history_empty_message">Ni zgodovine</string>
<!-- Downloads -->
<!-- Text shown when no download exists -->
<string name="download_empty_message">Ni prenosov</string>
<!-- History multi select title in app bar
The first parameter is the number of downloads selected -->
<string name="download_multi_select_title">%1$d izbranih</string>
<!-- Crashes -->
<!-- Title text displayed on the tab crash page. This first parameter is the name of the application (For example: Fenix) -->
<string name="tab_crash_title_2">Oprostite. %1$s ne more naložiti te strani.</string>
@ -753,6 +794,8 @@
<string name="collections_header">Zbirke</string>
<!-- Content description (not visible, for screen readers etc.): Opens the collection menu when pressed -->
<string name="collection_menu_button_content_description">Meni zbirk</string>
<!-- Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description2">Zbirajte stvari, ki vam kaj pomenijo.\nZdružite podobna iskanja, spletne strani in zavihke za hitrejši dostop.</string>
<!-- Title for the "select tabs" step of the collection creator -->
<string name="create_collection_select_tabs">Izberi zavihke</string>
<!-- Title for the "select collection" step of the collection creator -->
@ -1001,6 +1044,8 @@
<string name="onboarding_whats_new_description">Imate vprašanja o preoblikovanem %su? Želite izvedeti, kaj se je spremenilo?</string>
<!-- text for underlined clickable link that is part of "what's new" onboarding card description that links to an FAQ -->
<string name="onboarding_whats_new_description_linktext">Tukaj poiščite odgovore</string>
<!-- text for the Firefox account onboarding sign in card header -->
<string name="onboarding_account_sign_in_header">Začnite sinhronizirati zaznamke, gesla in ostalo s Firefox Računom.</string>
<!-- Text for the button to learn more about signing in to your Firefox account -->
<string name="onboarding_manual_sign_in_learn_more">Več o tem</string>
<!-- text for the firefox account onboarding card header when we detect you're already signed in to
@ -1510,9 +1555,18 @@
<!-- Confirmation dialog button text when top sites limit is reached. -->
<string name="top_sites_max_limit_confirmation_button">V redu, razumem</string>
<!-- Label for the show most visited sites preference -->
<string name="top_sites_toggle_top_frecent_sites">Prikaži najbolj obiskana spletna mesta</string>
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">Odstrani</string>
<!-- depcrecated: text for the firefox account onboarding card header
The first parameter is the name of the app (e.g. Firefox Preview) -->
<string name="onboarding_firefox_account_header">Kar najbolje izkoristite %s.</string>
<!-- Deprecated: No Open Tabs Message Header -->
<string name="no_collections_header1">Zbirajte stvari, ki vam kaj pomenijo</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Združite podobna iskanja, spletne strani in zavihke za hitrejši dostop.</string>
</resources>

@ -261,6 +261,8 @@
<string name="preferences_toolbar">పనిముట్ల పట్టీ</string>
<!-- Preference for changing default theme to dark or light mode -->
<string name="preferences_theme">అలంకారం</string>
<!-- Preference for customizing the home screen -->
<string name="preferences_home">ముంగిలి</string>
<!-- Preference for settings related to visual options -->
<string name="preferences_customize">అభిమతీకరణ</string>
<!-- Preference description for banner about signing in -->
@ -472,6 +474,17 @@
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
<string name="content_description_close_button">మూసివేయి</string>
<!-- Option in library for Recently Closed Tabs -->
<string name="library_recently_closed_tabs">ఇటీవల మూసిన ట్యాబులు</string>
<!-- Option in library to open Recently Closed Tabs page -->
<string name="recently_closed_show_full_history">పూర్తి చరిత్రను చూపించు</string>
<!-- Text to show users they have multiple tabs saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tabs">%d ట్యాబులు</string>
<!-- Text to show users they have one tab saved in the Recently Closed Tabs section of history.
%d is a placeholder for the number of tabs selected. -->
<string name="recently_closed_tab">%d ట్యాబు</string>
<!-- Sessions -->
<!-- Title for the list of tabs -->
<string name="tab_header_label">తెరిచివున్న ట్యాబులు</string>
@ -1516,4 +1529,5 @@
<!-- Content description for close button in collection placeholder. -->
<string name="remove_home_collection_placeholder_content_description">తొలగించు</string>
</resources>
</resources>

@ -169,6 +169,13 @@
<dimen name="saved_logins_item_margin_start">16dp</dimen>
<dimen name="saved_logins_item_margin_end">48dp</dimen>
<!-- Top sites -->
<dimen name="top_sites_favicon_size">40dp</dimen>
<dimen name="top_sites_favicon_padding">4dp</dimen>
<dimen name="top_sites_item_size">64dp</dimen>
<dimen name="top_sites_item_margin_top">12dp</dimen>
<dimen name="top_sites_text_margin_top">8dp</dimen>
<!-- a11y -->
<dimen name="accessibility_min_height">48dp</dimen>

@ -186,6 +186,7 @@
<string name="pref_key_migrating_from_fenix_nightly_tip" translatable="false">pref_key_migrating_from_fenix_nightly_tip</string>
<string name="pref_key_migrating_from_firefox_nightly_tip" translatable="false">pref_key_migrating_from_firefox_nightly_tip</string>
<string name="pref_key_migrating_from_fenix_tip" translatable="false">pref_key_migrating_from_fenix_tip</string>
<string name="pref_key_master_password_tip" translatable="false">pref_key_master_password_tip</string>
<string name="pref_key_wait_first_paint" translatable="false">pref_key_wait_first_paint</string>
@ -207,4 +208,10 @@
<string name="pref_key_login_exceptions" translatable="false">pref_key_login_exceptions</string>
<string name="pref_key_show_collections_placeholder_home" translatable="false">pref_key_show_collections_home</string>
<string name="pref_key_close_tabs" translatable="false">pref_key_close_tabs</string>
<string name="pref_key_close_tabs_manually" translatable="false">pref_key_close_tabs_manually</string>
<string name="pref_key_close_tabs_after_one_day" translatable="false">pref_key_close_tabs_after_one_day</string>
<string name="pref_key_close_tabs_after_one_week" translatable="false">pref_key_close_tabs_after_one_week</string>
<string name="pref_key_close_tabs_after_one_month" translatable="false">pref_key_close_tabs_after_one_month</string>
</resources>

@ -44,4 +44,20 @@
<!-- Name of the application for about page -->
<string name="daylight_app_name" translatable="false">Iceweasle</string>
<!-- MP Migration -->
<string name="mp_homescreen_tip_title">Looking for your logins?</string>
<string name="mp_homescreen_tip_message">If you had a master password before Iceweasle updated, youll need to enter it to transfer your saved logins.</string>
<string name="mp_homescreen_button">Enter master password</string>
<string name="mp_dialog_title_recovery_transfer_saved_logins">Transfer saved logins</string>
<string name="mp_dialog_message_recovery_transfer_saved_logins">Enter your previous master password.</string>
<string name="mp_dialog_positive_transfer_saved_logins">Continue and transfer</string>
<string name="mp_dialog_negative_transfer_saved_logins">Cancel</string>
<string name="mp_dialog_error_transfer_saved_logins">Invalid password</string>
<string name="mp_dialog_title_transfer_success">Transfer successful</string>
<string name="mp_dialog_message_transfer_success">Your saved logins have been transferred to Iceweasle.</string>
<string name="mp_dialog_positive_transfer_success">View saved logins</string>
<string name="mp_dialog_close_transfer">Close</string>
<string name="mp_dialog_title_transfer_failure">Transfer failed</string>
<string name="mp_dialog_message_transfer_failure">An unknown error occurred and logins could not be transferred.</string>
</resources>

@ -1034,7 +1034,7 @@
<!-- text for the firefox account onboarding card header when we detect you're already signed in to
another Firefox browser. (The word `Firefox` should not be translated)
The first parameter is the email of the detected user's account -->
<string name="onboarding_firefox_account_auto_signin_header_2">You are signed in as %s on another Firefox browser on this phone. Would you like to sign in with this account?</string>
<string name="onboarding_firefox_account_auto_signin_header_3">You are signed in as %s on another Firefox browser on this device. Would you like to sign in with this account?</string>
<!-- text for the button to confirm automatic sign-in -->
<string name="onboarding_firefox_account_auto_signin_confirm">Yes, sign me in</string>
<!-- text for the automatic sign-in button while signing in is in process -->
@ -1274,7 +1274,7 @@
<!-- Placeholder text for the TextView in the Add to Homescreen dialog -->
<string name="add_to_homescreen_text_placeholder">Shortcut name</string>
<!-- Describes the add to homescreen functionality -->
<string name="add_to_homescreen_description">You can easily add this website to your phones Home screen to have instant access and browse faster with an app-like experience.</string>
<string name="add_to_homescreen_description_2">You can easily add this website to your devices Home screen to have instant access and browse faster with an app-like experience.</string>
<!-- Preference for managing the settings for logins and passwords in Fenix -->
<string name="preferences_passwords_logins_and_passwords">Logins and passwords</string>
@ -1501,7 +1501,7 @@
<string name="saved_login_duplicate">A login with that username already exists</string>
<!-- Synced Tabs -->
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<!-- Text displayed to ask user to connect another device as no devices found with account -->
<string name="synced_tabs_connect_another_device">Connect another device.</string>
<!-- Text displayed asking user to re-authenticate -->
<string name="synced_tabs_reauth">Please re-authenticate.</string>
@ -1537,4 +1537,8 @@
<string name="no_collections_header1">Collect the things that matter to you</string>
<!-- Deprecated: Label to describe what collections are to a new user without any collections -->
<string name="no_collections_description1">Group together similar searches, sites, and tabs for quick access later.</string>
<!-- Deprecated: text for the firefox account onboarding card header when we detect you're already signed in to -->
<string name="onboarding_firefox_account_auto_signin_header_2">You are signed in as %s on another Firefox browser on this phone. Would you like to sign in with this account?</string>
<!-- Deprecated: Describes the add to homescreen functionality -->
<string name="add_to_homescreen_description">You can easily add this website to your phones Home screen to have instant access and browse faster with an app-like experience.</string>
</resources>

@ -622,6 +622,14 @@
<item name="behavior_halfExpandedRatio">0.4</item>
</style>
<style name="TopSite.Favicon" parent="Mozac.Widgets.Favicon">
<item name="android:layout_width">@dimen/top_sites_favicon_size</item>
<item name="android:layout_height">@dimen/top_sites_favicon_size</item>
<item name="android:scaleType">fitCenter</item>
<item name="android:padding">@dimen/top_sites_favicon_padding</item>
<item name="android:background">@drawable/mozac_widget_favicon_background</item>
</style>
<style name="TabTrayFab" parent="Widget.MaterialComponents.ExtendedFloatingActionButton">
<item name="elevation">90dp</item>
<item name="android:stateListAnimator">@null</item>

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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/. -->
<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<org.mozilla.fenix.settings.RadioButtonPreference
android:defaultValue="true"
android:key="@string/pref_key_close_tabs_manually"
android:title="@string/close_tabs_manually" />
<org.mozilla.fenix.settings.RadioButtonPreference
android:defaultValue="false"
android:key="@string/pref_key_close_tabs_after_one_day"
android:title="@string/close_tabs_after_one_day" />
<org.mozilla.fenix.settings.RadioButtonPreference
android:defaultValue="false"
android:key="@string/pref_key_close_tabs_after_one_week"
android:title="@string/close_tabs_after_one_week" />
<org.mozilla.fenix.settings.RadioButtonPreference
android:defaultValue="false"
android:key="@string/pref_key_close_tabs_after_one_month"
android:title="@string/close_tabs_after_one_month" />
</androidx.preference.PreferenceScreen>

@ -77,6 +77,11 @@
android:icon="@drawable/ic_internet"
android:key="@string/pref_key_make_default_browser"
android:title="@string/preferences_set_as_default_browser" />
<androidx.preference.Preference
android:icon="@drawable/ic_multiple_tabs"
android:key="@string/pref_key_close_tabs"
android:title="@string/preferences_close_tabs" />
</androidx.preference.PreferenceCategory>
<androidx.preference.PreferenceCategory

@ -62,7 +62,7 @@ class OnboardingAutomaticSignInViewHolderTest {
every { email } returns "email@example.com"
})
assertEquals(
"You are signed in as email@example.com on another Firefox browser on this phone. Would you like to sign in with this account?",
"You are signed in as email@example.com on another Firefox browser on this device. Would you like to sign in with this account?",
view.header_text.text
)
assertTrue(view.fxa_sign_in_button.isEnabled)

@ -100,6 +100,17 @@ class DefaultTabTrayControllerTest {
)
}
@Test
fun handleTabSettingsClicked() {
controller.handleTabSettingsClicked()
verify {
navController.navigate(
TabTrayDialogFragmentDirections.actionGlobalCloseTabSettingsFragment()
)
}
}
@Test
fun onNewTabTapped() {
controller.onNewTabTapped(private = false)

@ -22,6 +22,15 @@ class TabTrayFragmentInteractorTest {
verify { controller.onNewTabTapped(false) }
}
@Test
fun onTabSettingsClicked() {
interactor.onTabSettingsClicked()
verify {
controller.handleTabSettingsClicked()
}
}
@Test
fun onTabTrayDismissed() {
interactor.onTabTrayDismissed()

@ -189,6 +189,47 @@ class SettingsTest {
assertTrue(settings.shouldUseLightTheme)
}
@Test
fun shouldManuallyCloseTabs() {
// When just created
// Then
assertTrue(settings.manuallyCloseTabs)
// When
settings.manuallyCloseTabs = false
// Then
assertFalse(settings.shouldUseLightTheme)
}
@Test
fun getTabTimeout() {
// When just created
// Then
assertTrue(settings.manuallyCloseTabs)
// When
settings.manuallyCloseTabs = false
settings.closeTabsAfterOneDay = true
// Then
assertEquals(settings.getTabTimeout(), Settings.ONE_DAY_MS)
// When
settings.closeTabsAfterOneDay = false
settings.closeTabsAfterOneWeek = true
// Then
assertEquals(settings.getTabTimeout(), Settings.ONE_WEEK_MS)
// When
settings.closeTabsAfterOneWeek = false
settings.closeTabsAfterOneMonth = true
// Then
assertEquals(settings.getTabTimeout(), Settings.ONE_MONTH_MS)
}
@Test
fun shouldUseAutoSize() {
// When just created

@ -129,7 +129,7 @@ allprojects {
}
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions.jvmTarget = "1.8"
kotlinOptions.allWarningsAsErrors = true
kotlinOptions.freeCompilerArgs += [
@ -138,7 +138,7 @@ allprojects {
}
}
task clean(type: Delete) {
tasks.register('clean', Delete) {
delete rootProject.buildDir
}
@ -169,14 +169,15 @@ dependencies {
detekt "io.gitlab.arturbosch.detekt:detekt-cli:${Versions.detekt}"
}
task ktlint(type: JavaExec, group: "verification") {
tasks.register('ktlint', JavaExec) {
group = "verification"
description = "Check Kotlin code style."
classpath = configurations.ktlint
main = "com.pinterest.ktlint.Main"
args "app/src/**/*.kt"
}
tasks.withType(io.gitlab.arturbosch.detekt.Detekt.class) {
tasks.withType(io.gitlab.arturbosch.detekt.Detekt.class).configureEach {
exclude("**/resources/**")
exclude("**/test/**")
exclude("**/tmp/**")
@ -186,7 +187,7 @@ tasks.register("listRepositories") {
doLast {
println "Repositories:"
project.repositories.each { println "Name: " + it.name + "; url: " + it.url }
}
}
}
tasks.register("githubTestDetails", GithubDetailsTask) {

@ -3,5 +3,5 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
object AndroidComponents {
const val VERSION = "57.0.20200831010556"
const val VERSION = "58.0.20200901190136"
}

@ -52,7 +52,7 @@ The following metrics are added to the ping:
| about_page.support_tapped |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user tapped on "Support" item from About page |[1](https://github.com/mozilla-mobile/fenix/pull/8047), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 |
| addons.open_addon_in_toolbar_menu |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user interacted with an installed add-on in the toolbar menu |[1](https://github.com/mozilla-mobile/fenix/pull/8318), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|<ul><li>addon_id: The id of the add-on that was interacted with in the toolbar menu </li></ul>|2021-04-01 |2 |
| addons.open_addons_in_settings |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user accessed "Add-ons" from the Settings |[1](https://github.com/mozilla-mobile/fenix/pull/8318), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 |
| app_theme.dark_theme_selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected Dark Theme |[1](https://github.com/mozilla-mobile/fenix/pull/7968), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|<ul><li>source: The source from where dark theme was selected. The source can be 'SETTINGS' or 'ONBOARDING' </li></ul>|2020-04-01 |2 |
| app_theme.dark_theme_selected |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user selected Dark Theme |[1](https://github.com/mozilla-mobile/fenix/pull/7968), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)|<ul><li>source: The source from where dark theme was selected. The source can be 'SETTINGS' or 'ONBOARDING' </li></ul>|2021-04-01 |2 |
| autoplay.setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their autoplay setting to either block_cellular, block_audio, or block_all. |[1](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)|<ul><li>autoplay_setting: The new setting for autoplay: block_cellular, block_audio, or block_all. </li></ul>|2021-02-01 |2 |
| autoplay.visited_setting |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user visited the autoplay settings screen |[1](https://github.com/mozilla-mobile/fenix/pull/13041#issuecomment-665777411)||2021-02-01 |2 |
| bookmarks_management.copied |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user copied a bookmark. |[1](https://github.com/mozilla-mobile/fenix/pull/1708), [2](https://github.com/mozilla-mobile/fenix/pull/13958#issuecomment-676857877)||2021-04-01 |2 |
@ -129,6 +129,8 @@ The following metrics are added to the ping:
| logins.save_edited_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user saves changes made to an individual login |[1](https://github.com/mozilla-mobile/fenix/issues/11208)||2020-11-15 |2 |
| logins.save_logins_setting_changed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user changed their setting for asking to save logins |[1](https://github.com/mozilla-mobile/fenix/pull/7767)|<ul><li>setting: The new setting for saving logins the user selected. Either `ask_to_save` or `never_save` </li></ul>|2020-11-15 |2 |
| logins.view_password_login |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user viewed a password in an individual saved login |[1](https://github.com/mozilla-mobile/fenix/pull/6352)||2020-11-15 |2 |
| master_password.displayed |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |The master password migration dialog was displayed |[1](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534)||2021-03-01 |2 |
| master_password.migration |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Logins were successfully migrated using a master password. |[1](https://github.com/mozilla-mobile/fenix/pull/14468#issuecomment-684114534)||2021-03-01 |2 |
| media_notification.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the pause icon on the media notification |[1](https://github.com/mozilla-mobile/fenix/pull/5520)||2020-11-15 |2 |
| media_notification.play |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |A user pressed the play icon on the media notification |[1](https://github.com/mozilla-mobile/fenix/pull/5520)||2020-11-15 |2 |
| media_state.pause |[event](https://mozilla.github.io/glean/book/user/metrics/event.html) |Media playback was paused. |[1](https://github.com/mozilla-mobile/fenix/pull/6463)||2020-11-15 |2 |

Loading…
Cancel
Save